Ardupilot板载计算机上云实践——第一步

本文介绍了如何在阿里云上实现基于MAVLink的飞行器数据中转与日志上云的应用,使用Rpanion-Server和Zerotier VPN进行配置。文中详细描述了硬件连接、软件安装和配置步骤,包括如何处理日志文件的上传和云服务器的设置。通过自建Moon中转服务器解决了Zerotier在国内的连接问题,确保飞行器的日志能够顺利上传至云端。

type
status
date
slug
summary
tags
category
icon
password

阿里云ECS在基于MAVLink的飞行器的数据中转与日志上云应用

自己先搭建了一个Demo用于测试稳定性,访问地址:http://182.92.127.202:8123/
Ardupilot 官方在今年(2022)的三月份发布了使用AWS云实现log日志的自动上载。(GitHub:AP_Cloud,该功能官方宣称目前还在完善中,我也在跟进相关进度)
这里我们使用Rpanion-Server(Ardupilot 机载计算机,基于Raspbian定制版镜像),由于该镜像自带mavlink-router和rtsp stream/UDP流视频广播相关组件,因此无需手动安装二进制包或编译安装。
Rpanion-Server基于树莓派系列开发板,将板载wifi模块变为AP,由于我们这里需要室外操作,因此需要单独安装一个4G LTE上网卡,这里我们使用华为EC3372无线上网卡。(其他Linux操作系统兼容的型号可能根据需要自行编译安装驱动)Rpanion-Server的目前最新版本是0.8,需要手动安装MAVLink rsync相关组件。(最新版本内置脚本一键运行即可自动编译安装)
注意:由于飞行器内空间限制,我们这里通过USB弯头延长线连接无线上网卡与机载计算机(树莓派),并利用机载计算机的自带UART1串口连接至飞行器自动驾驶仪的可用串口,将机载计算机的5V供电接口连接至1.5A BEC上并从飞行器端取电。(自动驾驶仪连接机载计算机的对应串口需要配置为MAVLink2。注意:如果连接至USB3.0接口,务必远离磁罗盘或使用带金属屏蔽的USB线防止干扰磁罗盘数据)。飞行器端配置自动驾驶仪的日志输出功能为3(File+MAVLink)。老版本的Ardupilot固件解锁会报错(Logging Failed),新版本固件已经修复该问题。
由于4G LTE上网卡连接至蜂窝移动网络后,IPv4地址为内网地址,因此这里我们需要配置Zerotier VPN虚拟专用网络。Zerotier VPN服务会使用Planet中央服务器尝试组网,若无法达成P2P直连,则使用Planet中央服务器或Moon中转服务器进行数据中转。由于4G LTE网络通信存在跨基站、跨运营商通信,基本无法达成P2P直连,且国内实测使用官方Planet中央服务器速度较慢,因此这里我们使用自建Moon中转服务器进行数据中转。Moon数据中转方法可自行CSDN或谷歌搜索。
云服务器端需要安装MAVProxy(这个功能是解析MAVLink协议)和Node以及相关依赖包。注意:要在云服务器安全组中放行对应端口否则无法访问。之后需要配置一下ssh无密码访问(包括公钥上传至服务器端等),在AP_Cloud的json文件中配置一下飞行器的IP地址(要填写VPN组网的IP)、端口号以及相关属性。
地面站端安装QGroundControl,并加入之前创建的虚拟局域网。(注意:如果使用移动端地面站APP,则使用Zerotier官方APP无法连接至自建Moon服务器,这里解决办法可以自行CSDN或谷歌搜索,第三方有大神根据Zerotier API整合Moon功能的APP)QGC地面站端设置TCP或UDP连接(TCP连接的目标IP地址是飞行器机载计算机在VPN虚拟局域网中的地址),然后等到地面站加载完参数即可看到飞行器的相关数据正常显示在QGC地面站上面。
飞行器端设置解锁起飞后同步上载日志文件,如果上述配置无任何异常,应该能在飞行器飞行任务结束上锁后在云服务器Web端看到最新的日志文件。(仅包含飞行日志,无遥测日志,遥测日志可以在板载计算机端或地面站端自行下载)

板载计算机MAVLink数传

Ardupilot 使用 APSync 作为 MAVLink 图数传的方案:
Raspbian-Server:

板载计算机连接至云服务器

官方采用连接至AWS云,但是在国内由于网络限制等原因,AWS速度较慢,因此这里我们用阿里云替代AWS实现如下功能。
注意:
需要设置 LOG_BACKEND_TYPE 以通过 MAVLink 传送日志数据(从解锁到上锁的数据,飞控SD卡里面的日志不传送)
Rpanion连接至云服务器:
如何上传SSH公钥:
Node.js 后台运行:
包名:forever
注:
  • 目前版本为0.8,还未添加 cloud upload 功能,可参考下面的步骤升级组件
    • 安装 PyYAML 和 mavproxy 的步骤直接运行可能会报错,原因在于 mavproxy 依赖特定版本的 future 问题,解决方案是先安装最新版的 future 再安装下面两个库,此时系统检测到了库已安装就不会再安装特定版本的从而避免报错:
      • node index.js这里会报错,应该是找不到express二进制包:
        • 手动安装一下该二进制包即可:
      • Node这里采用宝塔的PM2管理器安装最新版本,需要修改以下命令
        AP_Cloud 配置文件内容说明:
        位置:AP_Cloud/config/default.json
        webserver填写的是本机地址(0.0.0.0或者是127.0.0.1或者是localhost都可以,不建议填公网IP,否则内网下无法访问)
        ssh_private_key这里填写的是服务器端的私钥(注意:需要在Rpanion端新建文件:~/.ssh/authorized_key,并且将服务器端的公钥复制粘贴进去,如果是有多台无人机的话,需要每台无人机都粘贴服务器的公钥)
        dronelist这里有几台无人机需要配置就填写几台
        ssh_enable这里指是否通过服务器端向Rpanion端建立ssh连接
        logs_folder填写的是存放于本机的路径(从AP_Cloud根目录算起)
        remote_logs_folder填写的是远端的log路径(从系统根目录/算起)
        Answer:
        AP_Cloud与Rpanion之间有两种通信方式,
        1. AP_Cloud can get logs from the drone/s a few diffetent ways, one of them assumes the server can ssh TO the drones , using that private key, and it will try to "pull" logs off any drones that are turned on, and on the network, using ssh/rsync and that private key.
        1. if you don't know how private-key/public-key and ssh works, google it. eg: https://www.digitalocean.com/community/tutorials/understanding-the-ssh-encryption-and-connection-process
          1. the server or drone that INITIATES the connection needs to know the private key, and the place its connecting TO needs to have the public key. so, one setup is that the AP_Cloud initiates, and the drones are the destination... but its totally ok to do it the other way, and there are diffeerent pro-s and cons to each.
        使用Zerotier实现VPN组网:
        Zerotier组网穿透速度太慢,因此使用阿里云搭建Moon中转服务器:
        已知相关问题:
         
         
        Loading...