小提示:
1.python中对齐要求的很严格,对齐逻辑一定要注意!!
Python 提示‘Unindent amount does not match previous indent‘解决方法:
这是因为我们的代码中混用了空格键和TAB键 ,只需要将代码中的空位处全部统一为空格或者TAB即可!!!
2.py文本中有中文时,需要在上面添加“# -*- coding:UTF-8 -*-“
否则会报错:SyntaxError: Non-ASCII character '\xe5' in file
3.运行python文件需要添加可执行权限:
wood@wood:~/demoros_ws/src/plumbing_pub_sub/scripts$ chmod +x *.py
chmod +x *.py
1.发布者的实现
1.1 准备工作
新建文件夹和.py文件:
1.2 编写python代码
使用python来实现消息发布:
1.导包
2.初始化ros节点
3.创建发布者对象
4.编写发布逻辑并发布出去
基本框架的测试代码:
#!/usr/bin/env python
# -*- coding:UTF-8 -*-
import rospy
from std_msgs.msg import String #发布的消息的类型
"""
使用python来实现消息发布:
1.导包
2.初始化ros节点
3.创建发布者对象
4.编写发布逻辑并发布出去
"""
if __name__=="__main__":
# 2.初始化ros节点
rospy.init_node("SanDai") #直接传入节点的名称,比如叫三呆
# 3.创建发布者对象
pub = rospy.Publisher("Che",String,queue_size=10)
# 4.编写发布逻辑并发布出去
#创建数据
msg = String()
#使用循环
while not rospy.is_shutdown():
msg.data = "Hello"
pub.publish(msg)
1.3 添加可执行权限
在scripts路径下输入: chmod +x *.py (*.py是指对路径下所有的py文件添加可执行文件)
1.4 修改CMakeLists.txt文件
1.5 编译与运行
编译:Ctrl +Shift +B
运行:roscore
source ./devel/setup.bash
测试消息:Che为话题名 rostopic echo 话题
rostopic echo Che
1.6 添加发布逻辑
- 设置发布频率
- 加个发布的编号
- 发布日志输出
#!/usr/bin/env python
# -*- coding:UTF-8 -*-
from typing import Counter
import rospy
from std_msgs.msg import String #发布的消息的类型
"""
使用python来实现消息发布:
1.导包
2.初始化ros节点
3.创建发布者对象
4.编写发布逻辑并发布出去
"""
if __name__=="__main__":
# 2.初始化ros节点
rospy.init_node("SanDai") #直接传入节点的名称,比如叫三呆
# 3.创建发布者对象
pub = rospy.Publisher("Che",String,queue_size=10)
# 4.编写发布逻辑并发布出去
#创建数据
msg = String()
#指定发布频率
rate = rospy.Rate(1)
#设置计数器
count = 0
#使用循环
while not rospy.is_shutdown():
count+=1
msg.data = "Hello" + str(count)
rospy.loginfo("发布的数据是:%s",msg.data)
pub.publish(msg)
rate.sleep()
2. 订阅方的实现
2.1 准备工作
2.2 代码内容
#!/usr/bin/env python
# -*- coding:UTF-8 -*-
import rospy
from std_msgs.msg import String #订阅的消息的类型
"""
使用python来实现消息发布:
1.导包
2.初始化ros节点
3.创建订阅者对象
4.回调函数处理数据
5. spin()
"""
def doMsg(msg):
rospy.loginfo("我订阅的数据:%s",msg.data)
if __name__=="__main__":
# 2.初始化ros节点
rospy.init_node("HuaHua") #直接传入节点的名称,比如叫花花
# 3.创建订阅者对象
pub = rospy.Subscriber("Che",String,doMsg,queue_size=10)
# 4.回调函数处理
# 5.spin()
rospy.spin()
2.3 添加可执行权限
在scripts路径下输入: chmod +x *.py (*.py是指对路径下所有的py文件添加可执行文件)
2.4 编辑配置文件
3. 发布与订阅
编译:Ctrl +Shift +B
运行:
roscore
source ./devel/setup.bash
rosrun plumbing_pub_sub demo01_pub_p.py
source ./devel/setup.bash
rosrun plumbing_pub_sub demo02_sub_p.py
4. 注意事项
先启动订阅者,再启动发布者,从这两个图中发现,订阅者订阅到的缺少数据,第一行没了。
这是因为发布者需要先注册,在注册的时候可能就发布了一条。
解决办法:
在发布之前加入一个休眠:
5. 查看计算图
rqt_graph