ROS使用自定义的msg发送topic

详细的Rostopic命令系列(包括消息发布等实例操作) 详细的rostopic命令行指令,包含有“如何使用rostopic pub发布带有header类类型对象的消息,如何发布带有map键值对类型的数据“等操作,还有响应的操作示例 阅读详情

1 新建工作空间

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make

2 新建功能包

cd ~/catkin_ws/src
# catkin_create_pkg 功能包名 [依赖功能包1] [依赖功能包2]...
catkin_create_pkg msgtest std_msgs roscpp

3 新建msg文件

cd ~/catkin_ws/src/msgtest/
mkdir msg
cd msg/
vim msg1.msg

在msg1.msg中写入以下内容:

int32 num
string str

4 新建发布文件pub.cpp

cd ~/catkin_ws/src/msgtest/src
vim pub.cpp

写入以下内容:

#include "ros/ros.h"
// msgtest是功能包名,msg1是msg文件名,编译成功后会在devel/include自动生成一个头文件
#include "msgtest/msg1.h"

int main(int argc, char **argv)
{
	ros::init(argc, argv, "msgpub");  // msgpub为节点的名字

	// 创建一个句柄
  	ros::NodeHandle n;

	 // 新建一个pub对象,<>中是自定义的msg文件,pub_msg为topic的名字
  	ros::Publisher msg_pub = n.advertise<msgtest::msg1>("mymsg", 1000);
	
	// 发送频率
  	ros::Rate loop_rate(10);
  	while (ros::ok())
  	{
		// 自定义的msg类的一个新变量,并赋值
    	msgtest::msg1 msg;
    	msg.num = 1024;
		msg.str = "hello slam";
		
		// 发送msg
    	msg_pub.publish(msg);
		//ROS的printf
    	ROS_INFO("Publish : number = %d string = %s", msg.num, msg.str.c_str());
		//循环刷新
    	ros::spinOnce();

    	loop_rate.sleep();
  }
  return 0;
}

5 新建订阅文件sub.cpp

cd ~/catkin_ws/src/msgtest/src
vim sub.cpp

写入以下内容:

#include "ros/ros.h"
#include "msgtest/msg1.h"

// 回调函数
void chatterCallback(const msgtest::msg1::ConstPtr& msg)
{
 	ROS_INFO("I heard: [num = %d, string = %s]", msg->num, msg->str.c_str());
}

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

	//新建一个sub,chatterCallback是回调函数名
 	ros::Subscriber sub = n.subscribe("mymsg", 1000, chatterCallback);

 	ros::spin();
 	return 0;
}

6 修改配置文件

CMakelists.txt

cd ~/catkin_ws/src/msgtest/
vim CMakeLists.txt

在文件中第13行处添加上message_generation:

find_package(catkin REQUIRED COMPONENTS
  std_msgs
	roscpp
  message_generation
)

将50行处注释取消掉, 并且按照下面代码修改:

 add_message_files(
   FILES
   msg1.msg
 )

将70行处注释取消掉,如下:

generate_messages(
   DEPENDENCIES
   std_msgs  
 )

在文件最后添加如下代码:

# msgpub是自定义节点名,pub.cpp是文件名
add_executable(msgpub src/pub.cpp)
# msgpub是节点名
target_link_libraries(msgpub ${catkin_LIBRARIES})
# msgsub是自定义节点名,sub.cpp是文件名
add_executable(msgsub src/sub.cpp)
# msgsub是节点名
target_link_libraries(msgsub ${catkin_LIBRARIES})

package.xml

cd ~/catkin_ws/src/msgtest/
vim package.xml

在58行之后加入:

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

7 编译并运行

cd ~/catkin_ws/
catkin_make
roscore

新建一个终端:

source ~/catkin_ws/devel/setup.bash
rosrun msgtest msgpub

再新建一个终端:

source ~/catkin_ws/devel/setup.bash
rosrun msgtest msgsub

大功告成:
在这里插入图片描述

ROS手动编写消息发布器和订阅器topic demo(C++) ROS手动编写消息发布器和订阅器topic demo(C++) 1.首先创建 package cd ~/catkin_ws/src catkin_create_pkg topic_demo roscpp rospy std_msgs 2. 编写 msg 文件 cd topic_demo mkdir msg ... 阅读详情

相关推荐

ROS学习笔记(四)话题消息的定义与使用

代码示例资料来源:古月居《ROS入门21讲》第12讲 两个节点之间发布和订阅一个名为person_info的话题 1.创建功能包 首先确定已经建立起工作空间catkin_ws,工作空间创建方法工作空间创建,然后进行如下操作。 $ cd ~/catkin_ws/src $ catkin_create_pkg learning_topic roscpp rospy std_msgs 创建名为learning_topic的功能包。 2.自定义话题消息 在功能包中建立msg文件夹,在该文件夹下创建名

qq_42823342的博客 1011

ros动态坐标变换 发布方 C++案例实现,发布turtlesim的坐标信息

ROS动态坐标发布

目前在做 ROS相关的工作,主要是写ROS相关和C++的学习心得 982

ROS2 学习笔记4:了解ROS2 话题Topic

节点通过话题发布消息,其他节点可以通过订阅(话题)来获取消息.在本课程中,通过rqt_graph以及命令行工具,你学习了多个节点通过话题连接起来.现在,你应该对于ros2系统数据传输有了很好认识。

weixin_43180456的博客 2239

关于node、topic、msg的理解与踩坑

节点是ROS中的一个执行单元,可以是一个可执行文件或一个脚本。节点可以独立运行,执行各种任务,如发布消息、订阅消息、处理数据等。每个节点都有一个,节点可以通过名称进行通信。

yidengdashi450的博客 872

ROS学习笔记(一) 话题topic的定义与使用(publisher 和 subscriber)

自定义topic消息,实现发布与订阅 最近由于项目所需刚开始学习ros,学习自b站的古月 ROS入门21讲,做一个总结,仅为自己学习使用,可供参考。 topic的组成 《ROS机器人开发实践》一书中讲的十分清楚,这里只是我自己的一个通俗的理解。 实现一个publisher发送消息topic,subscriber从topic中接收消息。其中包含了四个部分: 1 . 发布者(publisher)。 2...

weixin_44047777的博客 3477

理解ROS Topic 通信频率背后的机制

ROS topic的发布和订阅背后数据吞吐的内在机制

inghoG的博客 4552

详细介绍如何在ROS 中使用自定义 msg 消息

首先我们对Ros中的msg 消息做以简单的回顾: msg 消息是 ROS topic 通讯时,节点之间进行传递的内容。msg 消息描述的是业务之间传递数据,也可以理解为业务之间数据的抽象化。 常见 Msg 消息: std 消息:std 消息是属于基本数据类型的消息。和 Python 类似,描述的是数字、字符串、布尔等类型。 geometry 消息:描述的是空间相关数据。 sensor 消息:描述的是传感器相关消息。 下面我们通过一个例子进行msg消息的深入理解: ...

Yifancoder的博客 8116

【ROS学习】ROS topic介绍与发布订阅程序

在ROS中,话题(Topic是一种基本的通信机制,它用于节点之间的消息传递。一个节点可以发布消息到一个话题,其他节点可以订阅该话题并接收消息。

wangusecsdn101的博客 4047

ROS学习笔记(3)之ros的topic发送与接收简单实例

建立package cd ~/catkin_ws/src catkin_create_pkg first_pkg roscpp ros_py std_msgs 编辑msg文件 cd first_pkg mkdir msg#创建msg文件夹,这个文件夹一定要是这个名字 cd msg #进入文件夹 vi test_1.msg //怎么编译这个文件,根据跟人喜好 ,msg文...

请叫我少爷的博客 1万+

ZynqMP多核实战:如何让A53-0跑Linux,其他核裸机处理大数据(附完整配置流程)

本文详细解析了Xilinx ZynqMP多核异构计算实战,重点介绍如何配置A53-0运行Linux系统,同时让其他A53和R5核心以裸机方式处理大数据任务。内容涵盖内存划分、核间通信、Linux定制配置等关键技术,提供完整的配置流程和性能优化方案,助力开发者实现高效的多核协同开发。

weixin_30555125的博客 478

phpstudy自定义安装mysql8.3并启动

下载压缩包文件然后按下面的图片一步一步操作选择版本,选择第一个压缩包文件,下载下载完成后,解压到phpstudy环境目录下

互联网碎碎念 2801

ROS2高效学习第四章 -- ros2 topic 编程之自定义 msg 其二

ROS2高效学习第四章 -- ros2 topic 编程之自定义 msg

cy1641395022的博客 3848

数据结构——滑动窗口

入:下标为 i 的元素进入窗口,更新相关统计量。如果 i < k−1 则重复第一步更新:更新答案。一般是更新最大值 / 最小值出:下标为 i−k+1 的元素离开窗口,更新相关统计量✔1. 定长子串中元音的最大数目✔2. 找到一个数字的 K 美丽值✔4. 子数组的最大平均数 |方法一:前缀和方法二:滑动窗口7. 得到 K 个黑块的最少涂色次数8. 爱生气的书店老板9. 几乎唯一子数组的最大和10. 长度为 K 子数组中的最大和11. 可获得的最大点数12. 最少交换次数来组合所有的1 ||

qq_68915288的博客 762

Ros Topic和Msg

                                                         1 .Node &amp; Master 最小的进程单元节点Node。从程序角度来说,node就是一个可执行文件;从功能角度来说,通常一个node负责者机器人的某一个单独的功能。ROS系统中不同功能模块之间的通信,也就是节点间的通信。 节点管理器Node master。node首...

qq_25678319的博客 1242

【Agora 本地录制最全总结- 基于Java SDK】

Agora 本地服务端录制

lizhengze1117的博客 1790

新手必看|HDevelop核心算子快速上手,为C#移植打基础

在上一篇文章中,我们完成了C#+HALCON的开发环境搭建。但在实际工业开发中,绝不会直接在C#中编写视觉算法HDevelop可视化调试算法 → 验证效果 → 导出C#代码 → 集成到上位机。HDevelop是HALCON专属的算法调试工具,支持实时预览图像、参数动态调节、零编译运行,是新手入门和工业算法调试的核心工具。本文聚焦工业场景高频使用的核心算子,从基础操作到实战案例,手把手教你使用HDevelop;同时重点讲解算法导出C#的规范,让你调试完成的算法,能无缝移植到WinForm上位机中。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 778

ros接入IMU数据,打包发布topic

1 串口读入IMU数据 1.1 serial工具 IMU接入ros系统可以使用I2C,串口或者其他方式实现,这里考虑使用usb转TTL解决。 参考博客ROS使用官方包进行串口通信 几点说明: 在catkin_workspace/src 在创建package $ cd ~/catkin_ws/src $ catkin_create_pkg imu_com std_msgs rospy roscp...

shawfy的博客 1万+

基于STM32与HRTIM的四开关Buck-Boost双向DC-DC电源设计实战(附源码、仿真与设计解析)

本文详细介绍了基于STM32F334的HRTIM高分辨率定时器实现四开关Buck-Boost双向DC-DC电源的设计实战。通过精准的PWM控制、双环PID算法和智能模式切换逻辑,解决了电压震荡与效率优化等关键问题,并提供了完整的源码、PSIM仿真及参数计算,为高性能电源设计提供了实用参考。

7z8x2c4v6b9的博客 299

ROS topic 通过三种形式发送数据信息(publish msg)

1、在C++中通过创建一个类,这个类的子函数可以传递信息,并根据需要进行转换(如需要的话),并且可以在这个类中直接publish msg 举例如下: class Publish { public: ros::NodeHandle n_; SubscribeAndPublish() { //Topic you want to publish ...

qq_37082966的博客 6104

【YOLO26实战全攻略】09——YOLO26多目标跟踪实战宝典:从原理到智慧园区人流统计全流程

多目标跟踪(MOT)是视频分析的核心技术,解决了单帧检测无法关联目标身份的痛点。本文基于YOLO26轻量化检测模型与ByteTrack跟踪算法,从新手视角出发,系统讲解多目标跟踪的核心原理、环境搭建、实操步骤与工程落地。内容涵盖ByteTrack分层关联策略解析、YOLO26集成跟踪的一行代码实现、配置参数调优、区域计数、轨迹数据提取与热力图可视化,最终通过智慧园区人车流量统计虚拟案例,完整呈现从技术原理到实际应用的全流程。本文注重实用价值,所有代码可直接复现,参数配置附带场景化建议,帮助新手快速上手。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 354

Opencascade 保存点云为 .stp 和 .step 格式

总结一下,OpenCascade提供了强大的功能和工具,使我们能够方便地将点云数据保存为 .stp 和 .step 格式。通过使用类似于上述示例代码的方法,你可以使用OpenCascade库将点云数据保存为.STP和.STEP格式。总结一下,使用OpenCascade库,你可以方便地将点云数据保存为.STP和.STEP格式。通过使用类似于上述示例代码的方法,你可以将点云数据转换为OpenCascade的几何模型,并将其保存为所需的文件格式。请注意,上述代码仅涵盖了将点云数据保存为.STP格式的基本步骤。

CwzCode的博客 1157

ros topic编程

一、Publish-Subscribe模型 Topic通信是ROS中最重要也是最常用的一种单向异步通信机制,传输消息Message。该机制中,消息以发布/订阅的方式进行传递,因为每个Topic的消息类型都是强类型,所以发布到其上的消息都必须与Topic的消息类型匹配,而且节点只能接收类型匹配的消息。 特点: 单向:数据只能从发布者传输到订阅者,如果订阅者需要传输数据则需要另外开辟一个Topic进行数据传输 异步: 对接收者来讲,其订阅Topic,只要Message从Topic过来就接收并进行处理,不管

芃晟的博客 2033

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ROS通信机制(一) —— 话题(topic)与msg文件

主要记录了ROS节点之间通过话题订阅和发布消息的全过程,以及自定义msg消息。

画茧自缚 3734

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

ROS topic使用

一、创建ros工作空间ros_ws $ mkdir -p ~/ros_ws/src $ cd ~/ros_ws $ catkin_make #将ros_ws文件夹初始化为ros的工作空间 此时的工程结构

qq_39433050的博客 2244

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【ROS学习5(Topic)】话题消息(message)的自定义与使用

话题消息的自定义与使用: 在上几次的学习当中,无论是给小海龟发送速度指令的Twist消息,还是去订阅小海龟的位姿Pose消息,都是ROS里默认定义的,假如这些消息仍无法满足我们的需求,我们就需要自定义一个消息类型。 我们以创建一个个人信息的消息类型为例: 如何定义话题消息: ➢定义msg文件:(Person.msg) cd learning_topic mkdir msg #用touch命令创建...

Yann的博客 2545

ROS基础:ROS通讯机制-话题topic

摘要:本文介绍了ROS中的topic通信原理及应用。topic是一种点对点的单向异步通信方式,适用于周期性消息传输。文章详细阐述了topic的初始化流程,包括节点注册、发布/订阅机制和回调函数处理。通过摄像头图像传输示例,展示了topic的分布式特性。同时提供了完整的代码示例,演示了如何创建发布者和订阅者节点,并介绍了相关命令工具(rqt_graph、rostopic等)的使用方法。最后讲解了自定义消息类型的创建和使用过程,包括msg文件定义、编译配置及代码调用。

m0_74313397的博客 1074
上一篇: 利用脚本实现ssh远程免密连接
下一篇: ROS常用命令
威士忌燕麦拿铁
博客等级 码龄10年 5442粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值