本文中的内容参考了市面上绝大多数畅销的ROS书籍,本文只作个人学习记录和学习分享使用,不作任何商业用途,如有侵权请给我留言;
ROS 目前主要支持 Ubuntu、OSX、Android、Arch、Debian 等系统,ROS 也针对 ARM 处理器编译了核心库和部分功能包。新发布的 ROS2 也支持 Windows 系统。
官方推荐 ROS Kinetic Kame,ROS Kinetic Kame 也是长期支持版本,ROS 官方称为该版本提供长达 5 年的支持和服务,并保证其与 Ubuntu 16.04 长期支持版的生命周期同步。
ROS 的安装主要分为软件源安装 和 源码安装 。软件源(Repository)为系统提供了一个庞大的应用程序仓库,只需通过简单的命令即可从仓库中找到需要的软件并完成下载安装。相反,源码编译需要手动解决繁杂的软件依赖关系,适合那些对系统比较熟悉而且希望在未支持的平台上安装ROS的开发者。
本例以软件源 安装为例,安装环境为 Ubuntu 16.04。
配置系统软件源
首先需要配置 Ubuntu 系统允许 re-stricted(不完全的自由软件)、universe(Ubuntu官方不提供支持与补丁,全靠社区支持)、multiverse(非自由软件,完全不提供支持和补丁)这三种软件源。如果没有对系统软件源做过修改,Ubuntu系统安装完毕后会默认允许以上三种软件源。Ubuntu 软件中心的软件源配置界面如下:
添加 ROS 软件源
sources.list
是 Ubuntu 系统保存软件源地址的文件,位于 etc/apt
目录下。我们需要将 ROS 的软件源地址添加到该文件中,确保后续安装可以正确找到 ROS 相关软件的下载地址。
如下所示,添加 ROS 官方软件源镜像:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
也可以使用国内镜像源,国内镜像源下载速度一般比 ROS 官方的快的多,以下是可供选择的国内镜像源;
// 中国科学技术大学(USTC)镜像源:
$ sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'
// 中山大学(Sun Yat-Sen University)镜像源:
$ sudo sh -c '. /etc/lsb-release && echo "deb http://mirror.sysu.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'
// 易科机器人实验室(ExBot Robotics Lab)镜像源:
$ sudo sh -c '. /etc/lsb-release && echo "deb http://ros.exbot.net/rospackage/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'
添加密钥
安装 ROS 软件包之前,你必须有它的授权密钥。首先在下列网址下载:
wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.key
如果下载成功, 当前目录下会有一个较小的名为 ros.key 的二进制文件。接下来, 用这个密钥配置 apt 软件包管理系统:
sudo apt-key add ros.key
完成该步之后(apt-get
提示 “ok”),可以放心删除 ros.key
。
也可以直接通过下面的命令添加密钥(但是我试了好像不成功):
$ sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
下载软件包列表
一旦配置完软件版本仓库(repositories)之后,可以用下列命令得到最新的可用软件包列表:
sudo apt-get update
需要注意的是,这会更新你系统中所有的软件版本仓库,而不仅仅是新添加的 ROS 库。
安装 ROS 软件包
ROS系 统非常庞大,包含众多功能包、函数库和工具,所以ROS官方为用户提供了多种安装版本:
$ sudo apt-get install ros-kinetic-desktop-full
$ sudo apt-get install ros-kinetic-desktop
$ sudo apt-get install ros-kinetic-ros-base
$ sudo apt-get install ros-kinetic-PACKAGE
$ sudo apt-get install ros-kinetic-slam-gmapping
安装 turlesim 功能包
turlesim 功能包是一个简单的仿真器,它能帮我们理解 ROS 的工作机制。安装命令如下:
sudo apt-get install ros-indigo-turtlesim
为系统设置rosdep
rosdep 是 ROS 自带的工具,主要功能是为某些功能包安装依赖关系,同时某些ROS核心功能报必须用到的工具,这个初始化步骤是一次性的,一旦 ROS 正常工作,多数用户不再需要访问 rosdep。完成上述安装步骤之后,需要使用如下命令进行初始化操作:
$ sudo rosdep init
$ rosdep update
注意:在线文档中偶尔会提到一个叫做 rosinstall 的工具,使用它可以从源码安装 ROS 系统。本书中我们需要的软件在 Ubuntu deb 软件源中都包含了,所以可以不用 rosinstall 。
rosdep update
会在你的账户中初始化 rosdep 系统,该命令在你的根目录下保存一些文件,文件夹名为 .ros
,因为是初始化,这个命令只需要运行一次。该命令是在普通用户下运行。
设置环境变量
ROS 已经成功安装到计算机中,默认在 /opt
路径下。由于需要在终端频繁使用 ROS 命令,所以最好对环境变量进行简单的设置,ROS 是通过环境变量找到命令所在的位置。Ubuntu 默认使用的终端是 bash,在 bash 中设置 ROS 环境变量如下:
$ echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
$ source ~/.bashrc
如果你使用的终端是 newBash,则需将以上命令中 bash 都修改为 newBash:
$ echo "source /opt/ros/kinetic/setup.zsh" >> ~/.newBash
$ source ~/.newBash
如果存在多个 ROS 版本,那么怎样确定当前终端使用的命令是哪个 ROS 版本呢?可以通过如下命令进行设置:
$ source /opt/ros/ROS-RELEASE/setup.bash
其中 ROS-RELEASE 代表希望使用的 ROS 版本(如 lunar、kinectic,indigo,hydro,groovy)等。
注意: 以上的方法只能修改当前终端,如果再重新打开一个终端,还是会默认使用 bash 或 newBash 的配置文件中设置的环境变量。终极办法就是打开 ~/.bashrc
或 ~/.newBash
文件,找到设置环境变量的命令,然后修改对应的 ROS 版,保存退出,此后重新打开所有终端就没问题了。
完成安装
到这一步就完成了 ROS 的安装了,现在在终端输入:
$ roscore
可以看到ROS 有没有运行起来:
安装 rosinstall
rosinstall 也是 ROS 一个常用的工具,可以下载和安装 ROS 中的功能包程序,建议安装上:
$ sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential