1. 程式人生 > >ROS在Zedboard上的移植

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-domyaml-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

備註:在安裝過程中,可能還會出現錯誤,但是一般是缺少某些檔案,可根據錯誤描述在網上下載這些檔案安裝。