ROS2:自定义接口文件(无废话)
目录
- 一、ROS2接口文件定义
- 二、创建接口文件步骤
- 三、验证是否创建成功,以及自定义接口文件的使用
一、ROS2接口文件定义
ROS2中接口文件的格式根据通信的类型可以分为三种:
- 话题通信:
.msg文件
常用格式为:[消息类型] 消息名称
#话题通信接口格式#[消息类型] 消息名称int64 numint64 sum...
- 服务通信:
.srv文件
常用格式为:
[请求消息类型] 请求消息名称
(三个短横杠隔开)
[响应消息类型] 响应消息名称
#服务通信接口格式#请求int64 num..---#响应int64 sum..
- 动作通信:
.action文件
常用格式为:
[请求消息类型] 请求消息名称
(三个短横杠隔开)
[响应消息类型] 响应消息名称
(三个短横杠隔开)
[反馈消息类型] 反馈消息名称
#动作通信接口格式 #请求int64 num..---#响应int64 sum..---#反馈float feedback..
消息变量的类型
- 数字型:intXX,floatXX等
- 时间类型:time,duration
- 字符串类型:string
- 变长数组与定长数组
定长数组例如:int64[100]、float[100]等,变长数组例如 int[]、float[<=100]等- 其它的msg文件(嵌套)
特别谈一下嵌套,嵌套类型的定义语法为完整包名/消息类型名的格式(package_name/TypeName)
例如:geometry_msgs/Pose current_pose
,并且需要在package.xml中包含所依赖的包
字段名必须小写字母开头,并且禁止双下划线与下划线结尾
二、创建接口文件步骤
- 在
工作空间/src下
创建功能包(包名全小写):
ros2 pkg create [package_name] --build-type ament_cmake --dependencies [nested_package_name]
- 在功能包目录下创建文件夹:(msg\srv\action),并编写相应的接口文件(
.msg\.srv\.action
)接口文件首字母必须大写且不包含下划线 - 在package.xml中添加 3 依赖:
<buildtool_depend>rosidl_default_generators</buildtool_depend> <!-- 构建依赖 -->
<exec_depend>rosidl_default_runtime</exec_depend> <!-- 运行时依赖 -->
<member_of_group>rosidl_interface_packages</member_of_group> <!-- 功能包依赖 -->
- 在CmakeList中添加2编译规则:
find_package(rosidl_default_generators REQUIRED)rosidl_generate_interfaces(${PROJECT_NAME}"[msg/srv/action]/xxx.msg/.srv/.action" #自定义
)
- 返回工作空间目录下,并执行编译:
colcon build --packages-select [package_name]
三、验证是否创建成功,以及自定义接口文件的使用
- 使用命令行工具查看接口:
. install/setup.bash
ros2 interface show [package_name]/[msg/srv/action]/[interface_name]
如果能成功输出,则说明自定义接口文件成功!
- 如何在cpp程序中调用?
- 首先,需要在package.xml中添加依赖:
<depend>[interface_pkgname]</depend>
- 其次,在CmakeList中加入
find_package([interface_pkgname] REQUIRED)
,并在ament_target_dependencies()中加入interface_pkgname
以上两步确保编译时能加入接口文件,并且在构建pkg时可以通过参数自动实现依赖添加(–dependencies interface_pkgname) - 在程序中引用时,需要包含头文件
interface_pkgname/[msg/srv/action]/xxx.hpp
- 使用时通过命名空间:
using interface_pkgname::[msg/srv/action]::xxx
引入接口类型。