PX4多传感器优先级判断
PX4多传感器优先级判断
- 1. 简介
- 2. 代码分析
- 2.1 主体思路
- 2.2 代码探究
这篇博客讨论了PX4在很多传感器下如何自动选择最优传感器。
版本:v1.9.0
源码位置:
- ~src/lib/ecl/sensors/sensors.cpp
- ~src/lib/ecl/sensors/voted_sensors_update.cpp
1. 简介
在pixhawk系统里面,传感器一般有IMU(加速度计,陀螺仪,磁力计)和空速计,在冗余设计的前提下,这些传感器一般都会有很多个,如果有很多个加速度计(因为有好几个IMU),那么到底选哪一个加速度计的数据作为滤波的输入值就变得十分重要。
PX4里面关于传感器有一个很重要的投票机制,很好地解决了多传感器数据选取问题,这里我们以加速度计为例。
2. 代码分析
2.1 主体思路
PX4中将传感器分组,所有加速度计为一组,并且会有编号,在传感器运行的时候就会检测这些传感器是否有用或者获得的数据是否有效(initialize_sensors();),如果有比系统预设的传感器还多的话,会自动增加。
然后对每一组传感器分析,获得最优传感器编号,在最后数据发布的时候就只发布这个传感器编号的数据。
2.2 代码探究
我们找到sensors.cpp的主函数依次往下找
sensors::run()->_voted_sensors_update.sensors_poll(raw, airdata, magnetometer);->accel_poll(raw);->_accel.voter.get_best(hrt_absolute_time(), &best_index);
在这个函数里面就能看到如何判断的。
下面我们先列出函数的主体
DataValidator *next = _first;// XXX This should eventually also include votingint pre_check_best = _curr_best;float pre_check_confidence = 1.0f;int pre_check_prio = -1;float max_confidence = -1.0f;int max_priority = -1000;int max_index = -1;DataValidator *best = nullptr;int i = 0;while (next != nullptr) {float confidence = next->confidence(timestamp);if (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++;}
PX4将多有传感器组成一个链表,在这个函数里,从链表开始的地方(_first)开始检索,对每个数据进行判断,如果发现满足下面两个条件:
- 可信度更高并且优先级相同或者更高
- 可信度差异不到百分之1并且优先级更高
然后就把这个传感器对应的编号传递出去。
下一步需要检查这个confidence和priority在哪里得到的。
这一部分我简单做了一个思维导图有利于对整体流程的判断。
PX4多传感器优先级判断相关推荐
- UDS协议一致性测试之Service 27环境NRC 13、NRC 24优先级判断
UDS协议一致性测试之Service 27环境NRC 13.NRC 24优先级判断 周末咯!!! 预祝各位看官周末愉快,牙齿晒太阳哈. 今天闲聊下在进行UDS协议一致性测试时,Service 27测试 ...
- css !important用法以及CSS样式使用优先级判断
之前一直看到很多css中都有!important这个样式,一直不知道有什么作用的,今天在网上详细了解了一下,看了别人的博客,顺便转载收藏一下 css !important用法CSS样式使用优先级判断 ...
- 表达式求值优先级判断
这里的形参a =GetTop(OPTR) 从存字符的栈里获取, b=ch ch是从字符缓存区里读的字符 例如输入2+3*2# (当ch读到非数字时才会进入Precede函数,这一点不在细说,不懂的话请 ...
- 什么用于标记CSS样式的使用优先级,css !important用法以及CSS样式使用优先级判断...
例一: CSS #box { color:red !important; color:blue; } HTML 在不同的浏览器下,这行字的色应该不同! 这个例子应该是大家经常见到的important的 ...
- css !important用法CSS样式使用优先级判断
本文转自:http://www.cnblogs.com/lykbk/archive/2012/08/09/huhu345545.html 例一: CSS #box { color:red ! ...
- 为什么设计师也要学会判断优先级?
我的主管经常对我们说:产品经理最重要的能力就是判断优先级,不然就不叫产品经理,而是需求经理.以前我听了总是不以为然,觉得判断优先级就是优先做紧急的和实现成本低的需求,毫无技术含量:而设计师需要从用户的 ...
- 安卓开发笔记(十一)—— 方向传感器,实现摇一摇动画音效,GPS定位
中山大学数据科学与计算机学院本科生实验报告 (2018年秋季学期) 项目源码:Github传送门 一.实验题目 第十六周任务 传感器 第十六周实验目的 学会使用加速度传感器 学会使用地磁传感器 学会获 ...
- 8大趋势已现,未来传感器将彻底改变你的生活!
来源:传感器专家网 现代信息技术发展到2022年,传感器的重要性越来越高,物联网.元宇宙.人工智能.自动驾驶--无不离不开传感器. 2022年,传感器更伴随着这些技术的发展,进一步改变我们的生活,同 ...
- c语言判断程序设计,C语言程序设计之判断(38页)-原创力文档
判断 翁恺 做判断 计算时间差 • 输⼊两个时间,每个时间分别输⼊⼩时和 分钟的值,然后输出两个时间之间的差, 也以⼏⼩时⼏分表⽰ 如果直接分别减,会出现分钟借位的情况:1点40分和2点10分的差? ...
最新文章
- 远程ssh shell 脚本 tcgetattr: Inappropriate ioctl for device错误
- utf-8 字符串转为Unicode编码格式
- access游戏库不显示 ea_英伟达上线云游戏服务 千款游戏月费4.99美元
- eplan可运行于linux系统吗,Eplan安装对电脑操作系统的要求
- python清洗数据用什么包_格式化和清洗数据的Python工具包
- Python中的顺序表介绍
- CSS基础「五」定位
- 漫谈边缘计算(一):边缘计算是大势所趋
- [转] Tomcat 系统架构与设计模式,第 1 部分: 工作原理
- 如何去各型MCU的官网上下载正确的数据手册
- 【笔试/面试】—— 数学找规律题
- mac monterey、big sur、Catalina原生heic、jpg壁纸,并将壁纸拷贝到系统文件夹下教程
- Java之ApiPost工具
- win10找回永久删除文件【图文教程】
- 深度学习——A Gentle Introduction to Graph Neural Networks
- 一种的STM32的应用喂狗方法
- Jetson nano 通过 vnc 实现远程桌面控制(已在nano实现)
- 一下搞懂HTTP协议
- java解决凯撒密码问题
- Key Points Estimation and Point Instance