Bootstrap

ROS2学习【8】:自定义接口

1.自定义接口:

1.什么是接口?

接口就是一种数据结构标准,别看说的这么玄乎,其实现实世界到处都是接口,比如你家盖房子的砖头大小,钢筋混凝土的钢号,H型钢的各种规格,板材的板厚等都是标准的,为什么要设定,是因为上下游不同的人群要合作盖房子,他们之间的对接要有确定性。

看一下ros2内部预制的接口:

打开终端输入:ros2 interface package sensor_msgs
sensor_msgs/msg/JointState  #机器人关节数据
sensor_msgs/msg/Temperature #温度数据
sensor_msgs/msg/Imu #加速度传感器
sensor_msgs/msg/Image #图像
sensor_msgs/msg/LaserScan #雷达数据
......

发现有很多传感器类型的接口,就当成不同类型的砖头就可以了!生产砖头的厂家就按照这个标准做,市场上买的人就多(大家都用这么大的砖头,你生产出来不一样的,大小不一的,谁去买呀)

2.接口形式

话题、服务和动作(Action)支持自定义接口,参数不支持。

接口形式如下:

话题接口格式:xxx.msg
int64 num

服务接口格式:xxx.srv
int64 a
int64 b
---
int64 sum

动作接口格式:xxx.action
int32 order
---
int32[] sequence
---
int32[] partial_sequence

接口数据类型

bool
byte
char
float32,float64
int8,uint8
int16,uint16
int32,uint32
int64,uint64
string

接口可以套已有的接口,一层层的套娃,就像结构体套结构体一样。

2.创建接口功能包编接口

1.创建功能包

cd ~/example
ros2 pkg create example_ros2_interfaces --build-type ament_cmake --dependencies rosidl_default_generators geometry_msgs

注意功能包类型必须为:ament_cmake

依赖rosidl_default_generators必须添加,geometry_msgs视内容情况添加(我们这里有geometry_msgs/Pose
pose所以要添加)

2.新建接口文件

注意话题接口放到msg文件夹下,以.msg结尾。服务接口放到srv文件夹下,以srv结尾。
在这里插入图片描述
新建下面的自定义接口

服务接口MoveRobot.srv (放在SRV文件夹下)

# 前进后退的距离
float32 distance
---
# 当前的位置
float32 pose

话题接口,采用基础类型 RobotStatus.msg(放在msg文件夹下)

uint32 STATUS_MOVEING = 1
uint32 STATUS_STOP = 1
uint32  status
float32 pose

话题接口,混合包装类型 RobotPose.msg,放在msg文件夹下

uint32 STATUS_MOVEING = 1
uint32 STATUS_STOP = 2
uint32  status
geometry_msgs/Pose pose

3.修改CMakeList.TXT

find_package(rosidl_default_generators REQUIRED)
find_package(geometry_msgs REQUIRED)

4.添加下面的内容

rosidl_generate_interfaces(${PROJECT_NAME}
  "msg/RobotPose.msg"
  "msg/RobotStatus.msg"
  "srv/MoveRobot.srv"
  DEPENDENCIES geometry_msgs
)

5.修改pageage.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> #添加这一行

  <test_depend>ament_lint_auto</test_depend>
  <test_depend>ament_lint_common</test_depend>

6.编译即可

cd ~/example
colcon build --packages-select example_ros2_interfaces

编译完成后在chapt3_ws/install/example_ros2_interfaces/include下你应该可以看到C++的头文件。在chapt3_ws/install/example_ros2_interfaces/local/lib/python3.10/dist-packages下应该可以看到Python版本的头文件。

;