首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
V2EX  ›  分享创造

从零到一为客户做 Demo 过程讲解:利用无人机在无 GPS 情况下自动驾驶巡检客机(仿真环境,无需实机,并已放出开源实现)

  •  
  •   MasterPa · 75 天前 · 1338 次点击
    这是一个创建于 75 天前的主题,其中的信息可能已经有所发展或是发生改变。

    各位大佬好!之前在 V2EX 上发过几次关于无人机技术的帖子,很多人很感兴趣但也有不少对无人机的误解。简体中文互联网似乎也没有太多如何开发无人机(而不是造无人机和用无人机航拍的)帖子。所以感觉与其直接发教程,不如来写一写为什么用无人机以及如何开发无人机的系列贴。抛砖引玉,希望对大家有帮助。

    TL DR 直接看代码版本 GAAS 巡检飞机: https://github.com/generalized-intelligence/GAAS/tree/master/demo/case_study_1

    众所周知,航空飞行的安全极其重要,所以检修人员需要定期对客机进行检修。因为体积问题,人工操作很难看到飞机的上半部分,所以每次检修都会动用大量的人力物力去一点点看。从 17 年开始,空客就率先开始利用无人机对载人的客机进行检修,这样更加方便快速。无人机可以拍摄大量的客机照片,检修人员只要在电脑上就可以分析飞机的状态。

    空客那边逐渐成熟之后,大家也知道国内肯定有公司想跟上。但这个无人机自主飞行巡检并不是传统做无人机硬件公司所擅长的地方,所以就有几家无人机公司希望我们能帮忙开发相关的软件。之所以传统无人机公司不擅长,有这么几个原因:

    1. 无人机需要完全自主飞行,无人操控,而且因为环境原因不能基于 GPS 作定点飞行(比如 DJI 的飞机里航点飞行就都是基于 GPS 的)。人工操作无法保证安全性。毕竟手一抖无人机可能就撞到飞机了,很多无人机飞手是不愿意飞这个场景的。而客机对检修的要求又非常严格,每次最好都可以在同一个位置拍照。但人工操作无法保证这种精度。
    2. 无人机本身也需要避障等功能,这类功能几乎都是软件算法实现的,国内工业级无人机公司基本上没有相关的团队。

    所以他们就找到了我们( www.gaas.dev ),我们为无人机提供开源自主飞行框架 GAAS。因为 GAAS 是开源的,有很多公司已经内部尝试这个技术了。但距离想用这个技术作实际任务的开发还有些难度,因为无人机公司很少有软件开发者;而且 GAAS 刚开源半年也还有一些问题。

    这类任务第一个难点就是如何向无人机公司、以及无人机公司的客户(航空公司)证明这件事是可以做的。毕竟空客的方案只有视频大家谁也没看过实际的效果。

    那解决这个问题的第一步就是在仿真环境内做个 demo,告诉大家这件事情是可以做的。这篇文章就是记录下这个过程。

    很大家想的可能不一样,无人机开发并不是说要去直接开发无人机真机。而且和车辆自动驾驶一样,先在仿真环境能做开发。这样能极大地简化我们的开发成本和时间。

    这就涉及到了两个概念:Hardware-In-The-Loop (HITL) 和 Software-In-The-Loop (SITL)。

    Hardware-In-The-Loop (HITL) 是指开发的时候硬件实际参与到测试中了。而 Software-In-The-Loop (SITL) 是指开发过程中不用实际硬件而是使用仿真环境。

    主流无人机的飞行控制系统(类似电脑中 CPU 的作用)都支持 SITL 模式开发。而且无人机发展多年,各类仿真环境已经足够拟真了,包括各类物理属性。在理想情况下,仿真环境开发完拿到实际机器上是可以直接用的。

    目前主流的仿真环境有两个:Gazebo 和 AirSim。Gazebo 更流行一些,但那个类似 Minecraft 的画质开发者自己看没问题,给客户的客户看可能就不太够了。所以这次我们用 AirSim。

    AirSim ( https://github.com/microsoft/AirSim ) 是一个由微软开发的开源的仿真平台,基于 Unreal 引擎。相对于 Gazebo 来说,AirSim 的仿真环境更加真实。AirSim 支持基于 PX4 的 Hardware-In-The-Loop (HITL) 和 Software-In-The-Loop (SITL)。AirSim 一般也可以用在车辆的自动驾驶中。

    像所有 Unreal 项目一样,AirSim 的项目也可以被打包出来,但是我不建议你在 Ubuntu 环境下这么做,因为在 Ubuntu 环境下 AirSim 使用 PX4 SITL 可能会出现崩溃的情况。我们也正在解决这个问题。

    另外,Unreal 需要的硬盘空间很大(大约 69 GB ),需要的硬件配置也很高,所以如果你不想在自己的电脑上安装一个如此巨大的软件,也可以使用 Gazebo,可以省却很多适配的烦恼。

    不过 AirSim 很吃性能,尤其是还用同步做无人机的运算。我们最开始用的时候遇到问题,因为是我们的软件出问题了,后来发现单纯是电脑卡掉了。所以你要是用 AirSim 的时候遇到问题,不妨看看是不是电脑卡了。

    Unreal 和 AirSim 都支持多个平台,你可以使用 BashOnWindow ( https://docs.microsoft.com/en-us/windows/wsl/install-win10 )。但是由于 PX4 只支持 Linux 平台,为了方便使用 GAAS,我们还是使用 Linux 版 Unreal。

    1.注册 Epic Games 账号,并关联自己的 GitHub 账号。 2.编译 Unreal 4.22 ,可能会需要约 69 GB 的硬盘空间。

    git clone -b 4.22 https://github.com/EpicGames/UnrealEngine.git
    
    cd UnrealEngine
    
    ./Setup.sh
    
    ./GenerateProjectFiles.sh
    
    make
    

    注意:AirSim 官方支持 Unreal 4.18 ,但是在本示例中所用到的 Unreal 布景只支持 Unreal 4.22 版本,而经过测试 AirSim 在 Unreal 4.22 版本下也可以使用,故我们选择了 Unreal 4.22 版本。

    1. Clone 并编译 AirSim:
    git clone https://github.com/Microsoft/AirSim.git
    
    cd AirSim
    
    ./setup.sh
    
    ./build.sh
    

    4.在 Linux 下进入 Unreal 的目录,并运行 UnrealEngine/Engine/Binaries/Linux/UE4Editor。 5.此时进入了选择项目的界面,在 AirSim 目录下的 Unreal/Environments 目录中,有一个名字叫 Blocks 预设的项目,但是在打开该项目之前请先把 AirSim/Unreal/Enviroments/Plugins 复制到 AirSim/Unreal/Enviroments/Blocks 中,然后在 Unreal 中打开项目。

    实话实说 AirSim 并不是一个特别好用的工具。因为它有很多 issue 并没有人处理,导致你会遇到一些可能没有现成解决方案的问题(或者说,你肯定会遇到这类问题)。不过如果你有 Unreal 的开发经验,会方便不少。不过这次只要跟着步骤走就可以。

    接下来进入开发的正题:

    How to launch PX4 SITL

    1.在 AirSim 中模拟 PX4 控制无人机之前,我们应该首先安装并运行 PX4 SITL 仿真,通过此仿真,你可以使用 PX4 作为飞控来控制 AirSim 中的无人机。 首先确保你已经成功安装了 PX4 的所需依赖。参考 GAAS 的教程( https://gaas.gitbook.io/guide/)。 2.获取 PX4 Firmware。注意:AirSim 需要 Firmware v1.8.2 版本。

    mkdir -p PX4
    
    cd PX4
    
    git clone https://github.com/PX4/Firmware.git
    
    cd Firmware
    
    git checkout v1.8.2
    

    3.编译并运行 SITL 模式:

    make posix_sitl_default  none_iris
    

    你可以编辑 (Firmware_Path)/posix-configs/SITL/init/ekf2/iris 文件来设置飞机参数

    4.修改 AirSim 设置( https://github.com/microsoft/AirSim/blob/master/docs/settings.md ),在 Linux 下,设置文件路径为 ~/Documents/AirSim/settings.json。

    {
     "SettingsVersion": 1.2,
     "SimMode": "Multirotor",
     "Vehicles": {
         "PX4": {
             "VehicleType": "PX4Multirotor",
             "UseSerial": false
         }
     }
    }
    

    5.在 Unreal 中点击 Play 按键,我们就打开了模拟器,你现在应该可以在地上看见一个无人机了。

    按 F1 键可以查看快捷键,你也可以打开 FPS 显示随时查看 FPS。

    6.下载 QGroundControl( http://qgroundcontrol.com),并修改监听端口

    7.这时便可以通过 QGC 来简单控制无人机了。

    使用 GAAS 控制无人机

    GAAS 是一款开源无人机自主飞行框架(我们自己做的哈哈哈),可以为无人机提供 SLAM、路径规划、坐标系转换等一系列功能。采用松耦合模块化设计,所以里面的一些功能比如 SLAM 的话 AGV 底盘车或者机械手臂甚至 VR AR 也可以用。https://github.com/generalized-intelligence/GAAS

    1.GAAS 通过 MAVROS 与 PX4 通信,所以如果想通过 GAAS 控制无人机,我们需要先启动 MAVROS。安装 MAVROS 请参考 GAAS 教程 1 ( https://gaas.gitbook.io/guide/software-realization-build-your-own-autonomous-drone/wu-ren-ji-zi-dong-jia-shi-xi-lie-offboard-kong-zhi-yi-ji-gazebo-fang-zhen )。推荐使用第二种方法安装 MAVROS。

    2.PX4 通过 UDP 通信,所以我们需要修改以下 MAVROS 的 fcu_url 参数,首先新建一个 launch 文件。

    cd (MAVROS_PATH)/mavros/launch
    cp px4.launch px4_airsim.launch
    

    3.修改第 5 行 <arg default="/dev/ttyACM0:57600" name="fcu_url"> 的默认参数为</arg>

    <arg name="fcu_url" default="udp://:[email protected]:14557" />
    

    4.运行 MAVROS:

    roslaunch mavros px4_airsim.launch
    

    这时我们使用 GAAS 教程一( https://gaas.gitbook.io/guide/software-realization-build-your-own-autonomous-drone/wu-ren-ji-zi-dong-jia-shi-xi-lie-offboard-kong-zhi-yi-ji-gazebo-fang-zhen ) 的 demo 便可以控制无人机。

    cd (GAAS_PATH)/demo/tutorial_1/1_px4_mavros_offboard_controller
    python px4_mavros_run.py
    

    在 AirSim 中模拟无人机对客机的巡检

    1.首先,搭建机库布景,推荐从 Epic Games 上直接购买资源(购买和下载必须在 Windows 上的 Epic Games 客户端进行)。然后对布景进行相应的修改,可以参考 Unreal 的文档。由于版权问题,我们不能直接放出 Project 文件,如果你在搭建 Unreal Project 的时候遇到了问题,可以随时提 issue .

    2.关闭 GPS。首先,先将 PX4 SITL iris 中的 EKF2_AID_MASK 参数改为 vision position fusion,对应值为 8。编辑 (Firmware_Path)/posix-configs/SITL/init/ekf2/iris 文件,将其中的 EKF2_AID_MASK 值改为 8,默认为 1。

    3.设置 AirSim 无人机参数,加入双目摄像头。我们在 GAAS 中提供了飞机的配置文件。

    git pull origin master
    cp (GAAS_PATH)/simulator/AirSim/settings.json ~/Documents/AirSim/
    

    在这个配置文件中,GPS 的 Enable 选项已经被设置成 false,并且加入了双目摄像头。

    4.在完成前期的设置之后,开启 PX4 SITL 并且启动 MAVROS 之后,我们可以点击 Play 来运行模拟器了,但是当前由于没有 GPS 你是不能起飞的,接下来我们需要开启 SLAM。

    5.我们在配置文件中设置了一组双目摄像头,基线为 12 cm 与 GAAS SLAM 默认设置相同,在运行 SLAM 之前,我们需要将模拟器中的摄像头发布到 ROS 中。首先安装 AirSim 的 Python 库,然后在 GAAS 的 simulator/airsim 目录中,运行 drone_image_ros.py

    bash
    sudo pip install airSim                                                     cd (GAAS_PATH)/simulator/airsim python drone_image_ros.py
    

    6.最后,参考 GAAS 教程三( https://gaas.gitbook.io/guide/software-realization-build-your-own-autonomous-drone/build-your-own-autonomous-drone-part-3-using-slam-in-gps-denied-environment-for-position-estimation),运行 SLAM 后,你就可以使用 AirSim 来模拟飞机的巡检了。

    注意:当你使用 SLAM 时,请进入 Unreal 的 Edit >> Editor Preference 中把 Use Less CPU when in Background 选项关闭。不然的话当 Unreal 处在后台运行的时候,会影响帧率。

    结尾

    这就是我们做一个 Demo 的过程。其实不麻烦。而且有了仿真环境,我们可以尝试开发出各种各种关于无人机的使用场景。我们也用 AirSim 模拟了无人机快递。也许你会有更有意思的创意!

    GAAS 巡检飞机项目地址在这里: https://github.com/generalized-intelligence/GAAS/tree/master/demo/case_study_1

    如果你感兴趣的话,可以给我们一个 Star,那我们会很开心!

    8 回复  |  直到 2019-09-03 13:39:34 +08:00
        1
    RLinux   75 天前   ♥ 1
    牛逼。。
        2
    zxcdsaz   75 天前   ♥ 1
    真牛逼。。
        3
    MasterPa   74 天前
    @zxcdsaz
    @RLinux 多谢鼓励!
        4
    chesterzzy   74 天前
    牛逼。。。
        5
    kile   74 天前
    好牛逼。。。
        6
    mashuai   74 天前
    厉害了。。
        7
    titivillage   72 天前
    佩服!
        8
    FairyKID   70 天前
    膜拜大佬
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4052 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 83ms · UTC 07:46 · PVG 15:46 · LAX 23:46 · JFK 02:46
    ♥ Do have faith in what you're doing.