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

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引入接口类型。
http://www.xdnf.cn/news/4337.html

相关文章:

  • 多模态理论知识
  • 二叉树与堆排序(概念|遍历|实现)
  • python酒店在线预定管理系统-酒店客房管理系统-快捷酒店入住系统
  • 【Linux系统】vim编辑器的使用
  • FoMo 数据集是一个专注于机器人在季节性积雪变化环境中的导航数据集,记录了不同季节(无雪、浅雪、深雪)下的传感器数据和轨迹信息。
  • C语言编程--递归程序--求数组的最大元素值
  • 油气地震资料信号处理中的NMO(正常时差校正)
  • 【网络篇】传输层TCP协议的确认应答,超时重传机制
  • IT咨询——企业数据资产怎样评估
  • 满分PPT | 基于数据运营的新型智慧城市实践与思考智慧城市数据中台解决方案智能建筑与智慧城市建设方案
  • 基于nacos实现动态线程池设计与实践:告别固定配置,拥抱弹性调度
  • LabVIEW与 IMAQ Vision 机器视觉应用
  • C++类与对象基础续
  • 15.命令模式:思考与解读
  • 毫米波雷达原理(最通俗的解释)
  • MATLAB程序演示与编程思路,相对导航,四个小车的形式,使用集中式扩展卡尔曼滤波(fullyCN-EKF)
  • go 编译报错:build constraints exclude all Go files
  • Python使用爬虫ip抓取热点新闻
  • autojspro怎么免费用
  • 【原创分享】魔音变声器内含超多语音包实时变声
  • C#中从本地(两个路径文件夹)中实时拿图显示到窗口中并接收(两个tcp发送的信号)转为字符串显示在窗体中实现检测可视化
  • 【Wandb】搜索框仅支持正则匹配,不接受“tags:“前缀查询
  • 知乎前端面试题及参考答案
  • 【计算机网络】TCP为什么可靠?解决了哪些问题?
  • 数字文明时代开源技术驱动的商业范式重构:基于开源AI大模型、AI智能名片与S2B2C商城小程序源码的协同创新研究
  • GD32F470+CH395Q
  • Odoo 开发:揭秘表单视图中“添加行”按钮的出现条件
  • Netty 是一个基于 Java NIO 的高性能网络通信框架
  • 基于SSM实现的健身房系统功能实现一
  • C++复习