1.5 在基于ARM的开发板上安装ROS
从事商业机器人产品研发的行业对运行在嵌入式平台(主要是ARM平台)上的ROS有很高的要求。现在维护开源ROS的OSRF已经宣布对ARM平台的正式支持。
1.5.1 准备工作
目前主要有两个支持ARM平台上运行的ROS操作系统系列:
•Ubuntu ARM;
•OpenEmbedded(meta-ros)。
其中Ubuntu ARM最受研究人员的欢迎,因为它易于安装,而且已经得到了很多ARM板的支持。在图1-7中列出了其中的一部分ARM板。此外,许多ROS包已经得到了Ubuntu ARM的支持或者可以通过最小的修改就可以移植到Ubuntu ARM。
图1-7 Ubuntu ARM支持的平台
而OpenEmbedded则主要被专业人员用来开发商业产品。表1-2中给出了两者的比较。
表1-2
虽然有多种选择,我们还是决定在Ubuntu ARM上安装ROS,因为这个系列的发行版更为普遍,而且也可以在多种基于ARM的平台上运行,例如UDOO、ODROID-U3、ODROID-X2和Gumstix Overo。我们建议你在平台上使用Ubuntu ARM 16.04 Xenial armhf操作系统与ROS一起工作。
当我们在向指定的ARM平台上安装ROS之前,必须先满足一些先决条件。由于本书的重点是ROS,因此我们只会列出这些内容,并不会给出详细的讲解。不过对于特定的ARM平台来说,你可以通过它们的网站、论坛或者相关的书籍来查阅有关Ubuntu ARM的信息。
当我们选定的平台上已经安装完Ubuntu ARM后,就需要安装网卡,并通过配置网络设置(例如IP、DNS和网关)来提供访问网络的功能。
一个适用于大多数ARM平台的Ubuntu镜像可以安装到一个大小为1GB~4GB的MicroSD卡中。不过它的容量并不能承载ROS Kinetic的大部分功能包。为了解决这个问题,我们可以使用更大内存的SD卡,并通过重新分区将文件系统扩展到所有空间。
这里可以使用GParted软件。它是一个开源的图形工具,可以用来完成磁盘分区及其文件系统的创建、删除、调整大小、移动、检查和复制操作,如图1-8所示。
图1-8 GParted(一个分区工具)
1.5.2 如何完成
好了,我们现在已经做好了安装ROS的准备。此后的安装过程与前面讲过的桌面系统下的安装过程非常类似。两者最大的区别在于在Ubuntu ARM平台下不能进行桌面完整版(Desktop-Full)安装。我们可以按照需要来自定义安装所需要的功能包,不过,这一点对于使用源代码来构建和安装ROS软件库中没有的包是十分方便的。
•ROS Kinectic <ros_version>与Ubuntu 16.04 Xenial Xerus兼容。
•ROS Melodic <ros_versions>与Ubuntu 18.04 Bionic Beaver兼容。
配置软件库的步骤如下所示。
第一步要配置Ubuntu软件库允许“restricted”“universe”和“multiverse”:
$ sudo vi /etc/apt/sources.list
我们对Ubuntu 16.04进行如下操作:
deb http://ports.ubuntu.com/ubuntu-ports/ xenial main restricted universe multiverse #deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial main restricted universe multiverse deb http://ports.ubuntu.com/ubuntu-ports/ xenial- updates main restricted universe multiverse #deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial-updates main restricted universe multiverse #Kernel source (repos.rcn-ee.com) : https://github.com/RobertCNelson/linux-stable-rcn-ee # #git clone https://github.com/RobertCNelson/linux-stable-rcn-ee #cd ./linux-stable-rcn-ee #git checkout 'uname -r' -b tmp # deb [arch=armhf] http://repos.rcn-ee.com/ubuntu/ xenial main #deb-src [arch=armhf] http://repos.rcn-ee.com/ubuntu/ xenial main
同样,我们对Ubuntu 18.04进行如下操作:
deb http://ports.ubuntu.com/ubuntu-ports/ bionic main restricted universe multiverse #deb-src http://ports.ubuntu.com/ubuntu-ports/ bionic main restricted universe multiverse deb http://ports.ubuntu.com/ubuntu-ports/ bionic- updates main restricted universe multiverse #deb-src http://ports.ubuntu.com/ubuntu-ports/ bionic-updates main restricted universe multiverse #Kernel source (repos.rcn-ee.com) : https://github.com/RobertCNelson/linux-stable-rcn-ee # #git clone https://github.com/RobertCNelson/linux-stable-rcn-ee #cd ./linux-stable-rcn-ee #git checkout 'uname -r' -b tmp # deb [arch=armhf] http://repos.rcn-ee.com/ubuntu/ bionic main #deb-src [arch=armhf] http://repos.rcn-ee.com/ubuntu/ bionic main
第二步使用如下操作更新源:
$ sudo apt-get update
1.5.3 设置系统位置
ROS中的一些工具(例如Boost),需要调整系统区域设置。这个设置的命令如下所示:
$ sudo update-locale LANG=C LANGUAGE=C LC_ALL=C LC_MESSAGES=POSIX
1.5.4 设置sources.list(源列表)
接下来我们将要根据ARM平台上所安装的Ubuntu版本配置源列表。下面给出了安装Ubuntu armhf软件库的命令:
$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release - cs) main" > /etc/apt/sources.list.d/ros-latest.list'
1.5.5 设置秘钥
正如前文提到的那样,我们执行这个步骤的目的是确保代码的来源是准确的,而且没有人在代码所有者不知情的情况下对代码或者程序进行过修改。
$ sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net --recv-key 0xB01FA116