当前位置: 首页 > news >正文

ROS2:自定义接口文件(无废话)

目录

  • 一、ROS2接口文件定义
  • 二、创建接口文件步骤
  • 三、验证是否创建成功,以及自定义接口文件的使用

一、ROS2接口文件定义

 ROS2中接口文件的格式根据通信的类型可以分为三种:

  • 话题通信:.msg文件
    常用格式为:[消息类型] 消息名称
	#话题通信接口格式#[消息类型] 消息名称int64 numint64 sum...
  • 服务通信:.srv文件
    常用格式为:
    [请求消息类型] 请求消息名称
    (三个短横杠隔开)
    [响应消息类型] 响应消息名称
	#服务通信接口格式#请求int64 num..---#响应int64 sum..
  • 动作通信:.action文件
    常用格式为:
    [请求消息类型] 请求消息名称
    (三个短横杠隔开)
    [响应消息类型] 响应消息名称
    (三个短横杠隔开)
    [反馈消息类型] 反馈消息名称
	#动作通信接口格式 #请求int64 num..---#响应int64 sum..---#反馈float feedback..

消息变量的类型

  1. 数字型:intXX,floatXX等
  2. 时间类型:time,duration
  3. 字符串类型:string
  4. 变长数组与定长数组
    定长数组例如:int64[100]、float[100]等,变长数组例如 int[]、float[<=100]等
  5. 其它的msg文件(嵌套)
    特别谈一下嵌套,嵌套类型的定义语法为 完整包名/消息类型名的格式(package_name/TypeName)例如:geometry_msgs/Pose current_pose,并且需要在package.xml中包含所依赖的包

字段名必须小写字母开头,并且禁止双下划线与下划线结尾

二、创建接口文件步骤

  1. 工作空间/src下创建功能包(包名全小写):
ros2 pkg create [package_name] --build-type ament_cmake --dependencies [nested_package_name]
  1. 在功能包目录下创建文件夹:(msg\srv\action),并编写相应的接口文件(.msg\.srv\.action接口文件首字母必须大写且不包含下划线
  2. 在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>   <!-- 功能包依赖 --> 
  1. 在CmakeList中添加2编译规则:
find_package(rosidl_default_generators REQUIRED)rosidl_generate_interfaces(${PROJECT_NAME}"[msg/srv/action]/xxx.msg/.srv/.action" #自定义
)
  1. 返回工作空间目录下,并执行编译:
colcon build --packages-select [package_name]

三、验证是否创建成功,以及自定义接口文件的使用

  1. 使用命令行工具查看接口:
. install/setup.bash 
ros2 interface show [package_name]/[msg/srv/action]/[interface_name]

如果能成功输出,则说明自定义接口文件成功!

  1. 如何在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引入接口类型。

相关文章:

  • 第100+40步 ChatGPT学习:R语言实现多轮建模
  • 使用Homebrew下载配置git和连接GitHub(Mac版)
  • dubbo限流
  • VMware Fusion安装win11 arm;使用Mac远程连接到Win
  • 使用 OpenSSL 吊销 Kubernetes(k8s)的 kubeconfig 里的用户证书
  • 论文速读《Embodied-R: 基于强化学习激活预训练模型具身空间推理能力》
  • 如何添加或删除极狐GitLab 项目成员?
  • Codeforces Round 1023 (Div. 2)
  • 代码随想录训练营第十八天| 150.逆波兰表达式求值 239.滑动窗口最大值 347.前k个高频元素
  • 什么是gitlab自动部署,怎么配置gitlab自动部署
  • QGIS分割平行四边形
  • 分布式、高并发-Day04
  • 白平衡色温坐标系下自适应计算白点权重的方法
  • 部署Superset BI(三)连接HANA数据库
  • yolo训练用的数据集的数据结构
  • RTPSParticipant构建流程
  • SpringBoot整合Kafka、Flink实现流式处理
  • ResNet50应用于农业保险现场照片作物种类核验
  • 【回眸】QAC使用指南——导出 Dashboard Report个性化定制Report
  • ==和equals的区别 hashCode和equals的联系
  • 上海国际电影节特设“走进大卫·林奇的梦境”单元
  • 玉渊谭天丨是自保还是自残?八个恶果透视美国征收100%电影关税
  • 特朗普:不谋求第三个总统任期,中意万斯鲁比奥“接棒”
  • 特朗普考虑任命副幕僚长米勒任国安顾问,曾策划驱逐移民行动
  • 中海油高管调整:刘永杰、刘小刚任副总裁
  • 自我田野|从城市搬到农村生活,我找回了真实和附近