5.ros2自定义消息包实例
·
简述
在上一节中我们看到服务器和客户端都有引用#include "example_interfaces/srv/add_two_ints.hpp"
文件,这便是一个消息包,我们只是引用了别人写好的,但实际情况中,别人写好的不一定适用与我们,所以在这节我们来自定义消息包吧。(这节课参考鱼香ros里的)
可以使用ros2 interface show .... 来查看消息包的结构

1.创建消息功能包
ros2 pkg create test_interfaces_rclcpp --build-type ament_cmake --dependencies rclcpp --license Apache-2.0
2.编写消息格式文件
2.1在 test_interfaces_rclcpp 文件夹下创建msg和srv文件夹
msg消息变量包
srv服务器消息变量包(向服务器请求时用此类型消息包)

2.2编辑消息包变量
在msg文件夹下创建RobotPose.msg和RobotStatus.msg文件。
RobotPose.msg
uint32 STATUS_MOVEING = 1
uint32 STATUS_STOP = 2
uint32 status
geometry_msgs/Pose pose
RobotStatus.msg
uint32 STATUS_MOVEING = 1
uint32 STATUS_STOP = 1
uint32 status
float32 pose
在srv文件夹下创建MoveRobot.srv文件。
MoveRobot.srv
# 前进后退的距离
float32 distance
---
# 当前的位置
float32 pose
2.3编辑CmakeLists.txt
放在ament_package()之前

#这里添加 geometry_msgs包是因为RobotPose.msg用到了这个包里的变量类型
#--------------------------------------------#
find_package(rosidl_default_generators REQUIRED)#生成特定语言的代码
find_package(geometry_msgs REQUIRED)
# 添加下面的内容
rosidl_generate_interfaces(${PROJECT_NAME}
"msg/RobotPose.msg"
"msg/RobotStatus.msg"
"srv/MoveRobot.srv"
DEPENDENCIES geometry_msgs
)
2.4编辑package.xml文件
放到 <buildtool_depend>ament_cmake</buildtool_depend>后面即可

<depend>rosidl_default_generators</depend>
<depend>geometry_msgs</depend>
<member_of_group>rosidl_interface_packages</member_of_group> #添加这一行
3.编译&查看
3.1编译 在工作空间下 colcon build

3.2查看
//记得一个一个查看
ros2 interface show test_interfaces_rclcpp/msg/RobotPose
ros2 interface show test_interfaces_rclcpp/msg/RobotStatus
ros2 interface show test_interfaces_rclcpp/srv/MoveRobot
结果如下

更多推荐
所有评论(0)