ROS系统用python创建发布者与订阅者,并发布自定义话题消息
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.angle、laneline_msg.delta_x成功被订阅者收到。
ROS系统用python创建发布者与订阅者,并发布自定义话题消息相关推荐
- ros系统支持java_创建一个rosjava package 并测试发布和接受消息
一.rosjava package 结构和解析 Rosjava 主要是提供了客户端(如:android)与ros系统(如:turtlebot)通信的库,主要应用于android等java平台客户端开发 ...
- ROS系统 用Python或C++实现发布者Publisher
话题编程流程 创建发布者 创建订阅者 添加编译选项 运行可执行程序 首先需要创建一个工作空间,然后再创建功能包 创建工作空间步骤:https://blog.csdn.net/qq_44989881/a ...
- ros如何编译python文件_Python为ROS编写一个简单的发布者和订阅者
Python为ROS编写一个简单的发布者和订阅者 1.创建工作空间 1.1建立文件夹hello_rospy,再在该目录下建立子目录src,并创建工作空间 mkdir -p ~/hello_rospy/ ...
- ROS学习(四)发布者与订阅者
目录 一.发布者与订阅者通讯关系 二.发布者 1.一般创建步骤 2.配置CMakeLists.txt中的编译规则 3.编译 4.设置环境变量 5.运行发布者 三.订阅者 1一般创建步骤 2.在CMak ...
- 【ROS话题通信】发布者和订阅者
前言 本文记录ROS话题通信的学习过程,便于后续复习.首先明确,ROS中的话题通信,在ROS通信中非常重要,实现了分布式发布接收消息,也是实现了不同编程语言间的解耦,下面记录下自己学习过程中的相关代码 ...
- ROS系统 C++或Python实现话题消息的定义与使用
如何自定义话题消息 定义msg文件 在package.xml中添加功能包依赖 在CMakeLists.txt添加编译选项 编译生成语言相关文件 创建 msg 文件 cd ~/catkin_ws/src ...
- 【一学就会的ROS基础入门教程 】03-1 ROS基础编程:ROS工作空间的创建、话题topic的发布与接收、以及话题消息的自定义使用
[一学就会的ROS基础入门教程 ]03-1 ROS基础编程:ROS工作空间的创建.话题topic的发布与接收.以及话题消息的自定义使用 文前白话 1.创建工作空间与功能包 关于工作空间的介绍 创建开发 ...
- ROS入门-10.话题消息的定义与使用
不论是给海龟发布速度指令的Twist消息还是去订阅海龟位置的pose消息,二者都是已经在ros里定义好的可以直接使用的:而当ros定义好的消息没有办法满足我们使用要求,便需要自己来定义所使用的消息的类 ...
- ROS 创建msg和srv 编写发布者和订阅者节点 编写服务端和客户端节点(python版本)
ROS 创建msg和srv 编写发布者和订阅者节点 编写服务端和客户端节点-python版本 rosed msg和srv 创建msg 使用rosmsg 创建srv 使用rossrv 重新make一下软 ...
最新文章
- MutationObserver 监听DOM树变化
- 【机器学习】集成模型方法
- php生成对象吗,php生成器对象
- 避免在循环体中声明创建对象
- 出口同比中国经济三大怪状折射出啥危机?
- 机器学习:支持向量机SVM和人工神经网络ANN的比较
- 百度AI开发者大会百度大脑论坛:详解“多模态深度语义理解”
- 2018 我所了解的 Vue 知识大全(一)
- 可遇不可求的Question之error: Failed dependencies: MySQLconflicts 错误篇
- vmware+player+12+linux,Vmware player 12
- NYOJ 取石子总结
- hadoop 编程规范(hadoop专利分析)
- java计算某天到当前时间的间隔天数
- 福昕阅读器注册无法连接服务器,福昕pdf阅读器 10安装使用教程(附注册机)
- Shaderlab 玻璃效果
- 比官方更简洁的Tensorflow入门教程
- 2012年华为杯校园编程大赛决赛 类别:软件C/C++语言
- 2022-2028全球与中国汽车软内饰材料市场现状及未来发展趋势
- 【ITPM】TW1:ISchool 项目前期分析说明书
- 本地HTML访问REST服务的实现
热门文章
- 解决Android闪退的坑
- MOCKINGJAY: UNSUPERVISED SPEECH REPRESENTATION LEARNING WITH DEEP BIDIRECTIONAL TRANSFORMER ENCODERS
- 【机器学习】集成学习(理论)
- 实验三 FFT及其在卷积计算和谱分析中的应用
- HTML5期末大作业:电商网站设计——粉色的鲜花礼品电商(4页) HTML+CSS+JavaScript 学生网上商城网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码
- AcWing 1351. 密码锁(枚举,容斥原理)
- IPv6设置及使用方法
- [游戏开发][渲染篇][第一篇]渲染的本质
- 2021车中国车联网行业发展环境(PEST)分析:政策加持下,车联网市场持续爆发[图]
- 三菱PLC的配置连接过程