PX4项目学习::(四)中间件::驱动框架

PX4 imu传感器配置 PX4 imu 传感器配置 阅读详情

驱动框架

  • PX4的代码库使用一个轻量级的,统一的驱动抽象层:DriverFramework. POSIX和 QuRT的驱动写入这个驱动框架当中。

旧的NuttX驱动是基于设备 架构的,以后将会移植到驱动框架之中。

核心架构

  • PX4 是一个反应式系统reactive system ,使用订阅/发布来传递消息。文件句柄是不被操作系统的核心所需要或者使用。主要使用了以下两个API:

    • 发布/订阅系统,该系统拥有一个文件,网络或者共享内存,其依靠于PX4后台运行。

    • 全局驱动注册器,它允许枚举设备和获取/设置这些设备参数。这个可以很简单的作为一个链表或者文件系统地图。

一个新的平台

  • NuttX

  • 启动脚本位于ROMFS/px4fmu_common

  • 系统配置文件位于nuttx-configs。 作为应用的一部分被构建并被操作系统加载。

  • PX4中间件配置位于src/drivers/boards。其中包括总线和GPIO映射还有硬件平台初始化代码。

  • 驱动位于src/drivers

  • 参考配置:运行使px4fmu-v4_default构建FMUv4配置,这是当前NuttX参考配置。

  • QuRT / Hexagon

  • 启动脚本位于 posix-configs/

  • 系统配置文件模式作为Linux映射的一部分(备注:提供 本地的LINUX IMAGE和flash指令)

  • PX4中间件配置位于src/drivers/boards。备注:增加总线配置。
    驱动位于DriverFramework

  • 参考配置:运行'make qurt_eagle_release'构建Snapdragon飞行参考配置。

驱动ID

  • PX4使用驱动ID将独立传感器贯穿于整个系统。这些ID存储于配置参数中,用于匹配传感器校正值,以及决定哪些传感器被记录到log中。

  • 传感器的顺序(例如一个是/dev/mag0,另一个是/dev/mag1)于优先级是不挂钩的,优先级实际是在发布uORB topic时确定的。

  • 举个例子

  • 有关系统上三个磁力计的示例,使用飞行日志(.px4log)转存变量。三个参数对传感器ID进行编码,MAG_PRIME识别哪个磁力计被选为主传感器。每一个MAGx_ID是一个24bit数值,左面手工填零补充。

CAL_MAG0_ID = 73225.0
CAL_MAG1_ID = 66826.0
CAL_MAG2_ID = 263178.0
CAL_MAG_PRIME = 73225.0
  • 通过I2C连接的外部HMC5983,总线1,地址0x1E:在log中以IMU.MagX显示。
# device ID 73225 in 24-bit binary:
00000001  00011110  00001 001

# decodes to:
HMC5883   0x1E    bus 1 I2C
  • 通过SPI连接的内部HMC5983,总线1,选择slot5。在log中以IMU1.MagX显示。
# device ID 66826 in 24-bit binary:
00000001  00000101  00001 010

# decodes to:
HMC5883   dev 5   bus 1 SPI
  • 以及通过SPI总线连接的内部MPU9250磁力计,总线1,从设备选择slot4。在log中以IMU2.MagX显示。
# device ID 263178 in 24-bit binary:
00000100  00000100  00001 010

#decodes to:
MPU9250   dev 4   bus 1 SPI

设备ID编码

  • 根据此格式,设备ID是一个24位的数字。注意,第一字段是上述解码示例中的最低有效位。
struct DeviceStructure {
  enum DeviceBusType bus_type : 3;
  uint8_t bus: 5;    // which instance of the bus type
  uint8_t address;   // address on the bus (eg. I2C address)
  uint8_t devtype;   // device class specific device type
};
  • 这里bus_type 按以下方式解码:

    enum DeviceBusType {
    DeviceBusType_UNKNOWN = 0,
    DeviceBusType_I2C = 1,
    DeviceBusType_SPI = 2,
    DeviceBusType_UAVCAN = 3,
    };

  • devtype 按以下方式解码:

#define DRV_MAG_DEVTYPE_HMC5883  0x01
#define DRV_MAG_DEVTYPE_LSM303D  0x02
#define DRV_MAG_DEVTYPE_ACCELSIM 0x03
#define DRV_MAG_DEVTYPE_MPU9250  0x04
#define DRV_ACC_DEVTYPE_LSM303D  0x11
#define DRV_ACC_DEVTYPE_BMA180   0x12
#define DRV_ACC_DEVTYPE_MPU6000  0x13
#define DRV_ACC_DEVTYPE_ACCELSIM 0x14
#define DRV_ACC_DEVTYPE_GYROSIM  0x15
#define DRV_ACC_DEVTYPE_MPU9250  0x16
#define DRV_GYR_DEVTYPE_MPU6000  0x21
#define DRV_GYR_DEVTYPE_L3GD20   0x22
#define DRV_GYR_DEVTYPE_GYROSIM  0x23
#define DRV_GYR_DEVTYPE_MPU9250  0x24
#define DRV_RNG_DEVTYPE_MB12XX   0x31
#define DRV_RNG_DEVTYPE_LL40LS   0x32
PX4飞控学习笔记之-SPI设备接入 PX4飞控的SPI 驱动 阅读详情

相关推荐

PX4项目学习::(一)项目架构

下图所示为PX4的软件顶层架构。我们可以将上图从中间分成两个看,其中右边为传感器采集(GPS、optical_flow、inertial_sensors)回来的数据,,​ px4的控制部分程序,采用的是分层设计。

one__leaf的博客 3845

第三章 PX4-Pixhawk-SPI底层驱动解析

第三章 PX4-SPI底层驱动解析          这一章节我们会对PX4的底层驱动进行解析,我们这里主要解析的是SPI协议,因为这个协议是所有传感器的一个协议,至于IIC和串口就可以类似的读写一下,大家看完这个解析后不妨去试试驱动一下can总线协议。         首先大家是不是觉得奇怪,为什么PX4编译的是一个针对F4的程序而不是其他的。这里我们就需要从整个系统的架构考虑了。我

qq_18112493的博客 3787

PX4代码解析(1)

前言 做pixhawk飞控有一段时间了,但在学习过程中遇到许多困难,目前网上找不到比较完整的PX4学习笔记,我打算结合自己理解,写写自己对PX4源码的理解,不一定对,只是希望与各位大佬交流交流,同时梳理一下无人机知识。 目前打算分享以下几个内容:代码架构;通信协议;姿态解算算法,控制算法。先这样,后面想到再加。本章先来聊聊px4代码结构 一、代码整体结构 既然要聊px4代码结构,那就先把px4代码结构图放出来,因为px4源码仍然在不断更新迭代,因此老版本与新版本目录结构可能有些不同,我的代码解析参考版本为V

qq_36903625的博客 1万+

PX4之启动脚本

​PX4通过rcS脚本来设定需要启动的程序,比如设备驱动、控制模块、数据通信等。 ​

boboelec的博客 2684

PX4项目学习::(四)中间件::任务管理与调度

Work queue tasks: 该模块在共享工作队列上运行,与队列中的其他模块共享相同的堆栈和工作队列线程优先级。Tasks: 模块在自己的任务中运行,具有自己的堆栈和进程优先级。

one__leaf的博客 1988

px4源码学习三--px4源码结构分析

px4源码结构分析Px4源码目录

znr1995的博客 5893

PX4原生固件SPI驱动动编写与IMU传感器替换

适用于PX4原生固件核心目标:完成XSENS的MTI3,IMU替换。MTI3是一款航姿参考系统,可以独立的输出四元数,加速度,磁力计等,角速度等航姿信息。里面有完整的卡尔曼滤波,可以替换飞控本身里面的姿态估计部分。因为PX4里面所用的传感器器件都是消费级的元器件,所以MTI3这样的工业级的IMU替换还是非常有价值的。一 PX4:SPI硬件介绍PIXHAWK里面有3路SPI的硬件接口,分别是:IMU...

csshuke的专栏 4553

PX4-1-开源飞控项目

分享完工具系列,我们开始PX4飞控技术的分享,写分享相对于自己写笔记要难很多,在整理自己笔记的过程中也重新思考很多问题。 飞控技术的分享系列更多分享的是思路和框架。对于PX4这种大型开源项目,源码的学习和思路框架的学习同样重要,专于源码容易迷失在代码之中,找不到方向。 当然个人的水平和编辑能力有限,如果有理解不一样的地方,欢迎私信我讨论,我会在后续的分享中更正。 我们后面主要分享的是PX4这一个开源飞控,当然目前世界上有很多的优秀开源飞控项目,在开始PX4的分享之前,我们先聊一下一些著名的开源飞控项目

AcmeUav的博客 2088

【PX4学习笔记】07.PX4框架学习以及PX4中的PID

PX4固件代码框架

踏上取经路,比抵达灵山更重要🐱‍👤 3557

PX4学习笔记

目录网址Pixhawk、PX4、APM 、 ArduPilot关系硬件照片、示意图逻辑图 集多旋翼控制框架软件框架辅助工具、软件说明(误区)裸机运行基于OS运行例子可执行程序、应用、源码(代码)、进程、线程源码、固件的区分Pixhawk的启动流程大概逻辑 网址 PX4原生固件及其地面站网址 https://github.com/PX4 http://px4.io/ https://github.com/mavlink/qgroundcontrol 原生固件代码:C++,构架清晰,容易维护修改,多进程 目

记录老板的每次pua,分享领导每天的毒鸡汤... 1万+

逍遥模拟器改真机参数全指南:从ARM伪装到电池传感器模拟

本文提供逍遥模拟器深度伪装实战指南,重点讲解如何通过修改ARM架构、系统属性和模拟传感器数据,使其在硬件信息、电池状态等维度逼近真实设备,有效规避应用检测。文章详细介绍了使用Magisk模块、LSPosed框架进行设备指纹伪装和动态数据模拟的策略,帮助用户实现从静态信息到动态行为的全方位真机模拟。

weixin_29279101的博客 452

PX4项目学习::(一)项目架构::软件简明架构

飞行控制栈是自主无人机的制导、导航和控制算法的集合。它包括固定翼、多旋翼和垂直起降机身的控制器以及姿态和位置估算。中间件主要由嵌入式传感设备驱动,控制驱动,以及消息通信接口组成。除此之外,还引入了模拟层做各种模型模拟及仿真。

one__leaf的博客 1845

桁架 拓扑优化 matlab程序_拓扑优化在结构轻量化及板壳加筋肋最优布置的应用...

1 拓扑优化简介材料的有效利用一直都是人类追求的目标,也是许多研究领域不变的话题,并伴随着结构优化理论和方法的产生而发展。结构优化设计通常分为三个层次:(1)拓扑优化:在一个确定的连续区域内寻求结构内部非实体区域位置和数量的最佳配置,寻求结构中的构件布局及节点联结方式最优化,使结构能在满足应力、位移等约束条件下,将外载荷传递到结构支撑位置,同时使结构的某种性态指标达到最优;(2)形状优化:指在保持...

weixin_39525355的博客 1877

PX4从放弃到精通(一):开源飞控PX4简介+系列文章大纲

文章目录前言一、PX4是什么?二、PX4能做什么?1.支持的载具2.支持的飞控硬件二、PX4架构二、如何开发PX4?二、基于PX4的集群开发二、基于PX4的避障开发总结 前言 设计无人机的飞控是一个非常复杂的工程,因此对于很多做无人机的同学来说,使用开源飞控更加方便高效.本文主要介绍有"开源飞控之王"之称的PX4飞控,主要使想研究这一飞控的同学对此有一个初步的认识. 一、PX4是什么? PX4是由苏黎世联邦理工学院的计算机视觉与几何实验室的一个软硬件项目PIXHAWK演变而来,目的在于为学术、爱好和工业团体

超维空间科技的博客 8万+

医学影像AI的幻觉问题与CCD解决方案

医学影像AI在辅助诊断中面临的核心挑战是幻觉现象,即模型生成不符合实际影像的虚假诊断。这种现象源于多模态大语言模型(MLLMs)在视觉-语言对齐上的技术局限,可能导致假阳性或假阴性的临床风险。通过临床对比解码(CCD)框架,结合症状锚定和专家引导的双阶段校准机制,可有效提升模型输出的可靠性。该技术在CheXpert和MIMIC-CXR等标准数据集上验证,显著改善了肺不张、胸腔积液等关键指标的检测准确率。对于医疗AI落地场景,这种即插即用的解决方案既规避了数据隐私合规问题,又降低了基层医院的部署门槛,为AI辅

weixin_36303807的博客 322

Zoom AI 技术架构研究:联合式方法与多模态集成

通过 Zoom AI 开放平台,企业可以自定义 AI 模块 (如法律合规审查、客户反馈分析),扩展应用场景。这种开放平台策略使企业能够根据自身需求定制 AI 功能,满足特定业务需求。

shao.bing的专栏 1317

PX4源码学习(一):结构概述

最近在做PX4固件的移植开发工作,由于之前没有这方面开发经验,加之PX4源码又比较庞杂,所以想要通过一点一点的学习梳理和实践,使这部分工作能够尽快开展起来。博客中如有错误,恳请大家指正,同时欢迎小伙伴们一起交流学习。 PX4飞控源码系统框架介绍: 注:本篇内容中所编译的PX4 固件版本为v1.11,以 px4_fmu-v2_default 为例。 一、boards 各种不同的飞控板硬件配置文件。 二、px4_fmu-v2_default 编译后生成的文件,其路径为:Firmware/ bul

Kunfly的博客 3507

告别‘报错马拉松’:一份保姆级的Ubuntu 20.04编译OpenWrt 15.05环境配置与问题修复清单

本文提供了一份详细的Ubuntu 20.04编译OpenWrt 15.05的环境配置与问题修复指南,帮助开发者告别‘报错马拉松’。从基础环境搭建到典型报错分类与修复方案,再到高阶问题的深度修复,全面覆盖编译过程中可能遇到的各类问题,并提供自动化补丁脚本和Docker环境固化方案,确保编译过程高效顺畅。

weixin_33230433的博客 295

ROS学习笔记之——PX4开发初入门

参考资料 PX4 Github主页:PX4 Github(代码有分支,请查看v1.10.0分支) PX4开发者手册:PX4手册 v1.11(手册有分支,请查看v1.11.0分支) PX4官方仿真教程 :PX4手册 - gazebo simulation PX4环境配置可参考PX4手册 - getting_started,请选择1.11分支。 ...

gwpscut的博客 2万+

手把手教你用ET-BERT预训练模型搞定加密流量分类(附完整代码)

本文详细介绍了如何使用ET-BERT预训练模型实现加密流量分类,包括环境配置、数据预处理、模型微调及优化策略。通过实战代码示例,帮助开发者快速掌握这一技术,提升网络安全领域的加密流量分析能力。

weixin_29166013的博客 493

Token 费用爆炸?教你用 Semantic Cache(语义缓存)把 API 成本降低 80%

本文介绍了语义缓存(Semantic Cache)技术在大模型应用中的关键作用。传统Redis缓存基于精确匹配,无法处理用户提问的语义相似性,导致重复调用昂贵的LLM API。语义缓存通过将问题向量化并在向量空间中进行相似度匹配,可识别30%-50%的重复提问,直接返回历史答案。文章详细解析了技术原理(Embedding+向量搜索)、架构设计,并提供了基于Python和ChromaDB的50行核心实现代码。同时指出了生产环境中的三大挑战:阈值设定、隐私保护和多轮对话处理,并给出相应解决方案。该技术能以极低成

BUG猿的博客 1056

PX4项目学习::(四)中间件

内置传感器的驱动和基于发布-订阅(publish-subscribe)的中间件组成。系统是响应式的,即当有新的有效数据时系统能够立即更新。系统组件能够在线程安全的方式下从任何地方使用数据。系统是完全并行运行的。

one__leaf的博客 403

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

PX4二次开发快速入门

1、零基础或者有较少基础(尚未入门)2、希望在短时间里(一到两个月)学会对PX4进行二次开发的开源爱好者或工程师pixhawk飞控超维M系列无人机PX4 1.13.3QGC4.2.4PX4从放弃到精通(十五):二次开发基础PX4二次开发快速入门(三):自定义串口驱动。

超维空间科技的博客 1万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

PX4飞控代码学习目录

本文整理了一份PX4飞控学习资料合集,涵盖STM32基础、Nuttx系统、PX4代码解析、驱动开发、控制算法等多个方面。作者在缺乏官方学习路径的情况下,通过收集博客和论文资料,按类别整理成结构化目录,包括时钟系统、USB驱动、Bootloader、任务调度、位置/姿态控制等核心内容。该资源持续更新,为PX4开发者提供系统化的参考指南,涵盖从底层驱动到上层控制逻辑的全栈知识。

Vincent的博客 1284

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

PX4学习(2)——原生固件框架分析

本文转自阿木社区:          搭建好了编译环境,装上了QT,就迫不及待的想看看代码的内容,结果。。。一看框架是懵逼的状态。。。怎么办,查阅资料慢慢梳理呗~ 框架分析(一) 推荐一个比较好的参考资料:PX4中文维基  https://legacy.gitbook.com/book/fantasyjxf/px4-wiki/details 一 原生固件工程目录源码分析 这是原生固件...

wb790238030的博客 4029
上一篇: PX4项目学习::(七)飞控栈框架(原理框图)
下一篇: PX4项目学习::(四)基础代码::PX4的基类
逍遥_xiaoyao
博客等级 码龄6年 286粉丝 144原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值