ROS基本框架2——在ROS开发中创建并使用自定义消息(C++版本)

news2024/12/26 22:23:17

ROS基本框架2——在ROS开发中创建并使用自定义消息(C++版本)

在这里插入图片描述
code review!

参考笔记
1.ROS基本框架1——编写简单的发布者和订阅者(C++和Python版本)
2.ROS基本框架2——在ROS开发中创建并使用自定义消息(C++版本)

文章目录

  • ROS基本框架2——在ROS开发中创建并使用自定义消息(C++版本)
    • 1. 一个简单的完整流程
      • 1.1 创建工作空间和功能包
      • 1.2 定义自定义消息
      • 1.3 修改 CMakeLists.txt
      • 1.4 修改 package.xml
      • 1.5 生成代码
      • 1.6 使用自定义消息
        • 1.6.1 发布节点(publisher.cpp)
        • 1.6.2 订阅节点(subscriber.cpp)
      • 1.7 编译代码
      • 1.8 运行节点
      • 1.9 运行结果
      • 1.10 总结
    • 2. 独立开发自定义消息功能包
      • 2.1 实现目标
      • 2.2 创建消息定义功能包
      • 2.3 修改 CMakeLists.txt
      • 2.4 修改 package.xml
      • 2.5 编译消息定义功能包
      • 2.6 修改发布节点功能包
        • 2.6.1 修改 package.xml
        • 2.6.2 修改 CMakeLists.txt
        • 2.6.3 使用自定义消息
      • 2.7 修改订阅节点功能包
        • 2.7.1 修改 package.xml
        • 2.7.2 修改 CMakeLists.txt
        • 2.7.3 使用自定义消息
      • 2.8 编译和运行
        • 2.8.1 分别编译功能包
        • 2.8.2 运行功能包
      • 2.9 总结
    • 3. 发布和订阅节点在同一个功能包中
      • 3.1 创建消息定义功能包
      • 3.2 修改 `my_package`
        • 3.2.1 修改 package.xml
        • 3.2.2 修改 CMakeLists.txt
      • 3.3 编写发布和订阅节点
      • 3.4 编译和运行
        • 3.4.1 编译功能包
        • 3.4.2 运行功能包
      • 3.5 总结

1. 一个简单的完整流程

在 ROS(Robot Operating System)中,自定义消息类型(msg)是指用户根据需求创建的消息,用于节点之间的数据通信。以下是一个完整的流程,展示如何在 ROS C++ 开发中创建并使用自定义消息。

1.1 创建工作空间和功能包

# 创建工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws

# 初始化工作空间
catkin_make

# 创建功能包
cd src
catkin_create_pkg my_package std_msgs roscpp

1.2 定义自定义消息

在功能包 my_package 中创建 msg 文件夹,并定义消息类型。

cd ~/catkin_ws/src/my_package
mkdir msg

创建自定义消息文件 MyMessage.msg

# 文件路径: my_package/msg/MyMessage.msg
int32 id
string name
float32 value

1.3 修改 CMakeLists.txt

编辑 my_packageCMakeLists.txt 文件,添加自定义消息的支持。

# 添加消息生成依赖
find_package(catkin REQUIRED COMPONENTS
  std_msgs
  roscpp
  message_generation
)

# 添加消息文件
add_message_files(
  FILES
  MyMessage.msg
)

# 生成消息
generate_messages(
  DEPENDENCIES
  std_msgs
)

# 包含生成的消息头文件
catkin_package(
  CATKIN_DEPENDS message_runtime roscpp std_msgs
)

1.4 修改 package.xml

确保在 package.xml 中添加了对 message_generationmessage_runtime 的依赖。

<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>

1.5 生成代码

在工作空间根目录下编译生成代码。

cd ~/catkin_ws
catkin_make

1.6 使用自定义消息

1.6.1 发布节点(publisher.cpp)
#include "ros/ros.h"
#include "my_package/MyMessage.h"

int main(int argc, char** argv) {
   
    ros::init(argc, argv, "my_publisher");
    ros::NodeHandle nh;

    ros::Publisher pub = nh.advertise<my_package

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2252230.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙征文|鸿蒙技术分享:使用到的开发框架和技术概览

目录 每日一句正能量前言正文1. 开发环境搭建关键技术&#xff1a;2. 用户界面开发关键技术&#xff1a;3. 应用逻辑开发关键技术&#xff1a;4. 应用测试关键技术&#xff1a;5. 应用签名和打包关键技术&#xff1a;6. 上架流程关键技术&#xff1a;7. 后续维护和更新关键技术…

(长期更新)《零基础入门 ArcGIS(ArcMap) 》实验二----网络分析(超超超详细!!!)

相信实验一大家已经完成了&#xff0c;对Arcgis已进一步熟悉了&#xff0c;现在开启第二个实验 ArcMap实验--网络分析 目录 ArcMap实验--网络分析 1.1 网络分析介绍 1.2 实验内容及目的 1.2.1 实验内容 1.2.2 实验目的 2.2 实验方案 2.3 实验流程 2.3.1 实验准备 2.3.2 空间校正…

go语言 Pool实现资源池管理数据库连接资源或其他常用需要共享的资源

go Pool Pool用于展示如何使用有缓冲的通道实现资源池&#xff0c;来管理可以在任意数量的goroutine之间共享及独立使用的资源。这种模式在需要共享一组静态资源的情况&#xff08;如共享数据库连接或者内存缓冲区&#xff09;下非 常有用。如果goroutine需要从池里得到这些资…

马铃薯病害识别(VGG-16复现)

VGG16-Pytorch实现马铃薯病害识别 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客 &#x1f356; 原作者&#xff1a;K同学啊 电脑系统&#xff1a;Windows11 显卡型号&#xff1a;NVIDIA Quadro P620 语言环境&#xff1a;python 3.9.7 编译器&am…

HCSIF: 中国区域2000-2022年高时空分辨率(500m)SIF数据集

日光诱导叶绿素荧光&#xff08;Solar-induced chlorophyll fluorescence, SIF&#xff09;被誉为“植被光合作用的探针”。2017年&#xff0c;搭载在Sentinel-5P卫星上的 TROPOMI (TROPOspheric Monitoring Instrument&#xff09;传感器成功发射&#xff0c;该卫星同时具有高…

STL:相同Size大小的vector和list哪个占用空间多?

在C中&#xff0c;vector和list是两种不同的序列容器。vector底层是连续的内存&#xff0c;而list是非连续的&#xff0c;分散存储的。因此&#xff0c;vector占用的空间更多&#xff0c;因为它需要为存储的元素分配连续的内存空间。 具体占用多少空间&#xff0c;取决于它们分…

蓝牙设备驱动开发

文章目录 一、蓝牙协议架构二、蓝牙协议的HCI传输层三、编程框架 一、蓝牙协议架构 蓝牙是无线数据和语音传输的开放式标准&#xff0c;它将各种通信设备、计算机及其终端设备、各种数字数据系统、甚至家用电器采用无线方式联接起来。它的传输距离为10cm&#xff5e;10m&#…

【计算机网络】实验7:默认路由和特定主机路由以及路由环路问题

实验 7&#xff1a;默认路由和特定主机路由以及路由环路问题 一、 实验目的 了解默认路由以及特定主机路由。 了解静态路由配置错误导致的路由环路问题。 二、 实验环境 • Cisco Packet Tracer 模拟器 三、 实验内容 1、默认路由以及特定主机路由 (1) 第一步&#xff…

安装 RabbitMQ 服务

安装 RabbitMQ 服务 一. RabbitMQ 需要依赖 Erlang/OTP 环境 (1) 先去 RabbitMQ 官网&#xff0c;查看 RabbitMQ 需要的 Erlang 支持&#xff1a;https://www.rabbitmq.com/ 进入官网&#xff0c;在 Docs -> Install and Upgrade -> Erlang Version Requirements (2) …

MiniProfiler WebAPI 分析工具

一、介绍&#x1f6e0;️ MiniProfiler 是一款简单但有效的 .NET、Ruby、Go 和 Node.js 微型 性能分析器 。 MiniProfiler 不会将自身附加到每个方法调用;那会太具有侵入性&#xff0c;并且不会专注于最大的性能问题。相反&#xff0c;它提供&#xff1a; &#x1f538;ADO.…

Java个人博客系统项目文档

项目名称 Java个人博客系统 项目概述 该博客系统是一个多功能的Java应用程序。该系统支持用户发布新文章、浏览他人文章、管理个人文章收藏和删除不再需要的文章。通过该博客系统&#xff0c;用户可以享受一个安全、便捷的在线写作和阅读体验。 运行环境 编程语言&#xff1…

华为HarmonyOS 让应用快速拥有账号能力 - 获取用户头像昵称

场景介绍 如应用需要完善用户头像昵称信息&#xff0c;可使用Account Kit提供的头像昵称授权能力&#xff0c;用户允许应用获取头像昵称后&#xff0c;可快速完成个人信息填写。以下只针对Account kit提供的头像昵称授权能力进行介绍&#xff0c;若要获取头像还可通过场景化控…

Hadoop生态圈框架部署 伪集群版(一)- Linux操作系统安装及配置

文章目录 前言一、下载CentOS镜像1. 下载 二、创建虚拟机hadoop三、CentOS安装与配置1. 安装CentOS2. 配置虚拟网络及虚拟网卡2.1 配置虚拟网络2.2 配置虚拟网卡 3. 安装 SSH 远程连接工具 FinalShell3.1 简介3.2 下载和安装3.2.1 下载3.2.2 安装 3.3 查看动态ip地址3.4 使用Fi…

StarRocks存算分离在得物的降本增效实践

一、背景 OLAP引擎在得物的客服、风控、供应链、投放、运营、ab实验等大量业务场景发挥重要作用&#xff0c;在报表、日志、实时数仓等应用场景都有广泛的应用。 得物引入和使用OLAP引擎的过程中&#xff0c;每个业务都基于自己的需求选择当时最适合自己的引擎。现在得物内部同…

L15.【LeetCode笔记】相同的树

目录 1.题目 代码模板 2.分析 通过合理的if判断分类讨论两个根节点 1.首先,p和q都为NULL的情况最好排除 2.排除了两个都为NULL的情况,剩下的情况:1.其中一个为NULL;2.两个都不为NULL 写法1 写法2 3.只剩下最后一种情况:p和q都不为NULL 3.代码 提交结果 1.题目 https…

TCP协议(一)

TCP协议&#xff08;一&#xff09; 一、TCP协议1、介绍2、主要特点 二、TCP协议段格式1、示意图2、介绍 三、确认应答机制1、基本流程2、作用3、示意图4、序列号示意图 四、超时重传机制1、介绍2、重传超时时间3、往返时间4、平滑往返时间5、系统实现6、数据丢失重传示意图7、…

单链表---链表分割

将小于x的结点放在前面&#xff0c;大于等于x的结点放在后面&#xff0c;不改变结点相对位置&#xff0c;输出更改后的链表首结点。 typedef struct ListNode {ListNode* next;int val; }ListNode; 思路&#xff1a;我们可以新创建两个链表指针&#xff0c;将小于x的结点全部…

Android V reboot重启后电量从0直接跳到100%

问题背景 设备每次重启之后statusBar的电量百分比一开始是0,然后过了2s左右的样子电量才恢复为100% 解决方案 看拿到的串口日志来看,重启之后 healthd 拿到的电量值都是100%,而且这一块的电量也没有变化,重启前后电量都是100%: 自己尝试复现,在Android 15上测试重启,…

【技巧】Mac上如何显示键盘和鼠标操作

在制作视频教程时&#xff0c;将键盘和鼠标的操作在屏幕上显示出来&#xff0c;会帮助观众更容易地理解。 推荐Mac上两款开源的小软件。 1. KeyCastr 这款工具从2009年至今一直在更新中。 https://github.com/keycastr/keycastr 安装的话&#xff0c;可以从Github上下载最…

C 语言学习的经典书籍有哪些?

学习C语言的理由 C语言是一种程席设计语言&#xff0c;它是由美国AT&T公司贝尔实验室的Dennis Ritchie于1972年发明的。C语言之所以流行&#xff0c;是因为它简单易用。学习C语言的几个理由如下&#xff1a; (1)C、C#和Java使用一种被称为面向对象程序设计(0bject-Orient…