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

2023-05-16

阿里云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没用

已知相关问题:

  • Zerotier Android端不支持连接至Moon服务器,解决办法:

    Zerotier 非官方安卓客户端发布:支持自建 Moon 节点

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ardupilot板载计算机上云实践——第一步 的相关文章

  • 额温枪查表算法

    目前额温枪这个东西特别火 xff0c 所以大家都在搞这个事情 xff0c 那我也来蹭个热度吧 大概的工作原理 xff1a 热电堆传感器 gt ADC gt MCU gt LCD显示 其实原理很简单 xff0c 那比较麻烦的事情就是温度补偿和
  • ESP32-IDF 使用VSCODE添加自己的头文件后无法找到的问题

    最近在学习esp32 xff0c 使用VSCODE进行开发 今天在添加自己的项目文件 xff0c 编译后 xff0c 系统提示找不到头文件 xff0c 找了很久 xff0c 最终在大佬同事的帮助下才解决 xff0c 这里记录一下 情况一 x
  • VMWARE安装VM TOOLS后依旧无法拖拉文件的解决方法

    utuntu版本 xff0c 18 04 5 安装虚拟机后又安装了vm tools 并且所有能配置的都配置了 但是依旧无法实现文件的拖拽 这些都配置了 xff0c 还是不行 命令安装vmtools时系统提示 open vm tools pa
  • windows bat脚本学习一(基础指令)

    1 pause 暂停批处理的执行并在屏幕上显示 34 请按任意键继续 34 例如 xff1a 改脚本执行结果为 xff1a 2 echo 显示指令 xff0c 会把需要显示的内容展示出来 例如 结果为 xff1a 3 echo off 在此
  • 常见导航坐标系定义

    常见坐标系 在导航系统中有几种常见的坐标系 xff1a 大地坐标系 xff0c 地心惯性参考系 xff0c 地心地固参考系 xff0c 切平面坐标系 xff0c 随体坐标系 其中大地坐标系和地心惯性参考系是非加速参考系 xff0c 不随地球
  • FreeRTOS学习一(简介)

    1 什么是FreeRTOS RTOS从名字上可以分为free和RTOS两部分 free是免费的意思 xff0c RTOS全称是Real Time Operation System xff0c 译为实时操作系统 那FreeRTOS的意思就是
  • FreeRTOS学习五(信号量)

    信号量是操作系统中重要的一部分 xff0c 信号量一般用来进行资源管理和任务同步 信号量分为二值信号量 计数型信号量 互斥信号量 不同信号量的应用场景也不同 xff0c 但是有些应用场景是可以互换着使用的 信号量简介 信号量常常用于控制对共
  • FreeRTOS学习七(事件标志组)

    RTOS中可以通过信号量来完成同步 xff0c 但是信号量只能与单个的事件或任务进行同步 有时某个任务可能会需要与多个事件或任务进行同步 xff0c 此时信号量就无法满足要求了 事件标志组就排上了用场 事件位 xff08 事件标志 xff0
  • 蓝牙学习二(连接和通讯简述)

    1 简介 蓝牙的通信是双向 的 xff0c 为了创建和维护一个BLE通信连接 xff0c 在蓝牙中引入了 角色 这一概念 xff0c 一个BLE设备不是主机 xff08 集中器 xff09 就是从机 xff08 外围设备 xff09 角色
  • 鸿蒙Hi3861学习十-Huawei LiteOS-M(消息队列)

    一 简介 消息队列 xff0c 是一种常用于任务间通信的数据结构 xff0c 实现了接收来自任务或中断的不固定长度的消息 xff0c 并根据不同的接口选择传递消息是否存放在自己空间 任务能够从队列里面读取消息 xff0c 当队列中的消息是空
  • 鸿蒙Hi3861学习十一-Huawei LiteOS-M(内存池)

    一 简介 LiteOS将内核与内存管理分开实现 xff0c 操作系统内核仅规定了必要的内存管理函数原型 xff0c 而不关心这些内存管理函数是如何实现的 LiteOS内存管理模块管理系统的内存资源 xff0c 包括 xff1a 初始化 分配
  • 鸿蒙Hi3861学习十二-Huawei LiteOS-M(osXX与LOS_XX)

    一 LOS XX是什么 LOS XX是LiteOS M或LiteOS A内核提供的接口 例如 xff1a LOS TaskCreate LOS TaskCreate LOS SemCreate等 因为LiteOS M和LiteOS A是针对
  • 关于单片机替代PLC的思考

    原理上看 xff0c PLC和单片机是一样的 只不过 xff0c PLC更贴近芯片的内部 xff0c 所用语言更接近数字逻辑控制 单片机 xff0c 接近于c了 更接近于一个方便阅读的语言 虽然 xff0c 我觉得逻辑电路实际上看着比程序语
  • message from server: “Host is not allowed to connect to this MySQL server“解决办法

    报错 message from server 34 Host AUTOBVT HN63F77 is not allowed to connect to this MySql server 解决方法 xff1a 1 改表法 可能是你的帐号不允
  • 无人机相关知识解读

    目录 1 什么是云台 xff1f 2 云台的工作原理 xff1f 3 无人机吊舱是什么 xff1f 4 什么是无人机 xff1f 5 无人机都有哪些 xff1f 6 什么是多旋翼无人机 xff1f 7 什么是直升机无人机 xff1f 8 什
  • 中断及pendSV

    1 概述 通过任务及任务切换一节读者已经了解了任务切换的详细过程 其实要实现任务切换的功能前面讲的还远远不够 因为 PSP的操作必须在特权模式下 而用户的程序是工作在线程模式下的 所以 用户要想实现任务的切换功能就必须想办法让CPU工作在特
  • 修改VScode中的git地址

    最近遇到一个问题 xff0c 复制了其他的项目但是项目中的git文件删除不了 xff08 没有权限 xff1b 解决办法如下 xff1a 先查看当前项目的Git地址 xff0c 查看是否是Git上的对应地址 xff1a git remote
  • Matlab与.m脚本文件没有关联,怎么破?

    最近安装了比较新版本的Matlab xff0c 遇到了这样的问题 xff1a 1 xff09 m脚本文件与Matlab没有关联 xff0c 鼠标右击 gt 打开方式中 xff0c 没有Matlab这一选项 xff1b 2 xff09 m脚本
  • 高质量嵌入式Linux C编程学习摘要

    1 多线程方面 1 xff09 pthread create 创建的线程默认情况下是非分离状态的线程 xff0c 如果修改线程的状态属性 xff0c 需要使用pthread attr getdatachstate 和pthread attr
  • mavros常用消息类型表

    mavros订阅消息 xff1a global position 订阅GPS数据 消息名称 xff1a mavros global position global 类型名称 xff1a sensor msgs NavSatFix h 类型所

随机推荐

  • Solidworks踩坑随笔

    Solidworks无法打开问题终极解决办法 网上流传的solidworks无法打开的解决办法有如下几种 xff1a 使用solidworks安装包自带的修复工具修复 缺点 xff1a 耗费时间长 xff0c 而且不一定能找到原来下载的安装
  • 大疆A3、N3、M100飞控ONBOARDSDK二次开发经验分享

    开发流程 步骤一 选择开发方式 先去大疆的开发者网站 xff08 https developer dji com xff09 看资料 xff0c 我选择的是ONBOARD SDK stm32 xff08 图一 xff09 步骤二 观看官方资
  • Boost库教程

    Boost库教程 1 Lexical Cast 用于高效文本格式转化 using boost lexical cast 例 xff1a 将A转换为string类型 lexical cast A 错误消息使用try catch 捕捉 异常名为
  • 软路由连接NAS做链路聚合

    软路由连接NAS做链路聚合 群晖NAS支持多种链路聚合方式 xff0c 如自适应负载平衡 IEEE 802 3ad动态Link Aggregation 平衡XOR等方式 xff0c 其中 xff0c IEEE 802 3ad动态Link A
  • 软路由网络部署配置

    软路由网络部署配置 一 作为交换机二 作为一级路由器三 作为旁路由模式一 xff1a 主路由开 DHPC 43 N1 关 DHPC 非全局 xff09 设置步骤 模式二 xff1a 主路由开 DHPC 43 N1 关DHPC 全局 方法一方
  • PX4 vision_to_mavros定位

    PX4官方给出以下做法从而使用intel realsense t265深度相机作为视觉估计的硬件选择 在这里我使用pixhawk 4和realsense t265以及Jetson TX2机载计算机以及benewake tfmini激光测高模
  • Top 50 有趣网站

    50 经典桌面 这个名叫东子的偏执狂不知花了多少 工夫 xff0c mydeskcity com的谌萘看锏 了40G xff0c 很多图片都是站长本人在国 外搜集后 xff0c 自己进行加工的作品 http www mydeskcity c
  • PX4避障和轨迹规划(3DVFH*)

    采用伴侣计算机 Companion Computer 的方案 xff0c 通过使用mavros的obstacle distance插件订阅 mavros obstacle send话题 xff0c 进而通过local planner本地轨迹
  • PX4飞控控制投放装置

    PX4飞控控制投放装置原理跟相机触发方式一样 xff0c 都是通过映射辅助AUX通道实现对应的信号发送 相机触发方法参考如下链接 xff1a Camera Trigger PX4 User Guide 触发方法有很多种 xff0c 这里我们
  • PX4板载计算机外部控制

    板载计算机外部控制主要是使用第三方机载计算机 xff08 如 xff1a Intel Aero Jetson TX2 Jetson Nano 其他类型minipc xff09 等通过mavlink协议实现对飞控参数的获取和机载端控制 xff
  • PX4无人机配置4G空地多机组网系统

    前言 使用4G网络实现无人机地面端与天空端实时通信 xff0c 并基于蒲公英cloudVPN组网技术实现广域网内的异地组网 xff0c 进一步实现不限制距离的空地多机远程组网系统 cloudVPN组网无需公网IP xff0c 需要注册一个花
  • OpenWRT配置Zerotier实现内网映射

    OpenWRT加入zerotier xff1a zerotier使用教程 OPENWRT LEDE 配置ZeroTier网络教程 子绘绘的博客 CSDN博客 Openwrt路由通过Zerotier组网实现异地内网互访 Linux加入zero
  • PX4云台控制

    一 云台硬件配置 云台采用storm32bgc无刷三轴云台 xff0c 该云台支持通过飞控控制与WBUS多通道接收机控制 这里我们采用通过pixhawk4飞控进行控制 pwm控制模式 采用三条3pin杜邦线将飞控辅助通道AUX1 3连接至云
  • 行人和人脸识别数据集

    推荐一个可应用于无人车 无人机 监控识别相关的数据集 行人和人脸检测数据集 xff08 FEEMS xff09 xff1a GitHub neverland7D Face and Pedestrian Detection Dataset F
  • Acuro二维码识别与降落对准

    什么是Aruco码 xff1f Aruco码能做什么 xff1f 搜索任务 自主降落等辅助标识 替代复杂任务中较难识别的目标 xff08 短期替代 长期替代 xff09 SLAM中的地标 反解无人机位置 实现定点 最容易识别的目标之一 1
  • ADRC控制算法在多旋翼飞行器上的应用

    基础理论知识 xff1a 程序中涉及的部分知识点参考如下链接 xff1a ADRC算法以及参数整定 xff1a 关于ADRC算法以及参数整定 xff08 调参 xff09 的一些心得体会 西涯先生的博客 CSDN博客 adrc控制算法 AD
  • 补充总结:现代控制理论

    补充内容 xff1a 现代控制理论与经典控制理论的区别 xff1a 经典控制理论主要是借助于传递函数研究系统输出与输入的关系 xff0c 而不管系统到底内部结构如何 xff0c 好比一个未知的 黑匣子 现代控制理论相对而言是要研究系统内部的
  • 网上英语学习资源大整理

    翻译 http www bilinguist com 汉英论坛 xff0c 高手云集 url http www chinatranslate net url 中国翻译网 xff0c 号称全国最大的翻译专业网站 url http gb tra
  • 使用PID和LQR控制器进行多旋翼飞行器控制

    任务内容 通过调整PID和LQR控制器以实现稳定悬停的多旋翼飞行器 xff0c 运用在无论是在仿真中还是在实际系统中 参考内容 LQR控制部分基础参考内容 xff1a LQR控制器 参考链接 xff1a Linear Quadratic R
  • Ardupilot板载计算机上云实践——第一步

    阿里云ECS在基于MAVLink的飞行器的数据中转与日志上云应用 自己先搭建了一个Demo用于测试稳定性 xff0c 访问地址 xff1a http 182 92 127 202 8123 Ardupilot 官方在今年 xff08 202