ROS编程(一)写一个最简单的发布者订阅者

想把自己学过的东西慢慢整理成文章,一是巩固自己,二是分享知识。

教程参考的是wiki.ros.org

目录:
1.创建功能包
2.写发布者代码,配置编译规则
3.写订阅者代码,配置编译规则
4.编译功能包
5.运行节点

1.在catkin_ws中创建功能包

在catkin_ws目录下打开终端

catkin_create_pkg beginner_tutorials rospy roscpp std_msgs

cd ~/catkin_ws

catkin_make

source devel/setup.bash

2.写发布者代码(Python) publisher/talker

在功能包下创建talker.py文件

> mkdir talker.py

可以直接在文本里写,还是在VS Code里写比较方便
talker.py代码:

#!/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

代码大意:定义节点为“chatter”的发布者,声明节点用字符串消息类型发布chatter话题,创建talker节点,发布频率为10hz,每秒10次,节点活动的话,继续发布消息,消息内容是“hello world+时间”,在日志中记录消息,发布。

3.写订阅者代码(Python) listener/subscriber

在功能包下创建listener.py文件

> mkdir listener.py

listener.py代码:

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()

跟发布者类似,但引入一种新的基于回调的订阅消息机制。
都写完之后,添加以下内容到CMakeList.txt里的这个位置,意思要设置需要编译的代码和生成可执行文件

catkin_install_python(PROGRAMS scripts/talker.py DESTINATION
${CATKIN_PACKAGE_BIN_DESTINATION} )

catkin_install_python(PROGRAMS scripts/talker.py scripts/listener.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} )

ROS编程(一)写一个最简单的发布者订阅者_第1张图片

4.编译功能包

将两个Python文件设置为程序可执行文件
ROS编程(一)写一个最简单的发布者订阅者_第2张图片在catkin_ws目录下catkin_make

5.运行节点

启动roscore节点
启动两个终端分别运行两个节点:

rosrun beginner_tutorials talker.py
rosrun beginner_tutorials listener.py

实现效果:
ROS编程(一)写一个最简单的发布者订阅者_第3张图片ROS编程(一)写一个最简单的发布者订阅者_第4张图片

你可能感兴趣的:(ROS编程,python)