ROS学习——通信机制(话题通信④—自定义msg)

news2024/11/26 14:36:52

 052话题通信_自定义msg_实现_Chapter2-ROS通信机制_哔哩哔哩_bilibili

 2.1.4 话题通信自定义msg · Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程

 

一、自定义msg实现

需求:创建自定义消息,该消息包含人的信息:姓名、身高、年龄等。

1.定义msg文件 

(1)新建msg文件夹,再创建Person.msg文件

(2)设置字段

 (3)配置

 ②编译功能包,需要依赖message_generation

 ③放开注释( 取消多行注释:Ctrl+K+U)

 更改为: 这个实现意味着我们要编译message目录下的Person.msg文件;

④放开注释,意味着如果要编译generate_messages需要依赖std_msgs

⑤ 放开注释,添加

 这里的catkin_package是和find_package对应,

 find_package意思是如果编译自定义的功能包(plumbing_pub_sub),必须依赖于find_package里面的包,而这些包又依赖于catkin_package里面的功能包;

可以将 find_package理解为编译时依赖,catkin_package理解为运行时依赖;

(4)编译(ctrl+shift+B)

编译成功后会生成一些中间文件

 二、自定义msg使用( C++)

需求:

编写发布订阅实现,要求发布方以10HZ(每秒10次)的频率发布自定义消息,订阅方订阅自定义消息并将消息内容打印输出

流程:

  1. 按照固定格式创建 msg 文件
  2. 编辑配置文件
  3. 编译生成可以被 Python 或 C++ 调用的中间文件

1.vscode配置

 

 12行可对照上行修改为:

2.发布方实现

(1)新建文件demo03_pub_person.cpp

(2)添加头文件

(3)初始化ros节点

 banZhuRen——节点名称

(4)创建节点句柄

(5)创建发布者对象

(6)发布逻辑

①创建被发布数据

 中文输出需要添加该函数:

②设置发布频率

③循环发布数据

 (7)配置


 映射名最好和原文件名一致

 ②

③ 

更改为:

 第一个参数是原文件映射名称;

(8)编译

(9)测试

①启动roscore

②再开终端,发布节点

③ 打印

注意不能直接如下操作:

 因为打印的消息类型是person类型,在当前命令行找不到,必须进入工作空间

④结果

 (10)输出打印优化

 重新编译,结果:

 三、订阅方实现

1.新建文件

 2.订阅方和发布方对比

 (1) 代码

/*
    需求: 订阅人的信息

*/

#include "ros/ros.h"
#include "demo02_talker_listener/Person.h"

void doPerson(const demo02_talker_listener::Person::ConstPtr& person_p){
    ROS_INFO("订阅的人信息:%s, %d, %.2f", person_p->name.c_str(), person_p->age, person_p->height);
}

int main(int argc, char *argv[])
{   
    setlocale(LC_ALL,"");

    //1.初始化 ROS 节点
    ros::init(argc,argv,"listener_person");
    //2.创建 ROS 句柄
    ros::NodeHandle nh;
    //3.创建订阅对象
    ros::Subscriber sub = nh.subscribe<demo02_talker_listener::Person>("chatter_person",10,doPerson);

    //4.回调函数中处理 person

    //5.ros::spin();
    ros::spin();    
    return 0;
}

(2)配置

需要添加 add_dependencies 用以设置所依赖的消息相关的中间文件。

add_executable(person_talker src/person_talker.cpp)
add_executable(person_listener src/person_listener.cpp)



add_dependencies(person_talker ${PROJECT_NAME}_generate_messages_cpp)
add_dependencies(person_listener ${PROJECT_NAME}_generate_messages_cpp)


target_link_libraries(person_talker
  ${catkin_LIBRARIES}
)
target_link_libraries(person_listener
  ${catkin_LIBRARIES}
)

(3)编译,运行

  • 启动 roscore;
  • 启动发布节点;
  • 启动订阅节点。
  • PS:可以使用 rqt_graph 查看节点关系。

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

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

相关文章

python基础语法学习--字面量

1、字面量的定义 在代码中&#xff0c;被写下来的固定的值。 2、常见值类型 数字&#xff1a;Number&#xff0c;包含整数int、浮点数float、复数complex、布尔bool四类。 整数int&#xff1a;如10、-10等 浮点数float&#xff1a;如13.14、-13.14等 复数complex&#xff1a;如…

Cracking C++(6): 准确打印浮点数

文章目录 1. 目的2. 准确打印浮点数&#xff1a; 使用 fmt 库3. 准确算出被表示的值3.1 直观感受IEEE-754: float-toy3.2 获取浮点数二进制表示3.3 float 类型3.4 double 类型3.5 fp16 类型3.6 验证 4. 结论和讨论5. References 1. 目的 给 float 或 double 类型的变量赋值后&…

chatgpt赋能python:Python教程:如何倒序输出字典?

Python教程&#xff1a;如何倒序输出字典&#xff1f; Python是一种强大的编程语言&#xff0c;广泛用于各种类型的应用程序开发。在开发应用程序时&#xff0c;访问和操作数据是至关重要的一步&#xff0c;而字典是Python中最有用的数据结构之一。字典允许开发人员使用键值对…

Linux安装myql8.0操作步骤

1. 创建software目录&#xff0c;目录可以自定义 mkdir /usr/local/softwar 2. 进入目录software&#xff0c;获取安装包文件 wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.32-linux-glibc2.12-x86_64.tar.xz 3. 解压文件 tar -vxf mysql-8.0.32-…

【MySQL数据库 | 第十六篇】存储引擎

目录 前言&#xff1a; MySQL体系结构图&#xff1a; 存储引擎简介&#xff1a; 1. InnoDB存储引擎&#xff1a; 2. MyISAM存储引擎&#xff1a; 3. MEMORY存储引擎&#xff1a; 4. NDB Cluster存储引擎&#xff1a; 5. ARCHIVE存储引擎&#xff1a; 存储引擎语法&#…

chatgpt赋能python:Python再次运行快捷键介绍及使用技巧

Python再次运行快捷键介绍及使用技巧 如果你是一名经验丰富的Python工程师&#xff0c;你一定知道如何使用Python快捷键加速代码调试和开发。然而&#xff0c;在实际开发中有许多情况下&#xff0c;你需要再次运行刚刚输入的代码块或函数&#xff0c;这个时候&#xff0c;你必…

JavaWeb开发聊天功能 聊天信息如何实现自动将其他消息上移 最新消息出现在界面下方

问题 JavaWeb开发聊天功能 聊天信息如何实现自动将其他消息上移 最新消息出现在界面下方 详细问题 笔者基于开发JavaWeb开发聊天功能&#xff0c;当用户处于聊天室中&#xff0c;若用户发送一条信息或用户接收到聊天对象的信息&#xff0c;若要查看信息&#xff0c;需要下滑…

Storm超实用教程详解-附示例

一、理论基础 Storm 是一个免费并开源的分布式实时计算系统。利用 Storm 可以很容易做到可靠地处理无限的 数据流&#xff0c;像 Hadoop 批量处理大数据一样&#xff0c;Storm 可以实时处理数据。在Storm中&#xff0c;topology的构建是一个有向无环图。结点就是Spout或者Bolt&…

CKA 04_部署 harbor 仓库 containerd 连接 harbor 仓库 kubeadm 引导集群

文章目录 1. 清空之前的策略1.1 kubeadm 重置1.2 刷新 IPtables 表 2. 查看 Kubernetes 集群使用的镜像3. 搭建 harbor 仓库3.1 部署 docker3.1.1 准备镜像源3.1.2 安装 docker3.1.3 开机自启 docker3.1.4 修改内核参数&#xff0c;打开桥接3.1.5 验证生效 3.2 准备 harbor 仓库…

chatgpt赋能python:Python如何写网站的SEO

Python如何写网站的SEO 在当今的数字时代&#xff0c;网站是公司或个人吸引更多目标受众和客户的重要媒介之一。然而&#xff0c;拥有优秀内容和设计不足以保证流量。搜寻引擎优化(SEO)是一项重要的工作&#xff0c;它帮助网站排名更高&#xff0c;被更多人看到。Python是一种…

chatgpt赋能python:Python技术分享:如何再建立一个文档的SEO

Python技术分享&#xff1a;如何再建立一个文档的SEO Python作为一种高级编程语言&#xff0c;被业内大量使用。它的易用性、跨平台性、语法简单易懂、代码可读性高等特性进一步增强了它的流行度。在使用Python编程时&#xff0c;经常会需要生成文档&#xff0c;使得我们的项目…

软考A计划-系统架构师-官方考试指定教程-(12/15)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

chatgpt赋能python:Python如何免费群发短信

Python如何免费群发短信 在数字化时代&#xff0c;短信成为了快速高效的沟通方式之一。针对群发短信需求&#xff0c;市场上存在着多种短信群发软件&#xff0c;而Python作为一个强大的编程工具&#xff0c;也可以轻松实现免费的短信群发功能。本篇文章将为大家介绍如何通过Py…

从QGIS图层中裁剪需要的区域

GiS数据裁切&#xff0c;创建一个临时图层&#xff0c;通过矢量裁切的方法&#xff0c;将Gis图层进行裁切&#xff1b;影像裁切&#xff0c;将影像图层放置在Gis中&#xff0c;截取影像图以及临时图层的轮廓&#xff0c;放入PS中进行对比&#xff0c;然后将影像图裁切下来。 1…

软件测试01:软件及分类和缺陷的定义

软件测试&#xff1a;软件及分类和缺陷的定义 软件 程序数据文档 软件分类 层次分类 系统软件应用软件组织分类 商业软件开源软件结构分类 单机软件分布式软件(两种&#xff1a;BS服务端架构模型和CS客户端架构模型) 软件缺陷 软件缺陷的由来 起源于上世纪70年代中期 《测…

javaScript蓝桥杯---新增地址

目录 一、介绍二、准备三、目标四、代码五、完成 一、介绍 网购大家应该再熟悉不过&#xff0c;网购中有个很难让人忽略的功能就是地址管理&#xff0c;接下来就让我们通过完善代码来探索下地址管理中常用功能的实现吧&#xff5e; 本题需要在已提供的基础项目中使用 JS 知识…

chatgpt赋能python:Python输入:优秀的函数、方法和技巧

Python输入&#xff1a;优秀的函数、方法和技巧 引言 从文件读取数据&#xff0c;在终端上接收用户输入&#xff0c;在Web应用程序中处理表单数据&#xff0c;这些都是Python中经常需要进行的一些任务。Python内置了许多函数和方法来处理这些任务&#xff0c;但是从众多的选项…

CSS 谈谈你对重排和重绘的理解

一、前言 当我们给我们的DOM结构改变或者给DOM结构设置样式时&#xff0c;会触发回流和重绘&#xff0c;但不同的样式改变&#xff0c;是否触发重排和重绘是不确定的。我们有必要深度理解重排和重绘&#xff0c;通过减少重排可以提高性能。 了解浏览器的解析渲染机制: (1).解析…

C++中的数组理解与应用

数组的数据结构 数组是最基本的数据结构&#xff0c;关于数组的面试题也屡见不鲜&#xff0c;本文罗列了一些常见的面试题&#xff0c;仅供参考。目前有以下18道题目。 数组求和 求数组的最大值和最小值 求数组的最大值和次大值 求数组中出现次数超过一半的元素 求数组中元…

详解c++---二叉搜索树的讲解和模拟实现

目录标题 二分查找的优缺点搜索二叉树的规则搜索二叉树的特性二叉搜索树的性能分析准备工作二叉搜索树的插入函数二叉搜索树的打印函数二叉搜索树的查找函数二叉搜索树的删除函数拷贝构造函数赋值重载析构函数递归版本的find函数递归版本的插入递归的删除方法搜索树的应用模型 …