# 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