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节点都不会接受到。
结束。