ROS on ARM--RK3066上本地编译ROS Groovy
1. 开源机器人操作系统ROS(Robot Operating System)简介
ROS(Robot Operating System)是一个开源的为机器人软件开发设计的软件框架,在异构计算机集群中提供类似操作系统的功能。它并不是一个计算机的操作系统,而是机器人的操作系统,或者称为元级操作系统(Meta Operating System)。据目前唯一一本比较官方的关于ROS的书《ROS By Example Volume 1》介绍,“The primary goal of ROS (pronounced "Ross") is to provide a unified and open source programming framework for controlling robots in a variety of real world and simulated environments.”,ROS的原始目的就是为了在一系列真实和模拟的环境中控制机器人提供一个统一的开源编程框架。为了实现这一目标,ROS架构中有三个层次的概念:文件系统级(Filesystem Level),计算图级(Computation Graph Level)和社区级(Community Level)。 具体可以查阅维基百科和官网wiki,这里就不过多介绍了。
2. ROS Groovy Galapagos
ROS Groovy Galapagos是2012年12月31日发布的ROS最新版本,主要支持Ubuntu 11.10、Ubuntu 12.04和Ubuntu 12.10。提到这个版本的原因是它采用了新的构建系统——catkin,准备逐渐取代之前的rosbuild。它解决了rosbuild当中的几个问题,让ROS可以持续发展和扩大规模,相对于rosbuild更符合文件系统层次结构标准(Filesystem Hierarchy Standard,FHS),使在其它操作系统和架构上发布ROS包更加容易。正是这个原因让我在MK802 IIIS上编译ROS的时候轻松很多,如果编译之前的版本(比如fuerte)将会遇到更多问题。
因为catkin的引入,ROS文件系统级的Stacks概念被移除了,原因是Package和Stack之间依赖性跟踪出现的问题,取代的是元包(metapackage)的概念。
3. Ubuntu on ARM
ARM版Ubuntu的软件源是在http://ports.ubuntu.com/
上,和桌面版的略有区别,我遇到的一个问题就是桌面版Python-*的包ARM版几乎都没有,解决办法是使用python的包管理工具pip安装,比如桌面版上apt-get install python-PACKAGENAME
,用pip install PACKAGENAME
替代。据说easy_install的维护不够好,所以应该尽量用pip。
我使用的是RK3066上的Picuntu。
4. 编译ROS for ARM
从前为ARM编译一般都需要在x86的上位机上交叉编译,有一个叫做EROS的项目,但是似乎文档不全,个人觉得用它成功编译的人应该也不多。近几年ARM性能足够强了,在ARM运行的操作系统上直接编译也不是什么问题。所以完全可以参考官网从源码编译的教程,官网还特别搞了一个在树莓派上编译的教程。
当然,树莓派的内存只有512MB,而且是ARM 11,使用ROS会受到很大的限制,既然它都可以编译ROS Groovy,那么双核A9的RK3066,1G内存就更不是问题了。
下面一步步按照官网上从源码编译的wiki来:
4.1 安装基础依赖包
操作系统相关的:
sudo apt-get install build-essential git python-pip
ROS Common(或者叫ROS Base,Base Bones什么的)依赖的:
sudo apt-get install libtinyxml-dev libgtest-dev liblog4cxx10-dev
注意这里只是在Picuntu RC2 上需要额外安装的库,可能你还会遇到其它库的问题。desktop或者desktop-full依赖的库更多,所以更难解决。
还有一些重要的工具:
sudo pip install wstool rospkg rosdep
可能会遇到很多python-*
的包缺少的问题,需要用sudo pip install PACKAGENAME
安装
安装完rosdep以后初始化一下:
sudo rosdep init rosdep update
4.2 构建catkin包
上面提到过,ROS Galapagos采用了新的构建工具catkin代替rosbuild,但并不是所有的包都转换成了catkin的版本,所以先构建ROS的核心包(使用catkin),然后再构建其余的使用rosbuild的部分。
4.2.1 创建catkin工作空间
mkdir ~/ros_catkin_ws cd ~/ros_catkin_ws
下一步是下载核心包的源码并构建它们,你有三种选择:
Desktop-Full Install: ROS, rqt, rviz, robot-generic libraries, 2D/3D simulators, navigation and 2D/3D perception
wstool init -j8 src http://packages.ros.org/web/rosinstall/generate/raw/groovy/desktop-full
Desktop Install : ROS, rqt, rviz, and robot-generic libraries
wstool init -j8 src http://packages.ros.org/web/rosinstall/generate/raw/groovy/desktop-full
ROS-Comm: (Bare Bones) ROS package, build, and communication libraries. No GUI tools.
wstool init src -j8 http://packages.ros.org/web/rosinstall/generate/raw/groovy/ros_comm
这个操作是下载catkin包的代码到~/ros_catkin_ws/src
目录下,-j8是指并行下载8个包,在RK3066上是无压力的,如果是树莓派可能需要减少。
注意,在后面解决依赖关系和构建的时候很多包依赖的库可能会缺,你可以根据错误提示自行安装所缺的库。我在MK802 IIIS上只成功编译了ROS-Comm,Desktop编译失败了,而Desktop full在官网wiki中说还有问题:There are build errors in desktop-full (gazebo simulator) at the moment, so the desktop variant is suggested at this time. See: https://code.ros.org/trac/ros-pkg/ticket/5595
。
还可以安装其它的包,如robot:
wstool init -j8 http://packages.ros.org/web/rosinstall/generate/dry/raw/groovy/robot
更多的可以在REP 131中查阅。
4.2.2 解决依赖关系
在构建包之前你必须确保你解决了所有的依赖关系
rosdep install --from-paths src --ignore-src --rosdistro groovy -y
--from-paths
选项表示我们想要安装某个文件夹下的所有包,这里是src
文件夹。--ignore-src
选项表示rosdep不应该从包管理器安装任何src
文件夹的包,因为我们现在做的就是构建它。--rosdistro
选项之所以需要是因为我们没有设置好ROS的环境,所以我们必须指明我们构建的是ROS的哪个版本。最后,-y
选项表示出现的提示选择都选择yes
另外如果你在安装某些包出现错误的情况下仍想安装其它所有可以安装的包,你可以使用-r选项,也就是rosdep install --from-paths src --ignore-src --rosdistro groovy -yr
。
4.2.3 构建catkin工作空间
调用catkin_make_isolated
:
./src/catkin/bin/catkin_make_isolated --install
默认安装在~/ros_catkin_ws/install_isolated
下,如果要安装到其它地方,比如/opt/ros/groovy
,可以使用--install-space /opt/ros/groovy
如果编译过程中出现错误提示缺少库,需要自行安装解决。
如果构建完成了,再执行:
source ~/ros_catkin_ws/install_isolated/setup.bash
如果你只需要ROS Common那么就结束了。可以测试一下在终端里输入roscore
,我运行的时候报错了,后来注释掉了一个python文件里的几行就跑起来了,具体是哪个文件也忘了,根据报错的信息修改就可以了。
4.3 构建rosbuild包
只构建ROS Common(Bare Bones)是不需要这一步的,在上一步我也没有成功编译desktop, 如果你成功了可以继续下面的步骤:
4.3.1 创建rosbuild工作空间
mkdir ~/ros_ws cd ~/ros_ws rosws init . ~/ros_catkin_ws/install_isolated
4.3.2 下载ROS Stacks
Desktop-Full Install: 2d/3d simulators, navigation, robot models and several tutorial stacks
rosws merge http://packages.ros.org/web/rosinstall/generate/dry/raw/groovy/desktop-full
Desktop Install: ROS, rqt, rviz, and robot-generic libraries
rosws merge http://packages.ros.org/web/rosinstall/generate/dry/raw/groovy/desktop
Desktop-Full仍然有问题:There are build errors in desktop-full (gazebo simulator) at the moment, so the desktop variant is suggested at this time. See: https://code.ros.org/trac/ros-pkg/ticket/5595
rosws update -j8
4.3.3 构建ROS Stacks
下载完后:
source ~/ros_ws/setup.bash rosmake -a
5. 其它
如果你不满足于ROS Common,而且跟我一样没有成功编译desktop的话,可以试试单独编译其它组件,比如OpenCV和PCL。
OpenCV 2.4.3的编译非常顺利,几乎没有遇到什么障碍,有GTK+2.0,highgui库都可以正常使用。
PCL在我去掉少数几个编译选项以后也成功了,pcl_viewer正常工作。//另外我还安装了OpenNI和Kinect驱动
我编译PCL时的CMakeCache.txt在https://gist.github.com/4689753
参考资料
- http://en.wikipedia.org/wiki/ROS_(Robot_Operating_System)
- http://www.ros.org/wiki/
- R. Patrick Goebel,ROS By Example Volume 1
- http://www.ros.org/news/2012/12/ros-groovy-galapagos-released.html
- http://ros.org/wiki/groovy/Installation/Source
- http://answers.ros.org/question/10716/ros-on-arm/
- http://ros.org/wiki/groovy/Installation/Raspbian/Source