3.ROS编程学习:话题通信python
目录
1.建立scripts文件夹与python文件
2.发布者实现
3.订阅者实现
4.CMakeList.txt配置
5.添加可执行权限
6.运行roscore+rosrun
7.计算图
8.注意的点
1.建立scripts文件夹与python文件
首先在之间建立的功能包中创建scripts文件夹,在文件夹下建立pub_p.py与sub_p.py
2.发布者实现
pub_p.py
#! /usr/bin/env python
# -*- coding: UTF-8 -*-import rospy
from std_msgs.msg import Stringif __name__ == "__main__":rospy.init_node("pub_py") pub = rospy.Publisher ("chongfu_py", String, queue_size=10)msg = String()rate = rospy.Rate(1)count = 0rospy.sleep(3)while not rospy.is_shutdown():count += 1msg.data = "hello" + str(count)pub.publish(msg)rospy.loginfo("发布数据:%s", msg.data)rate.sleep()
声明python版本和编码格式,UTF-8有中文,如果不加这个声明,默认ASCII码,会报错。
#! /usr/bin/env python
# -*- coding: UTF-8 -*-
导入模块
import rospy
from std_msgs.msg import String
导入之前配置功能包依赖(库):rospy库和标准消息库
if __name__ == "__main__":
这个语句下,只有本py文件作为脚本运行才运行,调用的情况不会运行。
rospy.init_node("pub_py")
ros::init(argc,argv,"publisher");ros::NodeHandle n;
与roscpp在创建并初始化节点后,无须再创建句柄,因为再c++下创建发布者需要用到创建的句柄。
msg = String()
调用字符串类,将来输出字符串消息。
rate = rospy.Rate(1)
rate.sleep()
设置循环的频率,循环中的sleep,按照循环的频率进行延时。
count = 0
count += 1
添加计数器,每次循环加1
msg.data = "hello" + str(count)
强制类型转换,并拼接字符串。
pub.publish(msg)
发布者发布消息。可以通过rostopic echo 话题名,查询。
rospy.loginfo("发布数据:%s", msg.data)
在控制台输出,可以在终端看到输出。
配置CMakeList.txt
catkin_install_python(PROGRAMSscripts/pub_p.pyDESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
找到,取消注释,加入文件路径。
3.订阅者实现
sub_p.py
#! /usr/bin/env python
# -*- coding: UTF-8 -*-import rospy
from std_msgs.msg import Stringdef huidiao(msgg):rospy.loginfo("订阅的数据:%s", msgg.data)if __name__ == "__main__":rospy.init_node("sub_py") sub = rospy.Subscriber(name = "chongfu_py", data_class= String, callback = huidiao, queue_size = 1000)rospy.spin()
import rospy
from std_msgs.msg import String
导入rospy库和标准消息库。
def huidiao(msgg):rospy.loginfo("订阅的数据:%s", msgg.data)
其中msgg接收的实参就是发布者发布的话题消息。
if __name__ == "__main__":rospy.init_node("sub_py") sub = rospy.Subscriber(name = "chongfu_py", data_class= String, callback = huidiao, queue_size = 1000)rospy.spin()
创建并初始化sub_py节点。
创建订阅者, 与c++相同,话题名称必须与发布者相同,数据类型为字符串,回调函数为前面定义的回调函数名,消息储存队列为1000个。
spin不停的回头,与回调函数相配合,不停的订阅消息,然后通过回调函数体中的loginfo在控制台输出。
4.CMakeList.txt配置
catkin_install_python(PROGRAMSscripts/pub_p.pyDESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
catkin_install_python(PROGRAMSscripts/sub_p.pyDESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
5.添加可执行权限
进入scripts文件夹,打开终端
chmod +x *.py
6.运行roscore+rosrun
7.计算图
rqt_graph
8.注意的点
(1)报错
SyntaxError: Non-ASCII character '\xe5' in file /home/rosmelodic/catkin_ws/src/sub_pub/scripts/pub_p.py on line 18, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
解决,程序开头加:
# -*- coding: UTF-8 -*-
(2)给py文件添加可执行权限
chmod +x *.py
给一个文件夹下所有py文件加可执行权限。
ll
查询可执行权限。
(3)显示话题发布的数据
rostopic echo 话题名
在没有编写控制台打印的代码时,可以通过这条命令看话题发布是否正常运行,正常运行后,详细编写话题内容。
(4)由于发布者有注册时间导致消息开始有一部分丢失
在创建发布者后,发布消息前,加入
rospy.sleep(3)
休眠3秒,等待发布者注册成功在发布消息。
3.ROS编程学习:话题通信python相关推荐
- 13.ROS编程学习:话题发布控制乌龟
目录 准备工作 c++控制乌龟运动 python控制乌龟运动 参考学习资料:赵虚左的课程+古月的ROS机器人开发实践P56的例程. 准备工作 打开ROS乌龟仿真器 roscore rosrun tur ...
- 12.ROS编程学习:ROS常用指令
目录 rosnode 1.rosnode list--list active nodes 2.rosnode ping--test connectivity to node 3.rosnode inf ...
- 编程学习笔记之python深入之装饰器案例及说明文档[图]
编程学习笔记之python深入之装饰器案例及说明文档[图] 装饰器即在不对一个函数体进行任何修改,以及不改变整体的原本意思的情况下,增加函数功能的新函数,因为这个新函数对旧函数进行了装饰,所以称为装饰 ...
- 7.ROS编程学习:自定义服务数据c++调用
目录 一.准备工作--配置vscode 二.服务端创建 1.创建文件demo01_server.cpp 2.服务端的CMakeList.txt配置 3.测试服务端 三.客户端实现 1.创建domo01 ...
- ROS wiki系列|通过ROS wiki-tutorials学习话题
上一期指路:ROS wiki系列|通过ROS wiki-tutorials学习节点 这一期我们就用ROS wiki中的tutorials来学习ROS中另外一个重要的概念:topic--话题 在前面讲解 ...
- Python编程学习第一篇——Python零基础快速入门(三)——10行代码画朵花
上一节讲了一些Python编程的一些基础知识,从这节开始,我们将跟随一些实际的小程序示例,进入正式的编程学习. 下面我们就来介绍一下今天这个只有10行代码的小程序,先来看一下它的运行效果, ...
- 1.ROS编程学习:helloworld的c++与python实现
目录 一.c++实现 1.创建工作空间 3.CMakeLists.txt配置 4.catkin_make编译 5.source一下,配置环境变量 6.roscore+rosrun 二.python实现 ...
- 医学生的编程学习:R Python— — 前言
是否值得掌握一门编程? 这是个数据大爆炸的时代,开源的骑士精神总是不断被提及:这也是个焦虑的时代,知识在网络唾手可及的便利让大家时刻害怕被互联网抛弃.IT成了这个时代的弄潮儿,并渗透到了各个行业,交叉 ...
- 【知识分享】儿童编程学习规划(Scratch/Python/C++)
1. 简述 1.1 背景 根据目前国内编程教育体制来讲,最适合中国青少儿学习的是Scratch.Python以及C++. a. 初级阶段Scratch: 图形化的编程工具,适合零基础入门,可以 ...
最新文章
- 自主数据类型:在TVM中启用自定义数据类型探索
- 免费使用《Autorun病毒防御者》
- 聊聊storm的LoggingClusterMetricsConsumer
- RotateAnimation 实现表盘指针转动
- kmeans算法_实战 | KMeans 聚类算法
- LeetCode之Sum of Left Leaves
- 图片操作案例:python 批量更改图像尺寸到统一大小的方法
- java中date类型如何赋值_Java 中的类型传递问题解惑
- Sophos 和 ReversingLabs 公开含2000万个 PE 文件的数据集
- 使用 Sharding-Jdbc 实现分库分表、读写分离(未完待续)
- 如何在SharePointDesigner订制页面里判断用户权限
- 遗传算法的手工模拟计算示例(通俗易懂)(包含遗传算法原理、遗传算法代码)
- 强烈推荐!Python 这个宝藏库 re 正则匹配
- AI房产户型图识别3DRender
- Java2022面试题集锦
- 计算机转换汉子英语,电脑打字英文怎么转换中文
- Spring Boot实训开发个人博客4
- 《代码大全》读书笔记
- 程序员跳槽和面试,猎头不会告诉你的那些事儿
- 笔记本win7做wifi热点
热门文章
- 云应用百宝云交互界面专题分析
- 智能车辆管理系统一站式开发
- c 语言 uint8 转char,关于c ++:将uint8_t *更改为char *?
- [转载]线性规划问题和Matlab函数linprog的使用
- 第23章_Tomcat和JavaEE入门
- Matlab/simulink仿真,直驱永磁风机并网低电压穿越 直驱风力发电系统MATLAB仿真模型
- java流程图中不包含的图形有_Smart图形不包括下面的______。A.图表B.流程图C.循环图D.层次结构图...
- java线程面试题2019最新整理
- 《万王之王3》主题歌歌词有奖大征集
- Ubuntu修改系统时钟与硬件时钟,以及时钟同步