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飞控姿态角与姿态角速度控制过程分析(超长篇)

    目录 文章目录 目录 摘要 1 自稳模式初始化 2 自稳模式更新函数 这个代码主要把横滚输入 俯仰输入量转换成目标角度需要的范围 也就是 4500 4500 3 姿态角速度代码控制过程分析 4 电机PWM控制运算 摘要 本节主要记录自己学习
  • Ardupilot 串口代码学习

    目录 文章目录 目录 摘要 1 串口初始化 1 usb串口初始化 2 其他串口初始化 1 如何设置波特率和协议 2 GPS串口初始化 3 GPS数据更新 1 update instance 摘要 本节主要学习Ardupilot的串口资源代码
  • 高通SDM845平台Sensor学习——3.SLPI(Physical Sensor)

    三 xff1a Sensor SLPI层代码分析 在学习SLPI侧代码前我们先了解下SEE的registry amp config registry 放在 persist sensors registry registry中 xff0c 它
  • MAVLINK消息在Ardupilot中的接收和发送过程

    MAVLINK消息在Ardupilot中的接收和发送过程 SCHED TASKupdate receive update send 由于现在网上很多的都是APM旧版本的解释 xff0c 因此把自己的一些学习所得记录下来 截至写博客日期 xf
  • PX4项目学习::(七)驱动(src-->drivers)

    PX4的spi驱动 xff0c nuttx的spi硬件抽象 古月居 guyuehome com 无人机中级篇 xff1a 第四讲 xff1a 系统级驱动程序开发 知乎 zhihu com 无人机中级篇 xff1a 第五讲 xff1a 用应级
  • Pixhawk之UAV控制理论、ardupilot源码框架介绍

    一 开篇 您有无人机么 xff1f 没有 那赶紧去某宝买一套 昨天 开会开到接近下午一点钟 xff0c 收获相当大 xff0c 原本不太清楚的ardupilot框架现在也大致熟悉了 xff0c 接下来主要就是结合源码了解其控制过程了 xff
  • ADRC Ardupilot代码分析

    记录一下自己对于Ardupilot ADRC控制代码的一些理解 GitHub链接 ADRC Active Disturbance Rejection Control by MichelleRos Pull Request 20243 Ard
  • 将ROS中的/sensor_msgs/NavSatFix数据导入google earth显示轨迹

    文章目录 1 获取GPS数据2 将GPS数据导入kml模板显示轨迹点3 轨迹显示 1 获取GPS数据 将ros中发布的gps topic输出到文本中 rostopic echo p gpsData gt gpsData 得到如下格式的数据
  • ROS消息sensor_msgs::Imu数据格式

    ubuntu下打开终端输入 rosmsg show sensor msgs Imu 查看sensor msgs Imu的数据格式 std msgs Header header uint32 seq time stamp 时间戳 string
  • ardupilot在Linux上设置SITL(FlightGear)

    本页介绍如何在Linux上设置SITL xff08 软件在环路中 xff09 特定命令在Ubuntu上从12 10到16 04进行了测试 概观 SITL模拟器允许您在没有任何硬件的情况下运行Plane xff0c Copter或Rover
  • sensor数据格式

    raw10 一个像素的一个颜色分量 xff0c 占10bit
  • Ardupilot与T265配置

    摘自 xff1a https www jianshu com p ce91fdec7235 我现在发现这篇文章的原文在这 https www cnblogs com hellocxz p 12104290 html Ardupilot与T2
  • win7下 pixhawk (ardupilot) 的编译

    前几天都在搞pixhawk源码编译问题 xff0c 什么在window下用Console或者eclipse xff0c 还是在Ubuntu下 xff0c 都做了 xff0c 而且把 mk文件都看了 xff0c 结果还是有bug 总结一下三种
  • 解决多个Ardupilot运行仿真环境冲突问题

    情况说明 分别安装了4 2和4 3两个版本的ardupilot工作环境 xff0c 出现运行4 3版本sim vehicle py时路径链接到4 2版本工作路径 解决 为防止文件识别错误 xff0c 更改sim vehicle py文件名为
  • MAVROS +ardupilot +gazebo 无人机集群仿真 (一)

    MAVROS 43 ardupilot 43 gazebo 无人机集群仿真 xff08 一 xff09 无人机仿真环境搭建仿真软件安装仿真环境测试无人机多机仿真apm launch文件修改修改 iris ardupilot world修改
  • 在ubuntu20.4下安装ardupilot 4.3.6

    这次重新安装真的是遇到了好多坑啊 xff01 从github上靠过来按照之前的那篇文章流程做完之后 xff0c 还会有一些别的问题 首先是module里面的包都没有拷过来 xff0c 所以需要用git add将文件都添加过来 之后进行编译时
  • ADXL345传感器介绍

    今天小白给大家介绍一款当下比较流行的三轴加速度传感器 ADXL345 通过本文的介绍让大家学会如何使用这款功能强大的三轴加速度传感器 欢迎一起交流学习 1 ADXL345传感器简介 该款传感器如下图 ADXL345 是 ADI 公司推出的基
  • 高通 ADSP sensor SSC

    1 添加入口函数 adsp sensors dd qcom inc sns dd h extern sns ddf driver if s sns dd
  • 低级键盘挂钩

    我刚刚买了一个新键盘 我有兴趣准确跟踪键盘整个使用寿命期间我按下 敲击的次数 我只想记录 keyUp 因为我不关心重复 我一直在搜索最好的方法来做到这一点 但我什至不知道该采取什么方法 所以我在智能搜索方面遇到了困难 另外 我真正使用过的唯
  • 获取 Android 上的活动驱动程序列表

    有没有一种简单的方法来获取 Android 设备上当前使用的驱动程序列表 lsmod列出了少量驱动程序 3 但我猜测大多数驱动程序都编译到内核中而不是作为模块 显然 像这样的事情make menuconfig由于设备本身缺乏开发工具 没有机

随机推荐

  • 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