内容参考自Programming Robots with ROS by Morgan Quiley, Brian Gerkey, and William D. Smart (O'Reily). Copyright 2015 Morgan Quiley, Brian Gerkey, and William D. Smart, 978-1-4493-2389-9

ROS的安装

我是用的是Linux ubuntu 16.04(在VMWare 17上运行),安装的是ROS Kinetic。

ROS的安装复杂而繁琐,我也是经过了许久的尝试。可参考以下文档:

https://robot.czxy.com/docs/ros/env/ros16/

创建工作区(workspace)

创建一个catkin工作区并初始化:

1
2
3
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace

以上命令创建了一个叫做catkin_ws的工作区路径(工作区的名字可以是任意的),其中包含了一个src路径。

接下来,将创建其他工作区文件:

1
2
cd ~/catkin_ws
catkin_make

以上命令创建了许多输出文件,将会生成两个文件夹:builddevelbuild是使用C++时catkin存放库和可执行文件的地方(使用Python时可以忽略build下的内容)。devel包含了许多文件和路径,其中最需要注意的是setup文件。运行这些文件可以使系统使用这个工作区以及其中包含的代码。

实现配置:

1
source devel/setup.bash

创建ROS包

1
2
cd ~/catkin_ws/src
catkin_create_pkg my_awesome_code rospy

运行上面的命令调用catkin_create_pkg创建了一个名为my_awesome_code的新包,该包依赖已存在的rospy包。

catkin_create_pkg命令创建一个同名文件夹,并在该新文件下创建了CMakeLists.txtpackage.xml以及src文件夹。

rosrun

ROS提供了一个命令行程序rosrun来寻找程序包中可执行程序并且向这个程序传递任何参数,语法如下:

1
rosrun PACKAGE EXECUTABLE [ARGS]

要运行rospy_tutorials中的talker程序,在终端中输入:

1
roscore

如果出现“Done checking log file disk usage. Usage is <1GB.”的提示,可参考以下如下链接解决:

https://blog.csdn.net/qq_50942093/article/details/126998638

再打开另一个终端:

1
rosrun rospy_tutorials talker
SharedScreenshot.jpg

ROS中的talker相当于Hello World程序。talker每秒发送10次“hello world”消息(并附上Unix时间戳)。

我们已经创建了一个节点,这时,我们需要另一个节点用于接收talker发送的消息。再打开一个终端,输入:

1
rosrun rospy_tutorials listener
SharedScreenshot2.jpg

我们现在可以向系统询问并理解现在正在发生的事情,打开第四个终端,输入:

1
rqt_graph
SharedScreenshot3.jpg

命名空间和重映射

ROS可以在不同的命名空间中启动同一个节点来避免命名冲突。

例如,具有两个相机的机器人可以在不同的命名空间中启动两个相机驱动,例如leftright,最终会有两路图像流,分别称为left/imageright/image

另一种方法是重映射。在ROS中, 程序中任何一个用于命名的空符串都可以在运行时重映射。例如,ROS中一个带常的程序image_viewimage主题实时资梁在窗口上。使用重映射,可以使image_view渲染right/image主题或者left/image主题,并且不需要修改image_view的代码。

例如,如果工作路径中包含image_view程序,可以通过以下命令将image重映射到right/image

1
./image_view image:=right/image

把一个节点放置到命名空间中可以通过一个特殊的__ns命名空间重映射语法来完成。例如,如果工作路径包含了camera程序,下列命令将在right命名空间中启动camera程序:

1
./camera __ns:=right

在命令行中修改节点的名字可以使用专门的__name重命名语法。这个命令在启动时改变程序的名字。下列命令将启动两个talker实例,一个为talker1, 另一个为talker2

1
2
./talker __name:=talker1
./talker __name:=talker2

roslaunch

roslaunch是一 个用于自动启动一系列ROS节点的命令行工具。从表面上看,该命令和rosrun有点像,需要包名和文件名:

1
roslaunch PACKAGE LAUNCH_FILE

但是roslaunch操作launch文件而不是节点。launch文件是描述一组节点以及它们话题重映射和参数的XML文件,根据规范, 这些文件具有.lamnch后缀。