ROS全稱robot operaring system,一般ROS是應(yīng)用在Ubuntu系統(tǒng)中,本次移植是將ROS移植到Zedboard上的Linaro系統(tǒng)中去。
移植環(huán)境
開發(fā)板 : Zedboard
ARM處理器 : Cortex-A9
ARM操作系統(tǒng): Linaro 12.11
ROS版本: indigo
移植前提
1. 開發(fā)板可以連接網(wǎng)絡(luò)
2. 使用SSH等對開發(fā)板進(jìn)行遠(yuǎn)程控制
編譯方法
源碼下載到開發(fā)板自編譯,軟件編譯均在“#”管理員命令下進(jìn)行。
編譯流程
一、安裝前提
1、安裝引導(dǎo)程序依賴
引導(dǎo)程序主要包括rosdep、rosinstall、rospkg,wstool,build-essential(此包可以直接apt-get獲得),下載包的方法在linaro有兩種,一種是apt-get(推薦),另一種就是pip。
1.采用apt-get安裝
板子Linaro系統(tǒng)中apt-get源中很多軟件都沒有,如果想采用apt-get安裝這3個包,首先要更新源,源地址:,因為國內(nèi)某些政策的原因,建議使用國內(nèi)源,否則會在源更新時出現(xiàn)錯誤,我采用的是:
~# sh -c '. /etc/lsb-release && echo "deb $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'
然后源進(jìn)行更新:
~# 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系統(tǒng),安裝主要包括建立一個工作區(qū),下載源碼,解決包的依賴,系統(tǒng)的安裝。
1.建立工作區(qū)
工作區(qū)的建立主要是為了存放并編譯源碼
~# mkdir ~/ros_catkin_ws
~# cd ~/ros_catkin_ws
2.下載源碼
源碼有3種,一種是全包(具有ROS的全部功能,包括3D可視化工具等),一種是普通包(具有ROS的大多數(shù)功能,沒有3D可視化和仿真環(huán)境等),還有一種類似于骨頭包(只包括核心功能,沒有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
當(dāng)做完上述步驟后,會在ros_catkin_ws文件目錄下出現(xiàn)一個src目錄,里面是ros的全部源碼。
3.解決包的依賴
這一步是整個系統(tǒng)編譯最復(fù)雜的地方,主要是因為采用Linaro系統(tǒng),ROS內(nèi)部是不把Linaro作為一個系統(tǒng)。解決辦法是在os_detect.py中增加對linaro的支持。
首先打開os_detect.py,位置可能略有不同:
vi /usr/local/lib/python2.7/dist-packages/rospkg/os_detect.py
增加如下幾句,目的是告訴系統(tǒng)linaro也是一個系統(tǒng):
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
在以上過程中可能會出現(xiàn)下面的問題:
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構(gòu)架的deb包,地址為:https://launchpad.net/ubuntu/+source/boost1.46/1.46.1-7ubuntu3/+build/3060825,里面的庫基本上都是相互依賴的,需要全部下載并安裝。如果覺得這種方式麻煩,可以直接在源中下載整個boost庫包:
~# apt-get install boost1.46
2. libtbb-dev
也是跟C++有關(guān)的包,如果不安裝,可能會出現(xiàn)E: Package 'libtbb-dev' has no installation candidate,安裝方式可以采用源安裝:
~# apt-get install libtbb-dev
如果源中沒有的話,下載源代碼安裝。
3.lz4
Lz4是一個快速無損壓縮算法,如果沒有安裝會出現(xiàn)如下錯誤:Error : lz4 includes not found。只能采用源碼安裝,下載地址:https://github.com/Cyan4973/lz4/releases/tag/r127。
4. collada-dom、yaml-cpp、openNI、pcl
這些庫大多是與圖形化有關(guān)的,文件較大,在板子上編譯時間很長,可以選擇先編譯系統(tǒng)(因為像openNI、PCL我也沒有安裝,一樣編譯沒有問題),如果以后用到再進(jìn)行安裝。安裝方式見地址:。
5.系統(tǒng)安裝
現(xiàn)在可以安裝系統(tǒng),命令如下:
~# ./src/catkin/bin/catkin_make_isolated -j1 --install
系統(tǒng)安裝需要用到cmake,如果沒有,需要在源中下載:
~# apt-get install cmake
如果沒有什么問題,編譯差不多會進(jìn)行1個多小時結(jié)束,然后就是添加環(huán)境路徑:
~# 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
備注:在安裝過程中,可能還會出現(xiàn)錯誤,但是一般是缺少某些文件,可根據(jù)錯誤描述在網(wǎng)上下載這些文件安裝。
評論
查看更多