# 1.6 二進制包 vs. 源代碼包
## 1.6.1 二進制包與源代碼包
在1.4節我們通過apt方式安裝了ROS系統以及相關的軟件包,而在1.5節我們通過下載源碼編譯的方式安裝了一個ROS教學軟件包。這是兩種常見的軟件包安裝方式,通常我們的軟件包(Package)就可以分為二進制和源代碼。
二進制包里面包括了已經編譯完成,可以直接運行的程序。你通過`sudo apt-get install`來進行下載和解包(安裝),執行完該指令后就可以馬上使用了。因此這種方式簡單快捷,適合比較固定、無需改動的程序。
而源代碼包里是程序的原始代碼,在你的計算機上必須經過編譯,生成了可執行的二進制文件,方可運行。一些個人開發的程序、第三方修改或者你希望修改的程序都應當通過源代碼包的來編譯安裝。
| 區別 | 二進制包 | 源代碼包 |
| :---: | :---: | :---: |
| 下載方式 | `apt-get install`/直接下載deb | `git clone`/直接下載源代碼 |
| ROS包存放位置 | `/opt/ros/kinetic/` | 通常`~/catkin_ws/src` |
| 編譯方式 | 無需編譯 | 通過make/cmake/caktin |
| 來源 | 官方apt軟件源 | 開源項目、第三方開發者 |
| 擴展性 | 無法修改 | 通過源代碼修改 |
| 可讀性 | 無法查看源代碼 | 方便閱讀源代碼 |
| 優點 | 下載簡單,安裝方便 | 源碼可修改,便于定制功能 |
| 缺點 | 無法修改 | 編譯工具、軟件包依賴、版本和參數 |
| 應用場景 | 基礎軟件 | 需要查看、開發和修改的程序 |
在1.4中,我們用apt-get安裝了ROS及其組件,因此我們不需要編譯就可以運行turtlesim程序。對于這些程序,除非我們做操作系統的設計開發才會去下載源碼,否則直接用官方提供的ROS軟件包;而在1.5中,ROS-Academy-for-Beginners以源碼呈現,你可以看到每個demo下面的C++代碼。對于這些源文件我們必須`caktin_make`編譯,然后才能運行。
## 1.6.2 ROS二進制包的安裝
在ROS中,我們可能經常會遇到缺少相關的ROS依賴的問題。有些時候你編譯或者運行一些ROS程序,系統會提示找不到XXX功能包,如圖所示。
遇到這樣的問題,請先注意閱讀錯誤原因,看看是否有解決方法,也可以Google一下。如果是缺少ROS的依賴,通常可以用以下命令來安裝:
```bash
$ sudo apt-get install ros-kinetic-PACAKGE
```
將PACKAGE替換為系統提示缺啥少的軟件包,例如
```
$ sudo apt-get install ros-kinetic-slam-gmapping #GMapping-SLAM算法包
$ sudo apt-get install ros-kinetic-turtlebot-description #Turtlebot機器人模型包
```
所有APT官方中的ROS功能包都是按照**ros-<distro>-<pacakge-name>**的形式來命名。
- 前言
- 第一章 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