简述

在上一节中我们看到服务器和客户端都有引用#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 

结果如下

 

 

Logo

聚焦RDK与具身智能,汇集机器人开发教程、开源案例和技术交流

更多推荐