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 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux 篇】Docker 容器星河与镜像灯塔:Linux 系统下解锁应用部署奇幻征程

文章目录 【Linux 篇】Docker 容器星河与镜像灯塔&#xff1a;Linux 系统下解锁应用部署奇幻征程前言一 、docker上部署mysql1. 拉取mysql镜像2. 创建容器3. 远程登录mysql 二 、docker上部署nginx1. 拉取nginx镜像2. 在dockerTar目录下 上传nginx.tar rz命令3. 创建nginx容器4…

Matlab模块From Workspace使用数据类型说明

Matlab原文连接&#xff1a;Load Data Using the From Workspace Block 模型&#xff1a; 从信号来源的数据&#xff1a; timeseries 数据&#xff1a; sampleTime 0.01; numSteps 1001;time sampleTime*[0:(numSteps-1)]; time time;data sin(2*pi/3*time);simin time…

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

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

kube-proxy的iptables工作模式分析

系列文章目录 iptables基础知识 文章目录 系列文章目录前言一、kube-proxy介绍1、kube-proxy三种工作模式2、iptables中k8s相关的链 二、kube-proxy的iptables模式剖析1.集群内部通过clusterIP访问到pod的流程1.1.流程分析 2.从外部访问内部service clusterIP后端pod的流程2.1…

学习ASP.NET Core的身份认证(基于Session的身份认证3)

开源博客项目Blog中提供了另一种访问控制方式&#xff0c;其基于自定义类及函数的特性类控制访问权限。本文学习并测试开源博客项目Blog的访问控制方式&#xff0c;测试程序中直接复用开源博客项目Blog中的相关类及接口定义&#xff0c;并在其上调整判断逻辑。   首先是接口A…

HTML前端开发-- Flex布局详解及实战

引言 Flex布局&#xff0c;全称为Flexible Box Layout&#xff0c;是一种现代CSS布局技术&#xff0c;它提供了一种更有效的方式来设计响应式布局和复杂页面布局。本文将详细介绍Flex布局的基本概念、属性以及实战应用。 一、基本概念 Flex布局的核心是Flex容器&#xff08;…

ESG研究报告白皮书与ESG治理报告合集(2020-2023年)

一.资料范围&#xff1a;&#xff08;1&#xff09;ESG白皮书及指南;&#xff08;2&#xff09;ESG研究报告,&#xff08;3&#xff09;ESG治理报告分析&#xff08;4&#xff09;上市公司ESG报告&#xff08;知名企业&#xff09; 二、资料用途&#xff1a;可以分析研究企业E…

C/C++每日一练:合并K个有序链表

本篇博客将探讨如何 “合并K个有序链表” 这一经典问题。本文将从题目要求、解题思路、过程解析和相关知识点逐步展开&#xff0c;同时提供详细注释的代码示例。 链表&#xff08;Linked List&#xff09; 链表是一种线性数据结构&#xff0c;由一系列节点&#xff08;Node&…

计算机网络复习1——导言和概论

网络简史 1946年&#xff0c;美国物理学家莫奇利任总设计师研制成功世界上第一台电子管计算机ENIAC&#xff08;这标志着人类自学会使用工具的漫长岁月中&#xff0c;终于拥有了可以替代人类脑力劳动的“工具”&#xff09; 1969年9月2日&#xff0c;以雷克雷洛克为首的约20名…

详解桥接模式

引言 在开发过程中&#xff0c;可能会遇到系统设计有多种维度变化的情况&#xff0c;比如我们想画一幅五彩斑斓的画&#xff0c;需要用到12个颜色&#xff0c;但是需要粗细不同的线条&#xff08;粗、中、细&#xff09;&#xff0c;如果用蜡笔&#xff0c;就需要粗中细三种蜡笔…

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

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

【SpringBoot+Vue】x-admin管理系统跟做

技术栈 前端技术说明Vue前端框架Vuex全局状态管理框架ElementUI前端UI框架Axios前端HTTP框架vue-element-admin项目脚手架 后端技术说明SpringBoot容器MVC框架MyBatisORM框架MyBatis-plusMyBatis增强工具Redis非关系型数据库 数据库准备 SET NAMES utf8mb4; SET FOREIGN_KE…

AI智算-正式上架GPU资源监控概览 Grafana Dashboard

下载链接 https://grafana.com/grafana/dashboards/22424-ai-gpu-20241127/

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

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

用到动态库的程序运行过程

当我们写好了一段代码然后编译运行后会生成可执行文件&#xff0c;该文件会存在磁盘的当前目录下&#xff0c;而当我们开始运行这段程序时&#xff0c;操作系统&#xff08;加载器&#xff09;需要将其从磁盘加载进内存然后执行相关操作&#xff0c;而对于用到动态库的程序&…

Windows使用多个JDK的方法

原文网址&#xff1a;Windows使用多个JDK的方法-CSDN博客 简介 本文介绍Windows如何使用多个JDK。 原先已经有了JDK8&#xff0c;现在想用JDK21。但有的项目依然是JDK8&#xff0c;所以两个JDK需要共存。 解决方案 第一步&#xff1a;改环境变量 右键此电脑> 属性>…

RDIFramework.NET CS敏捷开发框架 SOA服务三种访问(直连、WCF、WebAPI)方式

1、介绍 在软件开发领域&#xff0c;尤其是企业级应用开发中&#xff0c;灵活性、开放性、可扩展性往往是项目成功的关键因素。对于C/S项目&#xff0c;如何高效地与后端数据库进行交互&#xff0c;以及如何提供多样化的服务访问方式&#xff0c;是开发者需要深入考虑的问题。…

《数字图像处理基础》学习07-图像几何变换之最近邻插值法放大图像

目录 一&#xff0c;概念 二&#xff0c;题目及matlab实现 1&#xff0c;解题思路 2&#xff0c;matlab实现 1&#xff09;matlab思路 2&#xff09;完整代码 三&#xff0c;放大图像及matlab实现 一&#xff0c;概念 通过上一篇&#xff0c;我已经学习了使用最邻近插…

LWIP和FATFS 实现 FTP 服务端

目录 一、前言 二、LWIP 和 FTP 简介 1.LWIP 2.FTP 三、实现 FTP 服务端的主要步骤 1.初始化 LWIP 2.创建 FTP 服务器任务 3.处理客户端连接 4.实现 FTP 命令处理 5.文件系统操作 6.错误处理和日志记录 四、示例代码 1.创建FTP任务 2. FTP任务代码 3.处理交互数据…

PyCharm中Python项目打包并运行到服务器的简明指南

目录 一、准备工作 二、创建并设置Python项目 创建新项目 配置项目依赖 安装PyInstaller 三、打包项目 打包为可执行文件 另一种打包方式(使用setup.py) 四、配置服务器环境 五、上传可执行文件到服务器 六、在服务器上运行项目 配置SSH解释器 配置部署 上传代…