古月居 ROS入门21讲 第十二讲 话题消息的定义与使用

  • Person.msg
string name
uint8 sex
uint8 ageuint8 unknown=0
uint8 male=1
uint8 female=2
  • c++
    person_publisher.cpp
#include <ros/ros.h>
#include "learning_topic/Person.h"int main(int argc,char**argv)
{ros::init(argc,argv,"person_publisher");ros::NodeHandle n;ros::Publisher person_info_pub=n.advertise<learning_topic::Person>("/person_info",10);ros::Rate looprate(1);while(ros::ok()){learning_topic::Person person_msg;person_msg.name="Tom";person_msg.age=10;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);looprate.sleep();}return 0;
}

person_subscriber

#include <ros/ros.h>
#include "learning_topic/Person.h"void personInfoCallback(const learning_topic::Person::ConstPtr&msg)
{ROS_INFO("Subscriber Person Info: name: %s age: %d sex: %d",msg->name.c_str(),msg->age,msg->sex);
}
int main(int argc,char**argv)
{ros::init(argc,argv,"person_subscriber");ros::NodeHandle n;ros::Subscriber person_info_sub = n.subscribe("/person_info",10,personInfoCallback);ros::spin();return 0;
}
vim src/learning_topic/package.xml

在package.xml中添加

<build_depend>message_generation<ild_depend>
<exec_depend>message_runtime</exec_depend>
vim src/learning_topic/CMakeLists.txt

在CMakeLists.txt中找到相应位置添加

find_package(catkin REQUIRED COMPONENTSgeometry_msgsroscpprospystd_msgsturtlesimmessage_generation
)add_message_files(FILES Person.msg)
generate_messages(DEPENDENCIES std_msgs)catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES learning_topic
# 这里直接把注释去掉并添加message_runtimeCATKIN_DEPENDS geometry_msgs roscpp rospy std_msgs turtlesim message_runtime
#  DEPENDS system_lib
)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)

编译

cd ~/catkin_ws
catkin_make
source devel/setup.bash

运行

roscore
rosrun learning_topic person_publisher
rosrun learning_topic person_subscriber
  • Python
    person_publisher.py
#!/usr/bin/pythonimport rospy
from learning_topic.msg import Persondef person_publisher():rospy.init_node("person_publisher",anonymous=True)person_info_pub=rospy.Publisher('/person_info',Person,queue_size=10)rate=rospy.Rate(1)person_msg=Person()person_msg.name="Tom"person_msg.age=10person_msg.sex=Person.male;while not rospy.is_shutdown():person_info_pub.publish(person_msg)rospy.loginfo("Publish person info[%s, %d, %d]",person_msg.name,person_msg.age,person_msg.sex)rate.sleep()if __name__=='__main__':try:person_publisher()except rospy.ROSInterruptException():pass

person_subscriber.py

#!/usr/bin/python
import rospy
from learning_topic.msg import Persondef personInfoCallback(msg):rospy.loginfo("Subscribe person info[%s, %d, %d]",msg.name,msg.age,msg.sex)def person_subscriber():rospy.init_node("person_subscriber",anonymous=True)rospy.Subscriber("/person_info",Person,personInfoCallback)rospy.spin()if __name__=='__main__':person_subscriber()

运行(注意需要增加执行权限)

roscore
rosrun learning_topic person_publisher.py
rosrun learning_topic person_subscriber.py

古月居 ROS入门21讲 第十二讲 话题消息的定义与使用相关推荐

  1. 古月居 ROS 入门21讲--PA16 参数的使用与编程方法

    古月居 ROS 入门21讲--PA16 参数的使用与编程方法 1.参数模型 2.创建功能包 cd ~/catkin_ws/src catkin_create_pkg learning_paramete ...

  2. 古月居 ROS 入门21讲--PA18 tf坐标系广播与监听的编程实现笔记

    古月居 ROS 入门21讲--PA18 tf坐标系广播与监听的编程实现 1.创建功能包 cd ~/catkin_ws/src catkin_create_pkg learning_tf roscpp ...

  3. 古月居 ROS 入门21讲--PA17 ROS中坐标系管理系统笔记

    古月居 ROS 入门21讲--PA17 ROS中坐标系管理系统笔记 1.TF 功能包功能 ∙ \bullet ∙ 五秒钟之前,机器人头部坐标系相当于全局坐标系的关系是怎样的? ∙ \bullet ∙机 ...

  4. 古月居ROS入门21讲学习笔记P9

    古月居ROS入门21讲学习笔记P9 工作空间(workspace) 创建工作空间 创建功能包 实操 创建工作空间 创建功能包 老师在B站的原视频 链接: [古月居]古月·ROS入门21讲 | 一学就会 ...

  5. 古月居ROS入门21讲——9.创建工作空间与功能包

    1.工作空间 工作空间(workspace)直观的形容就是一个仓库,里面装载着ROS的各种项目工程,便于系统组织管理调用. src/: 源代码包 build/: 编译生成的中间文件 devel/: 开 ...

  6. 古月居ROS入门21讲-编程基础(1)

    视频链接:bilibili 搜 古月居 源代码:关注古月居公众号,回复ROS入门21讲 文章目录 1 创建工作空间和功能包 1.1 工作空间 1.2 功能包 2 发布者Publisher的编程实现 2 ...

  7. 古月居ROS入门21讲笔记

    ROS入门21讲笔记--古月居 1 C++&Python极简基础 1.1 安装编译/解析器 1.2 for循环 1.3 while循环 1.4 面向对象 2. ROS基础 2.1 ROS概念 ...

  8. 古月居ROS入门21讲-launch文件

    视频链接:bilibili 搜 古月居 源代码:关注古月居公众号,回复ROS入门21讲 文章目录 1 launch文件语法 2 launch 示例 launch文集:通过XML文件实现多个节点的配置和 ...

  9. 古月居ROS入门21讲-坐标系管理

    视频链接:bilibili 搜 古月居 源代码:关注古月居公众号,回复ROS入门21讲 文章目录 1 TF坐标变换 1.1 常用工具 2 tf坐标系广播与监听的编程实现 2.1 创建功能包 2.2 创 ...

最新文章

  1. Linux上jdk的安装
  2. Git 技术篇 - 本地Git绑定GitHub实现代码云寄存实例演示
  3. 异常:由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值...
  4. 为你的电脑系统清除淤塞的垃圾!(不用任何软件,超过优化大师)
  5. Android通过广播实现强制下线功能
  6. 开源开放 | 欢迎选修浙江大学《知识图谱》开放共享慕课
  7. 数据库学习之MySQL安装
  8. 如何在Wireshark确定数据集?
  9. c语言实现万年历程序带节日,【C】万年历
  10. docker 中运行 mysql
  11. vivo X27发布日期官宣: 3月19日 三亚见!
  12. iphone 开发安装环境
  13. 侧栏广告 image flash
  14. jQuery实现表头固定效果
  15. 洛谷 P2804 神秘数字
  16. 【从线性回归到BP神经网络】第四部分:BP神经网络
  17. 基于Android平台的x264的移植与应用(一):移植篇
  18. 对于神经网络学习 Maxwell 方程的思考——泛化能力
  19. QT中实现二维码图片生成
  20. 打破微信扫码进群限制,我用webot社群助手是怎么办到的?

热门文章

  1. COMPUTER VISION FOR COVID-19 CONTROL: A SURVEY
  2. js生成唯一标识ID
  3. VRML程序设计及应用
  4. Quick Reference编程代码速查表
  5. 【My First Blog】评近期国产烂片-《何以笙箫默》
  6. 英特尔进军晶圆代工,台积电“危”?
  7. studio的快捷键(全面)
  8. 语音信号处理(DSP)论文优选 :提取音频pitch方法对比Performance Analysis of Several Pitch Detection Algorithms
  9. 100行实现《贪吃蛇》小游戏详解(Qt)
  10. Python 全栈系列212 APIFunc 标准工作镜像