目录

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相关推荐

  1. 13.ROS编程学习:话题发布控制乌龟

    目录 准备工作 c++控制乌龟运动 python控制乌龟运动 参考学习资料:赵虚左的课程+古月的ROS机器人开发实践P56的例程. 准备工作 打开ROS乌龟仿真器 roscore rosrun tur ...

  2. 12.ROS编程学习:ROS常用指令

    目录 rosnode 1.rosnode list--list active nodes 2.rosnode ping--test connectivity to node 3.rosnode inf ...

  3. 编程学习笔记之python深入之装饰器案例及说明文档[图]

    编程学习笔记之python深入之装饰器案例及说明文档[图] 装饰器即在不对一个函数体进行任何修改,以及不改变整体的原本意思的情况下,增加函数功能的新函数,因为这个新函数对旧函数进行了装饰,所以称为装饰 ...

  4. 7.ROS编程学习:自定义服务数据c++调用

    目录 一.准备工作--配置vscode 二.服务端创建 1.创建文件demo01_server.cpp 2.服务端的CMakeList.txt配置 3.测试服务端 三.客户端实现 1.创建domo01 ...

  5. ROS wiki系列|通过ROS wiki-tutorials学习话题

    上一期指路:ROS wiki系列|通过ROS wiki-tutorials学习节点 这一期我们就用ROS wiki中的tutorials来学习ROS中另外一个重要的概念:topic--话题 在前面讲解 ...

  6. Python编程学习第一篇——Python零基础快速入门(三)——10行代码画朵花

    上一节讲了一些Python编程的一些基础知识,从这节开始,我们将跟随一些实际的小程序示例,进入正式的编程学习.       下面我们就来介绍一下今天这个只有10行代码的小程序,先来看一下它的运行效果, ...

  7. 1.ROS编程学习:helloworld的c++与python实现

    目录 一.c++实现 1.创建工作空间 3.CMakeLists.txt配置 4.catkin_make编译 5.source一下,配置环境变量 6.roscore+rosrun 二.python实现 ...

  8. 医学生的编程学习:R Python— — 前言

    是否值得掌握一门编程? 这是个数据大爆炸的时代,开源的骑士精神总是不断被提及:这也是个焦虑的时代,知识在网络唾手可及的便利让大家时刻害怕被互联网抛弃.IT成了这个时代的弄潮儿,并渗透到了各个行业,交叉 ...

  9. 【知识分享】儿童编程学习规划(Scratch/Python/C++)

    1. 简述 1.1 背景   根据目前国内编程教育体制来讲,最适合中国青少儿学习的是Scratch.Python以及C++.   a. 初级阶段Scratch: 图形化的编程工具,适合零基础入门,可以 ...

最新文章

  1. 自主数据类型:在TVM中启用自定义数据类型探索
  2. 免费使用《Autorun病毒防御者》
  3. 聊聊storm的LoggingClusterMetricsConsumer
  4. RotateAnimation 实现表盘指针转动
  5. kmeans算法_实战 | KMeans 聚类算法
  6. LeetCode之Sum of Left Leaves
  7. 图片操作案例:python 批量更改图像尺寸到统一大小的方法
  8. java中date类型如何赋值_Java 中的类型传递问题解惑
  9. Sophos 和 ReversingLabs 公开含2000万个 PE 文件的数据集
  10. 使用 Sharding-Jdbc 实现分库分表、读写分离(未完待续)
  11. 如何在SharePointDesigner订制页面里判断用户权限
  12. 遗传算法的手工模拟计算示例(通俗易懂)(包含遗传算法原理、遗传算法代码)
  13. 强烈推荐!Python 这个宝藏库 re 正则匹配
  14. AI房产户型图识别3DRender
  15. Java2022面试题集锦
  16. 计算机转换汉子英语,电脑打字英文怎么转换中文
  17. Spring Boot实训开发个人博客4
  18. 《代码大全》读书笔记
  19. 程序员跳槽和面试,猎头不会告诉你的那些事儿
  20. 笔记本win7做wifi热点

热门文章

  1. 云应用百宝云交互界面专题分析
  2. 智能车辆管理系统一站式开发
  3. c 语言 uint8 转char,关于c ++:将uint8_t *更改为char *?
  4. [转载]线性规划问题和Matlab函数linprog的使用
  5. 第23章_Tomcat和JavaEE入门
  6. Matlab/simulink仿真,直驱永磁风机并网低电压穿越 直驱风力发电系统MATLAB仿真模型
  7. java流程图中不包含的图形有_Smart图形不包括下面的______。A.图表B.流程图C.循环图D.层次结构图...
  8. java线程面试题2019最新整理
  9. 《万王之王3》主题歌歌词有奖大征集
  10. Ubuntu修改系统时钟与硬件时钟,以及时钟同步