2.1 创建 ROS 功能包
ROS(Robot Operating System)是一种开源的机器人软件框架,广泛用于机器人开发中。通过使用 ROS,开发者可以轻松创建和管理机器人应用程序。在本节中,我们将介绍如何创建一个 ROS 功能包并实现一些基本功能。
2.1.1 使用 ROS 主题
ROS 主题(Topic)是一种发布/订阅机制,允许节点之间进行通信。每个节点可以发布主题消息或订阅主题消息来获取数据。以下是如何使用 ROS 主题的步骤:
创建功能包
首先,我们需要创建一个新的 ROS 功能包。在终端中运行以下命令:
catkin_create_pkg de_ws my_robot rospy roscpp
此命令创建一个名为 my_robot
的功能包,并声明了对 std_msgs
、rospy
和 roscpp
的依赖。
创建发布者节点
接下来,我们在功能包中创建一个发布者节点。新建一个名为 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(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
此代码定义了一个发布者节点 talker
,它每秒钟发布一条 "hello world" 消息到主题 chatter
。
2.1.2 创建 ROS 节点
ROS 节点是 ROS 系统中的基本执行单元。每个节点可以执行一个任务,如传感器数据处理、运动控制等。下面我们创建一个订阅者节点来接收 talker
节点发布的消息。
创建订阅者节点
新建一个名为 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()
此代码定义了一个订阅者节点 listener
,它接收主题 chatter
上的消息并打印出来。
2.1.3 编译节点
在我们运行节点之前,需要编译功能包。确保在功能包的 CMakeLists.txt
和 package.xml
文件中正确配置了依赖项。然后在终端中运行以下命令:
cd ~/catkin_ws
catkin_make
编译完成后,可以运行节点:
roscore
rosrun my_robot talker.py
rosrun my_robot listener.py
此时,你应该可以看到 listener
节点打印出 talker
节点发布的消息。
点击ROS 编程入门 ——古月居可查看全文