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 在這裏下載:http://www.ubuntukylin.com/downloads/
再推薦一個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]命令試試看。這也有助於理解工作空間覆蓋的問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章