1.首先创建msg文件

在cd ~/testROS_ws/src/topic_publisher/src新建person.msg

string name
uint8  age
uint8  sexuint8 unknown = 0
uint8 male    = 1
uint8 female  = 2

修改package.xml

添加这两句

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

修改cmake

find_package(catkin REQUIRED COMPONENTSgeometry_msgsroscpprospystd_msgsturtlesimmessage_generation ##查找依赖包
)##生成消息
add_message_files(FILESPerson.msg
)generate_messages(DEPENDENCIESstd_msgs
)##添加依赖包
catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES learning_topicCATKIN_DEPENDS geometry_msgs roscpp rospy std_msgs turtlesim message_runtime
#  DEPENDS system_lib
)

编译

catkin_make

会在/devel/include/<package_name>/person.h文件

2.创建发布者和订阅程序

person_publisher.cpp

/*** 该例程将发布/person_info话题,自定义消息类型learning_topic::Person*/#include <ros/ros.h>
#include "learning_topic/Person.h"int main(int argc, char **argv)
{// ROS节点初始化ros::init(argc, argv, "person_publisher");// 创建节点句柄ros::NodeHandle n;// 创建一个Publisher,发布名为/person_info的topic,消息类型为learning_topic::Person,队列长度10ros::Publisher person_info_pub = n.advertise<learning_topic::Person>("/person_info", 10);// 设置循环的频率ros::Rate loop_rate(1);int count = 0;while (ros::ok()){// 初始化learning_topic::Person类型的消息learning_topic::Person person_msg;person_msg.name = "Tom";person_msg.age  = 18;person_msg.sex  = learning_topic::Person::male;// 发布消息person_info_pub.publish(person_msg);ROS_INFO("Publish Person Info: name:%s  age:%d  sex:%d", person_msg.name.c_str(), person_msg.age, person_msg.sex);// 按照循环频率延时loop_rate.sleep();}return 0;
}

person_subscriber.cpp

/*** 该例程将订阅/person_info话题,自定义消息类型learning_topic::Person*/#include <ros/ros.h>
#include "learning_topic/Person.h"// 接收到订阅的消息后,会进入消息回调函数
void personInfoCallback(const learning_topic::Person::ConstPtr& msg)
{// 将接收到的消息打印出来ROS_INFO("Subcribe Person Info: name:%s  age:%d  sex:%d", msg->name.c_str(), msg->age, msg->sex);
}int main(int argc, char **argv)
{// 初始化ROS节点ros::init(argc, argv, "person_subscriber");// 创建节点句柄ros::NodeHandle n;// 创建一个Subscriber,订阅名为/person_info的topic,注册回调函数personInfoCallbackros::Subscriber person_info_sub = n.subscribe("/person_info", 10, personInfoCallback);// 循环等待回调函数ros::spin();return 0;
}

修改

cmake

add_executable(person_publisher src/person_publisher.cpp)
target_link_libraries(person_publisher ${catkin_LIBRARIES})
add_dependencies(person_publisher ${PROJECT_NAME}_generate_messages_cpp)add_executable(person_subscriber src/person_subscriber.cpp)
target_link_libraries(person_subscriber ${catkin_LIBRARIES})
add_dependencies(person_subscriber ${PROJECT_NAME}_generate_messages_cpp)

编译

catkin_make

运行

roscore

rosrun topic_publisher person_publisher

rosrun topic_publisher person_subscriber

ros(4)话题的自定义消息相关推荐

  1. ROS的学习(七)ROS的话题

    首先需要打开一个终端在里面运行roscore: roscore 再打开一个终端,在里面运行一个turtlesim_node节点: rosrun turtlesim turtlesim_node 打开另 ...

  2. ros订阅话题python_ROS之话题的发布与订阅

    消息: msg文件就是一个描述ROS中所使用消息类型的简单文本.它们会被用来生成不同语言的源代码. 注意,在构建的时候,我们只需要"message_generation".然而,在 ...

  3. [ROS](06)ROS通信 —— 话题(Topic)通信

      文章只是个人学习过程中学习笔记,主要参考ROS教程1. 目录 1.概念 2.话题通信机制 3.话题命令rostopic 4. 话题通信实操 -- 键盘控制乌龟(turtlesim)运动 5.话题命 ...

  4. ROS 之话题topic中 命令小总结

    1.查看ROS正在发布的话题 rostopic list 我的正在发布如下话题. 2.具体查看某个话题,比如查看改话题的发布者(Publishers)和订阅者(Subscribers)以及话题的类型( ...

  5. ros订阅话题python_ROS入门教程 (写一个简单的消息发布器和订阅器 (Python))

    Note: This tutorial assumes that you have completed the previous tutorials: 创建ROS消息和ROS服务. Descripti ...

  6. ROS系统 C++或Python实现话题消息的定义与使用

    如何自定义话题消息 定义msg文件 在package.xml中添加功能包依赖 在CMakeLists.txt添加编译选项 编译生成语言相关文件 创建 msg 文件 cd ~/catkin_ws/src ...

  7. 【RK3399Pro学习笔记】八、ROS话题消息的定义与使用

    目录 自定义话题消息 定义msg文件 在package.xml中添加功能包依赖 在CMakeLists.txt添加编译选项 编译 结果 使用 C++ 编写程序 person_publisher.cpp ...

  8. ROS入门-10.话题消息的定义与使用

    不论是给海龟发布速度指令的Twist消息还是去订阅海龟位置的pose消息,二者都是已经在ros里定义好的可以直接使用的:而当ros定义好的消息没有办法满足我们使用要求,便需要自己来定义所使用的消息的类 ...

  9. 【ROS学习笔记】(五)话题消息的定义与使用

    一.目的 在ROS Master中,可以发布与订阅已经定义好的消息,比如海龟的运动.位姿等信息.但有时我们需要自己定义消息的类型. 本节主要目的为定义一个Person个人信息,Publisher发布个 ...

最新文章

  1. ECMAScript 6入门
  2. 华为会更新鸿蒙吗,华为p30升级鸿蒙系统时间是什么时候
  3. python线程执行完后释放内存_python变量内存地址释放与加速并行计算多线程
  4. 疫情下开源数据库逆势增长,新基建下国产数据库迎机遇
  5. mysql5.5编译安装参数_mysql-5.5源码编译安装(附参数对照表)
  6. 一代人的记忆!又一波微信表情默默消失了
  7. plt.fill()
  8. kafka入门(一)简介
  9. 转 Linux查看文件编码格式及文件编码转换
  10. 工程图样中粗实线的用途_电气工程图的一般特点、设计规范
  11. Linux音频驱动-PCM设备
  12. python输入一个序列_Python序列合并,python
  13. [图文详解]图像处理中的高斯模糊
  14. 百度网盘资源转迅雷下载正确打开方式!
  15. 微信小程序上传照片并且预览
  16. 劳伦斯.拉里.埃里森(甲骨文公司总裁)在耶鲁大学的演讲稿
  17. 套用带标题行的表格样式_excel表格样式采用内置样式 使用Excel 2010内置的单元格样式制作精美的表格效果...
  18. PDN仿真笔记5-电容走线影响寄生电感的因素分析
  19. html代码点击复制微信号并自动打开微信添加好友
  20. Windows消息处理

热门文章

  1. python构造referer_Python爬虫小偏方:修改referer绕开登录和访问频率限制
  2. 如何在python官网下载pip_[Python]Pip的安装以及简单的使用
  3. android 图片跑马灯动画,ImageView 图片循环跑马灯的效果
  4. Java开发中快速提升编码能力的方法有哪些?
  5. linux 源码包编译,源码包编译安装
  6. matlab 图像矢量量化,MATLAB环境下基于矢量量化的说话人识别系统(1)
  7. python找出在原图中的位置_Python 通过截图匹配原图中的位置(opencv)实例
  8. 【LeetCode笔记】85. 最大矩形(Java、单调栈)
  9. 【LeetCode笔记】240. 搜索二维矩阵II 剑指 Offer 04 二维数组中的查找(Java、指针)
  10. python制作表白神器_python制作exe可执行表白神器-Go语言中文社区