> For the complete documentation index, see [llms.txt](https://gaas.gitbook.io/guide/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://gaas.gitbook.io/guide/software-realization-build-your-own-autonomous-drone/gaas-zong-lan.md).

# GAAS 总览

这里是无人机自动驾驶系统 GAAS 的 GitHub 开源页面：<https://github.com/generalized-intelligence/GAAS>

## GAAS是什么

GAAS (Generalized Autonomy Aviation System) 是一套开源的无人机全自主飞行框架。GAAS 致力于为无人机智能应用提供一个泛用的开发架构，以此加速自动驾驶载人 VTOL 的到来。作为一个受 BSD 协议保护的项目，任何企业、研究人员、无人机爱好者都可以合法合规地改动我们的代码来满足其客制化的需求。

我们第一步的目标是让无人机做到真正无人，从而能够为人类进行更多的工作，并且可以让更多程序员和工程师更简单的为无人机编写程序和制作产品。长期目标是将 GAAS 应用在载人 VTOL 上（也许是飞行汽车）。我们现在支持无人和有人的旋翼和直升机驾驶。下一步计划支持 VTOL 和 eVTOL。

## 总览

在GAAS的GitHub首页上，可以看到项目主要包括以下几个文件夹：

![](/files/-M0D1plfXm1RYaTr9iAV)

* algorithms提供了一系列算法的实现，截止到本文完成时（2020年2月）已提供了下列算法

> 1. 场景重识别，即给定一张图片，恢复出当前图片在给定环境中的位置，具体实现在 `algorithms/scene_retrieving`；
> 2. 3D 建模，具体实现在 `algorithms/sfm`；
> 3. [物体跟踪](https://youtu.be/C6902HKUVR8)，具体实现在 `algorithms/object_trace_tracking`；
> 4. 物体检测，具体实现在 `algorithms/image_detection`；
> 5. 语义分割，具体实现在 `algorithms/image_segmentation`；

* software包含下列较为完整的功能模块，可以直接使用，截止到本文完成时（2020年2月）已提供了下列功能

> 1. 自动起飞，降落等功能实现在 `software/px4_mavros_scripts`为Python代码；
> 2. 无 GPS 环境下自主飞行功能的实现在 `software/SLAM/ygz_slam_ros`, 目前使用的是基于双目光流的 SLAM；
> 3. 基于双目视觉的避障的实现在 `software/Obstacle_Map`；
> 4. 路径规划的实现在 `software/Navigator`；

* hardware为GAAS推荐的硬件清单，可用于自行组装无人机
* demo包含本教程的每一节对应的示例代码
* simulator包含本教程使用的无人机仿真环境所依赖的相关配置文件

## 无人机硬件配置

如上文所属，在hardware文件夹中可以找到GAAS开发团队使用的硬件清单：<https://github.com/generalized-intelligence/GAAS/tree/master/hardware>，通过该清单你可以自己购买硬件组装一台无人机，若有需要你也可以自行配置无人机硬件。

如果你希望快速上手，直接开始写代码的话，你也可以通过邮件联系我们购买 GAAS 团队内部自己使用的开发套件：[adam.wang@gaas.dev](mailto:nina.rong@gaas.dev)

## GAAS的软件架构和无人机开发流程

### PX4飞控

由于无人机自动驾驶系统的开发有着较长的技术栈，使用单一项目和单一组件完成所有任务是不现实的——通常情况下，整个系统被拆分成若干个子系统，各个子系统之间独立运行并进行交互，共同完成控制无人机飞行的任务。

GAAS是整个技术栈的一部分，通过开源飞控套件PX4控制无人机飞行。关于PX4的详细信息可以从以下地址获得：

{% embed url="<https://px4.io/>" %}

关于PX4，有以下基本概念需要介绍：

* 在基于GAAS的无人机自动驾驶技术栈中，PX4工作在OFFBOARD模式下——此时PX4仅对无人机进行底层控制（例如飞行姿态控制），更高层次的导航定位等功能由其他部分完成。
* 基于PX4的无人机与地面控制站之间通过MAVLink协议进行通信，相关数据按照MAVLink协议的规格进行收发。
* 在本教程中，PX4以SITL方式运行，即Software-in-the-loop——使用PC机运行PX4飞控软件，完成无人机姿态控制；与之对应的是HITL，Hardware-in-the-loop，即使用专用飞控硬件。
* 无人机可以使用专业的飞行遥控器进行控制，也可以使用QGroundControl地面站软件进行控制，该软件可以运行在PC或手机上

下图展示了PX4控制无人机的全流程：

![](/files/-M0NdIARe6IJWeBsgnp_)

此处的无人机既可以是真实存在的无人机，也可以是仿真环境（也叫模拟器，Simulator）中运行的虚拟无人机——注意，为了避免人身和财产损害，**任何无人机控制软件都必须先在仿真环境中测试妥当再使用无人机真机进行测试。**

本教程中的大部分内容都使用Gazebo模拟器完成。

### ROS与MAVROS

ROS是机器人操作系统（Robot Operating System）的缩写，它提供了一系列针对机器人相关程序设计的操作系统级服务。通过ROS，在一台或多台计算机上运行的多个独立的程序可以非常容易地实现进程间通信（IPC），显著降低协作难度。

在ROS中，每一个运行的程序都是一个ROS节点（Node），全体ROS节点都可以通过ROS的核心roscore来与其他程序建立通信。ROS程序之间的通信内容以消息（Message）的形式承载——即ROS程序将需要传递的数据包装成消息，然后再进行传输。每一个ROS节点都可以通过指定的话题（Topic）发布数据，也可以订阅某个话题以接收对应的数据。

MAVROS是MAVLink针对ROS的封装，可以将MAVLink数据包封装成ROS的话题和消息，在ROS的网络中传递。GAAS的一系列组件均通过MAVROS与PX4飞控进行通信。

下图展示了GAAS的完整工作流程：

![](/files/-M0NgmyRzcHic8SUmFmA)

ROS提供了Python和C++的相关API，开发者可以简单地编写代码实现ROS节点的建立，话题的发布和订阅。GAAS的主要功能组件也是以Python和C++实现的。

以下是ROS的官方文档：

{% embed url="<http://wiki.ros.org/>" %}

## 如何使用GAAS

### 我想造一台自主飞行无人机

这个项目正好适合你！ 如果这是你第一次着手配置自动驾驶无人机的系统，可以继续阅读本教程——它将介绍GAAS提供的功能并指导你如何使用这些功能。

如上所述，GAAS基于ROS和PX4，为此你需要较为熟练地操作Linux系统——本教程提供了一个先修知识速查手册，列举了在后续的课程中可能会用到的Linux知识，供你查阅和解决问题。

如果在环境配置中遇到了困难，你可以尝试：

1. 在泛用搜索引擎中搜索错误报告，看看是否有其他人也遇到了类似的问题。
2. 在 [Issues](https://github.com/generalized-intelligence/GAAS/issues) 页面看看社区中是否有其他人遇到了类似的问题。
3. 如果前两步都无法帮助你，你可以提交一个新的 Issue 并加上 "Configuration" 的标签，寻求社区力量的帮助。

如果你已经可以熟练的运用这套系统，你也可以在社区里帮助新手上路，解决一些 Issue，或者在微信群里将你的项目进展分享给我们。

### 我想为项目做贡献

我们非常感激您对项目做贡献的意愿。 首先，你需要了解Python或C++语言，对 PX4, MavROS 和 Gazebo 有一定的熟悉程度，并且熟悉 [GitHub 的工作流程](https://git-scm.com/book/zh/v2/GitHub-%E5%AF%B9%E9%A1%B9%E7%9B%AE%E5%81%9A%E5%87%BA%E8%B4%A1%E7%8C%AE)。

[Open Issues](https://github.com/generalized-intelligence/GAAS/issues) 页面是一个好的开始。你可以看看有哪些已知的问题是你感兴趣的，或者你也可以新建一个 Issue 来告诉我们你的看法和有哪些想提高的地方。

另外，帮助项目运营最好的方式之一是帮助那些刚刚接触无人飞行的伙伴们快速上手这套系统。关注 Issues 页面中带有 “Configuration” 标注的 Issue 来帮助别的伙伴上手系统。具体细节请参阅 [CONTRIBUTING.md](https://github.com/generalized-intelligence/GAAS/blob/master/CONTRIBUTING.md)

## 其它

泛化智能 Generalized Intelligence 出品。 本项目受 BSD 3-Clause 协议保护。<https://github.com/generalized-intelligence/GAAS/blob/master/LICENSE>&#x20;

若GAAS对你有帮助，请在GAAS的Github页面上点击Star，为我们点赞\~

![](/files/-M0NjY79N7Ul1_Uk8XM2)

## 特别感谢

我们的项目并不是从零开始，而是站在了过去十余年无人机行业先驱的肩膀上。非常感谢 PX4 与 Dronecode 等组织对无人机行业发展的推动，让我们今天得以有机会制作 GAAS!

同时我们也十分感谢本项目的贡献者，你们可以在项目中的 [AUTHORS.md](https://github.com/generalized-intelligence/GAAS/blob/master/AUTHORS.md) 中认识他们。

感谢地面站社区在中文互联网上为 GAAS 提供的支持。如果你也对中文无人机社区感兴趣，欢迎访问：

<http://shequ.dimianzhan.com/topics>

Il Vole
