无人机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固件—传感器多冗余机制测评讨论 的相关文章

  • PX4+QGC+jmavsim软件在环仿真

    一 环境修改 参考官方手册jMAVSim 仿真模拟 PX4 Developer Guide xff0c 以上环境基于上一篇内容 xff0c 未完成ROS 43 jmavsim 43 QGC环境搭建的请移步Ubuntu18 04下px4 43
  • px4自定义mavlink收不到消息的问题

    px4版本1 12稳定版 最近在做px4二次开发相关工作 按照网上的一些教程自定义了一个mavlink消息用来控制无人机 按照教程里面的单独开了一个xml来定义消息 最后生成的消息在px4端通过流传输的方式自己写的客户端可以收到消息 但是客
  • 编译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
  • Ubuntu20.04+MAVROS+PX4+Gazebo保姆级安装教程

    Ubuntu20 04 43 MAVROS 43 PX4 43 Gazebo 安装PX4步骤安装MAVROS安装QGCPX4仿真 安装PX4步骤 从github上clone源码 span class token function git s
  • PX4无人机 - 键盘控制飞行代码

    PX4无人机 键盘控制飞行代码 仿真效果 实机效果 由于图片限制5M以内 xff0c 只能上传一小段了 xff0c 整段视频请点击链接 Pixhawk 6c 无人机 键盘控制无人机 Offboard模式 核心 xff1a 发布 mavros
  • PX4 Bootloader下载及编译过程中的问题解决

    买来的雷迅的板子都是Bootloader已经烧进去了 xff0c Fireware也已经刷进去了 如果是自制的板子 xff0c 上位机根本没法识别板子 xff0c 必须先烧写下载Bootloader后编译好的bin文件 这篇记一下自己下载及
  • px4 avoidance笔记

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

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

    文章目录 EKF2参数高度估计Range Finder滤波 单变量更新单变量更新对多变量的影响 EKF2 参数 EKF2 中有一类 GATE 参数 当测量值在 VAR GATE 范围内才会更新值 高度估计 四种高度控制方法 xff1a 气压
  • PX4模块设计之一:SITL & HITL模拟框架

    PX4模块设计之一 xff1a SITL amp HITL模拟框架 1 模拟框架1 1 SITL模拟框架1 2 HITL模拟框架 2 模拟器类型3 MAVLink API4 总结 基于PX4开源软件框架简明简介的框架设计 xff0c 逐步分
  • PX4模块设计之二十一:uORB消息管理模块

    PX4模块设计之二十一 xff1a uORB消息管理模块 1 uORB模块构建模式2 uORB消息管理函数2 1 状态查询2 2 资源利用2 3 模块启动2 4 模块停止3 uORB消息接口3 1 消息主题注册3 2 消息主题去注册3 3
  • PX4模块设计之三十三:Sensors模块

    PX4模块设计之三十三 xff1a Sensors模块 1 Sensors模块简介2 模块入口函数2 1 主入口sensors main2 2 自定义子命令custom command2 3 模块状态print status 重载 3 Se
  • 【px4】运行mavsdk中的offboard example

    运行MAVSDK中的offboard例子时无人机不执行 想控制无人机前后左右移动 xff0c 在按照官方教程实现offboard 插件的时候 发现用action插件能正常起飞和降落 但是一旦执行到offboard的插件代码的时候就会自动降落
  • PX4飞控之自主返航(RTL)控制逻辑

    本文基于PX4飞控1 5 5版本 xff0c 分析导航模块中自护返航模式的控制逻辑和算法 自主返航模式和导航中的其他模式一样 xff0c 在Navigator main函数中一旦触发case vehicle status s NAVIGAT
  • PX4软件在环仿真注意点

    注 xff1a 最新内容参考PX4 user guide 点击此处 PX4下载指定版本代码和刷固件的三种方式 点击此处 PX4sitl固件编译方法 点击此处 PX4开发指南 点击此处 PX4无人机仿真 Gazebo 点击此处 px4仿真 知
  • PX4中自定义MAVLink消息(记录)

    简单记录一下这个过程 一 自定义uORB消息 这一步比较简单 xff0c 首先在msg 中新建ca trajectory msg文件 uint64 timestamp time since system start span class t
  • PX4之常用函数解读

    PX4Firmware 经常有人将Pixhawk PX4 APM还有ArduPilot弄混 这里首先还是简要说明一下 xff1a Pixhawk是飞控硬件平台 xff0c PX4和ArduPilot都是开源的可以烧写到Pixhawk飞控中的
  • PX4项目学习::(五)模块代码启动流程

    54条消息 PX4 模块代码启动流程 zhao23333的博客 CSDN博客
  • PX4通过参数脚本给飞控导入参数

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

随机推荐