ROS2 自学之接口

本文介绍了ROS2中的接口概念,包括标准接口如std_msgs和sensor_msgs,以及如何创建自定义话题、服务和动作接口。通过CMake和XML文件配置,同时分享了常见报错的解决方法。
摘要由CSDN通过智能技术生成

一、什么是接口

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文件里路径写错了。各位遇到这个报错可以尝试检查一下自己的接口文件。

  • 21
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值