1. 程式人生 > >樹莓派3上安裝ros完整版

樹莓派3上安裝ros完整版

官方安裝教程
主要安裝步驟大家參考官方教程,下面的算是我對官方教程的一點補充說明,也許可以幫助大家少走點彎路。官方教程上支援的樹莓派系統版本為wheezy和jessie;我用的是最新的jessie。

1.在第一步新增ros倉庫路徑時,教程上給出的是國外的地址,這裡我覺得最好是用國內的映象,速度會快很多。

sudo sh -c 'echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu jessie main" > /etc/apt/sources.list.d/ros-latest.list'

2.在選擇安裝版本,官方給出的示例是ros-comm和desktop兩種,ros-comm只包含一些基礎的package,不包含gui工具,安裝起來會比較順利和快速;而desktop則包含完整的工具包。選擇安裝ros-comm,按照教程一步步來不會有什麼問題,而安裝desktop則需要注意按教程上說的手動安裝一些依賴的package。
其實這裡具體安裝哪些東西是可以自己自主選擇的,如果想安裝desktop,又不想那麼麻煩去手動下載那幾個package,就可以直接使用下面的指令,去掉collada_parser collada_urdf這幾個煩人的package,如果你用的是jessie的話,去掉這幾個package就不再需要手動新增什麼依賴檔案了,直接使用rosdep就能自動安裝好所有的依賴檔案,省去一些麻煩事。當然如果你確實要用到上述那幾個包就另說了。

$ rosinstall_generator desktop --rosdistro indigo --deps --wet-only --exclude roslisp collada_parser collada_urdf --tar > indigo-desktop-wet.rosinstall

3.編譯過程會很漫長,完整版有將近兩百個package要編譯,我剛開始的時候老是會卡在一個地方一直不動,也不提示有什麼錯誤,試了好幾次都不行,後來試著在編譯指令裡把“-j2”加進去就好了,這個應該還是和樹莓派的處理能力有關,並行數太多容易宕機,用“-j2”減少並行處理的數量就能解決問題,如果還有問題就改成“-j1”。

sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/indigo -j1

4.編譯完整版時提示的關於“collada_urdf”的錯誤,這個問題在google group上有專門的討論和解決方案,大家有興趣可以翻牆去看:goole group連結
具體解決方法就是在/home/pi/ros_catkin_ws/src/robot_model/collada_urdf/src/中新增一個fix.patch檔案,檔案內容如下:

From 7e9c381043c9c33d594b66fad853bf69df044769 Mon Sep 17
00:00:00 2001 From: Paul Mathieu <[email protected]> Date: Tue, 12 Mar 2013 13:28:23 -0700 Subject: [PATCH] fixed arm build --- src/collada_urdf.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/collada_urdf.cpp b/src/collada_urdf.cpp index acebfb2..1d4beb6 100644 --- a/src/collada_urdf.cpp +++ b/src/collada_urdf.cpp @@ -68,6 +68,13 @@ #include <assimp/IOSystem.hpp> #include <assimp/Importer.hpp> #include <assimp/postprocess.h> +# ifdef __arm__ // fix for ARM build +#include <strings.h> +bool Assimp::IOSystem::ComparePaths(const char *p1, const char *p2) const +{ + return !::strcasecmp(p1, p2); +} +# endif #else #include <assimp.hpp> #include <aiScene.h> -- 1.7.9.5

然後在該路徑下執行:

patch <fix.patch

會收到補丁新增成功的提示。

5.接下來會碰到rviz的編譯錯誤,這個跟上面那個問題類似,處理方法可參見這裡rviz編譯失敗的解決方法
歸納起來就是在~/ros_catkin_ws/src/rviz/src/rviz/mesh_loader.cpp中新增下面幾行程式碼:

#  ifdef __arm__                 // fix for ARM build
#include <strings.h>
bool Assimp::IOSystem::ComparePaths(const char *p1, const char *p2) const
{
    return !::strcasecmp(p1, p2);
}
#  endif

將這幾行加在標頭檔案宣告結束的後面,如下:

#include <assimp/aiScene.h>
#include <assimp/aiPostProcess.h>
#include <assimp/IOStream.h>
#include <assimp/IOSystem.h>
#endif
#  ifdef __arm__                 // fix for ARM build
#include <strings.h>
bool Assimp::IOSystem::ComparePaths(const char *p1, const char *p2) const
{
    return !::strcasecmp(p1, p2);
}
#  endif
namespace fs = boost::filesystem;

namespace rviz

接下來再編譯就沒什麼問題了,cheers~!

到這裡190個包都編譯完成了,可以happy地在樹莓派上開始ros的開發了