歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> ROS on ARM--RK3066上本地編譯ROS Groovy

ROS on ARM--RK3066上本地編譯ROS Groovy

日期:2017/2/28 13:55:05   编辑:Linux教程

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

參考資料

  1. http://en.wikipedia.org/wiki/ROS_(Robot_Operating_System)
  2. http://www.ros.org/wiki/
  3. R. Patrick Goebel,ROS By Example Volume 1
  4. http://www.ros.org/news/2012/12/ros-groovy-galapagos-released.html
  5. http://ros.org/wiki/groovy/Installation/Source
  6. http://answers.ros.org/question/10716/ros-on-arm/
  7. http://ros.org/wiki/groovy/Installation/Raspbian/Source
Copyright © Linux教程網 All Rights Reserved