无人机PX4固件—传感器多冗余机制测评讨论

2023-05-16

在开源无人机领域,传感器多冗余一直是PIXHAWK这款飞控的有别于其他开源飞控的特色和硬件成比较高的地方。我们从PIXHAWK控制板的硬件和软件两方面结合LOG日志来分析它的传感器多冗余机制。



MPU6000   3轴加速度和3轴陀螺仪

L3GD20     3轴陀螺仪

LSM303D   3轴加速度计和3轴磁力计

HMC5883   3轴磁力计

MPU9250   3轴加速度 3轴磁力计 3轴陀螺仪(最新版v2飞控才有)

飞控的传感器多冗余通过以上的传感器的组合,就构成了2个IMU。新版的V2在加入了一个MPU9250,就构成了3 IMU的组合。



关键词:sensor_combined,投票机制,confidence。


在函数中sensors.cpp是处理多冗余的基本函数。

MPU6000.cpp   L3GD20.cpp

HMC5883.cpp  LSM303D.cpp 

这几个驱动函数发布的

sensor_gyro

 sensor_mag

Sensor_accel ,uorb数据。

由sensors.cpp订阅,由VotedSensorsUpdate类做投票选择出2个(或者3个)传感器里面最可信的那一组数据,给EKF2做姿态解算和位置解算。


上面的传感器不断的发送出2组Accel/Gyro/Mag数据,投票机制选择出最可信的一组传感器数据(VotedSensorsUpdate)。这样就做到了多冗余机制。所以后来的V2版本的固件添加了一个MPU9250,那么就是3冗余的IMU了。换句话说你添加一个IMU,做4冗余的飞控也是同理了。

但是笔者以为还有一种多冗余IMU机制,就是每个单独的Accel/Gyro/Mag都去做EKF滤波,得出的IMU数据在来投票。这样似乎更为合理些,因为EKF2的滤波运算,计算量大,有计算崩溃的风险,EKF2解算崩溃,无论有几个IMU冗余,都会导致飞机失控。如果是多个EKF2独立解算,那么EKF2解算崩溃的几率将会小很多。但是这样一来目前版本的硬件的运算能力不足以支撑多个EKF2的运算。从官方的迹象来看,这种独立的EFK2 解算将会是以后的方向。


投票机制的核心算法:

在Firmware/src/lib/ecl/validation这个文件夹里面是投票机制的核心,摘抄代码如下:

while (next != nullptr) {

float confidence = next->confidence(timestamp);

if (static_cast<int>(i) == pre_check_best) {

pre_check_prio = next->priority();

pre_check_confidence = confidence;//置信区间

}

/*

 * Switch if:

 * 1) the confidence is higher and priority is equal or higher

 * 2) the confidence is no less than 1% different and the priority is higher

 */

if ((((max_confidence < MIN_REGULAR_CONFIDENCE) && (confidence >= MIN_REGULAR_CONFIDENCE)) ||

(confidence > max_confidence && (next->priority() >= max_priority)) ||

(fabsf(confidence - max_confidence) < 0.01f && (next->priority() > max_priority))

) && (confidence > 0.0f)) {

max_index = i;

max_confidence = confidence;

max_priority = next->priority();

best = next;

}

next = next->sibling();

i++;

}

/* the current best sensor is not matching the previous best sensor,

 * or the only sensor went bad */

if (max_index != _curr_best || ((max_confidence < FLT_EPSILON) && (_curr_best >= 0))) {

bool true_failsafe = true;

/* check whether the switch was a failsafe or preferring a higher priority sensor */

if (pre_check_prio != -1 && pre_check_prio < max_priority &&

fabsf(pre_check_confidence - max_confidence) < 0.1f) {

/* this is not a failover */

true_failsafe = false;

/* reset error flags, this is likely a hotplug sensor coming online late */

best->reset_state();

}

 

/* if we're no initialized, initialize the bookkeeping but do not count a failsafe */

if (_curr_best < 0) {

_prev_best = max_index;

} else {

/* we were initialized before, this is a real failsafe */

_prev_best = pre_check_best;

 

if (true_failsafe) {

_toggle_count++;

 

/* if this is the first time, log when we failed */

if (_first_failover_time == 0) {

_first_failover_time = timestamp;

}

}

}

 

/* for all cases we want to keep a record of the best index */

_curr_best = max_index;

}

*index = max_index;

return (best) ? best->value() : nullptr;

 

笔者搜了很多资料也找不到具体的算法采用,感觉是用到置信区间相关的概率统计理论。



只能通过现象推断结果,如果谁对这个有研究,还希望赐教。我们做如下实验,我们用软磁或者硬磁去干扰外置的磁罗盘,分别在log日志里面记录下外置磁罗盘的数据,在记录下经过投票机制,投票得出的数据。再和真实的地理磁罗盘数据做比对。看投票机制得出的数据是不是可信的。从一个方面验证下这个投票机制的数据抗干扰能力怎么样。有如下工作要完成:


1 修改LOG日志,单独记录外置磁罗盘HMC5883的数据和303D的磁罗盘数据


2 干扰或者切断HMC5883的数据,干扰内置磁罗盘数据


3 外置磁罗盘数据和投票机制的数据和303D磁罗盘数据做比较,分析其抗干扰性能


采用两种方式干扰和切断了磁罗盘数据,来分析LOG日志,判断PX4的多冗余策略是否有效。

 

如果有效的传感器多冗余策略有如下特点:

1 如果一路外置磁罗盘传感器数据完全失效,内置的磁罗盘数据还是可以工作,系统还是正常工作。

2 如果一路外置的磁罗盘数据受到干扰,内置的没有受到干扰的磁罗盘数据还是正常工作,系统的航向数据没有受到大的干扰。


实际测试的LOG日志如下:


我们可以直观的看到干扰外置磁罗盘和干扰内置磁罗盘,航向数据均会受到很大的干扰,即便外置磁罗盘架高,内置磁罗盘受到干扰,航向数据也会受到一定程度的干扰。但是有些效果的是,我们直接拔掉了外置磁罗盘,但是系统的磁罗盘数据还是有的。


我们可以推测一下,其他陀螺仪,加速度计等传感器的多冗余策略,和磁罗盘采用的一样的算法,也是类似的效果。只能够应对传感器数据完全失效的情况,不能应对传感器数据干扰的情况。


那就是说PX4固件的多冗余策略的抗干扰性能,不是非常好,有很大的改进空间,我感觉这是一个比较好的研究课题和方向。


注:这是我们阿木实验室PX4中级视频教程讨论的内容,如果想观看完整的视频教程和源代码,请在我们微信公众号回复。 




技术发展的日新月异,阿木实验室将紧跟技术的脚步,不断把无人机行业最新的技术和硬件推荐给大家。看到经过我们培训的学员在技术上突飞猛进,是我们培训最大的价值。如果你在无人机行业,就请关注我们的公众号:阿木实验室,我们将持续发布无人机行业最有价值的信息和技术。


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

无人机PX4固件—传感器多冗余机制测评讨论 的相关文章

  • Ubuntu下PX4飞控开发环境搭建

    双清微电子 前言 xff1a PX4支持Pixhawk pixracer 高通骁龙飞控板 树莓派 派诺特等硬件 PX4是构建在Nuttx实时操作系统上的 第一步 xff1a 安装Linux基础软件 第二步 xff1a 下载源代码 第三步 安
  • 编译PX4固件

    PX4编译 文章目录 PX4编译疑难杂症bug1bug2catkin build isolated 官方脚本Step1Step2 安装常用依赖Step3 创建并运行脚本Step4 补全代码子模块Step5 验证仿真 官方offboard 例
  • 【2020-8-9】APM,PX4,GAZEBO,MAVLINK,MAVROS,ROS之间的关系以及科研设备选型

    0 概述 无人机自主飞行平台可以分为四个部分 xff1a 动力平台 xff0c 飞行控制器 xff0c 机载电脑和模拟平台 动力平台 xff1a 负责执行飞行任务 xff0c 包括螺旋桨 电机 机架等 xff0c 用于科研的一般都是F380
  • PX4无人机 - 键盘控制飞行代码

    PX4无人机 键盘控制飞行代码 仿真效果 实机效果 由于图片限制5M以内 xff0c 只能上传一小段了 xff0c 整段视频请点击链接 Pixhawk 6c 无人机 键盘控制无人机 Offboard模式 核心 xff1a 发布 mavros
  • px4 avoidance笔记

    最近在用px4官方的avoidance代码跑硬件避障 xff0c 官方介绍了只要生成符合sensor msgs PointCloud2点云信息就能使用 xff0c 因此为了应用长基线双目 xff0c 没有使用realsense的相机 xff
  • PX4源代码下载编译

    sudo git clone https github com PX4 PX4 Autopilot git recursivegit submodule update init recursivegit submodule update r
  • 初学PX4之环境搭建

    文章转自 xff1a http www jianshu com p 36dac548106b 前言 前段时间linux崩溃了 xff0c 桌面进去后只有背景 xff0c 折腾好久没搞定 xff0c 为了节省时间索性重装了系统 xff0c 同
  • PX4进入系统控制台以及运行程序

    这里提供进入控制台两种办法 1 运行 Tools mavlink shell py dev ttyACM0 是我进入Px4系统控制台的命令 xff0c 进入之后应该是这样 Pixhawk src Firmware Tools mavlink
  • PX4 ---- Mixer

    文章目录 Mixer 混合控制 作用输入输出装载混控文件MAVROS代码解析总结示例MAINAUX Mixer 混合控制 作用 经过位置控制和姿态控制后 xff0c 控制量通过 actuator controls发布 xff0c 其中 co
  • PX4 -- EKF2

    文章目录 EKF2参数高度估计Range Finder滤波 单变量更新单变量更新对多变量的影响 EKF2 参数 EKF2 中有一类 GATE 参数 当测量值在 VAR GATE 范围内才会更新值 高度估计 四种高度控制方法 xff1a 气压
  • PX4模块设计之六:PX4-Fast RTPS(DDS)简介

    64 TOC PX4模块设计之六 xff1a PX4 Fast RTPS DDS 简介 基于PX4开源软件框架简明简介的框架设计 xff0c 逐步分析内部模块功能设计 PX4 Fast RTPS DDS 具有实时发布 订阅uORB消息接口
  • PX4模块设计之十八:Logger模块

    PX4模块设计之十八 xff1a Logger模块 1 Logger模块简介2 模块入口函数2 1 主入口logger main2 2 自定义子命令Logger custom command2 3 日志主题uORB注册 3 重要实现函数3
  • PX4模块设计之三十一:ManualControl模块

    PX4模块设计之三十一 xff1a ManualControl模块 1 ManualControl模块简介2 模块入口函数2 1 主入口manual control main2 2 自定义子命令custom command 3 Manual
  • PX4模块设计之四十三:icm20689模块

    PX4模块设计之四十三 xff1a icm20689模块 1 icm20689模块简介2 模块入口函数2 1 主入口icm20689 main2 2 自定义子命令custom command2 3 模块状态print status 重载 3
  • PX4模块设计之四十六:dataman模块

    PX4模块设计之四十六 xff1a dataman模块 1 dataman模块简介2 模块入口函数dataman main3 dataman模块重要函数3 1 start3 2 stop3 3 status3 4 task main 4 A
  • px4仿真无法起飞问题(Failsafe enabled: no datalink)

    报错信息 问题描述 xff1a 使用JMAVSim和gazebo仿真px4起飞时报错如下 xff1a WARN commander Failsafe enabled no datalink 说不安全 解决方法 打开QGC 就可以起飞了
  • PX4——Range Finder 篇

    Range Finder 此处选用的是 Benewake 下的 Lidar 参数设置 General Configuration 除了官方的参数设置外 xff0c 我在 EKF2 中还找到了 EKF2 RNG AID 参数 xff0c 用来
  • 步骤八:PX4使用cartographer与move_base进行自主建图导航

    首先老样子硬件如下 飞控 HOLYBRO PIXHAWK V4 PX4 机载电脑 jetson nano b01 激光雷达 思岚a2 前提 你已经完成了cartographer建图部分 能够正常输出map话题 前言 由于要参加中国机器人大赛
  • PX4通过参数脚本给飞控导入参数

    PX4通过参数脚本给飞控导入参数 先找一架正常能飞的无人机连接地面站 在参数页面右上角点击工具 gt 保存到文件 保存的时候文件名注明参数的相关信息 然后将需要加载参数的无人机连接至地面站 xff0c 注意需要加载参数的无人机必须和保存的参
  • 飞行姿态解算(三)

    继之前研究了一些飞行姿态理论方面的问题后 又找到了之前很流行的一段外国大神写的代码 来分析分析 第二篇文章的最后 讲到了文章中的算法在实际使用中有重大缺陷 大家都知道 分析算法理论的时候很多情况下我们没有考虑太多外界干扰的情况 原因是很多情

随机推荐