樹莓派3B安裝ROS-Indigo
目前對於基於 ROS 的可移動平台,有兩種方案較為流行用戶較多,可參考的資料也多。一種是使用英偉達的 TK1,另外一種是使用 raspberryPi。相對於 TK1,樹莓派在價格上更親民,雖然性能上差一些,在計算 SLAM 時會有卡頓現象,但對於入門級用戶來說,也是個不錯的選擇。
平台
環境:Raspbian OS Jessie
硬體:raspberryPi 3B以及一張16G SD 卡
參考: InstallROSIndigoOnRaspberryPi
添加ROS代碼倉
添加源以及
更新
安裝引導程序依賴項
安裝vim
增大swap空間
修改文件,增大交換空間,以免編譯源碼時出現內存不足現象。將修改為
初始化rosdep
創建workspace
創建一個用於存儲和編譯源碼
下載源碼
選擇完全版本
源代碼將會保存在目錄下,意思是開啟個線程同時下載。如果下載異常中斷,可以嘗試使用下面命令恢復:
下載時間很漫長,可以去睡一覺,回來就OK了。
解決ROS依賴
在正式編譯之前,我們還需要手動安裝以下幾個依賴包:
libconsole-bridge-dev
liblz4-dev
liburdfdom-headers-dev
liburdfdom-dev
collada-dom-dev
為這些依賴包建立單獨的用於編譯安裝的文件夾,同時安裝和:
如果無法安裝,更新一下再安裝:
然後添加:
更新:
安裝libconsole-bridge-dev
安裝liblz4-dev
安裝liburdfdom-headers-dev
最後一步提示:
The package documentation directory ./doc-pak does not exist.
Should I create a default set of package docs? [y]: y
This package will be built according to these values:
0 - Maintainer: [ root@raspberrypi ]
1 - Summary: [ Package created with checkinstall 1.6.2 ]
2 - Name: [ urdfdom-headers ]
3 - Version: [ 20170318 ]
4 - Release: [ 1 ]
5 - License: [ GPL ]
6 - Group: [ checkinstall ]
7 - Architecture: [ armhf ]
8 - Source location: [ urdfdom_headers ]
9 - Alternate source location: [ ]
10 - Requires: [ ]
11 - Provides: [ urdfdom-headers ]
12 - Conflicts: [ ]
13 - Replaces: [ ]
這裡的就是將的安裝版本變成我們需要的版本。check-install開始會讓你輸入包的描述,可以直接按回車跳過。當詢問是否改變安裝選項時,選擇,將名字從改為,其餘有或的問題都輸入按回車, 否則會編譯出錯,完成後檢查安裝的包是否正確:
如果正確會輸出:
安裝liburdfdom-dev
開始會讓提示輸入包的描述,可以直接按回車跳過。當詢問是否改變安裝選項時,選擇,將名字從改為,其餘有或的問題都輸入按回車, 否則會編譯出錯。如果編譯出錯提示找不到文件時進行如下修改:
添加一個文件到目錄下:
重新編譯
安裝collada-dom-dev
開始會讓你輸入包的描述,可以直接按回車跳過。當詢問是否改變安裝選項時,選擇,將名字從改為,其餘有或的問題都輸入按回車, 否則會編譯出錯。
rosdep依賴
命令會尋找所有目錄的並遞歸安裝依賴,要安裝的依賴包有點多,耐心等待。會檢查文件夾,安裝其他的依賴包。
編譯catkin工作空間
在開始編譯之前,先打兩個補丁
打開文件:
在最後一個後添加
修改文件,在最後一個(如果的下一行是則放到後)行後加入以下代碼
編譯:
上面命令將編譯文件安裝到,是使用個線程編譯.
出現的錯誤
執行上面的編譯命令提示錯誤:
in file included from /home/pi/ros_catkin_ws/src/robot_model/urdf/include/urdf/model.h:43:0,
from /home/pi/ros_catkin_ws/src/robot_model/urdf/src/model.cpp:37:
/home/pi/ros_catkin_ws/devel_isolated/urdf/include/urdf/urdfdom_compatibility.h:78:14: error: 『shared_ptr』 in namespace 『std』 does not name a template type
typedef std::shared_ptrModelInterfaceSharedPtr;
^
/home/pi/ros_catkin_ws/devel_isolated/urdf/include/urdf/urdfdom_compatibility.h:79:14: error: 『shared_ptr』 in namespace 『std』 does not name a template type
typedef std::shared_ptrModelInterfaceConstSharedPtr;
^
/home/pi/ros_catkin_ws/devel_isolated/urdf/include/urdf/urdfdom_compatibility.h:80:14: error: 『weak_ptr』 in namespace 『std』 does not name a template type
typedef std::weak_ptrModelInterfaceWeakPtr;
^
CMakeFiles/urdf.dir/build.make:62: recipe for target "CMakeFiles/urdf.dir/src/model.cpp.o" failed
修改文件:
從行開始到行都屏蔽掉
再次編譯成功。這個過程非常漫長。
測試
完成之後設置環境變數:
設置環境變數在每次啟動時自動添加到:
到這裡我們的完整版就已經成功安裝好了,不妨運行試一下:
備份系統
在樹莓派上安裝過程艱辛,萬一系統出了問題怎麼辦,所以如果安裝沒問題後即刻開始備份系統。系統備份官方有一個寫好的腳本,我試過這個腳本,備份後再燒寫到卡後系統能跑起來,但運行時會有一些錯誤提示,需要重新設置一下環境變數才能正確運行,不過還有一種方法就是使用的命令,這個是全卡備份,備份後系統大小就是卡的大小,再恢復時也需要同樣大小的一張卡,不過系統運行完美,不需要另外再設置,所以全卡備份也是個不錯的選擇。
首先查看卡的
為安全起見,將卡插入系統中備份,使用如下命令:
為卡插入系統後掛載的目錄,即為上面命令獲取的卡的。為了減小鏡像所佔空間,我們可以使用壓縮命令:
也可以在文件中加入備份日期方便區分:
在恢復時將一張空白的卡插入系統,輸入以下命令進行恢復:
或者:
特別值得注意的是在備份和恢復後一定要使用命令確保數據正確的寫入到硬碟上或恢復到卡上。
TAG:尚程功夫 |