ROS学习笔记(一)- 发布和订阅

学习一下ROS系统。

记录一下实现发布和订阅的详细步骤。

前提是ROS已经在ubuntu 18.04上安装好了。

cd ~
mkdir -p ros-learning/src
cd ros-learning
catkin_make
cd src
catkin_create_pkg lesson001 rospy#表示新建一个名为lesson001的包,依赖包是rospy
cd ..
catkin_make

再进入lesson001/src目录,新建talker.py和listener.py两个文件。

talker.py:

#!/usr/bin/env python

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(1) # 1hz
    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

listener.py:

#!/usr/bin/env python

import rospy
from std_msgs.msg import String

def callback(data):
    rospy.loginfo(rospy.get_caller_id() + " I heard %s", data.data)

def listener():
    rospy.init_node('listener', anonymous=True)
    rospy.Subscriber('chatter', String, callback)
    rospy.spin()

if __name__ == '__main__':
    listener()

talker.py和listener.py两个文件赋予执行权限:

chmod +x talker.py listener.py

再回退到ros-learning目录,然后:

catkin_make
source devel/setup.bash
roscore

打开新的命令行窗口,进入ros-learning目录,然后:

source devel/setup.bash
rosrun lesson001 talker.py

再打开新窗口,进入ros-learning目录,然后启动listener.py:

source devel/setup.bash
rosrun lesson001 listener.py

talker.py通过名为chatter的topic不停发布ros消息,listener.py同样通过chatter的topic不停的消费ros消息。

需要注意两点:

1,如果启动两个listener节点,那么talker每发布一条消息,两个listener都会接受到;

2,如果listener节点比talker晚启动,那么在listener启动之前talker节点发布的消息,listener节点都不会接受到。

结束。

 

posted @ 2023-04-13 16:52  透明飞起来了  阅读(144)  评论(0编辑  收藏  举报