基于Python的ROS话题消息编程

1、进入工作空间,创建名为learning_topic的功能包

cd catkin_ws/src
catkin_create_pkg learning_topic std_msgs rospy roscpp

2、在功能包目录下创建msg文件夹用于存放Person.msg文件



Person.msg文件内容如下:

string name
uint8 sex
uint8 ageuint8 unkonw=0
uint8 male=1
uint8 female=2

3、在package.xml文件中添加功能包依赖

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

4、在CMakeLists.txt文件中添加编译选项

找到对应位置做如下修改



5、编译

cd ~/catkin_ws
catkin_make

6、编译成功之后在learning_topic包里创建文件夹scripts存放py文件


Person_publisher.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#该例程将发布/person_info话题,自定义消息类型learning_topic::Personimport rospy
from learning_topic.msg import Persondef velocity_publisher():#ROS节点初始化rospy.init_node('person_publisher',anonymous=True)#创建一个Publisher,发布名为/person_info的topic,消息类型为learning_topic::Person,队列长度为10person_info_pub=rospy.Publisher('/person_info',Person,queue_size=10)#设置循环频率rate=rospy.Rate(10)while not rospy.is_shutdown():#初始化learning_topic::Peson类型的消息person_msg=Person()person_msg.name="ZhangJian";person_msg.age=20;person_msg.sex=Person.male;#发布消息person_info_pub.publish(person_msg)rospy.loginfo("Publish person message[%s,%d,%d]",person_msg.name,person_msg.age,person_msg.sex)#按照循环频率延时rate.sleep()
if __name__ == '__main__':try:velocity_publisher()except rospy.ROSInteruptException:pass

Person_subscriber.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#该例程将订阅/person_info话题,自定义消息类型learning_topic::Personimport rospy
from learning_topic.msg import Persondef personInfoCallback(msg):rospy.loginfo("Subscribe Person Info: name:%s age:%d sex:%d",msg.name,msg.age,msg.sex)
def person_subscriber():#ROS节点初始化rospy.init_node('person_subscriber',anonymous=True)#创建一个Subscriber,订阅名为/person_info的topic,注册回调函数personInfoCallbackrospy.Subscriber("/person_info",Person,personInfoCallback)#循环等待回调函数rospy.spin()
if __name__ == '__main__':person_subscriber()

7、为py文件添加执行权限

chmod 777 person_publisher.py
chmod 777 person_subscriber.py

再次编译

catkin_make

8、运行程序

运行person_publisher.py

source ./devel/setup.bash
rosrun learning_topic person_publisher.py


运行person_subscriber.py

source ./devel/setup.bash
rosrun learning_topic person_subscriber.py


订阅者(subscriber)会收到打印发布者(publisher)发布的消息。

ROS学习记录:基于Python的ROS话题消息编程相关推荐

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

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

  2. ros学习(2-2):ros节点创建(python)

    参考 Python创建简单的ROS节点: 用Python实现ROS节点(这里也说明了用Python写ROS功能包也是需要CMakelists.txt的) https://blog.csdn.net/s ...

  3. ROS学习记录 | 便于回顾

    ROS学习记录 | 便于回顾 ROS环境搭建 ROS部分基础知识 ROS环境搭建 step1 创建工作空间目录结构 mkdir catkin_ws cd catkin_ws mkdir src cd ...

  4. ROS学习记录(二)阿克曼转向车运动学模型及在gazebo中搭建仿真环境

    前言:该篇是ROS学习记录的第二篇,如果还没关注过之前文章的读者,如有需要可以通过下方传送门去看之前的文章: ROS学习记录(一) Plugin插件 这两天关注了古月老师的公众号,看到了其中一篇课程推 ...

  5. ROS学习记录9——urdf文件的创建与使用

    零.前言 在学习这一节之前,至少得明白如何创建一个工作空间,如何编译工作空间,如何运行工作空间里的文件(把工作空间的环境目录添加到环境里).如果有不会的,请看鄙人的ROS学习记录3. 本节默认工作空间 ...

  6. ros学习记录:Gazebo加载速度慢,长时间停在“Preparing your world”

    前言 ros学习记录笔记,一个小白的自留地,欢迎大佬批评指正~ 一.问题描述 Gazebo加载速度慢,长时间停在"Preparing your world" 二.解决办法 1.下载 ...

  7. Webots+ROS学习记录(4)——六轮全地形移动机器人

    Webots+ROS学习记录(4)--六轮全地形移动机器人 有了以上经验,可以创造出一个全地形的移动机器人如图1 第一步,创建robot节点,并给robot节点编写相应参数 注意,这里的机身不能再使用 ...

  8. ros学习笔记12——python实现发布和接收ros topic

    ros学习笔记12--python实现发布和接收ros topic 一.简单demo 1.工作空间是存放工程开发的相关文件的文件夹 2.创作工作空间指令 3 .创建功能包 4. 创建Topic的订阅发 ...

  9. 【ROS学习记录】2021/7/2 Gazebo+rviz仿真(一)

    [ROS学习记录]2021/7/2 Gazebo+rviz进行turtlebot2仿真问题记录 ##小插曲 今天ubuntu挂载u盘一直读取失败所以做了一些令人窒息的操作,晚上开机就进入了initra ...

  10. ROS学习笔记四:理解ROS节点

    ROS学习笔记四:理解ROS节点 本节主要介绍ROS图形概念,讨论ROS命令行工具roscore.rosnode和rosrun. 要求 要求已经在Linux系统中安装一个学习用的ros软件包例子: s ...

最新文章

  1. 山沟沟里的实业路(3)
  2. 解决ubuntu无法修改分辨率为1920*1080问题
  3. linux c语言 readline,Linux C代码实现读取配置文件示例
  4. Tomcat connector 实现原理
  5. mmseg java_MMSeg中文分词算法
  6. WCF跨域 这可能是由于试图以跨域方式访问服务而又没有正确的跨域策略,或策略不适用于 SOAP...
  7. 【招聘(南京)】南京纳龙科技有限公司招高级.net开发工程师
  8. oracle acfs snap 恢复,删除ACFS系统碰到的问题
  9. Mysql批量更新的三种方式
  10. Java中选择排序,冒泡排序,插入排序,快速排序
  11. MOSFET(一):基础
  12. memcpy和strcpy的区别
  13. 数据挖掘与商业智能理论
  14. 操作系统实验四:C++实现独占设备的分配与回收算法模拟
  15. 2020 奇安信前端秋招笔试选择题
  16. 推荐20个neo4j实例?
  17. java.lang.NoClassDefFoundError: javax/activation/DataSource
  18. 线控转向 四轮转向控制 4WIS CarSim与Simulink联合
  19. vue elementui下载文件和使用vue-pdf展示pdf文件
  20. 数字化转型写书笔记-第43天

热门文章

  1. 魔兽争霸3地图(WarIII Maps):成神之路
  2. 如果你到了20岁,还没到25岁
  3. 37.go struct 结构
  4. 4.PHP的运行方式
  5. 11. jQuery - Chaining
  6. 17. JavaScript Math(算数)对象
  7. hpm1216nfh驱动程序_惠普M1216nfh驱动下载
  8. LoadRunner9 5新特性
  9. [2019杭电多校第四场][hdu6621]K-th Closest Distance(主席树)
  10. 软件性能中几个主要的术语