ROS的安装和初体验
写这篇文章的时候,ROS的最新版本是2017年5月发布的ROS Lunar Loggerhead,但是我们仍然以2016年发布的ROS Kinetic Kame为基础介绍。 这么做的一个主要原因是Kinetic Kame是一个长期支持的版本(LTS),对它的支持将一直持续到2021年。
官方发布的ROS Kinetic包只支持Ubuntu 15.10, Ubuntu 16.04和Debian 8几个系统。它还提供有源码安装的形式,这里暂时不做介绍。
1. ROS系统的安装
首先需要配置计算机接受来自packages.ros.org的软件包,添加ROS的软件源并更新软件列表。
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
# if failed to connect keyserver, try: hkp://pgp.mit.edu:80 or hkp://keyserver.ubuntu.com:80
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
sudo apt-get update
我们知道ROS是由一系列的工具和软件包组成的,ROS官方也提供了四种安装粒度。推荐安装"ros-kinetic-desktop-full",它除了提供ROS内核之外, 还有rqt,rviz,2D/3D仿真器等一个较为完整的开发环境。"ros-kinetic-desktop"则只提供ROS内核以及rqt, rviz等一些必要的工具。 "ros-kinetic-ros-base"则只是ROS的包、编译环境以及通信库,没有各种GUI工具。我们还可以通过"ros-kinetic-PACKAGE"来单独安装某一个ROS包,通过如下指令可以搜索kinetic的各种包。
apt-cache search ros-kinetic
我们在这里选择安装"ros-kinetic-desktop-full"。为了方便解决ROS的各种软件包的依赖问题,我们还需要对rosdep进行初始化。
sudo apt-get install ros-kinetic-desktop-full -y
sudo rosdep init
rosdep update
接着,为了自动运行ROS环境,我们需要向shell配置文件中添加一些语句,来导入ROS运行环境。我们可以在一台电脑上安装多个ROS的版本,我们应当保证实际运行的时候只有一个环境。 这点需要在修改bashrc文件时特别注意。
echo -e "if [ -f /opt/ros/kinetic/setup.bash ]; then\n\tsource /opt/ros/kinetic/setup.bash\nfi" >> ~/.bashrc
source ~/.bashrc
至此,我们就已经完成了ROS系统的安装,可以正常使用它了。但是为了创建和管理ROS的工作空间,我们还需要一些工具比如rosinstall等。
sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential
为了验证安装是否成功,我们可以运行如下的指令查看ROS的运行环境变量。将会看到ROS_ROOT, ROS_PACKAGE等等各种ROS相关的环境变量。
$ printenv | grep ROS
ROS_ROOT=/opt/ros/kinetic/share/ros
ROS_PACKAGE_PATH=/opt/ros/kinetic/share
ROS_MASTER_URI=http://localhost:11311
ROSLISP_PACKAGE_DIRECTORIES=
ROS_DISTRO=kinetic
ROS_ETC_DIR=/opt/ros/kinetic/etc/ros
2. ROS系统的初体验
我们先创建一个ROS的工作空间,以后开发的各种ROS包都将放在这个空间中。
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
我们现在'~'目录下创建了一个目录catkin_ws和一个子目录src,然后进入catkin_ws中执行指令catkin_make对工作空间进行初始化和编译。这些指令执行完成后,在catkin_ws目录下将出现build和devel两个子目录, 在src目录下还生成了一个CMakeLists.txt的文件,我们将在以后的教程中看到它们的作用。在devel目录中有一个setup.bash的文件,它描述了我们的工作空间的各种环境, 我们可以通过source指令把它添加到当前系统的运行环境中。
$ source devel/setup.bash
$ echo $ROS_PACKAGE_PATH
/home/gyc/catkin_ws/src:/opt/ros/kinetic/share
对比这里的ROS_PACKAGE_PATH与上一节中提到的printenv指令的输出,我们可以看到增加了新建的工作空间的路径"/home/gyc/catkin_ws/src"。
关于工作空间我们在以后的教程中会逐渐深入。下面我们一个官方例子简单的运行一下ROS系统,来结束本文。在运行任何ros的程序之前,我们都必须先运行一下roscore,它是ros得以正常工作的基础。 运行如下的两个指令,我们就可以看到一个显示一个乌龟的窗口,如下图所示,乌龟可能长得不太一样,就不要计较了。
roscore &
rosrun turtlesim turtlesim_node
关于这些指令我们将在后续的讲解中逐渐深入,这里主要强调第一行的最后有一个&。它表示把roscore作为后台程序运行。 因为roscore是整个ROS系统运行的基础,所以它应当像一个守护进程一样一直运行着,所以我们这里将其在后台运行,这样我们就可以继续在终端中输入新的指令了。