一、什么是接口
std_msgs/msg/String
std_msgs/msg/UInt32
在学习话题的时候,我们就已经接触到了如上两个接口,这两个接口分别是对应了字符串类型和u_int32的接口,所谓接口就是ROS2 中提前定义好的一种规范。类似于充电器接口,尽管不同厂家制造的充电器不同,但他们都统一执行一种规范——TYPE-C。这种规范为使用ROS2的用户提供了很大的便利。
二、ROS2自带接口
我们可以使用ros2 interface package sensor_msgs
命令可以查看某一个接口包下所有的接口。其中sensor_msgs是传感器接口,也可以替代为std接口或者是其他自定义接口。
有三种不同的接口形式
- 话题接口格式:
xxx.msg
- 服务接口格式:
xxx.srv
- 动作接口格式:
xxx.action
我们也可以对已有的接口类型上进行包含,比如
uint32 id
string image_name
sensor_msgs/Image
三、创建一个自定义话题接口
1.创建一个空的文件夹
在终端中输入如下命令
ros2 pkg create 文件名_interfaces --build-type ament_cmake
其中--build 后面的内容也可以不写因为buildtype默认就是Cmake类型
按下回车键后,系统自动将接口文件夹配置好
2.在文件夹中新建msg文件夹
这个就不用多说了,直接新建即可
如图
接着在msg文件夹里新建一个自定义xxx.msg文件。需要注意的是接口的文件名首字母一定要大写!这一点在以后我会仔细解释。
3.编写msg文件
bool
byte
char
float32,float64
int8,uint8
int16,uint16
int32,uint32
int64,uint64
string
上图是msg可以支持的所有数据类型,我们可以对其进行命名包含
std_msgs/String content #原始数据类型
sensor_msgs/Image image #图像消息
4.修改Cmakelist.txt文件
find_package(sensor_msgs REQUIRED) #添加需要的接口文件
find_package(rosidl_default_generators REQUIRED)# 这个一定要添加
其中rosidl_default_generators是Cmakelist里面的一个宏定义这里一定要配置才能使用下面的函数
rosidl_generate_interfaces(${PROJECT_NAME}
#添加你需要的自定义接口
"msg/Novel.msg"
"srv/BorrowMoney.srv"
"srv/SellNovel.srv"
DEPENDENCIES sensor_msgs
)
5.修改.xml文件
最后在xml里面添加如下代码(这个直接复制上去就好)
不添加有可能报错
<depend>sensor_msgs</depend>
<build_depend>rosidl_default_generators</build_depend>
<exec_depend>rosidl_default_runtime</exec_depend>
<member_of_group>rosidl_interface_packages</member_of_group>
四、关于我遇到的报错
CMake Error at CMakeLists.txt:28 (rosidl_generator_interfaces): Unknown CMake command "rosidl_generator_interfaces".
这个报错卡了我快两天,后来发现是接口msg文件里路径写错了。各位遇到这个报错可以尝试检查一下自己的接口文件。
标签:msgs,接口,srv,msg,自学,sensor,ROS2,rosidl From: https://blog.csdn.net/m0_73664872/article/details/136771952