# 5.1 Gazebo
## 5.1.1 簡介
ROS中的工具就是幫助我們完成一系列的操作,使得我們的工作更加輕松高效。ROS工具的功能大概有以下幾個方向:仿真、調試、可視化。本節課我們要學習的Gazebo就是實現了仿真的功能,而調試與可視化由Rviz、rqt來實現,我們下節再依次介紹。
## 5.1.2 認識 Gazebo
對于Gazebo,大家可能并不陌生,因為我們在前面的學習過程中已經數次用到這個仿真環境,無論是在topic通信還是在service通信中,我們的demo都是在Gazebo中實現。
Gazebo是一個機器人仿真工具,模擬器,也是一個獨立的開源機器人仿真平臺。當今市面上還有其他的仿真工具例如V—Rep、Webots等等。但是Gazebo不僅開源,也是是兼容ROS最好的仿真工具。

Gazebo的功能很強大,最大的優點是對ROS的支持很好,因為Gazebo和ROS都由OSRF(Open Source Robotics Foundation)開源機器人組織來維護,Gazebo支持很多開源的物理引擎比如最典型的ODE。可以進行機器人的運動學、動力學仿真,能夠模擬機器人常用的傳感器(如激光雷達、攝像頭、IMU等),也可以加載自定義的環境和場景。
## 5.1.3 仿真的意義
仿真不僅僅只是做出一個很酷的3D場景,更重要的是給機器人一個逼近現實的虛擬物理環境,比如光照條件、物理距離等等。設定好具體的參數,讓機器人完成我們設定的目標任務。比如一些有危險因素的測試,就可以讓機器人在仿真的環境中去完成,例如無人車在交通環境復雜的交通要道的效果,我們就可以在仿真的環境下測試各種情況無人車的反應與效果,如車輛的性能、駕駛的策略、車流人流的行為模式等,又或者各種不可控因素如雨雪天氣,突發事故,車輛故障等,從而收集結果參數指標信息等等,只有更大程度的逼近現實,才能得出車輛的真實效果。直到無人車在仿真條件下做到萬無一失,才能放心的投放到真實環境中去使用,這即避免了危險因素對實驗者的威脅,也節約了時間和資源,這就是仿真的意義。

通常一些不依賴于具體硬件的算法和場景都可以在Gazebo上仿真,例如圖像識別、傳感器數據融合處理、路徑規劃、SLAM等任務完全可以在Gazebo上仿真實現,大大減輕了對硬件的依賴。
## 5.1.4 演示
和我們前面的實例測試一樣,我們打開教材的模擬場景,輸入`roslaunch robot_sim_demo robot_spawn_launch`
### 操作說明
* 平移:鼠標左鍵
* 旋轉:鼠標滾輪中鍵
* 放縮:鼠標滾輪
* 界面左側是控制面板
* 導入模型就在控制面板的insert,可以直接拖入模擬空間,也可以按需自制模型拖入。
## 5.1.5 小結
雖然Gazebo目前的功能還稱不上強大,同時還存在著一些BUG,但是對于我們的入門學習也已經是足夠了,隨著版本的更新,Gazebo也在越來越強大。
- 前言
- 第一章 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