ROS2自定义msg, action, srv

ROS2中msg的命名规范:必须以大写字母开头,并且不能有下划线,应当是 ^[A-Z][A-Za-z0-9]*$。像moving_target.msg, Moving_target.msg都是不规范的,应该是MovingTarget.msg

msg文件里的成员命名:只能是小写+下划线,不能出现大写。int32 id_number是合适的,int32 ID_number就不合适

参考 官方教程,注意对package.xml做下面修改

1
2
3
<build_depend>rosidl_default_generators</build_depend>
<exec_depend>rosidl_default_runtime</exec_depend>
<member_of_group>rosidl_interface_packages</member_of_group>

在其他包使用自定义的msg/Action包的时候,编译完成后,去build文件夹里找到可执行文件,结果发现有一个.so没有链接成功

1
2
3
ldd libmy_node.so  | grep my_defined
libmy_defined_msgs__rosidl_typesupport_cpp.so => /home/user/j36_project/install/my_defined_msgs/lib/libmy_defined_msgs__rosidl_typesupport_cpp.so (0x00007a9426d69000)
libmy_defined_msgs__rosidl_generator_c.so => not found

如果直接运行会出错,但如果用ros2 run运行是正常的,应当是ROS2运行时会建立链接,应当是ament命令在运行期发挥了作用