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.rhkb.cn/news/482860.html

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

相关文章

实例讲解MATLAB绘图坐标轴标签旋转

在进行绘图时需要在图片上添加上做标轴的标签&#xff0c;但是当数据量比较多时&#xff0c;例如一天24小时的数据&#xff0c;这时把每个小时显示在左边轴的标签上&#xff0c;文字内容放不下&#xff0c;因此需要将坐标轴标签旋转一定的角度&#xff0c;这样可以更好在图形上…

Spark 内存管理机制

Spark 内存管理 堆内内存和堆外内存 作为一个 JVM 进程&#xff0c;Executor 的内存管理建立在 JVM(最小为六十四分之一&#xff0c;最大为四分之一)的内存管理之上&#xff0c;此外spark还引入了堆外内存&#xff08;不在JVM中的内存&#xff09;&#xff0c;在spark中是指不…

为什么爱用低秩矩阵

目录 为什么爱用低秩矩阵 一、定义与性质 二、区别与例子 为什么爱用低秩矩阵 我们更多地提及低秩分解而非满秩分解,主要是因为低秩分解在数据压缩、噪声去除、模型简化和特征提取等方面具有显著的优势。而满秩分解虽然能够保持数据的完整性,但在实际应用中的场景较为有限…

Dify+Docker

1. 获取代码 直接下载 &#xff08;1&#xff09;访问 langgenius/dify: Dify is an open-source LLM app development platform. Difys intuitive interface combines AI workflow, RAG pipeline, agent capabilities, model management, observability features and more, …

Android Studio的AI工具插件使用介绍

Android Studio的AI工具插件使用介绍 一、前言 Android Studio 的 AI 工具插件具有诸多重要作用&#xff0c;以下是一些常见的方面&#xff1a; 代码生成与自动补全 代码优化与重构 代码解读 学习与知识获取 智能搜索与资源推荐实际使用中可以添加注释&#xff0c;解读某段代…

DOCKER学习总结

这里写目录标题 一、Docker安装1.1 在线安装1.2 离线安装安装配置启动服务 1.3 配置镜像1.4 Docker启动相关命令 二、Docker三大核心概念2.1 镜像2.2 容器2.3 仓库2.3.1 公有仓库2.3.2 私有仓库 二、容器与虚拟机比较 一、Docker安装 1.1 在线安装 查看是否安装dockeryum lis…

深入浅出体验AI生图产品Dall-E

DALL-E是由OpenAI开发的一种革命性的AI图像生成工具&#xff0c;能够根据文本描述生成图像。它的名字灵感来源于著名画家萨尔瓦多达利&#xff08;Salvador Dal&#xff09;和皮克斯动画电影中的角色瓦力&#xff08;WALL-E&#xff09;&#xff0c;这暗示了其在艺术创造力与技…

OpenCV_Code_LOG

孔洞填充 void fillHole(const Mat srcBw, Mat &dstBw) {Size m_Size srcBw.size();Mat TempMat::zeros(m_Size.height2,m_Size.width2,srcBw.type());//延展图像srcBw.copyTo(Temp(Range(1, m_Size.height 1), Range(1, m_Size.width 1)));cv::floodFill(Temp, Point(…

YOLOv11改进,YOLOv11添加SAConv可切换空洞卷积,二次创新C3k2结构

摘要 作者提出的技术结合了递归特征金字塔和可切换空洞卷积,通过强化多尺度特征学习和自适应的空洞卷积,显著提升了目标检测的效果。 理论介绍 空洞卷积(Atrous Convolution)是一种可以在卷积操作中插入“空洞”来扩大感受野的技术,更有效地捕捉到图像中的大范围上下文…

2024信创数据库TOP30之华为Gauss DB

近日&#xff0c;由DBC联合CIW/CIS共同发布的“2024信创数据库TOP30”榜单正式揭晓&#xff0c;汇聚了国内顶尖的数据库企业及其产品&#xff0c;成为展示中国信创领域技术实力与发展潜力的重要平台。在这份榜单中&#xff0c;华为的GaussDB凭借其卓越的技术实力、广泛的行业应…

【Spring源码核心篇-07】spring事物传播机制的流程和原理

Spring源码核心篇整体栏目 内容链接地址【一】Spring的bean的生命周期https://zhenghuisheng.blog.csdn.net/article/details/143441012【二】深入理解spring的依赖注入和属性填充https://zhenghuisheng.blog.csdn.net/article/details/143854482【三】精通spring的aop的底层原…

Redis实现限量优惠券的秒杀

核心&#xff1a;避免超卖问题&#xff0c;保证一人一单 业务逻辑 代码步骤分析 全部代码 Service public class VoucherOrderServiceImpl extends ServiceImpl<VoucherOrderMapper, VoucherOrder> implements IVoucherOrderService {Resourceprivate ISeckillVoucher…

.NET8/.NETCore 依赖注入:自动注入项目中所有接口和自定义类

.NET8/.NETCore 依赖接口注入&#xff1a;自动注入项目中所有接口和自定义类 目录 自定义依赖接口扩展类&#xff1a;HostExtensions AddInjectionServices方法GlobalAssemblies 全局静态类测试 自定义依赖接口 需要依赖注入的类必须实现以下接口。 C# /// <summary>…

搭建一个基于Web的文档管理系统,用于存储、共享和协作编辑文档

搭建一个基于Web的文档管理系统&#xff0c;用于存储、共享和协作编辑文档 本项目采用以下架构&#xff1a; NFS服务器: 负责存储文档资料。Web服务器: 负责提供文档访问和编辑功能。SELinux: 负责权限控制&#xff0c;确保文档安全。Git服务器: 负责存储文档版本历史&#x…

gitee:创建仓库,存入本地文件至仓库

一、git下载 git:下载与安装-CSDN博客https://blog.csdn.net/weixin_46001736/article/details/144107485?sharetypeblogdetail&sharerId144107485&sharereferPC&sharesourceweixin_46001736&spm1011.2480.3001.8118 二、创建仓库 1、主页面->右上角新增…

计算机网络 —— HTTP 协议(详解)

前一篇文章&#xff1a;网页版五子棋—— WebSocket 协议_网页可以实现websocket吗-CSDN博客 目录 前言 一、HTTP 协议简介 二、HTTP 协议格式 1.抓包工具的使用 2.抓包工具的原理 3.抓包结果 4.HTTP协议格式总结 三、HTTP 请求 1. URL &#xff08;1&#xff09;UR…

关于单片机的原理与应用!

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///计算机爱好者&#x1f60a;///目前正在学习C&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于单片…

爬虫专栏第一篇:深入探索爬虫世界:基础原理、类型特点与规范要点全解析

本专栏会对爬虫进行从0开始的讲解&#xff0c;每一步都十分的细致&#xff0c;如果你感兴趣希望多多点赞收藏关注支持 简介&#xff1a;文章对爬虫展开多方面剖析。起始于爬虫的基本概念&#xff0c;即依特定规则在网络抓取信息的程序或脚本&#xff0c;在搜索引擎信息提取上作…

rabbitmq原理及命令

目录 一、RabbitMQ原理1、交换机&#xff08;Exchange&#xff09;fanoutdirecttopicheaders&#xff08;很少用到&#xff09; 2、队列Queue3、Virtual Hosts4、基础对象 二、RabbitMQ的一些基本操作:1、用户管理2、用户角色3、vhost4、开启web管理接口5、批量删除队列 一、Ra…

@antv/x6 再vue中 ,自定义图形,画流程图、数据建模、er图等图形

X6 是基于 HTML 和 SVG 的图编辑引擎&#xff0c;提供低成本的定制能力和开箱即用的内置扩展&#xff0c;方便我们快速搭建 DAG 图、ER 图、流程图、血缘图等应用。 最终效果图 1.安装 npm install antv/x6 --save //x6主要包 npm install antv/x6-vue-shape //使用vue组…