# 1.4 安裝ROS的步驟
## 1.4.1 ROS版本選擇
ROS目前只支持在Linux系統上安裝部署,它的首選開發平臺是Ubuntu。時至今日ROS已經相繼更新推出了多種版本,供不同版本的Ubuntu開發者使用。為了提供最穩定的開發環境,ROS的每個版本都有一個推薦運行的Ubuntu版本。如下表所示:
| ROS 版本 | 首選Ubuntu版本 |
| :------: | :------: |
| Lunar | Ubuntu 17.04 |
| **Kinetic(建議選用)** | **Ubuntu 16.04** |
| Jade | Ubuntu 15.04 |
| Indigo | Ubuntu 14.04 |
| ... | ... |
本教程使用的平臺是**Ubuntu 16.04**,ROS版本是**Kinetic**。
如果你還沒有安裝Ubuntu,建議選擇16.04版本(https://www.ubuntu.com/download/desktop )。并且我們建議在本地安裝,不推薦用虛擬機,這樣兼容性更好。
如果你已經安裝Ubuntu,請確定系統版本,在終端中輸入`cat /etc/issue`確定Ubuntu版本號,然后選擇對應的ROS版本。如果沒有安裝正確的ROS版本,就會出現各種各樣的依賴錯誤,所以安裝時請謹慎。
更多信息請參考[ROS官方網站](http://www.ros.org/)進行下載和安裝。
## 1.4.2 安裝ROS
在正式的安裝前,先檢查下Ubuntu初始環境是否配置正確。
打開`Ubuntu的設置`->`軟件與更新`->`Ubuntu軟件`->勾選關鍵字`universe`,`restricted`,`multiverse`三項。
如圖所示:

配置完成后,就可以開始安裝ROS了,打開終端。
### ① 添加sources.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'
這一步配置將鏡像添加到Ubuntu系統源列表中,建議使用國內或鏡像源,這樣能夠保證下載速度。本例使用的是中國科技大學的源。
### ② 添加keys
$ sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
公鑰是Ubuntu系統的一種安全機制,也是ROS安裝中不可缺的一部分。
### ③ 系統更新
$ sudo apt-get update && sudo apt-get upgrade
更新系統,確保自己的Debian軟件包和索引是最新的。
### ④ 安裝ROS
ROS中有很多函數庫和工具,官網提供了四種默認的安裝方式,當然也可以單獨安裝某個特定的軟件包。這四種方式包括桌面完整版安裝、桌面版安裝,基礎版安裝、單獨軟件包安裝。推薦安裝桌面完整版安裝(包含ROS、rqt、rviz、通用機器人函數庫、2D/3D仿真器、導航以及2D/3D感知功能),如下:
* Ubuntu 16.04安裝Kinetic版本
$ sudo apt-get install ros-kinetic-desktop-full # Ubuntu 16.04
* Ubuntu 14.04安裝Lndigo版本
$ sudo apt-get install ros-indigo-desktop-full # Ubuntu 14.04
如果你不想安裝桌面完整版,你還可以嘗試以下三種方式安裝:
* 桌面版安裝(包含ROS、rqt、rviz以及通用機器人函數庫)
sudo apt-get install ros-kinetic-desktop
* 基礎版安裝(包含ROS核心軟件包、構建工具以及通信相關的程序庫,無GUI工具)
sudo apt-get install ros-kinetic-ros-base
* **單獨軟件包安裝(這種安裝方式在運行ROS缺少某些package依賴時會經常用到。你可以安裝某個指定的ROS軟件包,使用軟件包名稱替換掉下面的PACKAGE)**
sudo apt-get install ros-kinetic-PACKAGE
例如系統提示找不到slam-gmapping,你就可以:
sudo apt-get install ros-kinetic-slam-gmapping
要查找可用的軟件包,請運行:
apt-cache search ros-kinetic
軟件包的依賴問題還可能出現在重復安裝ROS、錯誤安裝軟件包的過程中,出現有一些軟件包無法安裝,例如:
```bash
下列軟件包有未滿足的依賴關系:ros-kinetic-desktop-full :
依賴: ros-kinetic-desktop 但是它將不會被安裝;
依賴: ros-kinetic-perception 但是它將不會被安裝;
依賴: ros-kinetic-simulators 但是它將不會被安裝;
E: 無法修正錯誤,因為您要求某些軟件包保持現狀,就是它們破壞了軟件包間的依賴關系。
```
出現上述問題,有可能是自己的版本不合適不兼容造成,也可能是鏡像源沒有更新,具體的設置參考軟件和更新的截圖。當然也有可能是其他原因,比如更新了忘記刷新環境source一下,重開一個終端等等。具體的問題原因可以去搜索引擎上嘗試求助解決,或者登陸[ROS Wiki](http://wiki.ros.org/ROS/)(ROS的百科全書)去查詢解決自己的具體問題。
## 1.4.3 配置ROS
配置ROS是安裝完ROS之后必須的工作。
### ① 初始化rosdep
$ sudo rosdep init && rosdep update
這一步初始化rosdep,是使用ROS之前的必要一步。rosdep可以方便在你需要編譯某些源碼的時候為其安裝一些系統依賴,同時也是某些ROS核心功能組件所必需用到的工具。
### ② ROS環境配置
#For Ubuntu 16.04
$ echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
#For Ubuntu 14.04
$ echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
**注意:** ROS的環境配置,使得你每次打開一個新的終端,ROS的環境變量都能夠自動配置好,也就是添加到bash會話中,因為命令`source /opt/ros/kinetic/setup.bash`
只在當前終端有作用,即具有單一時效性,要想每次新開一個終端都不用重新配置環境,就用echo語句將命令添加到bash會話中。
### ③ 安裝rosinstall
[rosinstall](http://wiki.ros.org/rosinstall) 是ROS中一個獨立分開的常用命令行工具,它可以方便讓你通過一條命令就可以給某個ROS軟件包下載很多源碼樹。在ubuntu上安裝這個工具,請運行:
$ sudo apt-get install python-rosinstall
至此,ROS的安裝就結束了,下面測試ROS能否正常運行。
## 1.4.4 測試ROS
首先啟動ROS,輸入代碼運行roscore:
$ roscore
如果出現下圖所示,那么說明ROS正常啟動了!

接著我們測試ROS的吉祥物--小海龜,來簡單的測試ROS運行是否正常,同時也來體驗一下ROS的神奇與精彩!
啟動roscore后,重新打開一個終端窗口,輸入:
$ rosrun turtlesim turtlesim_node
你還看到一只萌萌的海龜出現在屏幕上,那么該怎么樣來操縱這只小海龜呢?重新打開新的一個終端,輸入:
$ rosrun turtlesim turtle_teleop_key
將鼠標聚焦在第三個終端窗口上,然后通過鍵盤上的方向鍵,進行操作小海龜,如果小海龜正常移動,并且在屏幕上留下自己的移動軌跡,如下圖。恭喜你,ROS已經成功的安裝、配置并且運行!

至此,ROS的安裝、配置與測試就全部結束了,下面就正式開啟ROS精彩的旅程!
- 前言
- 第一章 ROS簡介
- 機器人時代的到來
- ROS發展歷程
- 什么是ROS
- 安裝ROS
- 安裝ROS-Academy-for-Beginners教學包
- 二進制與源碼包
- 安裝RoboWare Studio
- 單元測試一
- 第二章 ROS文件系統
- Catkin編譯系統
- Catkin工作空間
- Package軟件包
- CMakeLists.txt
- package.xml
- Metapacakge軟件元包
- 其他常見文件類型
- 單元測試二
- 第三章 ROS通信架構(一)
- Node & Master
- Launch文件
- Topic
- Msg
- 常見msg類型
- 單元測試三
- 第四章 ROS通信架構(二)
- Service
- Srv
- Parameter server
- Action
- 常見srv類型
- 常見action類型
- 單元測試四
- 第五章 常用工具
- Gazebo
- RViz
- Rqt
- Rosbag
- Rosbridge
- moveit!
- 單元測試五
- 第六章 roscpp
- Client Library與roscpp
- 節點初始、關閉與NodeHandle
- Topic in roscpp
- Service in roscpp
- Param in roscpp
- 時鐘
- 日志與異常
- 第七章 rospy
- Rospy與主要接口
- Topic in rospy
- Service in rospy
- Param與Time
- 第八章 TF與URDF
- 認識TF
- TF消息
- tf in c++
- tf in python
- 統一機器人描述格式
- 附錄:TF數學基礎
- 三維空間剛體運動---旋轉矩陣
- 三維空間剛體運動---歐拉角
- 三維空間剛體運動---四元數
- 第九章 SLAM
- 地圖
- Gmapping
- Karto
- Hector
- 第十章 Navigation
- Navigation Stack
- move_base
- costmap
- Map_server & Amcl
- 附錄:Navigation工具包說明
- amcl
- local_base_planner
- carrot_planner
- clear_costmap_recovery
- costmap_2d
- dwa_local_planner
- fake_localization
- global_planner
- map_server
- move_base_msg
- move_base
- move_slow_and_clear
- navfn
- nav_core
- robot_pose_ekf
- rotate_recovery