目录
学习ROSwiki官方教程时的笔记,以便后续回顾
一、编写发布者(Publisher)节点
$ roscd beginner_tutorials
$ mkdir scripts #在功能包下创建scripts文件夹,存放python代码
$ cd scripts
编写scripts/talker.py,源码如下:
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
#导入std_msgs.msg,以能够重用std_msgs/String消息类型(即一个简单的字符串容器)来发布。
def talker():
pub = rospy.Publisher('chatter', String, queue_size=10)
#创建发布者,声明该节点正在使用String消息类型发布到chatter话题,
#在订阅者接收消息的速度不够快的情况下,限制排队的消息数量为10
rospy.init_node('talker', anonymous=True)
#注册和初始化节点Node,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()
#当节点未关闭开始循环
#定义要发布的消息
#打印消息到屏幕上;把消息写入节点的日志文件中;写入rosout。
#发布消息
if __name__ == '__main__': #当模块直接运行,运行以下代码;当模块被导入,不运行以下代码
try:
talker()
except rospy.ROSInterruptException:
pass
跳转到scripts文件目录,运行以下代码,将talker.py文件修改为可执行文件,才可以使用rosrun运行该文件
$ chmod +x talker.py
二、编写订阅者(Subscriber)节点
$ roscd beginner_tutorials
$ mkdir scripts #在功能包下创建scripts文件夹,存放python代码
$ cd scripts
编写scripts/listenerr.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)
#注册和初始化节点Node2,anonymous=True会让名称末尾添加随机数
rospy.Subscriber("chatter", String, callback)
#创建订阅者,声明该节点正在使用String消息类型订阅chatter话题,
#且当接收到消息/数据是,回调函数callback被调用
rospy.spin()
#spin() simply keeps python from exiting until this node is stopped
if __name__ == '__main__':
listener()
跳转到scripts文件目录,运行以下代码,将talker.py文件修改为可执行文件,才可以使用rosrun运行该文件
$ chmod +x listener.py
三、构建节点
上述操作后,运行以下代码构建节点,确保能为创建的消息和服务自动生成Python代码,保证后续节点运行,并设置环境变量
$ cd ~/catkin_ws
$ catkin_make
$ source ./devel/setup.bash
四、检验发布者和订阅者
确保roscore已经开启:
$ roscore
打开新终端,运行发布者:
$ rosrun beginner_tutorials talker.py # (Python)
#或者在scripts目录下运行
$ python talker.py
打开新终端,运行订阅者:
$ rosrun beginner_tutorials listener.py # (Python)
#或者在scripts目录下运行
$ python listener.py
检验完毕!