如何将ROS2 msg文件转C++源码
发布时间:2025-11-06 17:37:37.439 文章来源:AiSoftCloud 浏览次数:31 下载次数:1 

安装依赖工具

  1. sudo apt install -y ros-humble-rosidl-default-generators ros-humble-rosidl-default-runtime

创建一个msg

/home/ubuntu/rosidl/msg/Num.msg:

  1. # Num.msg
  2. int64 num
  3. string name

将msg转成idl

首先使用rosidl工具将msg文件转成idl文件:

  1. cd /home/ubuntu
  2. /opt/ros/humble/bin/rosidl translate --to idl my_manual_msg msg/Num.msg

编写json文件

/home/ubuntu/rosidl/generator_arguments.json

  1. {
  2. "package_name": "my_manual_msg",
  3. "output_dir": "/home/ubuntu/rosidl",
  4. "template_dir": "/opt/ros/humble/share/rosidl_generator_c/resource",
  5. "idl_tuples": [
  6. "/home/ubuntu/rosidl:msg/Num.idl"
  7. ],
  8. "ros_interface_dependencies": [
  9. "std_msgs:/opt/ros/humble/share/std_msgs/msg/Bool.idl",
  10. "std_msgs:/opt/ros/humble/share/std_msgs/msg/Byte.idl",
  11. "std_msgs:/opt/ros/humble/share/std_msgs/msg/ByteMultiArray.idl",
  12. "std_msgs:/opt/ros/humble/share/std_msgs/msg/Char.idl",
  13. "std_msgs:/opt/ros/humble/share/std_msgs/msg/ColorRGBA.idl",
  14. "std_msgs:/opt/ros/humble/share/std_msgs/msg/Empty.idl",
  15. "std_msgs:/opt/ros/humble/share/std_msgs/msg/Float32.idl",
  16. "std_msgs:/opt/ros/humble/share/std_msgs/msg/Float32MultiArray.idl",
  17. "std_msgs:/opt/ros/humble/share/std_msgs/msg/Float64.idl",
  18. "std_msgs:/opt/ros/humble/share/std_msgs/msg/Float64MultiArray.idl",
  19. "std_msgs:/opt/ros/humble/share/std_msgs/msg/Header.idl",
  20. "std_msgs:/opt/ros/humble/share/std_msgs/msg/Int16.idl",
  21. "std_msgs:/opt/ros/humble/share/std_msgs/msg/Int16MultiArray.idl",
  22. "std_msgs:/opt/ros/humble/share/std_msgs/msg/Int32.idl",
  23. "std_msgs:/opt/ros/humble/share/std_msgs/msg/Int32MultiArray.idl",
  24. "std_msgs:/opt/ros/humble/share/std_msgs/msg/Int64.idl",
  25. "std_msgs:/opt/ros/humble/share/std_msgs/msg/Int64MultiArray.idl",
  26. "std_msgs:/opt/ros/humble/share/std_msgs/msg/Int8.idl",
  27. "std_msgs:/opt/ros/humble/share/std_msgs/msg/Int8MultiArray.idl",
  28. "std_msgs:/opt/ros/humble/share/std_msgs/msg/MultiArrayDimension.idl",
  29. "std_msgs:/opt/ros/humble/share/std_msgs/msg/MultiArrayLayout.idl",
  30. "std_msgs:/opt/ros/humble/share/std_msgs/msg/String.idl",
  31. "std_msgs:/opt/ros/humble/share/std_msgs/msg/UInt16.idl",
  32. "std_msgs:/opt/ros/humble/share/std_msgs/msg/UInt16MultiArray.idl",
  33. "std_msgs:/opt/ros/humble/share/std_msgs/msg/UInt32.idl",
  34. "std_msgs:/opt/ros/humble/share/std_msgs/msg/UInt32MultiArray.idl",
  35. "std_msgs:/opt/ros/humble/share/std_msgs/msg/UInt64.idl",
  36. "std_msgs:/opt/ros/humble/share/std_msgs/msg/UInt64MultiArray.idl",
  37. "std_msgs:/opt/ros/humble/share/std_msgs/msg/UInt8.idl",
  38. "std_msgs:/opt/ros/humble/share/std_msgs/msg/UInt8MultiArray.idl",
  39. "builtin_interfaces:/opt/ros/humble/share/builtin_interfaces/msg/Duration.idl",
  40. "builtin_interfaces:/opt/ros/humble/share/builtin_interfaces/msg/Time.idl",
  41. "geometry_msgs:/opt/ros/humble/share/geometry_msgs/msg/Accel.idl",
  42. "geometry_msgs:/opt/ros/humble/share/geometry_msgs/msg/AccelStamped.idl",
  43. "geometry_msgs:/opt/ros/humble/share/geometry_msgs/msg/AccelWithCovariance.idl",
  44. "geometry_msgs:/opt/ros/humble/share/geometry_msgs/msg/AccelWithCovarianceStamped.idl",
  45. "geometry_msgs:/opt/ros/humble/share/geometry_msgs/msg/Inertia.idl",
  46. "geometry_msgs:/opt/ros/humble/share/geometry_msgs/msg/InertiaStamped.idl",
  47. "geometry_msgs:/opt/ros/humble/share/geometry_msgs/msg/Point.idl",
  48. "geometry_msgs:/opt/ros/humble/share/geometry_msgs/msg/Point32.idl",
  49. "geometry_msgs:/opt/ros/humble/share/geometry_msgs/msg/PointStamped.idl",
  50. "geometry_msgs:/opt/ros/humble/share/geometry_msgs/msg/Polygon.idl",
  51. "geometry_msgs:/opt/ros/humble/share/geometry_msgs/msg/PolygonStamped.idl",
  52. "geometry_msgs:/opt/ros/humble/share/geometry_msgs/msg/Pose.idl",
  53. "geometry_msgs:/opt/ros/humble/share/geometry_msgs/msg/Pose2D.idl",
  54. "geometry_msgs:/opt/ros/humble/share/geometry_msgs/msg/PoseArray.idl",
  55. "geometry_msgs:/opt/ros/humble/share/geometry_msgs/msg/PoseStamped.idl",
  56. "geometry_msgs:/opt/ros/humble/share/geometry_msgs/msg/PoseWithCovariance.idl",
  57. "geometry_msgs:/opt/ros/humble/share/geometry_msgs/msg/PoseWithCovarianceStamped.idl",
  58. "geometry_msgs:/opt/ros/humble/share/geometry_msgs/msg/Vector3.idl",
  59. "geometry_msgs:/opt/ros/humble/share/geometry_msgs/msg/Vector3Stamped.idl",
  60. "geometry_msgs:/opt/ros/humble/share/geometry_msgs/msg/VelocityStamped.idl",
  61. "geometry_msgs:/opt/ros/humble/share/geometry_msgs/msg/Wrench.idl",
  62. "geometry_msgs:/opt/ros/humble/share/geometry_msgs/msg/WrenchStamped.idl"
  63. ],
  64. "target_dependencies": [
  65. "/opt/ros/humble/lib/rosidl_typesupport_c/rosidl_typesupport_c",
  66. "/opt/ros/humble/local/lib/python3.10/dist-packages/rosidl_typesupport_c/__init__.py",
  67. "/opt/ros/humble/share/rosidl_typesupport_c/resource/action__type_support.c.em",
  68. "/opt/ros/humble/share/rosidl_typesupport_c/resource/idl__type_support.cpp.em",
  69. "/opt/ros/humble/share/rosidl_typesupport_c/resource/msg__type_support.cpp.em",
  70. "/opt/ros/humble/share/rosidl_typesupport_c/resource/srv__type_support.cpp.em",
  71. "/home/ubuntu/rosidl/msg/Num.idl",
  72. "/opt/ros/humble/share/std_msgs/msg/Bool.idl",
  73. "/opt/ros/humble/share/std_msgs/msg/Byte.idl",
  74. "/opt/ros/humble/share/std_msgs/msg/ByteMultiArray.idl",
  75. "/opt/ros/humble/share/std_msgs/msg/Char.idl",
  76. "/opt/ros/humble/share/std_msgs/msg/ColorRGBA.idl",
  77. "/opt/ros/humble/share/std_msgs/msg/Empty.idl",
  78. "/opt/ros/humble/share/std_msgs/msg/Float32.idl",
  79. "/opt/ros/humble/share/std_msgs/msg/Float32MultiArray.idl",
  80. "/opt/ros/humble/share/std_msgs/msg/Float64.idl",
  81. "/opt/ros/humble/share/std_msgs/msg/Float64MultiArray.idl",
  82. "/opt/ros/humble/share/std_msgs/msg/Header.idl",
  83. "/opt/ros/humble/share/std_msgs/msg/Int16.idl",
  84. "/opt/ros/humble/share/std_msgs/msg/Int16MultiArray.idl",
  85. "/opt/ros/humble/share/std_msgs/msg/Int32.idl",
  86. "/opt/ros/humble/share/std_msgs/msg/Int32MultiArray.idl",
  87. "/opt/ros/humble/share/std_msgs/msg/Int64.idl",
  88. "/opt/ros/humble/share/std_msgs/msg/Int64MultiArray.idl",
  89. "/opt/ros/humble/share/std_msgs/msg/Int8.idl",
  90. "/opt/ros/humble/share/std_msgs/msg/Int8MultiArray.idl",
  91. "/opt/ros/humble/share/std_msgs/msg/MultiArrayDimension.idl",
  92. "/opt/ros/humble/share/std_msgs/msg/MultiArrayLayout.idl",
  93. "/opt/ros/humble/share/std_msgs/msg/String.idl",
  94. "/opt/ros/humble/share/std_msgs/msg/UInt16.idl",
  95. "/opt/ros/humble/share/std_msgs/msg/UInt16MultiArray.idl",
  96. "/opt/ros/humble/share/std_msgs/msg/UInt32.idl",
  97. "/opt/ros/humble/share/std_msgs/msg/UInt32MultiArray.idl",
  98. "/opt/ros/humble/share/std_msgs/msg/UInt64.idl",
  99. "/opt/ros/humble/share/std_msgs/msg/UInt64MultiArray.idl",
  100. "/opt/ros/humble/share/std_msgs/msg/UInt8.idl",
  101. "/opt/ros/humble/share/std_msgs/msg/UInt8MultiArray.idl",
  102. "/opt/ros/humble/share/builtin_interfaces/msg/Duration.idl",
  103. "/opt/ros/humble/share/builtin_interfaces/msg/Time.idl",
  104. "/opt/ros/humble/share/geometry_msgs/msg/Accel.idl",
  105. "/opt/ros/humble/share/geometry_msgs/msg/AccelStamped.idl",
  106. "/opt/ros/humble/share/geometry_msgs/msg/AccelWithCovariance.idl",
  107. "/opt/ros/humble/share/geometry_msgs/msg/AccelWithCovarianceStamped.idl",
  108. "/opt/ros/humble/share/geometry_msgs/msg/Inertia.idl",
  109. "/opt/ros/humble/share/geometry_msgs/msg/InertiaStamped.idl",
  110. "/opt/ros/humble/share/geometry_msgs/msg/Point.idl",
  111. "/opt/ros/humble/share/geometry_msgs/msg/Point32.idl",
  112. "/opt/ros/humble/share/geometry_msgs/msg/PointStamped.idl",
  113. "/opt/ros/humble/share/geometry_msgs/msg/Polygon.idl",
  114. "/opt/ros/humble/share/geometry_msgs/msg/PolygonStamped.idl",
  115. "/opt/ros/humble/share/geometry_msgs/msg/Pose.idl",
  116. "/opt/ros/humble/share/geometry_msgs/msg/Pose2D.idl",
  117. "/opt/ros/humble/share/geometry_msgs/msg/PoseArray.idl",
  118. "/opt/ros/humble/share/geometry_msgs/msg/PoseStamped.idl",
  119. "/opt/ros/humble/share/geometry_msgs/msg/PoseWithCovariance.idl",
  120. "/opt/ros/humble/share/geometry_msgs/msg/PoseWithCovarianceStamped.idl",
  121. "/opt/ros/humble/share/geometry_msgs/msg/Quaternion.idl",
  122. "/opt/ros/humble/share/geometry_msgs/msg/QuaternionStamped.idl",
  123. "/opt/ros/humble/share/geometry_msgs/msg/Transform.idl",
  124. "/opt/ros/humble/share/geometry_msgs/msg/TransformStamped.idl",
  125. "/opt/ros/humble/share/geometry_msgs/msg/Twist.idl",
  126. "/opt/ros/humble/share/geometry_msgs/msg/TwistStamped.idl",
  127. "/opt/ros/humble/share/geometry_msgs/msg/TwistWithCovariance.idl",
  128. "/opt/ros/humble/share/geometry_msgs/msg/TwistWithCovarianceStamped.idl",
  129. "/opt/ros/humble/share/geometry_msgs/msg/Vector3.idl",
  130. "/opt/ros/humble/share/geometry_msgs/msg/Vector3Stamped.idl",
  131. "/opt/ros/humble/share/geometry_msgs/msg/VelocityStamped.idl",
  132. "/opt/ros/humble/share/geometry_msgs/msg/Wrench.idl",
  133. "/opt/ros/humble/share/geometry_msgs/msg/WrenchStamped.idl"
  134. ]
  135. }

将idl转成c

然后使用rosidl_generator_c工具将idl文件转成c语言头文件:

  1. /opt/ros/humble/lib/rosidl_generator_c/rosidl_generator_c --generator-arguments-file generator_arguments.json

将idl转成cpp

然后使用rosidl_generator_c工具将idl文件转成c语言头文件:
首先将上面的json文件改成:

  1. {
  2. ...
  3. "template_dir": "/opt/ros/humble/share/rosidl_generator_cpp/resource",
  4. ...
  5. }

然后

  1. /opt/ros/humble/lib/rosidl_generator_cpp/rosidl_generator_cpp --generator-arguments-file generator_arguments.json
更多文章可关注公众号
aisoftcloud