嵌入式技术
ROS全称robot operaring system,一般ROS是应用在Ubuntu系统中,本次移植是将ROS移植到Zedboard上的Linaro系统中去。
移植环境
开发板 : Zedboard
ARM处理器 : Cortex-A9
ARM操作系统: Linaro 12.11
ROS版本: indigo
移植前提
1. 开发板可以连接网络
2. 使用SSH等对开发板进行远程控制
编译方法
源码下载到开发板自编译,软件编译均在“#”管理员命令下进行。
编译流程
一、安装前提
1、安装引导程序依赖
引导程序主要包括rosdep、rosinstall、rospkg,wstool,build-essential(此包可以直接apt-get获得),下载包的方法在linaro有两种,一种是apt-get(推荐),另一种就是pip。
1.采用apt-get安装
板子Linaro系统中apt-get源中很多软件都没有,如果想采用apt-get安装这3个包,首先要更新源,源地址:,因为国内某些政策的原因,建议使用国内源,否则会在源更新时出现错误,我采用的是:
~# sh -c '. /etc/lsb-release && echo "deb $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'
然后源进行更新:
~# apt-get update
更新完之后直接用apt-get命令安装:
~# apt-get install python-rosdep python-rosinstall-generator python-wstool python-rosinstall build-essential
2.采用pip安装(与apt-get效果相同)
i. 安装pip
首先安装easy_install:
~# wget
~# python ez_setup.py
利用easy_install安装pip:
~# easy_install pip
ii. 利用pip安装如下包
~# pip install -U rosdep
~# pip install -U rosinstall
~# pip install -U rospkg
备注:如果使用pip无法安装,可能是pip版本较低,可通过如下方法升级pip版本:
~# pip install --upgrade setuptools
安装Python-wstool:
~# pip install -U wstool
2、初始化rosdep
~# rosdep init
~# rosdep update
二、安装
从这一步开始安装ROS系统,安装主要包括建立一个工作区,下载源码,解决包的依赖,系统的安装。
1.建立工作区
工作区的建立主要是为了存放并编译源码
~# mkdir ~/ros_catkin_ws
~# cd ~/ros_catkin_ws
2.下载源码
源码有3种,一种是全包(具有ROS的全部功能,包括3D可视化工具等),一种是普通包(具有ROS的大多数功能,没有3D可视化和仿真环境等),还有一种类似于骨头包(只包括核心功能,没有GUI),我们使用的就是第三种:骨头包。另外两种ROS包下载方法: 。
~# rosinstall_generator ros_comm --rosdistro indigo --deps --wet-only --tar > indigo-ros_comm-wet.rosinstall
~# wstool init -j8 src indigo-ros_comm-wet.rosinstall
当做完上述步骤后,会在ros_catkin_ws文件目录下出现一个src目录,里面是ros的全部源码。
3.解决包的依赖
这一步是整个系统编译最复杂的地方,主要是因为采用Linaro系统,ROS内部是不把Linaro作为一个系统。解决办法是在os_detect.py中增加对linaro的支持。
首先打开os_detect.py,位置可能略有不同:
vi /usr/local/lib/python2.7/dist-packages/rospkg/os_detect.py
增加如下几句,目的是告诉系统linaro也是一个系统:
OS_UBUNTU='ubuntu'
OS_LINARO='linaro'
OsDetect.register_default(OS_UBUNTU, LsbDetect("Linaro"))
安装依赖包并检查什么包没有被安装:
rosdep install --from-paths src --ignore-src --rosdistro indigo -yr
rosdep check --from-paths src --ignore-src --rosdistro indigo
在以上过程中可能会出现下面的问题:
ERROR: thefollowing packages/stacks could not have their rosdep keys resolved to systemdependencies: rosconsole: No definition of [rostime] for OS version [precise]
roslisp: Missingresource rostime
ROS path[0]=/root/ros_catkin_ws/src
roscpp: Nodefinition of [rostime] for OS version [precise]
解决方案:
问题原因是缺少rostime包,此包上层包是roscpp_core,切换到/src/roscpp_core查看是否存在rostime包,如果没有,请下载(此包只适合indigo)并覆盖roscpp_core。步骤如下:
cd ~/src/roscpp_core
cd ..
git clone https://github.com/ros/roscpp_core
4.其他依赖
1.boost库
因为ROS是使用C++编写的,所以还需要下载boost库,否则会在安装的时候提示错误找不到boost库,下载方式有两种,一种是下载专门针对arm构架的deb包,地址为:https://launchpad.net/ubuntu/+source/boost1.46/1.46.1-7ubuntu3/+build/3060825,里面的库基本上都是相互依赖的,需要全部下载并安装。如果觉得这种方式麻烦,可以直接在源中下载整个boost库包:
~# apt-get install boost1.46
2. libtbb-dev
也是跟C++有关的包,如果不安装,可能会出现E: Package 'libtbb-dev' has no installation candidate,安装方式可以采用源安装:
~# apt-get install libtbb-dev
如果源中没有的话,下载源代码安装。
3.lz4
Lz4是一个快速无损压缩算法,如果没有安装会出现如下错误:Error : lz4 includes not found。只能采用源码安装,下载地址:https://github.com/Cyan4973/lz4/releases/tag/r127。
4. collada-dom、yaml-cpp、openNI、pcl
这些库大多是与图形化有关的,文件较大,在板子上编译时间很长,可以选择先编译系统(因为像openNI、PCL我也没有安装,一样编译没有问题),如果以后用到再进行安装。安装方式见地址:。
5.系统安装
现在可以安装系统,命令如下:
~# ./src/catkin/bin/catkin_make_isolated -j1 --install
系统安装需要用到cmake,如果没有,需要在源中下载:
~# apt-get install cmake
如果没有什么问题,编译差不多会进行1个多小时结束,然后就是添加环境路径:
~# source /opt/ros/groovy/setup.bash
~# echo "export ROS_PACKAGE_PATH=~/ros_workspace:$ROS_PACKAGE_PATH" >> ~/.bashrc
~# echo "export ROS_WORKSPACE=~/ros_workspace" >> ~/.bashrc
~# . ~/.bashrc
备注:在安装过程中,可能还会出现错误,但是一般是缺少某些文件,可根据错误描述在网上下载这些文件安装。
全部0条评论
快来发表一下你的评论吧 !