当前位置 博文首页 > txr152111的博客:13th 自定义msg的使用(Python实现)
和前面的C++一样:
编写发布订阅实现,要求发布方以1HZ(每秒1次)的频率发布自定义消息,订阅方订阅自定义消息并将消息内容打印输出。
流程:
在scripts目录下新建一个.py文件:
?内容:
#!/usr/bin/env python
# -*- coding:UTF-8 -*-
import rospy
from plumbing_pub_sub.msg import Person
from rospy.timer import Rate
"""
发布方:发布人的消息
1.导包
2.初始化ros节点
3.创建发布者对象
4.组织发布逻辑,并发布数据
"""
if __name__ == "__main__":
# 2.初始化ros节点
rospy.init_node("daMa")
# 3.创建发布者对象
pub=rospy.Publisher("LiaoTian",Person,queue_size=10)
# 4.组织发布逻辑,并发布数据
#4.1创建Person数据
p = Person()
p.name ="奥特曼"
p.age = 8
p.height = 1.85
#4.2创建Rate对象
rate = rospy.Rate(1)
while not rospy.is_shutdown():
pub.publish(p)
rospy.loginfo("发布的消息:%s,%d,%.2f",p.name,p.age,p.height)
rate.sleep()
#4.3循环发布
添加权限:
chmod +x *.py
配置CMakeList.txt文件:
新建文件:
文件内容:
#!/usr/bin/env python
# -*- coding:UTF-8 -*-
import rospy
from plumbing_pub_sub.msg import Person
def doPerson(p):
rospy.loginfo("订阅到的数据:%s,%d,%.2f",p.name,p.age,p.height)
"""
订阅方:订阅人的消息
1.导包
2.初始化ros节点
3.创建订阅者对象
4.处理订阅数据
5.spin()
"""
if __name__ == "__main__":
rospy.init_node("daYe")
sub = rospy.Subscriber("LiaoTian",Person,doPerson)
rospy.spin()
?添加权限:
?配置Cmakelist.txt文件:
测试:
先启动订阅方:
再启动发布方:
?查看订阅方: