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

深入解析CAN2.0A与CAN2.0B协议:帧格式与通信机制对比

本文深入对比了CAN2.0A与CAN2.0B协议的核心差异,重点解析了11位标准帧与29位扩展帧的帧格式、标识符长度及通信机制。文章阐述了CAN2.0B向下兼容的特性,并探讨了在汽车电子、工业控制等复杂网络中,如何根据项目需求、兼容性及实时性要求,在标准帧与扩展帧之间做出合理选择。

weixin_29163797的博客 392

Innovus Function ECO实战:5步搞定数字后端设计中的网表修正(含Calibre LVS验证技巧)

本文提供了一份完整的Innovus Function ECO实战指南,详细解析了数字后端设计中网表修正的五步流程。从理解Function ECO概念、准备关键文件,到在Innovus中执行逻辑比对、自动布线及GUI检查,并重点攻克了ECO后Calibre LVS验证的难点与调试技巧,帮助工程师高效、精准地完成流片前的设计微调。

day7的博客 947

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

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

cy1641395022的博客 3848

利用MobaXterm解密Session密码的实战指南

本文提供了利用MobaXterm解密Session密码的详细实战指南,帮助运维工程师和开发者在忘记密码时找回加密存储的远程连接信息。通过Python脚本和注册表操作,逐步解析MobaXterm的AES加密机制,实现密码解密,并分享安全建议和常见问题解决方案。

weixin_26759093的博客 232

Ros Topic和Msg

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

qq_25678319的博客 1242

AutoCAD矢量数据导出全攻略:GIS4CAD插件一键转shp/mdb/kml(附安装包)

本文详细介绍了GIS4CAD插件如何高效解决AutoCAD矢量数据向GIS格式转换的难题。通过一键操作,用户可将CAD中的规划图、地形图等无损转换为行业标准的shp、mdb、kml等多种格式,并确保属性完整与坐标准确。文章提供了从插件安装、数据准备到实战导出的全流程指南,是城市规划、测绘等领域专业人士提升数据互操作效率的必备攻略。

a2b3c4d5e的博客 283

提示词工程在机器翻译质量提升中的应用

Introduction to Prompt Engineering in Machine Translation Quality Improvement Keywords

AI天才研究院 1151

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

Python之achatbot包语法、参数和实际应用案例

本书是一本PyTorch深度学习实战指南,分为基础(前6章)和进阶(后5章)两大部分。基础部分涵盖张量运算、神经网络、数据预处理及CNN等核心内容;进阶部分则深入图像、文本、音频建模技术,重点解析Transformer架构及大语言模型开发。全书采用"理论+实践"模式,适合从零基础到进阶的PyTorch学习者。

王国平的博客 632

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

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

qq_37082966的博客 6104

OpenClaw 从新手到中级完整教程【完整 持续更新版】

OpenClaw(曾用名 ClawdBot/Moltbot)是 2026 年最火的开源 AI Agent 项目,GitHub 已获得超过 68,000 星标。它不是普通的聊天机器人,而是一个真正能够执行任务的个人 AI 助理。

FeelTouch Labs 3113

ADT MCP Server 把 ABAP 开发带进 Agent 模式

今天讨论 ADT MCP Server,不能只把它看成 Visual Studio Code 里多出来的一个开关。它真正有意思的地方,在于它把 ABAP 后端开发里那些原本需要手工点击、手工创建、手工激活、手工查服务元数据的动作,包装成一组可以被 GitHub Copilot 这类 coding agent 调用的工具。SAP 在 RAP130 练习里把它描述为运行在 ADT for Visual Studio Code 扩展内部的本地 HTTP Server,它实现的是 Model Context Pro

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 183

ros topic编程

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

芃晟的博客 2033

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

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

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

画茧自缚 3734

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

ROS topic使用

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

qq_39433050的博客 2244

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【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、付费专栏及课程。

余额充值