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

3 篇文章 0 订阅
2 篇文章 0 订阅

阿里云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 图数传的方案:

APSync - Dev documentation

Raspbian-Server:

Rpanion-Server

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

官方采用连接至AWS云,但是在国内由于网络限制等原因,AWS速度较慢,因此这里我们用阿里云替代AWS实现如下功能。

Rpanion连接至云服务器:

RPanion+AWS+AP_Cloud to upload and process logs in the cloud

如何上传SSH公钥:

【SSH密钥生成与使用】_Silence.Wang的博客-CSDN博客_ssh密钥生成

Node.js 后台运行:

包名:forever

node.js如何在后台运行_清风丶的博客-CSDN博客_node 后台运行

注:

  • 目前版本为0.8,还未添加 cloud upload 功能,可参考下面的步骤升级组件

    # ssh to rpanion
    cd Rpanion-server/deploy
    ./upgrade.sh
    sudo reboot now
    
  • 安装PyYAML和mavproxy的步骤直接运行可能会报错:

    # 先运行下面这一步
    pip3 install future
    pip3 install PyYAML mavproxy --user
    
  • node index.js这里会报错,应该是找不到express二进制包:

    手动安装一下该二进制包即可:

    npm install express
    
  • Node这里采用宝塔的PM2管理器安装最新版本,需要修改以下命令

    sudo setcap 'cap_net_bind_service=+ep' echo "$whereis node"
    

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.

  2. 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

    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中转服务器:

使用Zerotier在私有云服务器中搭建Moon服务器_Adair~Z的博客-CSDN博客_zerotier搭建moon没用

已知相关问题:

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值