【ROS2】自定义消息接口的创建和使用
写在前面
参考了小鱼的ROS2教程(但遇到了报错),根据自己的思路重新整理一下,方便下次开发直接用
注意,文中所使用的xxx并不指代特定内容,也不表示他们是相同的内容,仅说明这里可以自定义,一切按照个人项目为准
package.xml的各种标签介绍
-
<buildtool_depend>
指定构建工具本身的依赖项,通常是构建系统(如 ament_cmake)所需的工具链依赖。 -
<depend>
声明运行时依赖项 (同时隐含编译时依赖),即该功能包在运行或编译时直接需要的其他功能包 -
<test_depend>
声明测试相关的依赖项,仅在运行测试时需要 -
<build_depend>
仅在编译阶段需要的依赖(如头文件、编译工具) -
<exec_depend>
仅在运行阶段需要的依赖(如动态链接库) -
<member_of_group>rosidl_interface_packages</member_of_group>
标记当前功能包为包含ROS IDL接口(如 .msg、.srv)的功能包,确保生成的接口代码被正确安装到工作空间
总而言之,各种depend定义了在程序编译运行的不同阶段所用到的依赖
具体实现
- 进入或创建一个工作空间
记住ROS2的所有功能包都是放在工作空间的src目录下的 - 在xxx_ws/src/目录下创建功能包
在xxx_ws路径下运行:
意思是在当前路径下的src文件夹中,创建名为test_interfaces的功能包,并添加rclcpp依赖,使用ament_cmake方式构建ros2 pkg create test_interfaces --build-type ament_cmake --dependencies rclcpp --destination-directory src
- 在xxx_ws/src/test_interfaces/路径下(和CMakeListstxt, package.xml同级),创建文件夹msg和srv,分别用于存放消息接口msg和服务接口srv(如果还有动作接口,就创建action文件夹)
- 在每个文件夹中放入对应的接口文件,并填入对应的接口定义,比如:
在服务接口MoveRobot.srv写入:
在话题接口RobotStatus.msg写入:# 前进后退的距离 float32 distance --- # 当前的位置 float32 pose
目录结构如下:uint32 STATUS_MOVEING = 1 uint32 STATUS_STOP = 1 uint32 status float32 pose