首頁 > 軟體

ROS在ARM上的編譯

2020-06-16 17:46:56

ROS(robot operaring system)作為移動機器人軟體架構,近幾年得到了越來越廣泛的應用,但是大部分應用是基於X86架構的處理器,怎麼樣將這麼強大的工具和應用極為廣泛的ARM處理器結合在一起,是現在很多開發者急於解決的問題。我作為ROS的初學者最近也嘗試了一把ROS 的ARM移植,糾結了四五天,不過最後還是成功了。

雖然現在針對非X86架構的處理器產生了一些ROS的應用方案,比如eros(http://www.ros.org/wiki/eros)、rosserial(http://www.ros.org/wiki/rosserial)等方式,後者是針對Arduino的,前者玩了幾天,沒搞清楚是怎麼用的,所以上網各處搜尋,也在ROS的群裡問了一些人,最近正好群裡也有人成功在MK802 III上成功編譯了ROS原始碼,所以直接在目標機上編譯原始碼這個原始的方式,雖然效率較低,但是應該是行的通的。

移植環境:

PC:Ubuntu 12.04

ARM處理器:Cortex-A9

ARM作業系統:Ubuntu12.04

ROS版本:groovy

編譯流程:

整體的編譯流程全部按照官網的教學進行(http://www.ros.org/wiki/groovy/Installation/Source)。

1、安裝工具軟體

啟動ARM板中的ubuntu作業系統,使用串列埠與電腦連線,通過ssh使得PC機可以與ARM板進行遠端控制,然後就可以在PC機上控制ARM板中的程式碼編譯了。

首先是按照教學上說的:

sudo apt-get install Python-rosdep python-wstool build-essential        但是在ARM的ubuntu源中沒有python-rosdep和python-wstool這兩個包,這兩個包的安裝可以按照fuerte的編譯說明進行(http://www.ros.org/wiki/fuerte/Installation/Ubuntu/Source):

安裝easy_install:(http://blog.csdn.net/chosen0ne/article/details/7210745)

wget http://peak.telecommunity.com/dist/ez_setup.py python ez_setup.py

利用easy_install安裝pip:(http://www.ros.org/wiki/ROS/Installation/EasyInstallConfig)

sudo easy_install pip            然後安裝以下的包:(http://www.ros.org/wiki/fuerte/Installation/Ubuntu/Source)

sudo pip install -U rosdepsudo pip install -U rosinstallsudo pip install -U rospkg              安裝python-wstool:

pip install -U wstool                redep初始化:

sudo rosdep init

rosdep update        2、下載原始碼

建立資料夾:

mkdir ~/ros_catkin_ws

cd ~/ros_catkin_ws        下載程式碼,我是用的是最小包ros-common:

wstool init src -j8 http://packages.ros.org/web/rosinstall/generate/raw/groovy/ros_comm

3、編譯原始碼

按照教學上說的進行依賴包的安裝:

rosdep install --from-paths src --ignore-src --rosdistro groovy -y          然後應該還需要安裝cmake(我之前就已經安裝好了,不知道是不是應該在這一步)。我是從官網下載的原始碼(http://www.cmake.org/),然後在ARM上編譯的。ARM上編譯太慢了,用了將近一個小時,不知道可不可以在PC上交叉編譯,不做深究了。

接下來就是最重要的過程了——編譯。這個過程是痛苦而漫長的,ARM板的主頻慢,編譯一次程式碼需要20分鐘左右,而且每次出錯總是在編譯了好長時間之後,各種依賴的包需要安裝。如果現在進行編譯,肯定會出現一大堆錯誤,可以根據這些錯誤進行一步步的處理,基本都是所依賴的包沒有安裝。其中最重要的就是boost庫的包。因為ROS中很多的程式碼是使用C++寫的,都使用了boost靜態庫,所以必須在ARM中的ubuntu系統中安裝boost庫。boost庫是我糾結時間最長的一個問題,我使用了各種各樣的方法進行安裝:

(1)直接apt-get安裝

(2)下載原始碼在PC機上交叉編譯然後放到ARM中

(3)直接下載官方針對ARM架構已經編譯好的deb包進行安裝(https://launchpad.net/ubuntu/+source/boost1.46/1.46.1-7ubuntu3/+build/3060825)

至於boost庫的版本,我也嘗試過很多,從1.40到1.52,最後還是第三種方法靠譜,前兩種方法安裝完成後在編譯過程中總是會報錯說找不到boost中的某個庫。開啟上面的連結,會有一個boost庫的列表:

我是把上面的包全部一個一個下載安裝了,基本也是相互依賴的。安裝過程中可能還是會有一些其他依賴的包,都可一使用pip或者easy_install進行安裝。

到現在為止,終於可以開始編譯、安裝了:

./src/catkin/bin/catkin_make_isolated --install --install-space /opt/ros/groovy        如果一切正常,而是分鐘後就組合一安裝結束了。

新增環境路徑:

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        終於安裝完成了,在終端中輸入“roscore”,看一下是否正常執行了。在這一步,我這裡出現了一個錯誤:

what():  locale::facet::_S_create_c_locale name not valid       

加入:

export LC_ALL="C"        終於可以正常執行了。進行了簡單的talker和listener的測試,一切正常,雖然執行著實有點慢,但是初步移植應該完成了,後面應該還有更多問題等著我的。

PS:

(1)我也嘗試過fuerte版本的ROS編譯,但是在編譯到90%的時候報錯,我google了一下,好像是說ARM的記憶體不足了,我用的ARM板的記憶體是512MB,如果哪位有解決方法,請不吝指教。

(2)上面所寫的過程中可能有一些包的安裝遺漏了,基本使用easy_install和pip都可以安裝,有一些python包不能安裝的,可以從網上下載deb包進行安裝。

(3)本人還是初學者,如果有什麼不對的讀放,還請高手多多指教

本文永久更新連結地址http://www.linuxidc.com/Linux/2016-01/127499.htm


IT145.com E-mail:sddin#qq.com