Skip to content

Custom msg type array in service would not match #458

@yumeminami

Description

@yumeminami

ros1 planArmTrajectoryBezierCurve.srv:

kuavo_msgs/jointBezierTrajectory[] multi_joint_bezier_trajectory
float64 start_frame_time
float64 end_frame_time
string[] joint_names
---
bool success

ros2 PlanArmTrajectoryBezierCurve.srv

kuavo_msgs/JointBezierTrajectory[] multi_joint_bezier_trajectory
float64 start_frame_time
float64 end_frame_time
string[] joint_names
---
bool success

ros1 jointBezierTrajectory.msg

kuavo_msgs/bezierCurveCubicPoint[] bezier_curve_points

ros2 JointBezierTrajectory.msg

kuavo_msgs/BezierCurveCubicPoint[] bezier_curve_points

ros1 bezierCurveCubicPoint.msg

float64[] end_point
float64[] left_control_point
float64[] right_control_point

ros2 BezierCurveCubicPoint.msg

float64[] end_point
float64[] left_control_point
float64[] right_control_point

mapping_rules.yaml

- ros1_package_name: kuavo_msgs
  ros1_service_name: planArmTrajectoryBezierCurve
  ros2_package_name: kuavo_msgs
  ros2_service_name: PlanArmTrajectoryBezierCurve

- ros1_package_name: kuavo_msgs
  ros1_message_name: jointBezierTrajectory
  ros2_package_name: kuavo_msgs
  ros2_message_name: JointBezierTrajectory

- ros1_package_name: kuavo_msgs
  ros1_message_name: bezierCurveCubicPoint
  ros2_package_name: kuavo_msgs
  ros2_message_name: BezierCurveCubicPoint

After build the bridge_ws, I've got the kuavo_msgs__srv__PlanArmTrajectoryBezierCurve__factories.cpp

Expectation:

// generated from ros1_bridge/resource/interface_factories.cpp.em

#include "kuavo_msgs_factories.hpp"

#include <algorithm>

#include "rclcpp/rclcpp.hpp"

// include builtin interfaces
#include <ros1_bridge/convert_builtin_interfaces.hpp>

// include ROS 1 services
#include <kuavo_msgs/planArmTrajectoryBezierCurve.h>

// include ROS 2 services
#include <kuavo_msgs/srv/plan_arm_trajectory_bezier_curve.hpp>

namespace ros1_bridge
{

std::shared_ptr<FactoryInterface>
get_factory_kuavo_msgs__srv__PlanArmTrajectoryBezierCurve(const std::string & ros1_type_name, const std::string & ros2_type_name)
{
  (void)ros1_type_name;
  (void)ros2_type_name;
  return std::shared_ptr<FactoryInterface>();
}

std::unique_ptr<ServiceFactoryInterface>
get_service_factory_kuavo_msgs__srv__PlanArmTrajectoryBezierCurve(const std::string & ros_id, const std::string & package_name, const std::string & service_name)
{
  if (
    (
      ros_id == "ros1" &&
      package_name == "kuavo_msgs" &&
      service_name == "planArmTrajectoryBezierCurve"
    ) || (
      ros_id == "ros2" &&
      package_name == "kuavo_msgs" &&
      service_name == "srv/PlanArmTrajectoryBezierCurve"
    )
  ) {
    return std::unique_ptr<ServiceFactoryInterface>(new ServiceFactory<
      kuavo_msgs::planArmTrajectoryBezierCurve,
      kuavo_msgs::srv::PlanArmTrajectoryBezierCurve
    >);
  }
  return nullptr;
}
// conversion functions for available interfaces

template <>
void ServiceFactory<
  kuavo_msgs::planArmTrajectoryBezierCurve,
  kuavo_msgs::srv::PlanArmTrajectoryBezierCurve
>::translate_1_to_2(
  const kuavo_msgs::planArmTrajectoryBezierCurve::Request& req1,
  kuavo_msgs::srv::PlanArmTrajectoryBezierCurve::Request& req2
) {
  req2.multi_joint_bezier_trajectory.resize(req1.multi_joint_bezier_trajectory.size());
  auto multi_joint_bezier_trajectory1_it = req1.multi_joint_bezier_trajectory.begin();
  auto multi_joint_bezier_trajectory2_it = req2.multi_joint_bezier_trajectory.begin();
  while (
    multi_joint_bezier_trajectory1_it != req1.multi_joint_bezier_trajectory.end() &&
    multi_joint_bezier_trajectory2_it != req2.multi_joint_bezier_trajectory.end()
  ) {
    auto & multi_joint_bezier_trajectory1 = *(multi_joint_bezier_trajectory1_it++);
    auto & multi_joint_bezier_trajectory2 = *(multi_joint_bezier_trajectory2_it++);
  Factory<kuavo_msgs::jointBezierTrajectory,kuavo_msgs::msg::JointBezierTrajectory>::convert_1_to_2(
    multi_joint_bezier_trajectory1, multi_joint_bezier_trajectory2
  );
  }
  auto & start_frame_time1 = req1.start_frame_time;
  auto & start_frame_time2 = req2.start_frame_time;
  start_frame_time2 = start_frame_time1;
  auto & end_frame_time1 = req1.end_frame_time;
  auto & end_frame_time2 = req2.end_frame_time;
  end_frame_time2 = end_frame_time1;
  req2.joint_names.resize(req1.joint_names.size());
  auto joint_names1_it = req1.joint_names.begin();
  auto joint_names2_it = req2.joint_names.begin();
  while (
    joint_names1_it != req1.joint_names.end() &&
    joint_names2_it != req2.joint_names.end()
  ) {
    auto & joint_names1 = *(joint_names1_it++);
    auto & joint_names2 = *(joint_names2_it++);
  joint_names2 = joint_names1;
  }
}

template <>
void ServiceFactory<
  kuavo_msgs::planArmTrajectoryBezierCurve,
  kuavo_msgs::srv::PlanArmTrajectoryBezierCurve
>::translate_1_to_2(
  const kuavo_msgs::planArmTrajectoryBezierCurve::Response& req1,
  kuavo_msgs::srv::PlanArmTrajectoryBezierCurve::Response& req2
) {
  auto & success1 = req1.success;
  auto & success2 = req2.success;
  success2 = success1;
}

template <>
void ServiceFactory<
  kuavo_msgs::planArmTrajectoryBezierCurve,
  kuavo_msgs::srv::PlanArmTrajectoryBezierCurve
>::translate_2_to_1(
  const kuavo_msgs::srv::PlanArmTrajectoryBezierCurve::Request& req2,
  kuavo_msgs::planArmTrajectoryBezierCurve::Request& req1
) {
  req1.multi_joint_bezier_trajectory.resize(req2.multi_joint_bezier_trajectory.size());
  auto multi_joint_bezier_trajectory1_it = req1.multi_joint_bezier_trajectory.begin();
  auto multi_joint_bezier_trajectory2_it = req2.multi_joint_bezier_trajectory.begin();
  while (
    multi_joint_bezier_trajectory1_it != req1.multi_joint_bezier_trajectory.end() &&
    multi_joint_bezier_trajectory2_it != req2.multi_joint_bezier_trajectory.end()
  ) {
    auto & multi_joint_bezier_trajectory1 = *(multi_joint_bezier_trajectory1_it++);
    auto & multi_joint_bezier_trajectory2 = *(multi_joint_bezier_trajectory2_it++);
  Factory<kuavo_msgs::jointBezierTrajectory,kuavo_msgs::msg::JointBezierTrajectory>::convert_2_to_1(
    multi_joint_bezier_trajectory2, multi_joint_bezier_trajectory1
  );
  }
  auto & start_frame_time1 = req1.start_frame_time;
  auto & start_frame_time2 = req2.start_frame_time;
  start_frame_time1 = start_frame_time2;
  auto & end_frame_time1 = req1.end_frame_time;
  auto & end_frame_time2 = req2.end_frame_time;
  end_frame_time1 = end_frame_time2;
  req1.joint_names.resize(req2.joint_names.size());
  auto joint_names1_it = req1.joint_names.begin();
  auto joint_names2_it = req2.joint_names.begin();
  while (
    joint_names1_it != req1.joint_names.end() &&
    joint_names2_it != req2.joint_names.end()
  ) {
    auto & joint_names1 = *(joint_names1_it++);
    auto & joint_names2 = *(joint_names2_it++);
  joint_names1 = joint_names2;
  }
}

template <>
void ServiceFactory<
  kuavo_msgs::planArmTrajectoryBezierCurve,
  kuavo_msgs::srv::PlanArmTrajectoryBezierCurve
>::translate_2_to_1(
  const kuavo_msgs::srv::PlanArmTrajectoryBezierCurve::Response& req2,
  kuavo_msgs::planArmTrajectoryBezierCurve::Response& req1
) {
  auto & success1 = req1.success;
  auto & success2 = req2.success;
  success1 = success2;
}

}  // namespace ros1_bridge

Actual:

// generated from ros1_bridge/resource/interface_factories.cpp.em

#include "kuavo_msgs_factories.hpp"

#include <algorithm>

#include "rclcpp/rclcpp.hpp"

// include builtin interfaces
#include <ros1_bridge/convert_builtin_interfaces.hpp>

// include ROS 1 services

// include ROS 2 services

namespace ros1_bridge
{

std::shared_ptr<FactoryInterface>
get_factory_kuavo_msgs__srv__PlanArmTrajectoryBezierCurve(const std::string & ros1_type_name, const std::string & ros2_type_name)
{
  (void)ros1_type_name;
  (void)ros2_type_name;
  return std::shared_ptr<FactoryInterface>();
}

std::unique_ptr<ServiceFactoryInterface>
get_service_factory_kuavo_msgs__srv__PlanArmTrajectoryBezierCurve(const std::string & ros_id, const std::string & package_name, const std::string & service_name)
{
  (void)ros_id;
  (void)package_name;
  (void)service_name;
  return nullptr;
}
// conversion functions for available interfaces
}  // namespace ros1_bridge

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions