ArduPilot之开源代码Sensor Drivers设计

2023-05-16

ArduPilot之开源代码Sensor Drivers设计

  • 1. 源由
  • 2. Sensor Drivers设计
    • 2.1 front-end / back-end分层
    • 2.2 设计思想分析
  • 3 实例理解
    • 3.1 驱动初始化
    • 3.2 业务应用代码
    • 3.3 frond-end代码
    • 3.3 back-end代码
      • 3.3.1 UART
      • 3.3.2 I2C
      • 3.3.3 SPI
  • 4. 参考资料

1. 源由

飞控代码除了最为基础的姿态控制以外,还要处理很多传感器或者控制单元,比如:雷达/光流计,GPS,起落架,云台等。

这些机载设备是如何整合到飞控应用中就是本章讨论的重点Sensor Drivers设计。

2. Sensor Drivers设计

2.1 front-end / back-end分层

Sensor Drivers设计的重要概念:front-end / back-end分层

  • front-end:面向应用
  • back-end:设备实例

注:ArduPilot的参数配置,主要应用在front-end层;而就setup系统初始化逻辑是一次性的。因此关于Sensor Driver参数调整,需要重启飞控才能起到真正的效果。
在这里插入图片描述

2.2 设计思想分析

基于上述Sensor Driver架构,back-end层在后台通过硬件总线与硬件传感器通信,不管更新缓存数据(并做好更新数据时间戳记录);应用通过front-end接口获取缓存的最新传感器数据;

该分层结构设计主要为了解决多传感器/多硬件总线/低速通信等待/异常容错与高频飞控应用之间的异步和效率问题。

换个角度,通过分层结构设计可以解决:

  1. 设备轮询耗时等待
  2. 合理分配轮询/中断,高效利用CPU
  3. 优化低速传感数据与应用的匹配度(应用频度/任务优先级等)
  4. 飞控业务解耦硬件驱动API(驱动主要在back-end完成)

3 实例理解

rangefinder传感器种类还是比较多的,目前代码支持大约有30种,市面上应该有更多的硬件,我们围绕这个驱动,作为一个例子。

3.1 驱动初始化

根据前面ArduPilot之开源代码Library&Sketches设计了解到AP_HAL_MAIN_CALLBACKS(&copter)会将初始化部分关联,调用到AP_Vehicle::setup,接下去的驱动初始化流程如下:

AP_Vehicle::setup
   └──> init_ardupilot
       └──> Copter::init_rangefinder
           └──> rangefinder.init
               └──> detect_instance // _add_backend

如果有多个传感器,配置正确的情况,将会有多个instance或者说多个back-end。

3.2 业务应用代码

通过rangefinder.update进行业务数据更新。

在这里插入图片描述

3.3 frond-end代码

frond-end不关心具体back-end实现是通过哪条总线进来,怎么进来。只负责更新最终获取的缓存中的数据。

在这里插入图片描述

3.3 back-end代码

rangefinder传感器实际上是通过UART/I2C/SPI总线中的一种进行通信,这些就需要back-end处理。

3.3.1 UART

根据Param设置SERIALX_BAUD/SERIALX_PROTOCOL获取串口总线。
在这里插入图片描述数据更新记录时间戳,以防脏数据。

在这里插入图片描述
鉴于串行总线有内部buffer,所以无需注册回调,直接串口字节流解析处理逻辑。

在这里插入图片描述

3.3.2 I2C

通过宏定义或者参数配置I2C地址,注册timer回调函数与设备进行通信。

在这里插入图片描述

3.3.3 SPI

自动检测SPI总线,枚举设备,添加到back-end,注册timer回调函数,从而进行SPi通信。

在这里插入图片描述在这里插入图片描述

4. 参考资料

【1】ArduPilot开源飞控系统之简单介绍
【2】ArduPilot之开源代码框架
【3】ArduPilot飞控之ubuntu22.04-SITL安装
【4】ArduPilot飞控之ubuntu22.04-Gazebo模拟
【5】ArduPilot飞控之Mission Planner模拟
【6】ArduPilot飞控AOCODARC-H7DUAL固件编译
【7】ArduPilot之开源代码Library&Sketches设计

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

ArduPilot之开源代码Sensor Drivers设计 的相关文章

  • ardupilot飞控源码框架认识

    ardupilot飞控源码框架认识 转载 xff1a https blog csdn net csshuke article details 78850898 希望对更多的人有帮助 此篇blog的目的是对px4工程有一个整体认识 xff0c
  • 重读Ardupilot中stabilize model+MAVLINK解包过程

    APM源码和MAVLINK解析学习 重读stabilize stabilize modelinit run handle attitude MAVLINK消息包姿态信息传输过程 之前写的模式都是基于master版本的 xff0c 这次重读s
  • MAVLINK消息在Ardupilot中的接收和发送过程

    MAVLINK消息在Ardupilot中的接收和发送过程 SCHED TASKupdate receive update send 由于现在网上很多的都是APM旧版本的解释 xff0c 因此把自己的一些学习所得记录下来 截至写博客日期 xf
  • Ardupilot速率控制器rate_controller_run解析

    Ardupilot速率控制器rate controller run解析 PID速率控制器源码解析rate controller run PID运算积分限制update i get ff set xxx 内容补充 xff1a 函数中陀螺仪数据
  • PX4项目学习::(七)驱动(src-->drivers)

    PX4的spi驱动 xff0c nuttx的spi硬件抽象 古月居 guyuehome com 无人机中级篇 xff1a 第四讲 xff1a 系统级驱动程序开发 知乎 zhihu com 无人机中级篇 xff1a 第五讲 xff1a 用应级
  • ros学习(七):sensor_msgs 消息类型

    一 sensor msgs Imu sensor msgs Imu Documentation http docs ros org en api sensor msgs html msg Imu html c 43 43 使用时头文件为 x
  • ArduPilot飞行前检查——PreArm解析

    ArduPilot飞行前检查 主要包括两个部分 1 初始化中遥控器输入检查 xff1b 2 1Hz解锁前检查 附 xff1a 显示地面站信息 参考文章 xff1a Ardupilot Pre Arm安全检查程序分析 1 初始化中遥控器输入检
  • ArduPilot 添加自定义调节参数

    实际变成操作中 xff0c 需要对ardupilot代码进行修改并添加对应的调试参数 xff0c 这样 xff0c 可以通过地面站很方便的进行修改参数 目前修改代码在parameter h中的G2类 xff0c 表示为全局的参数列表 参数类
  • ADRC Ardupilot代码分析

    记录一下自己对于Ardupilot ADRC控制代码的一些理解 GitHub链接 ADRC Active Disturbance Rejection Control by MichelleRos Pull Request 20243 Ard
  • ROS消息sensor_msgs::Imu数据格式

    ubuntu下打开终端输入 rosmsg show sensor msgs Imu 查看sensor msgs Imu的数据格式 std msgs Header header uint32 seq time stamp 时间戳 string
  • sensor_msgs/NavSatFix Message

    1 sensor msgs NavSatStatus Message http docs ros org en api sensor msgs html msg NavSatStatus html Navigation Satellite
  • ros中激光雷达的消息类型(sensor_msgs/LaserScan Message)说明

    最近在做一些视觉和激光数据融合的项目 xff0c 但是对激光数据的结构不是太了解 xff0c 因此查了很多相关的内容 xff0c 记录以下 下图是在http wiki ros org中截取的图片 xff1a Header 是一个结构体 xf
  • APM 学习 6 --- ArduPilot 线程

    ArduPilot 学习之路 6 xff0c 线程 英文原文地址 xff1a https ardupilot org dev docs learning ardupilot threading html 理解 ArduPilot 线程 线程
  • Ardupilot IMU恒温控制代码学习

    目录 文章目录 目录 摘要 第一章原理图学习 第二章恒温代码学习 1 目标温度怎么设置 摘要 本节主要学习ardupilot的IMU恒温控制代码 采用的飞控是pixhawk v5 欢迎一起交流学习 第一章原理图学习
  • CMOS图像传感器——TDI CIS(2)

    在之前的文章 CMOS图像传感器 TDI CIS tdi相机的工作原理 沧海一升的博客 CSDN博客时间延迟积分 Time Delay Integration TDI 技术是一种特殊的成像模式https blog csdn net qq 2
  • Android Automotive-sensor服务详解

    本章将会详细介绍Android原生车辆服务的传感器处理流程 同时还会介绍Mananger lt lt gt gt Service之间数据传输协议 即Manager如何与Service进行交互 Car Sensor数据传递时序 车辆控制之Se
  • 高通 ADSP sensor SSC

    1 添加入口函数 adsp sensors dd qcom inc sns dd h extern sns ddf driver if s sns dd
  • 三星 Galaxy 蓝牙驱动程序

    我已经为 Android 编写了一个应用程序 主要部分是它通过蓝牙进行通信 我有四台设备 1 三星Galaxy S22 三星Galaxy Gio3 Netsurfer touch 南非本地生产的低端安卓平板电脑 4 摩托罗拉 ET1 现在我
  • 无需两台机器即可调试 UMDF 驱动程序

    是否可以在我正在开发的 Windows 计算机上调试 UMDF 驱动程序 对于 UMDF 2 驱动程序 安装或启用设备后 您可以将 Visual Studio 附加到进程 WUDFhost exe 但这样你就会遇到问题 你无法调试 Driv
  • 驱动程序如何成为操作系统的一部分?

    我知道操作系统内核是由驱动程序组成的 但是驱动程序是如何成为操作系统的一部分的 是内核自己反编译 然后添加驱动程序并重新编译自己吗 或者驱动程序是内核的插件 有人告诉我 对于大多数操作系统 驱动程序实际上成为内核的一部分 但是每当我编译c程

随机推荐

  • ArduPilot飞控之ubuntu22.04-SITL安装

    ArduPilot飞控之ubuntu22 04 SITL安装 1 源由2 SITL编译2 1 准备ubuntu 22 04环境2 2 更新ubuntu 22 04环境2 3 克隆最新Ardupilot代码2 4 submodule同步Ard
  • 模拟FPV-肥鲨HDO2+无牙仔2+熊猫VT5804ML1+Foxeer野火 时延测试

    模拟FPV 肥鲨HDO2 43 无牙仔2 43 熊猫VT5804ML1 43 Foxeer野火 时延测试 1 源由2 测试方法3 测试视频4 测试数据4 1 第一帧 时延 720 720 61 0 ms4 2 第二帧 时延 748 702
  • ArduPilot飞控之ubuntu22.04-Gazebo模拟

    ArduPilot飞控之ubuntu22 04 Gazebo模拟 1 源由2 Gazebo安装2 1 ubuntu22 04系统更新2 2 安装Gazebo Garden2 3 安装ArduPilot Gazebo插件2 3 1 基础库安装
  • Session、Token、Jwt、Oauth2 区别和原理详解

    1 认证 xff08 Authentication xff09 通俗的说就是验证当前用户的身份 xff0c 证明你是你自己 2 授权 xff08 Authorizatio xff09 用户授予第三方应用访问该用户某些资源的权限 实现授权的方
  • ArduPilot飞控之DIY-F450计划

    ArduPilot飞控之DIY F450计划 1 历史2 源由3 计划3 1 硬件3 2 软件 4 动手4 1 接线4 1 1 ELRS nano接收机4 1 2 BN880 GPS模块4 1 3 Radio Telemetry 4 2 配
  • BN880 GPS u-center_v22.07工具配置方法

    BN880 GPS u center v22 07工具配置方法 1 源由2 分析3 自我实验3 1 测试现象3 2 u center v22 07工具3 3 波特率验证3 4 重新配置3 4 1 PRT Ports 3 4 2 PMS Po
  • Betaflight BN880 GPS 简单测试

    Betaflight BN880 GPS 简单测试 1 源由2 窗台对比测试3 开阔区域测试3 1 GPS安装位置3 1 1 BN880 GPS 机尾打印支架 安装位置3 1 2 BN880 GPS 机头固定 安装位置3 1 3 M8N G
  • 关于【无人驾驶航空器飞行管理暂行条例】对航模的一些信息讨论&汇总

    关于 无人驾驶航空器飞行管理暂行条例 对航模的一些信息讨论 amp 汇总 1 源由2 讨论3 理解3 1 关于 管理对象 的理解3 2 关于 模型航空器管理规则 的理解3 3 关于 模型航空器 的理解3 4 关于 安全 的理解 4 参考资料
  • ArduPilot Kakute F7 AIO DIYF450 without GPS配置

    ArduPilot Kakute F7 AIO DIYF450 without GPS配置 1 源由2 配置2 1 Kakute F7 AIO相关配置2 1 1 串口规划2 1 2 电传配置2 1 3 GPS配置2 1 4 CRSF接收机配
  • ArduPilot开源飞控系统之简单介绍

    ArduPilot开源飞控系统之简单介绍 1 源由2 了解 amp 阅读2 1 ArduPilot历史2 2 关于GPLv32 3 ArduPilot系统组成2 4 ArduPilot代码结构 3 后续3 1 DIY F4503 2 软件设
  • ArduPilot Kakute F7 AIO DIYF450 之GPS配置

    ArduPilot Kakute F7 AIO DIYF450 之GPS配置 1 源由2 步骤2 1 模块预测试2 2 物理连接2 3 UART配置2 4 Compass使能2 5 GPS使能2 6 校准Compass 3 GPS amp
  • 关于CSDN文章内嵌视频自动播放问题

    关于CSDN文章内嵌视频自动播放问题 1 源由2 分析3 反馈4 沟通5 总结6 附录 Firefox配置7 附录 Microsoft Edge配置 1 源由 这个问题是4月初发现的 xff0c 主要现象就是页面上的视频一起自动播放了 鉴于
  • 关于FPV图传系统时延讨论

    关于FPV图传系统时延讨论 1 源由2 时延测试方法3 时延测试资料4 关于模拟图传5 关于FPV时延感受5 1 静态时延5 2 动态时延 6 参考资料7 附录7 1 When is 120fps NOT 120fps DJI O3 Air
  • ArduPilot之开源代码框架

    ArduPilot之开源代码框架 1 系统框架2 工程框架2 1 工程目录2 2 代码组成2 3 运行流程 4 硬件传感器总线4 1 I2C4 2 SPI4 3 UART4 4 CAN 5 软件设计概念6 总结7 参考资料 在研读ArduP
  • Charles电脑配置和手机配置【超详细,iOS和安卓】

    1 xff0c 电脑安装charles charles的安装非常简单 xff0c 直接通过charles官网安装最新版即可 Charles 是收费软件 xff0c 可以免费试用 30 天 试用期过后 xff0c 未付费的用户仍然可以继续使用
  • vmmem内存占用高

    文章目录 前言通过 wslconfig限制其内存使用 前言 什么时vmmem进程 vmmem进程时在使用vmware时的进程 xff0c 内存占用非常高 我是在使用docker时遇到的这个进程 通过 wslconfig限制其内存使用 这个方
  • QGroundControl之安装调试

    QGroundControl之安装调试 1 源由2 问题汇总2 1 摄像头播放问题2 2 Windows电脑录像和拍照保存位置2 3 Android设备录像和拍照保存位置 3 打包资料4 附录 QGroundControl Video St
  • ArduPilot之posHold&RTL实测

    ArduPilot之posHold amp RTL实测 1 源由2 模式配置3 测试步骤4 飞行实测5 总结6 参考资料7 附录 关于QGC 暂不支持MAVLink2 signing Protocol问题7 1 问题描述7 2 硬件配置7
  • ArduPilot之开源代码Library&Sketches设计

    ArduPilot之开源代码Library amp Sketches设计 1 简介1 1 Core libraries1 2 Sensor libraries1 3 Other libraries 2 源由3 Library Sketche
  • ArduPilot之开源代码Sensor Drivers设计

    ArduPilot之开源代码Sensor Drivers设计 1 源由2 Sensor Drivers设计2 1 front end back end分层2 2 设计思想分析 3 实例理解3 1 驱动初始化3 2 业务应用代码3 3 fro