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

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 COMPONENTSstd_msgsroscppmessage_generation
)# 添加消息文件
add_message_files(FILESMyMessage.msg
)# 生成消息
generate_messages(DEPENDENCIESstd_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.mzph.cn/bicheng/62858.shtml

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

相关文章

vscode远程连接ssh

一. 使用vscode里的ssh查件连不上远程的解决方法 删除Windows上的known_host文件&#xff0c;该文件会在连接之后自动生成&#xff0c;用于验证远程服务器的身份。 konwn_host和id_rsa&#xff0c;id_rsa.pub的关系 &#xff08;1&#xff09;konwn_host用于客户端验证远程服务…

ccf A 类与sci 一区那个比较难? + 论文常识

论文常识&#xff1a; ESI 基本科学指标数据库(EssentialScience Indicators ) 高被引论文&#xff08;Highly Cited Paper&#xff09;&#xff1a;根据同一年同一ESI学科统计最近10年发表论文中被引用次数进入世界前1%的论文&#xff1b;在硕士论文中文献综述是作为论文的理…

异步处理优化:多线程线程池与消息队列的选择与应用

目录 一、异步处理方式引入 &#xff08;一&#xff09;异步业务识别 &#xff08;二&#xff09;明确异步处理方式 二、多线程线程池&#xff08;Thread Pool&#xff09; &#xff08;一&#xff09;工作原理 &#xff08;二&#xff09;直面优缺点和适用场景 1.需要快…

计算机软件著作权常用的开发运行环境撰写教程

在申请计算机软件著作权登记时,开发运行环境的描述是必不可少的部分。明确、准确地阐述开发和运行环境,有助于著作权的审查以及软件后续使用。本文将提供10种常见参考写法,供开发者在填写软件开发环境和运行环境信息时参考。 一、通用示例 1 开发的硬件环境: 处理器:Int…

IS-IS的原理

IS-IS的基本概念&#xff1a; 概述&#xff1a; IS-IS&#xff0c;中间系统到中间系统&#xff0c;是ISO国际标准化组织为它的无连接网络协议设计的一种动态路由协议 IS-IS支持CLNP网络和IP网络&#xff0c;采用数据链路层封装&#xff0c;区别于ospf只支持IP网络&#xff0…

洛谷二分题

P1024 [NOIP2001 提高组] 一元三次方程求解 题目描述 有形如&#xff1a;&#x1d44e;&#x1d465;3&#x1d44f;&#x1d465;2&#x1d450;&#x1d465;&#x1d451;0ax3bx2cxd0 这样的一个一元三次方程。给出该方程中各项的系数&#xff08;&#x1d44e;,&#x1d44…

代理ip工具在网络安全中的作用是什么

代理IP工具在网络安全中扮演着至关重要的角色&#xff0c;它们不仅能够帮助用户保护隐私&#xff0c;还能提高网络性能&#xff0c;增强安全性。本文将深入探讨代理IP工具的定义、工作原理以及在网络安全中的具体应用&#xff0c;旨在为读者提供全面的理解和指导。 一、代理IP工…

PHP While 循环

PHP While 循环 引言 在PHP编程语言中,while循环是一种基本且强大的控制结构,用于重复执行一段代码,直到给定的条件不再满足。这种循环结构在处理迭代任务、读取数据集以及执行重复性操作时非常有用。本文将详细介绍PHP中的while循环,包括其语法、工作原理、使用场景以及…

MyBatis框架-日志配置

MyBatis框架的日志配置 MyBatis作为一个封装好的ORM框架&#xff0c;其运行过程我们没有办法跟踪&#xff0c;为了让开发者MyBatis执行流程及执行步骤所完成的工作&#xff0c;MyBatis框架本身支持log4j日志框架&#xff0c;对运行的过程进行跟踪记录。我们只需对MyBatis进行相…

IDEA 2024 配置Maven

Step 1:确定下载Apache Maven版本 在IDEA 2024中&#xff0c;随便新建一个Maven项目&#xff1b; 在File下拉菜单栏中&#xff0c;找到Setings&#xff1b; 在Build&#xff0c;Execution&#xff0c;Deployment中找到Maven 确定下载的Apache Maven版本应略低于或等于IDEA绑…

107.【C语言】数据结构之二叉树求总节点和第K层节点的个数

目录 1.求二叉树总的节点的个数 1.容易想到的方法 代码 缺陷 思考:能否在TreeSize函数内定义静态变量解决size的问题呢? 其他写法 运行结果 2.最好的方法:分而治之 代码 运行结果 2.求二叉树第K层节点的个数 错误代码 运行结果 修正 运行结果 其他写法 1.求二…

MySQL笔记-启动时log报错Table ‘mysql.user‘ doesn‘t exist

安装好mysql后&#xff0c;正常使用&#xff08;使用的是rpm版安装的&#xff09; service mysqld start | stop | restart 不会出现这个问题。 我遇到的情况是在凝思操作系统上&#xff0c;已经存在了一个mysql。网上查找了一些资料&#xff0c;卸载&#xff0c;后可能卸载…

Mybatis 复习

1 什么是MyBatis MyBatis是一个优秀的持久层框架&#xff0c;它对JDBC操作数据库的过程进行封装&#xff0c;使开发者只需要关注 SQL 本身&#xff0c;而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、 结果集检索等JDBC繁杂的过程代码 。…

codeforces1814A

文章目录 一、题目链接二、题目代码三、题目总结 一、题目链接 A. Coins 二、题目代码 参看了这个博客的代码 下面这个代码是我自己写的&#xff0c;有问题。 #include<iostream> using namespace std;int main(){int testCase;cin >> testCase;while(testCase--){…

HNTS-MRG 2024 Challenge:是一个包含200个头颈癌病例的磁共振图像及其标注的公开数据集,旨在推动AI在头颈癌放射治疗自动分割领域的研究。

2024-11-28,由德克萨斯大学MD安德森癌症中心创建HNTS-MRG 2024 Challenge数据集&#xff0c;目的通过公开数据集推动自动分割算法的发展&#xff0c;这对于提高放射治疗的精确性和效率具有重要意义。 数据集地址&#xff1a;HNTS-MRG 2024|癌症放射治疗数据集|医学影像分析数据…

【python】OpenCV—Tracking(10.5)—dlib

文章目录 1、功能描述2、代码实现3、效果展示4、完整代码5、涉及到的库函数dlib.correlation_tracker() 6、参考 1、功能描述 基于 dlib 库&#xff0c;实现指定类别的目标检测和单目标跟踪 2、代码实现 caffe 模型 https://github.com/MediosZ/MobileNet-SSD/tree/master/…

探索温度计的数字化设计:一个可视化温度数据的Web图表案例

随着科技的发展&#xff0c;数据可视化在各个领域中的应用越来越广泛。在温度监控和展示方面&#xff0c;传统的温度计已逐渐被数字化温度计所取代。本文将介绍一个使用Echarts库创建的温度计Web图表&#xff0c;该图表通过动态数据可视化展示了温度值&#xff0c;并通过渐变色…

Dataguard 中将物理备库切换为快照数据库及其切回

概述 在 Oracle Data Guard 环境中&#xff0c;可以将物理备库切换为快照数据库&#xff08;Snapshot Standby&#xff09;&#xff0c;以便在备库上进行读写操作&#xff0c;用于模拟业务功能测试。在使用完成后&#xff0c;可以将快照数据库切换回物理备库。在此期间&#x…

docker ps -a里的项目怎么运行

在 docker ps -a 输出的列表中&#xff0c;列出了所有的容器&#xff0c;无论它们是否正在运行。如果你看到一个状态为“Exited”的容器&#xff0c;并且你想重新启动它&#xff0c;可以使用以下命令&#xff1a; docker start your_container_id检查容器日志 如果容器已经停止…

《C++ 模型训练之早停法:有效预防过拟合的关键策略》

在 C 模型开发的复杂世界里&#xff0c;过拟合犹如一个潜藏的陷阱&#xff0c;常常使我们精心构建的模型在实际应用中表现大打折扣。而早停法&#xff08;Early Stopping&#xff09;作为一种行之有效的策略&#xff0c;能够帮助我们及时察觉模型训练过程中的异常&#xff0c;避…