ROS在Zedboard上的移植
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個包,首先要更新源,源地址:http://wiki.ros.org/ROS/Installation/UbuntuMirrors,因為國內某些政策的原因,建議使用國內源,否則會在源更新時出現錯誤,我採用的是:
~# 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'
然後源進行更新:
~# 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 http://peak.telecommunity.com/dist/ez_setup.py
~# 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包下載方法:http://wiki.ros.org/indigo/Installation/Source。
~# 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
4. collada-dom、yaml-cpp、openNI、pcl
這些庫大多是與圖形化有關的,檔案較大,在板子上編譯時間很長,可以選擇先編譯系統(因為像openNI、PCL我也沒有安裝,一樣編譯沒有問題),如果以後用到再進行安裝。安裝方式見地址:http://wiki.ros.org/groovy/Installation/Linaro/Source。
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
備註:在安裝過程中,可能還會出現錯誤,但是一般是缺少某些檔案,可根據錯誤描述在網上下載這些檔案安裝。