< >
Home » ROS与Python入门教程 » ROS与Python入门教程-发布信息

ROS与Python入门教程-发布信息

ROS与Python入门教程-发布信息

说明

  • 这一节介绍更多关于发布信息的高级功能

方法

  • 简化书写,如:
pub.publish(String(str))
  • 可变更为:
 pub.publish(str)
  • rospy已经知道你使用std_msgs.msg.String,会自动帮你实例化这个类

  • 如果消息有多个参数的,你必需按在.msg文件定义的顺序来指定。例如:std_msgs/ColorRGBA

$ rosmsg show std_msgs/ColorRGBA
float32 r
float32 g
float32 b
float32 a
  • 如下代码会依次初始化r g b 和a作为参数
pub.publish(0.1, 0.2, 0.3, 0.4)
  • 这样很方便,但是也很脆弱,如果增加ColorRGBA字段,就需要找到所有相关的python代码,重新更改,增加参数。
  • 幸运的是,有一个更强大的方式指定字段和你忽略任何字段(忽略的字段,分配默认值)。你只需使用Python关键字参数来指定您希望分配字段。其余的是分配的默认值(数值为零,数组的空列表,字符串的空字符串):
pub.publish(a=1.0)
  • 上面代码发布一个ColorRGBA消息,设置a=1.0,其他 (r, g, b)都指定为0.

编写talker_color节点

  • 在beginner_tutorials/scripts目录,talker_color.py节点
$ roscd beginner_tutorials/scripts
$ touch talker_color.py
$ chmod +x talker_color.py
$ rosed beginner_tutorials talker_color.py
  • 手工输入如下代码:
#!/usr/bin/env python

import rospy
from std_msgs.msg import ColorRGBA
def talker():
    #pub = rospy.Publisher('chatter', String)
    pub = rospy.Publisher('chatter_color', ColorRGBA)
    rospy.init_node('talker_color')
    while not rospy.is_shutdown():
        pub.publish(a=1.0)
        rospy.sleep(1.0)
if __name__ == '__main__':
    try:
        talker()
    except rospy.ROSInterruptException: pass

编写listener_color节点

  • 在beginner_tutorials/scripts目录,listener_color.py节点
$ roscd beginner_tutorials/scripts
$ touch listener_color.py
$ chmod +x listener_color.py
$ rosed beginner_tutorials listener_color.py
  • 手工输入如下代码:
#!/usr/bin/env python

import rospy
from std_msgs.msg import ColorRGBA
def callback(data):
    rospy.loginfo(rospy.get_name()+ "I heard r=%s g=%s b=%s a=%s", data.r, data.g, data.b, data.a)

def listener():
    rospy.init_node('listener_color', anonymous=True)
    rospy.Subscriber("chatter_color", ColorRGBA, callback)
    rospy.spin()

if __name__ == '__main__':
    listener()

测试

  • 新打开终端,启动roscore
$ roscore 
  • 新打开终端,启动talker_color.py
$rosrun beginner_tutorials  talker_color.py
  • 新打开终端,启动listener_color.py
$rosrun beginner_tutorials  listener_color.py

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: ros与python入门教程