无人机实验平台(十) 室内悬停问题

2023-05-16

VirtualStick Mode

VirtualStick Mode是Sdk提供的一种底层控制模式,通过模拟物理摇杆的运动向无人机按照一定频率发送摇杆差分信息,使得无人机按照类似于被物理摇杆控制的方式运行,但是此时物理摇杆由程序控制。开发者需要关注最底层的控制细节,因此存在失控的危险性。

VirtualStick Mode存在以下技术难点:

  1. 在VirtualStick Mode下,无人机为ATTI模式,其悬停精度不高,存在一定误差,容易影响进一步操作。
  2. 开发者需要关注底层控制,而无人机底层控制采用的坐标系与展现给应用层的坐标系不同,需要考虑坐标转换问题。
  3. 由程序控制飞行,在实验过程中需要关闭许多安全模块,如主动避障等,在程序失效的情况下会引发危险。

最终,底层选用VirtualStick Mode模式,通过虚拟摇杆对无人机发送控制信号。该模式基于Body坐标系,将Yaw,Roll,Pitch以三元组形式发送给无人机,需要以5Hz-20Hz的频率持续发送,无人机将把以这个频率发送的控制信号视为连续操作。信号发送将使用Java中Timer的Schedule进行定时调度,保证信息始终在以一定频率发送。

控制精度分析

       对于Mavic 2 Zoom而言,其悬停主要由两个模式实现,即GPS模式和OPTI模式,后者在GPS信号弱时被使用,能够实现较弱精度的悬停。OPTI模式通过摄像头对地面的图像进行拍摄,并根据图像偏移度修正电机的速率,从而实现悬停,但是该模式对地面环境要求较高,对纯色地面识别效果极差。ATTI(姿态模式)难以稳定悬停。

根据官网数据,该无人机在GPS模式下的定位精度为+-0.1m,在OPTI模式下仅为+-0.5m,在室外环境下这种偏移量可以忽略,但是在室内环境的狭小空间内,微小的定位差异都可能导致严重的问题,这为项目验证成果提供了难度,即难以推算其不稳定的定位是来自于飞控系统还是自然误差。而在ATTI(姿态模式)下,无人机难以稳定悬停。遗憾的是,在切换到虚拟摇杆模式后无人机会强制进入JOYSTICK模式,其类似于ATTI模式,使得项目组始终无法确保其悬停的精度。

在GPS信号良好时,允许开启AdvancedVirtualStickMode,该模式允许使用GPS对虚拟摇杆操作时产生的偏差进行修正,实现较为精确的悬停。然而在虚拟摇杆下采用OPTI模式悬停虽然是一个很好的想法,官方却并未提供这方面的技术支持,无人机也无法切换到该模式。

为了更好验证结果,项目提出了一个折中的解决方案,即使无人机在低亮度下运行,并在底部开启近地照明光。该光线可以用于模拟无人机执行任务时的信号覆盖面积,而任务点模拟信号节点,在飞行过程中,可以通过该光圈内是否存在目标任务点来判断飞行是否精确,从而解决了在无人机和地面存在一定高度差的情况下,肉眼难以观察无人机定点情况的弊端。在验收阶段,项目也会通过上述方式考察控制效果。

实际测试问题

        进入验收阶段后,对无人机进行室内测试是最为关键的一部分,然而此前没有暴露出的许多问题却逐渐展现出来,主要体现在两个方面:

指南针精度问题

        没错,无人机是基于NED坐标系控制方向的,而NED坐标系是依靠指南针来标定的(至少室内是这样),这就意味着当指南针产生偏差时,无人机会出现严重的定位精度问题,尽管这种误差并不大,可能只有1-5°,但是这种程度的误差足以让实验的所有目标点都产生误差,从而使得路径产生了旋转。这是令人绝望也是懊恼的,因为几乎每次回到试验场地,无人机的指南针都会存在偏差而且大多和上次不同。这种偏差已经离谱到无人机所指示的北方和手机指南针都存在很明显的误差了。

        体现在实验中,最令人沮丧的就是很可能上次飞行成功了,过一段时间再尝试就会出现明显的偏差,而再过一段时间又有可能成功。当然,模拟器中的飞行始终是正常的,因为模拟器不会存在硬件造成的问题。这种底层指南针造成的问题并非是通过软件能够解决的了——毕竟预设的方向都错了。大概唯一的办法只能是升级设备,或者干脆自立门户,采用其它定位方式了。

        值得庆幸的是,室外的飞行状况良好,这很可能是因为室外有GPS接入,让无人机获得了更精确的方向感。

悬停漂移问题

        如上文控制精度一节所说,无人机要实现悬停一般是GPS和OPTI作用。但是大概是因为sdk开发者对虚拟摇杆功能的支持不足,切换到虚拟摇杆后FlightMode会变为JOYSTICK。该模式在RC上似乎被显示为ATTI,而无人机的行为也指示了现在其实是处于ATTI模式(姿态模式),该模式无人机仅通过IMU和各种传感器进行姿态维护,而由于气流导致的漂移是无法被修正的,可以说ATTI是一种强化版的手动模式(真正的手动模式不建议普通人使用,因为无人机完全不进行姿态维稳)。

        ATTI带来最大的问题就是漂移,不断地漂移,其几乎无法稳定悬停,特别是在屋内空间狭小的情况下,电机旋转带来的巨大风速会与墙壁碰撞造成向场地中间吹的横风,这种风向会严重干扰无人机的悬停与飞行,常常出现明明目标对准了,飞过去却已经偏出数十公分的情况。更糟糕的是ATTI模式在此时无法切换到OPTI模式,必须要关闭虚拟摇杆模式之后才能自动切换回OPTI(我不太理解这种设计的合理性)。

        同样的,在室外风速更大的时候反而能表现良好,因为在有GPS时允许设置AdvancedVirtualStick模式进行定位稳定,但是不知为何OPTI模式始终不能够开启。考虑到本实验一开始要在室内测试,这种精度问题造成的影响还是空前的。

修正

        本着存在问题要解决问题的心态,希望能够做出修正,但是经过分析之后,许多事情已经超出了代码能够解决的范畴,也许正是因为这些硬件问题,这款无人机才并不建议在室内使用——可是有些问题又确实是可以通过工具包来解决的,比如为什么要强制关闭下视定位才能使用虚拟摇杆呢?虚拟摇杆其实是由软件控制物理摇杆发送信号的,那么其信号与物理摇杆也没有很大不同,物理摇杆允许OPTI,而虚拟摇杆却不允许,这是无论如何也无法理解的。

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

无人机实验平台(十) 室内悬停问题 的相关文章

  • ch06-Pytorch的正则化与归一化

    ch06 Pytorch的正则化与归一化 0 引言1 weight decay 和 dropout1 1 Regularization1 2 Dropout 2 Normalization2 1 Batch Normalization2 2
  • ch07-Pytorch的训练技巧

    ch07 Pytorch的训练技巧 0 引言1 模型保存与加载1 1 序列化与反序列化1 2 PyTorch 中的模型保存与加载1 3 模型的断点续训练 2 模型 Finetune2 1 Transfer Learning amp Mode
  • opencv-contrib-Python编译module 'cv2.cv2' has no attribute 'xfeatures2d'

    opencv contrib Python编译module 39 cv2 cv2 39 has no attribute 39 xfeatures2d 39 引言解决步骤一解决步骤二 引言 opencv contrib Python编译出现
  • find_package()函数

    find package函数 引言1 find package用法2 find package原理3 A required library with LAPACK API not found 错误解决4 添加findpackage查询路径
  • py安装文件时报错usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]

    py安装文件时报错usage setup py global opts cmd1 cmd1 opts cmd2 cmd2 opts 引言solved 引言 报错 xff1a python setup py fastentrypoints u
  • VScode单步调试

    VScode配置 0 快捷键1 安装clang2 VScodeDebug3 Cmake支持gdb调试的方法 0 快捷键 稍大工程在vscode下的调试参考该博客 Ctrl 43 打开默认终端 Ctrl 43 Shift 43 新建新的终端
  • 串口通信简介

    串口通信 串口通信是一种串行异步通信 xff0c 通信双方以字符帧作为数据传输单位 xff0c 字符帧按位依次传输 xff0c 每个位占固定的时间长度 两个字符帧之间的传输时间间隔可以是任意的 xff0c 即传输完一个字符帧之后 xff0c
  • ubuntu16.0 ROS(介绍EAI的YDLIDAR-X4激光雷达在ROS下使用方法)

    YDLIDAR X4激光雷达介绍 YDLIDAR X4激光雷达是深圳越登智能科技有限公司 xff08 YDLIDAR xff0c 这家公司属于EAI xff09 研发的一款 360 度二维测距产品 xff0c 本产品基于三角测距原理 xff
  • php使用http_build_query,parse_url,parse_str创建与解析url

    1 http build query http build query 可以创建urlencode之后的请求字符串 span class hljs keyword string span http build query mixed spa
  • 无人驾驶小车调试笔记(六)-- 车轮校准

    简介 xff1a 小车的动力完全来自于两个电机带动的车轮 xff0c 在理想状态下 xff0c 给两个电机同样的驱动参数 xff0c 两个车轮会以同样的转速带动小车直线行驶 xff0c 而实际情况是每个电机可能都会有个体差异 xff0c 也
  • Nginx HTTP详解

    正文 1 Nginx启动流程 2 HTTP 初始化 新连接建立时的行为 在上次博客的最后可以看到 xff0c 在ngx event accept方法建立连接的最后一步 xff0c 将会调用ngx listening t监听结构体的handl
  • 时钟周期,机器周期,指令周期的相互关系

    1 时钟周期 61 振荡周期 xff0c 名称不同而已 xff0c 都是等于单片机晶振频率的倒数 xff0c 如常见的外接12M晶振 xff0c 那它的时钟周期 61 1 12M 2 机器周期 xff1a 8051系列单片机的机器周期 61
  • 单片机的分频是什么意思?

    分频就是单片机的时钟频率 xff08 也就是晶振的震荡频率 xff09 F经过12分频 xff0c 变换成F 12的频率 简单的来说就是以整数倍降低频率 2分频就是分频前的频率除以2 xff1b 4分频就是分频前的频率除以4 比如 xff1
  • NMOS和PMOS管

    这里我先说一下我自己分辨MOS管的方法 对于NMOS我们看下图中的箭头 xff0c 都是远离源头 对于PMOS我们看箭头 xff0c 都是指向源头 P xff1a POSITIVE积极的寻找自己的起源 N xff1a NEGTIVE消极的远
  • 基本运算放大电路

    我先说明 下面的内容应该很多人都看到过 xff0c 但是我建议还是细看 xff0c 最好自己推一下 我就是这么做的 运算放大器工作原理综述 xff1a 运算放大器组成的电路五花八门 xff0c 令人眼花瞭乱 xff0c 在分析运算放大器工作
  • PCB板框的绘制——AD19

    pcb板框的绘制当然首先要切换到keep out 层才行 找到设置 xff0c 找到keep out 假如我们要绘制一个矩形的板框 xff0c 我们选择线径就可以 手动绘制一个矩形的板框 我们需要让我们的板子边框按照我们所绘制的走线来定义
  • 零基础自学STM32-野火——GPIO复习篇——使用绝对地址操作GPIO

    今天主要是复习一下 结合野火的 零基础开发指南 名字没记住大概是这个 先放一张结构图 存储器映射 xff08 初学重点 xff09 xff1a 我们的片内外设比如 xff1a Flash Sram Fsmc 以及挂在AHB 总线上的外设 x
  • Lcd1602——斌哥51

    最新修改时间2022 7 22 LCD1602 16代表显示16个字符 xff0c 2代表总共显示两行 芯片的工作电压是4 5 5 5v 工作电流2 0ma xff08 5V xff09 模块最佳工作电压5 0v 字符尺寸 xff1a 2
  • 无人驾驶小车调试笔记(七)-- 相机校准

    简介 xff1a 在第五节的内容中 xff0c 我们学习了使用rqt工具集观看摄像头视频流的方法 xff0c 细心的同学应该会发现camera node发布的视频数据中的图像有变形现象 xff0c 图像变形会导致直线不直 xff0c 部分区
  • Python实现MySql、SqlServer增删改查操作

    span class token keyword import span pymssql span class token keyword def span span class token function connection sql

随机推荐

  • ds1302——斌哥51

    以下内容分别借鉴了 清翔 51 xff0c 斌哥51 xff0c 以及CSDN 普通的不普通少年 内部结构 xff1a DS1302 包括时钟 日历寄存器和 31 字节 xff08 8 位 xff09 的数据暂存寄存器 xff0c 数据通信
  • AD添加LOGO

    先上原文链接 xff1a http www allchiphome com circuit pcb logo creator http www allchiphome com circuit pcb logo creator http ww
  • 视频播放组件实战【LivePlayer H5播放器】

    在公司项目开发中 xff0c 有一个项目里面需要做一个视频播放的功能 xff0c 播放方式是调用海康平台提供的接口获取流地址来进行视频的播放并且最重要的是需要支持flash 由于前端用的Vue xff0c 对比了几个 xff0c 最后选择了
  • 如何用示波器测量串口

    如何确定时基 假如要测量的波特率为9600 则每一比特位的时间为 xff1a 1 9600 104 s xff0c 一般示波器横向上每个大格子里5个小格子 xff0c 要想看清一比特位一般需要一个小格子就够了 xff0c 则时基为 xff1
  • Keil使用命令行附加预定义宏编译

    1 前言 很多时候 xff0c 一份Keil工程代码可能需要满足多个不同的应用场景 可以通过逻辑判断 xff0c 将多个不同的点集成在一份代码之中 xff0c 但是嵌入式往往特别关注RAM空间 xff0c 集成过多的逻辑判断 xff0c R
  • Python的函数装饰器,@staticmethod、@classmethod 和 @property

    什么是Python 的 函数装饰器 xff1f Python 内置的 3 种函数装饰器 xff0c 分别是 xff20 staticmethod xff20 classmethod 和 64 property 那么 xff0c 函数装饰器的
  • C++11:原子交换函数compare_exchange_weak和compare_exchange_strong

    我们知道在C 43 43 11中引入了mutex和方便优雅的lock guard 但是有时候我们想要的是性能更高的无锁实现 xff0c 下面我们来讨论C 43 43 11中新增的原子操作类Atomic xff0c 我们可以利用它巧妙地实现无
  • C++11条件变量:notify_one()与notify_all()的区别

    notify one 与notify all 常用来唤醒阻塞的线程 notify one xff1a 因为只唤醒等待队列中的第一个线程 xff1b 不存在锁争用 xff0c 所以能够立即获得锁 其余的线程不会被唤醒 xff0c 需要等待再次
  • 数据库:group by 的使用

    一 概述 group by的意思是根据by对数据按照哪个字段进行分组 xff0c 或者是哪几个字段进行分组 二 语法 select 字段 from 表名 where 条件 group by 字段 或者 select 字段 from 表名 g
  • C++中 std::vector 的6种初始化方法

    1 vector lt int gt list1 默认初始化 xff0c 最常用 此时 xff0c vector为空 xff0c size为0 xff0c 表明容器中没有元素 xff0c 而且 capacity 也返回 0 xff0c 意味
  • MIMO雷达处理1

    参考文献 MIMO RADAR SIGNAL PROCESSING 以下为我自己的理解 xff0c 如有问题 xff0c 请指出 目录 初步分析虚拟阵列123 确认目标数 初步分析 MIMO radar与相控阵雷达区别在于MIMO中的各天线
  • AndroidStudio生成aar包和如何使用aar包

    我用的是android studio 2 0正式版 1 简介 aar包是Android studio下打包android工程中src res lib后生成的aar文件 xff0c aar包导入其他android studio 工程后 xff
  • C++智能指针详解:shared_ptr

    C 43 43 没有内存回收机制 xff0c 每次程序员new出来的对象需要手动delete xff0c 流程复杂时可能会漏掉delete xff0c 导致内存泄漏 于是C 43 43 引入智能指针 xff0c 可用于动态资源管理 xff0
  • C++算法题:关于树的算法

    问题1 xff1a 输入一棵二元查找树 xff0c 将该二元查找树转换成一个排序的双向链表 要求不能创建任何新的结点 xff0c 只调整指针的指向 什么是二元查找树 xff1f 比如 xff1a 转换成双向链表的顺序是 xff1a 1 3
  • C++算法题:递归和栈的算法

    问题1 xff1a 跳台阶问题 具体描述 xff0c 一个台阶总共有n级 xff0c 如果一次可以跳1级 xff0c 也可以跳2级 求总共有多少总跳法 xff0c 并分析算法的时间杂度 相当于从下往上跳 xff0c 最后剩一个 xff08
  • Linux的.service服务 实现程序开机自启

    一 service文件的位置 所有可用的单元文件存放在 lib systemd system 和 etc systemd system 目录 我们需要在 lib systemd system 下存放 service文件 xff0c 当sys
  • 计算机网络 复习提纲(完整版)

    第一章 概述 计算机网络 xff1a 利用通信线路和通信设备 xff0c 将地理位置和功能不同的多台计算机互联起来 xff0c 用完善的网络软件实现资源共享和信息传递的网络 组成 xff1a 计算机 xff0c 网络操作系统 xff0c 传
  • 无人机多任务寻径仿真软件与实验平台(一)

    项目背景 xff1a 近年来 xff0c 无人机的应用领域已经得到了极大的拓展 xff0c 旋翼无人机凭借较大的载荷 xff0c 稳定的飞行状态与对高空环境的高度适应 xff0c 成为了应用最为广泛的一类无人机 在欧洲 xff0c 北美洲等
  • 无人机实验平台(七) 实验平台的坐标转换(上)

    为什么要做坐标转换 xff1f 大疆提供的sdk中指出 xff0c 无人机通常情况下通过两个坐标系来控制方向 xff1a 自身坐标系 xff08 Body xff09 和地面坐标系 xff08 N E D xff09 这两个坐标系可以相互转
  • 无人机实验平台(十) 室内悬停问题

    VirtualStick Mode VirtualStick Mode是Sdk提供的一种底层控制模式 xff0c 通过模拟物理摇杆的运动向无人机按照一定频率发送摇杆差分信息 xff0c 使得无人机按照类似于被物理摇杆控制的方式运行 xff0