1. 程式人生 > >樹莓派編譯安裝ros,原理步驟詳細

樹莓派編譯安裝ros,原理步驟詳細

先下載ros原始碼,可以在PC上執行,也可以在raspbian裡執行。此處在PC ubuntu上執行。
新增ros源

$ echo "deb http://packages.ros.org/ros/ubuntu jessie main" > /etc/apt/sources.list.d/ros-latest.list

新增key

$ wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -O - | sudo apt-key add -

更新源和升級

$ sudo apt-get update
$ sudo apt-get upgrade

安裝python-pip,pip是一個python包管理工具

$ sudo apt-get install python-pip

通過pip安裝一些下載ros原始碼的工具。rosdep用於解決ros包依賴的問題,rosinstall_generator用於生成下載原始碼的列表檔案.rosinstall,wstool用於根據原始碼列表檔案下載原始碼

$ sudo pip install rosdep rosinstall_generator wstool

初始化rosdep

$ sudo rosdep init
$ rosdep update

建立工作空間,存放原始碼和用於編譯

$ mkdir ~/ros_ws
$ cd ~/ros_ws

用rosinstall_generator生成原始碼列表檔案。ros_common是一個預定義的引數,包含常用ros包,此處也可新增其他一些常用包,比如geometry_msgs和tf。rosdistro選項指定ros的版本,最新版是kinetic,穩定版是indigo。

$ rosinstall_generator ros_comm geometetry_msgs tf --rosdistro kinetic --deps --wet-only --exclude roslisp --tar > ros_comm
.rosinstall

用wstool根據列表下載原始碼

$ wstool init src ros_comm.rosinstall

如果下載中斷,利用下面語句繼續

$ wstool update -t src

下載的原始碼存放在src資料夾裡。打包工作空間,傳到樹莓派上

$ cd ~
$ tar -zcf ros_ws.tar.gz ros_ws
$ scp ros_ws.tar.gz pi@192.168.1.xx:~

以下在樹莓派上進行,解壓原始碼

$ ssh pi@192.168.1.xx
$ cd ~
$ tar -zxf ros_ws.tar.gz
$ cd ros_ws

在樹莓派上執行新增源,key,apt-get update,安裝pip和rosdep的工作,步驟同PC。也可直接apt-get install python-rosdep,就不用安裝pip了。

用rosdep安裝依賴包,其中最大的算是libboost,注意要保證空間足夠。

$ rosdep install --from-paths src --ignore-src --rosdistro kinetic -y -r --os=debian:jessie

用catkin_make編譯。注意,因為樹莓派只有1G記憶體,預設是-j4編譯,在編譯到roscpp的時候會因為記憶體不夠編譯卡住。所以這裡加-j2,不會宕機但是比較慢。也可以-j4編譯到卡住之後再用-j2編譯。roscpp應該是倒數第幾個包,一共有五十幾個包。編譯需要20分鐘。

$ sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/kinetic -j2

結束後source一下就可以執行roscore了

$ echo ". /opt/ros/kinetic/setup.bash" >> ~/.bashrc
$ . ~/.bashrc
$ roscore

如果執行roscore出現一大堆執行時錯誤,如下
terminate called after throwing an instance of ‘std::runtime_error’ what(): locale::facet::_S_create_c_locale name not valid
是locale未設定,locale有很多變數,比較方便的方法是直接設定LC_ALL。先檢視有哪些locale可用

$ locale -a

找類似en_US.utf8,en_GB.utf8, zh_CN.utf8的,然後設定LC_ALL

$ echo "export LC_ALL="en_GB.utf8" >> ~/.bashrc
$ . ~/.bashrc

可以做一些收尾工作,用pip uninstall刪除wstool rosinstall_generator等包。/opt/ros算是綠色軟體,新的樹莓派用rosdep安裝依賴包以後,可以把打包的/opt/ros解壓了直接用,不用重新編譯了。