目录
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版本的头文件。