ROS系统用python创建发布者与订阅者,并发布自定义话题消息

最近使用pythonros进行ROS系统开发,发现用python开发的教程挺少的,所以记录一下,废话不多说,开始教程:

一、创建工作空间

$ mkdir catkin_ws
$ cd catkin_ws/
$ mkdir src
$ cd src/
$ catkin_init_workspace  #初始化工作空间
$ cd ..   #回到根目录
$ catkin_make #编译工作空间

二、创建功能包

$ catkin_create_ws/src   #在catkin_ws/src目录下创建
$ catkin_create_pkg <文件名> + <依赖包> 这里我使用的是roscpp rospy std_msgs geometry_msgs

所以完整的命令是:

$ catkin_create_pkg laneline roscpp rospy std_msgs geometry_msgs

为了将c++代码与python分开,我在新建的laneline功能包里创建了一个scripts文件夹用来存放
python版本的文件

$ mkdir scripts

三、定义话题消息

1、首先我们要先创建一个msg文件夹再,创建一个msg文件:定义一下功能包想要输出的变量

int8  angle
int8  delta_x

编译之后会自动生成为.msg

四、创建发布者和订阅者代码

发布者 laneline_publisher.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 该例程将发布/laneline_info话题,自定义消息类型laneline_publisher::lanelineimport rospy
from laneline.msg import lanelinedef laneline_publisher():# ROS节点初始化rospy.init_node('laneline_publisher', anonymous=True)# 创建一个Publisher,发布名为/laneline_info的topic,消息类型为laneline_publisher::laneline,队列长度10laneline_info_pub = rospy.Publisher('/laneline_info', laneline, queue_size=10)#设置循环的频率rate = rospy.Rate(10) while not rospy.is_shutdown():# 初始化laneline_publisher::laneline类型的消息laneline_msg = laneline()laneline_msg.angle = -30;laneline_msg.delta_x  = 18;# 发布消息laneline_info_pub.publish(laneline_msg)rospy.loginfo("Publish laneline message[%d, %d]", laneline_msg.angle, laneline_msg.delta_x)# 按照循环频率延时rate.sleep()if __name__ == '__main__':try:laneline_publisher()except rospy.ROSInterruptException:pass

订阅者 laneline_subscriber.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 该例程将订阅/laneline_info话题,自定义消息类型laneline_publisher::lanelineimport rospy
from laneline.msg import lanelinedef lanelineInfoCallback(msg):rospy.loginfo("Subcribe laneline Info: angle:%d  delta_x:%d", msg.angle, msg.delta_x)def laneline_subscriber():# ROS节点初始化rospy.init_node('laneline_subscriber', anonymous=True)# 创建一个Subscriber,订阅名为/laneline_info的topic,注册回调函数lanelineInfoCallbackrospy.Subscriber("/laneline_info", laneline, lanelineInfoCallback)# 循环等待回调函数rospy.spin()if __name__ == '__main__':laneline_subscriber()

五、在package.xml添加功能包依赖并修改Cmakelists.txt文件

1、在生成的package.xml中主要添加这两行,一个编译依赖,一个执行依赖

2、与C++不同的是,使用python文件时,需要在Cmakelists.txt添加三个编译选项:
1)在find_package( )里面添加message_generation

2)添加生成message

3)添加catkin_package message_runtime

六、编译生成相关语言文件

回到根目录进行

$ cd ~/catkin_ws
$ catkin_make #编译

编译成功之后,打开终端,首先运行roscore

$ roscore

然后打开两个终端在laneline/srcipts里分别运行laneline_publisher.py与laneline_subscriber.py

$ python laneline_publisher.py
$ python laneline_subscriber.py

七、结果


发布者发出的laneline_msg.anglelaneline_msg.delta_x成功被订阅者收到。

ROS系统用python创建发布者与订阅者,并发布自定义话题消息相关推荐

  1. ros系统支持java_创建一个rosjava package 并测试发布和接受消息

    一.rosjava package 结构和解析 Rosjava 主要是提供了客户端(如:android)与ros系统(如:turtlebot)通信的库,主要应用于android等java平台客户端开发 ...

  2. ROS系统 用Python或C++实现发布者Publisher

    话题编程流程 创建发布者 创建订阅者 添加编译选项 运行可执行程序 首先需要创建一个工作空间,然后再创建功能包 创建工作空间步骤:https://blog.csdn.net/qq_44989881/a ...

  3. ros如何编译python文件_Python为ROS编写一个简单的发布者和订阅者

    Python为ROS编写一个简单的发布者和订阅者 1.创建工作空间 1.1建立文件夹hello_rospy,再在该目录下建立子目录src,并创建工作空间 mkdir -p ~/hello_rospy/ ...

  4. ROS学习(四)发布者与订阅者

    目录 一.发布者与订阅者通讯关系 二.发布者 1.一般创建步骤 2.配置CMakeLists.txt中的编译规则 3.编译 4.设置环境变量 5.运行发布者 三.订阅者 1一般创建步骤 2.在CMak ...

  5. 【ROS话题通信】发布者和订阅者

    前言 本文记录ROS话题通信的学习过程,便于后续复习.首先明确,ROS中的话题通信,在ROS通信中非常重要,实现了分布式发布接收消息,也是实现了不同编程语言间的解耦,下面记录下自己学习过程中的相关代码 ...

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

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

  7. 【一学就会的ROS基础入门教程 】03-1 ROS基础编程:ROS工作空间的创建、话题topic的发布与接收、以及话题消息的自定义使用

    [一学就会的ROS基础入门教程 ]03-1 ROS基础编程:ROS工作空间的创建.话题topic的发布与接收.以及话题消息的自定义使用 文前白话 1.创建工作空间与功能包 关于工作空间的介绍 创建开发 ...

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

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

  9. ROS 创建msg和srv 编写发布者和订阅者节点 编写服务端和客户端节点(python版本)

    ROS 创建msg和srv 编写发布者和订阅者节点 编写服务端和客户端节点-python版本 rosed msg和srv 创建msg 使用rosmsg 创建srv 使用rossrv 重新make一下软 ...

最新文章

  1. MutationObserver 监听DOM树变化
  2. 【机器学习】集成模型方法
  3. php生成对象吗,php生成器对象
  4. 避免在循环体中声明创建对象
  5. 出口同比中国经济三大怪状折射出啥危机?
  6. 机器学习:支持向量机SVM和人工神经网络ANN的比较
  7. 百度AI开发者大会百度大脑论坛:详解“多模态深度语义理解”
  8. 2018 我所了解的 Vue 知识大全(一)
  9. 可遇不可求的Question之error: Failed dependencies: MySQLconflicts 错误篇
  10. vmware+player+12+linux,Vmware player 12
  11. NYOJ 取石子总结
  12. hadoop 编程规范(hadoop专利分析)
  13. java计算某天到当前时间的间隔天数
  14. 福昕阅读器注册无法连接服务器,福昕pdf阅读器 10安装使用教程(附注册机)
  15. Shaderlab 玻璃效果
  16. 比官方更简洁的Tensorflow入门教程
  17. 2012年华为杯校园编程大赛决赛 类别:软件C/C++语言
  18. 2022-2028全球与中国汽车软内饰材料市场现状及未来发展趋势
  19. 【ITPM】TW1:ISchool 项目前期分析说明书
  20. 本地HTML访问REST服务的实现

热门文章

  1. 解决Android闪退的坑
  2. MOCKINGJAY: UNSUPERVISED SPEECH REPRESENTATION LEARNING WITH DEEP BIDIRECTIONAL TRANSFORMER ENCODERS
  3. 【机器学习】集成学习(理论)
  4. 实验三 FFT及其在卷积计算和谱分析中的应用
  5. HTML5期末大作业:电商网站设计——粉色的鲜花礼品电商(4页) HTML+CSS+JavaScript 学生网上商城网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码
  6. AcWing 1351. 密码锁(枚举,容斥原理)
  7. IPv6设置及使用方法
  8. [游戏开发][渲染篇][第一篇]渲染的本质
  9. 2021车中国车联网行业发展环境(PEST)分析:政策加持下,车联网市场持续爆发[图]
  10. 三菱PLC的配置连接过程