Skip to content

Topic 发布者编程

视频地址

概要:

完成发布者的编程,是机器人的灯带点亮

正文:

本文使用ROS编程以话题的方式是机器人的灯带被点亮

1.去ROS WIKI里复制发布者的模板改为点亮灯带的发布者

提示

Python有严格的空格,请直接取掉行号直接复制到创建好的talker.py中:

python
#!/usr/bin/env python
# license removed for brevity
import rospy
from std_msgs.msg import String

def talker():
    pub = rospy.Publisher('chatter', String, queue_size=10)
    rospy.init_node('talker', anonymous=True)
    rate = rospy.Rate(10) # 10hz
        while not rospy.is_shutdown():
            hello_str = "hello world %s" % rospy.get_time()
            rospy.loginfo(hello_str)
            pub.publish(hello_str)
            rate.sleep()

if __name__ == '__main__':
    try:
        talker()
    except rospy.ROSInterruptException:
        pass

启动小车,成功连接MINI,运行

shell
roslaunch tianbot_mini bringup.launch

在talker.py对应的文件夹内打开终端输入

shell
python talker.py

观察 rostopic list

多了一个叫/chatter的话题

观察话题内容,运行

shell
rostopic echo /chatter

运行之后,在终端下发送hello world ,同时将hello world发送到一个叫chatter的话题里,发送的消息是什么内容,是什么类型呢?

rostopic list -v 看到所有被发布的话题和被订阅的话题

Chatter[std_msgs/String] ,括号里的是消息类型

具体内容是hello world

控制机器人led灯的话题是subscribed topics的最后一个/tianbot_mini/led

消息类型[std_msgs/colorRGBA]

内容是是什么呢?

使用我们上节课的rostopic pub就可以

shell
rostopic pub /tianbot_mini/led std_msg

此处一直使用Tab键补齐

此时我们把talker.py里面对应话题/chatter 的话题名、消息类型、消息内容改为/tianbot_mini/led对应的的就可以点灯了

python
#!/usr/bin/env python
# license removed for brevity
import rospy
from std_msgs.msg import ColorRGBA

def talker():
    pub = rospy.Publisher('tianbot_mini/led', ColorRGBA, queue_size=10)
    rospy.init_node('talker', anonymous=True)
    rate = rospy.Rate(10) # 10hz
        while not rospy.is_shutdown():
            hello_str = ColorRGBA
            hello_str.r = 0
            hello_str.g = 0
            hello_str.b = 64
            hello_str.a = 10
            rospy.loginfo()
            pub.publish()
            rate.sleep()

if __name__ == '__main__':
    try:
        talker()
    except rospy.ROSInterruptException:
        pass

2.ROS编程基础三要素

  • 话题名chatter改为tianbot_mini/led, 话题发消息
  • 把所有的string全部变为ColorRGBA ,话题消息类型
  • 消息内容hello world改为RGBA的对象 ,消息内容