ROS的安裝、解除安裝以及Turtlebot包的安裝
一、前言
我的執行環境:
作業系統:Ubuntu Kylin 14.04
ROS版本:Indigo
背景說明:本文記錄了ROS的安裝和解除安裝過程與Turtlebot包的安裝過程以及其間遇到的問題
本文地址:http://blog.csdn.net/u013453604/article/details/49386953
二、ROS的安裝
1、ROS與Ubuntu版本的考慮
ROS作為機器人作業系統並不是一個像Windows、Linux那樣可以獨立執行的作業系統,他需要執行在Linux環境下。所以執行ROS的前提是電腦要裝有Linux系統,我的是Ubuntu。安裝之前需要注意的問題是ROS版本通常與Ubuntu版本是一一對應的,比如:
ROS Jade 僅支援Trusty (14.04)、Utopic (14.10) 和 Vivid (15.04)。
ROS Indigo 僅支援 Saucy (13.10) 和 Trusty (14.04)。
ROS Hydro 僅支援Precise(12.04)、Quantal(12.10)和Raring(13.04)。
截止到目前(2015.10.24),jade版本的ROS還對某些package不支援,比如初學者用到的Turtlebot包。
並且indigo版本的ROS相對於hydro版本來說有較大升級改動。
考慮到以上兩點我選擇了indigo版本的ROS進而決定了電腦上的作業系統是Ubuntu 14.04(雖然Ubuntu Kylin 15.04在中文的整合上有了很大改善,不需要操心中文輸入、顯示、亂碼的問題,還集成了Windows下的常用軟體,但是由於ROS版本要求只好放棄)。
Ubuntu Kylin 在這裡下載:
再推薦一個Ubuntu Kylin映象的下載地址:http://cdimage.ubuntu.com/ubuntukylin/releases/14.04/release/
大多數Linux版本的映象都能在這裡找到(並且提供BT種子):http://cdimage.ubuntu.com/
2、ROS安裝教程
ROS安裝我選擇apt-get的方式,因為原始碼安裝不僅編譯麻煩,後期遇到問題也會造成不必要的困擾,ROS WIKI上也不推薦從原始碼安裝ROS。
安裝過程參考ROS的中文版WIKI:http://wiki.ros.org/cn/indigo/Installation/Ubuntu
2.1配置Ubuntu軟體倉庫
按下電腦上的windows鍵開啟搜尋欄,輸入“軟體和更新”,開啟軟體倉庫如圖:
勾選以允許 “restricted”、”universe” 和 “multiverse”這三種安裝模式。
2.2新增 sources.list
$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
也可以選擇國內的源,速度快很多
中國科學技術大學:
$ sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'
中山大學:
$ sudo sh -c '. /etc/lsb-release && echo "deb http://mirror.sysu.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'
ExBot機器人實驗室:
$ sudo sh -c '. /etc/lsb-release && echo "deb http://ros.exbot.net/rospackage/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'
2.3新增Keys
$ sudo apt-key adv --keyserver hkp://pool.sks-keyservers.net --recv-key 0xB01FA116
2.4安裝
先更新Debian軟體包索引
$ sudo apt-get update
安裝桌面完整版(包含ROS、rqt、rviz、通用機器人函式庫、2D/3D模擬器、導航以及2D/3D感知功能):
$ sudo apt-get install ros-indigo-desktop-full
或者直接點選這裡啟動安裝。
2.5初始化 rosdep
在開始使用ROS之前你還需要初始化rosdep。rosdep可以方便在你需要編譯某些原始碼的時候為其安裝一些系統依賴,同時也是某些ROS核心功能元件所必需用到的工具。
$ sudo rosdep init
$ rosdep update
2.6環境設定
到了這一步要使用ROS的一些命令比如roscd、roslaunch還需要source一下setup.bash檔案:
$ source /opt/ros/indigo/setup.bash
如果不想每次用ROS都先執行一句上面那條source命令而是希望每次開啟一個新的終端時ROS環境變數都能夠自動配置好(即新增到bash會話中),那將會方便得多:
$ echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
$ source ~/.bashrc
在這記一下兩個檢視環境變數的命令,但寫在檔案中沒有載入的變數是查不到的
$ export | grep ROS
$ env | grep ROS
2.7建立工作空間
下面是一個建立工作空間的例子
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src
$ catkin_init_workspace
$ cd ~/catkin_ws/
$ catkin_make
$ source devel/setup.bash
2.8安裝 rosinstall
rosinstall 是ROS中一個獨立分開的常用命令列工具,它可以方便讓你通過一條命令就可以給某個ROS軟體包下載很多原始碼樹。
$ sudo apt-get install python-rosinstall
到這裡ROS的安裝就完成了,可以點選這裡開始ROS的初級教程。
三、ROS的解除安裝
由於我是用apt-get方式安裝ROS的,解除安裝使用如下命令:
$ sudo apt-get remove ros-*
解除安裝成功的效果就是/opt下的ROS資料夾被刪除,原先的ROS以及曾經安裝在ROS中的package也沒有了。
四、安裝turtlebot包
我移動機器人平臺是turtlebot,所以安裝turtlebot的package以執行現成的程式碼。
原先hydro版本的ROS下turtlebot包只有一個turtlebot資料夾,這也是一個獨立的工作空間,但是在indigo版本下的turtlebot包是三個組合工作空間分別是rocon、kobuki、turtlebot,這是三個並列同級的資料夾,這裡涉及到工作空間的覆蓋(overlay)問題。
如下步驟是從原始碼安裝
1、安裝前的準備
$ sudo apt-get install python-rosdep python-wstool ros-indigo-ros
$ sudo rosdep init
$ rosdep update
2、安裝rocon、kobuki、turtlebot
這三個是組合空間的關係,必須按照順序安裝
$ mkdir ~/rocon
$ cd ~/rocon
$ wstool init -j5 src https://raw.github.com/robotics-in-concert/rocon/indigo/rocon.rosinstall
$ source /opt/ros/indigo/setup.bash
$ rosdep install --from-paths src -i -y
$ catkin_make
$ mkdir ~/kobuki
$ cd ~/kobuki
$ wstool init src -j5 https://raw.github.com/yujinrobot/yujin_tools/master/rosinstalls/indigo/kobuki.rosinstall
$ source ~/rocon/devel/setup.bash
$ rosdep install --from-paths src -i -y
$ catkin_make
$ mkdir ~/turtlebot
$ cd ~/turtlebot
$ wstool init src -j5 https://raw.github.com/yujinrobot/yujin_tools/master/rosinstalls/indigo/turtlebot.rosinstall
$ source ~/kobuki/devel/setup.bash
$ rosdep install --from-paths src -i -y
$ catkin_make
從上面的安裝順序以及依次source的setup.bash檔案可以看出他們三個工作空間的層級關係。
3、環境設定
【kobuki平臺】
# 設定udev規則使得電腦自動識別kobuki串列埠,無需每次用chmod賦許可權
$ . ~/turtlebot/devel/setup.bash
$ rosrun kobuki_ftdi create_udev_rules
# 如果你使用Kinect作為3D感測器就設定一下TURTLEBOT_3D_SENSOR
$ echo "export TURTLEBOT_3D_SENSOR=kinect" >> ~/turtlebot/devel/setup.sh
$ source ~/turtlebot/devel/setup.bash
#將Turtlebot空間設定為預設空間,以後可以不用每次執行source命令
$ echo "source ~/turtlebot/devel/setup.bash" >> ~/.bashrc
接下來說一下電池變數
# 執行turtlebot_dashboard檢視Turtlebot執行狀態
$ roslaunch turtlebot_bringup minimal.launch
$ roslaunch turtlebot_dashboard turtlebot_dashboard.launch
# 如果看到上面面板上的筆記本電池能夠顯示電量就不用專門設定下面的電池環境變量了,如果無法正常顯示電量的話需要設定以下變數
$ echo "export TURTLEBOT_BATTERY=/proc/acpi/battery/BAT1" >> ~/turtlebot/devel/setup.sh
$ source ~/turtlebot/devel/setup.bash
如果顯示找不到/proc/acpi/battery/BAT1
說明電池檔案不在這個位置
Linux核心版本<= kernel 2.6的系統電池檔案位置應該在/proc/acpi/battery/
名字有可能是BAT0
或者BAT1
Linux核心版本是kernels 3.0+的系統,電池檔案在/sys/class/power_supply/
資料夾下,名字有可能是BAT0
或者BAT1
所以 TURTLEBOT_BATTERY=/sys/class/power_supply/BAT0
或者TURTLEBOT_BATTERY=/sys/class/power_supply/BAT1
最簡單辦法是在系統/
目錄下搜尋BAT0
或者BAT1
檔案,從而確認TURTLEBOT_BATTERY
的值
【create平臺】
修改~/.bashrc檔案,這樣每次啟動都將自動設定這些環境變數,否則每次都要用export命令逐個新增這些環境變數。
先開啟.bashrc檔案:
$ gedit ~/.bashrc
再在檔案末尾新增如下語句:
(我的移動機器人平臺是turtlebot一代:IRobot Create+Kinect)
# For a source installation
source ~/turtlebot/devel/setup.bash
# Export the turtlebot variables
export TURTLEBOT_BASE=create
export TURTLEBOT_STACKS=circles
export TURTLEBOT_3D_SENSOR=kinect
export TURTLEBOT_SERIAL_PORT=/dev/ttyUSB0
到這裡就安裝完成了。
可以以最小模式執行turtlebot機器人測試一下是否安裝成功,如果環境變數配置正確,下面命令中的單詞輸入一部分之後按下Tab鍵是可以自動補全該單詞的。
$ roslaunch turtlebot_bringup minimal.launch
4、另一種安裝方式
前面講了從原始碼安裝turtlebot包的過程,這種安裝方式使得包裡的原始碼都在使用者目錄(~/)下,執行節點的檔案就在~/rocon、~/kobuki、~/turtlebot相應的資料夾裡,這樣在執行中要修改引數或者修改某個節點就可以直接在這些資料夾下找到對應的檔案進行修改了。基於這點考慮,博主推薦使用前面介紹的從原始碼安裝的方式。
下面要介紹deb方式安裝的方法,這種方法很簡單,執行apt-get命令就可以了,但是問題就來了,這種方式安裝會導致turtlebot工作空間中的許多包單獨在/opt/ros/indigo/share裡面,根本看不出這些包之間的關係,有的時候想單獨執行一個節點而不記得名字也沒辦法根據程式碼來找這個節點,因為在/opt/ros/indigo/share資料夾下有無數個包,你根本找不過來。
所以對於想理解ROS的工作空間中的包之間的關係、launch檔案啟動哪些節點、如何編寫自己的節點和launch檔案的初學者博主不建議以deb方式安裝turtlebot包!!!
說了半天,deb安裝方式就是apt-get的安裝方式,一句話搞定:
$ sudo apt-get install ros-indigo-turtlebot ros-indigo-turtlebot-apps ros-indigo-turtlebot-interactions ros-indigo-turtlebot-simulator ros-indigo-kobuki-ftdi ros-indigo-rocon-remocon ros-indigo-rocon-qt-library ros-indigo-ar-track-alvar-msgs
如果你只是想用一下turtlebot裡的某些包而不關心程式碼,執行上面這行命令就行了。
然後是環境設定:
還是開啟.bashrc檔案:
$ gedit ~/.bashrc
再在檔案末尾新增如下語句:
(我的移動機器人平臺是turtlebot一代:IRobot Create+Kinect)
# For a deb installation
source /opt/ros/indigo/setup.bash
# Export the turtlebot variables
export TURTLEBOT_BASE=create
export TURTLEBOT_STACKS=circles
export TURTLEBOT_3D_SENSOR=kinect
export TURTLEBOT_SERIAL_PORT=/dev/ttyUSB0
和前面原始碼安裝不一樣的地方就是source的檔案不同。
【軼事】
博主一開始幹過一件很逗比的事兒,看ROSWIKI上英文教程安裝turtlebot包的時候二話不說,把教程裡所有命令依次貼上到終端執行一遍,那個教程裡是這樣的:
2.2節是deb方式安裝
2.3節是從原始碼安裝
這些命令我依次執行下來就是把兩種方式都走了一遍,這樣導致我的~/目錄下面有turtlebot包的程式碼,而/opt/ros/indigo/share也有這些程式碼,在沒注意source了哪個工作空間的情況下我根本不清楚一個命令下去執行的是哪個目錄下的節點,有的時候修改了節點引數,再次執行卻發現完全沒有變化,所有的這些問題都是因為我把turtlebot包安裝了兩次!!!
知道了問題的原因,那麼對於初學者的我來說那就好辦了,根據安裝的方式用同樣的apt-get命令解除安裝deb方式安裝的那些包:
$ sudo apt-get --purge remove ros-indigo-turtlebot ros-indigo-turtlebot-apps ros-indigo-turtlebot-interactions ros-indigo-turtlebot-simulator ros-indigo-kobuki-ftdi ros-indigo-rocon-remocon ros-indigo-rocon-qt-library ros-indigo-ar-track-alvar-msgs
還記得安裝這三個工作空間的時候執行的命令裡面有三句source命令,他們直接恰好是前後銜接的麼:
$ source /opt/ros/indigo/setup.bash
.
.
.
$ source ~/rocon/devel/setup.bash
.
.
.
$ source ~/kobuki/devel/setup.bash
這樣思路就很清晰了,剛開啟終端的時候預設是執行在turtlebot工作空間的,由於組合空間的層次關係(請看上面三句source命令),最頂層的/opt/ros/indigo/share也可以被rospack找到,這樣不管你是想執行turtlebot裡面的節點還是/opt/ros/indigo/share下面的節點系統都能找到,不信你用 roscd [package]或者rospack find [package]命令試試看。這也有助於理解工作空間覆蓋的問題。