ROS 快速上手
本文通过几个小实验示例,带你快速体验 ROS 机器人操作系统。阅读并完成这些小实验,你将对 ROS 有一个大致的了解,便于以后更好地理解如何用 ROS 控制机器人。
提示:在开始之前,请先确保你已经完成 ROS 的安装。
ROS 实例:Hello World
当我们安装完 ROS 之后,就已经安装了一些 ROS 应用实例。下面先来看一个简单的 Hello World 实例。
在这个实例中,包含 talker 和 listener 两个节点。其中,talker 节点发布一个字符串消息,listener 节点则订阅这个消息。talker 和 listener 节点间的关系如下图所示。
下面启动一个 Shell 终端,首先运行 roscore 命令:
$ roscore
新开一个 Shell 终端,运行 talker 节点:
$ rosrun roscpp_tutorials talker
此时,可以通过 rostopic
命令看到 ROS 系统中增加了 chatter 话题:
$ rostopic list
/chatter
在另一个 Shell 终端,运行 listener 节点:
$ rosrun roscpp_tutorials listener
现在,talker 和 listener 两个节点已经工作起来了,我们可以在终端看到 "hello world" 消息的传递。
$ rosrun roscpp_tutorials talker
[ INFO] [1653727234.492597108]: hello world 0
[ INFO] [1653727234.592746209]: hello world 1
[ INFO] [1653727234.692691386]: hello world 2
[ INFO] [1653727234.792815087]: hello world 3
[ INFO] [1653727234.892705453]: hello world 4
[ INFO] [1653727234.992795105]: hello world 5
[ INFO] [1653727235.092694703]: hello world 6
...
$ rosrun roscpp_tutorials listener
[ INFO] [1653727234.793428605]: I heard: [hello world 3]
[ INFO] [1653727234.893058760]: I heard: [hello world 4]
[ INFO] [1653727234.993181092]: I heard: [hello world 5]
[ INFO] [1653727235.093082177]: I heard: [hello world 6]
如果想要同时运行两个节点,可以使用 roslaunch
命令,如下:
$ roslaunch roscpp_tutorials talker_listener.launch
其中,roscpp_tutorials 是 ROS 中的一个教程包,其中包含一个 talker_listener.launch 文件。
ROS 实例:turtlesim
前面是基于命令行的示例,接下来我们通过模拟器的方式来体验 ROS 系统。
turtlesim 是 ROS 自带的一个含有乌龟机器人的二维模拟器,我们可以用 ROS 话题、ROS 服务和参数服务器来移动乌龟,读取乌龟的当前位置和改变乌龟的颜色等。
我们可以使用如下命令启动 turtlesim 应用:
$ rosrun turtlesim turtlesim_node
此时可以看到一个 TurtleSim 图形窗口,中间有一个可爱的小乌龟:
这个时候,我们可以先通过 rostopic
命令查看当前的话题,如下:
$ rostopic list
/rosout
/rosout_agg
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose
通过 rosservice
命令查看 turtlesim 节点创建的服务列表,如下:
$ rosservice list
/clear
/kill
/reset
/rosout/get_loggers
/rosout/set_logger_level
/spawn
/turtle1/set_pen
/turtle1/teleport_absolute
/turtle1/teleport_relative
/turtlesim/get_loggers
/turtlesim/set_logger_level