# 1.5 安裝ROS-Academy-for-Beginners教學包
在1.4節我們已經用apt工具安裝好了ROS,apt安裝的軟件包都是二進制形式,可以在系統中直接運行,它們是ROS官方提供給用戶的應用程序。然而很多時候我們需要自己做一些定制改寫,或者運行第三方開發的軟件包,這個時候就需要下載源代碼進行編譯。
本節我們下載本書配套的ROS-Academy-for-Beginners軟件包,給讀者演示源碼包下載-編譯-運行的完整流程。后續章節的主要代碼都基于這個軟件包,請讀者按照流程下載編譯。
## 下載源碼包
在Ubuntu系統上,確保git已經安裝
```bash
$ sudo apt-get install git
```
然后在創建一個名為tutorial_ws的工作空間,在它的的src路徑下克隆ROS-Academy-for-Beginners軟件包
```bash
$ cd
$ mkdir -p tutorial_ws/src #創建catkin工作空間
$ cd tutorial_ws/src #進入src路徑,克隆教學軟件包
$ git clone https://github.com/DroidAITech/ROS-Academy-for-Beginners.git
```
## 安裝依賴
并且安裝ROS-Academy-for-Beginners所需要的依賴
```bash
$ cd ~/tutorial_ws
$ rosdep install --from-paths src --ignore-src --rosdistro=kinetic -y
```
**注意**:以上命令非常重要,缺少依賴將導致軟件包無法正常編譯和運行。
在開始編譯之前,需要確保Gazebo在7.0版本以上
```bash
$ gazebo -v #確認7.0及以上
```
如果你的Gazebo版本低于7.0,則需要進行升級
```bash
$ sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'
$ wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install gazebo7
```
## 編譯
接著回到catkin_ws下編譯
```bash
$ cd ~/tutorial_ws
$ catkin_make
$ source ~/tutorial_ws/devel/setup.bash #刷新環境 方法一
$ rospack profile #刷新環境 方法二
```
**注意**:source命令,編譯完成后必須刷新一下工作空間的環境,否則可能找不到工作空間。許多時候我們為了打開終端就能夠運行工作空間中編譯好的ROS程序,我們習慣把`source ~/tutorial_ws/devel/setup.bash`命令追加到`~/.bashrc`文件中(rosacademy_ws替換為你的工作空間名稱),這樣每次打開終端,系統就會刷新工作空間環境。你可以通過`echo "source ~/tutorial_ws/devel/setup.bash" >> ~/.bashrc`命令來追加。
## 運行仿真程序
編譯完成后就可以運行本教學配套的仿真了,輸入
```bash
$ rospack profile
$ roslaunch robot_sim_demo robot_spawn.launch
```
你會看到仿真畫面啟動,仿真界面中包括了軟件博物館和Xbot機器人模型。

再打開一個新的終端,輸入以下命令,用鍵盤控制機器人移動
```bash
$ rosrun robot_sim_demo robot_keyboard_teleop.py
```
聚焦控制程序窗口,按下i、j、l等按鍵,這樣你就可以通過鍵盤來控制機器人的移動了。
當你完成了這一步,首先恭喜你,你已經完成了ROS最常見的源碼下載-安裝依賴-編譯-運行的流程,在ROS社區有許許多多這樣的軟件包,基本都按照這樣的流程來運行。相信你一定可以舉一反三。

鍵盤控制仿真機器人移動這個demo展現了ROS分布式消息收發的特性。我們打開的雖然是鍵盤控制程序,但它可以替換為手柄控制、手機平板控制、甚至是路徑規劃自動控制。模擬器里的機器人并不關心是誰發給它的消息,它只關心這個消息是什么(速度、角速度等指令)。所以,每一個進程(節點)都各司其職,負責不同的任務,同時定義好消息收發的接口。如果我們現在要做路徑規劃任務,那么我們只用單獨再開發一個節點,同樣向底盤發送我們解算出的速度/角速度指令就可以了。
你現在可能對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