# 1.3 什么是ROS
## 1.3.1 什么是ROS
機器人是一個系統工程,它涉及機械、電子、控制、通信、軟件等諸多學科。以前,開發一個機器人需要花很大的功夫,你需要設計機械、畫電路板、寫驅動程序、設計通信架構、組裝集成、調試、以及編寫各種感知決策和控制算法,每一個任務都需要花費大量的時間。因此像電影《鋼鐵寫》中那樣,僅靠一個人的力量造出一個動力超強的人形機器人機甲是不可能的。

然而隨著技術進步,機器人產業分工開始走向細致化、多層次化,如今的電機、底盤、激光雷達、攝像頭、機械臂等等元器件都有不同廠家專門生產。社會分工加速了機器人行業的發展。而各個部件的集成就需要一個統一的**軟件平臺**,在機器人領域,這個平臺就是機器人操作系統ROS。
ROS是一個適用于機器人編程的**框架**,這個框架把原本松散的零部件耦合在了一起,為他們提供了**通信架構**。ROS雖然叫做**操作系統**,但并非Windows、Mac那樣通常意義的操作系統,它只是連接了操作系統和你開發的ROS應用程序,所以它也算是一個**中間件**,基于ROS的應用程序之間建立起了溝通的橋梁,所以也是運行在Linux上的**運行時環境**,在這個環境上,機器人的感知、決策、控制算法可以更好的組織和運行。
以上幾個關鍵詞(框架、中間件、操作系統、運行時環境)都可以用來描述ROS的特性,作為初學者我們不必深究這些概念,隨著你越來越多的使用ROS,就能夠體會到它的作用。
## 1.3.2 ROS特點
ROS具有這些特點:
* **分布式 點對點**
ROS采用了分布式的框架,通過點對點的設計讓機器人的進程可以分別運行,便于模塊化的修改和定制,提高了系統的容錯能力。
* **多種語言支持**
ROS支持多種編程語言。C++、Pyhton和已經在ROS中實現編譯,是目前應用最廣的ROS開發語言,Lisp、C#、Java等語言的測試庫也已經實現。為了支持多語言編程,ROS采用了一種語言中立的接口定義語言來實現各模塊之間消息傳送。通俗的理解就是,ROS的通信格式和用哪種編程語言來寫無關,它使用的是自身定義的一套通信接口。
* **開源社區**
ROS具有一個龐大的社區ROS WIKI(http://wiki.ros.org/ ),這個網站將會始終伴隨著你ROS開發,無論是查閱功能包的參數、搜索問題還是。當前使用ROS開發的軟件包已經達到數千萬個,相關的機器人已經多達上千款。此外,ROS遵從BSD協議,對個人和商業應用及修改完全免費。這也促進了ROS的流行。
## 1.3.3 ROS優缺點
ROS為我們開發機器人帶來了許多方便,然而它也確實存在一些問題:
| 優點 | 缺點 |
| :------: | :------: |
| 提供框架、工具和功能 | 通信實時性能有限 |
| 方便移植 | 系統穩定性尚不滿足工業級要求 |
| 龐大的用戶群體 | 安全性上沒有防護措施 |
| 免費開源 | 僅支持Linux(Ubuntu) |
總體來說,ROS更適合科研和開源用戶使用,如果在工業場景應用(例如無人駕駛)還需要做優化和定制。 為了解決實際應用的問題,ROS2.0做了很大的改進,目前正在開發之中,未來表現如何值得期待。
- 前言
- 第一章 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