Pixhawk之UAV控制理论、ardupilot源码框架介绍

2023-05-16

一、开篇

        “您有无人机么?

        没有。

        那赶紧去某宝买一套。”

        昨天开会开到接近下午一点钟,收获相当大,原本不太清楚的ardupilot框架现在也大致熟悉了,接下来主要就是结合源码了解其控制过程了,整体控制台过于复杂,还需要慢慢的研究。

        但是,本篇博客还是不会太涉及那么多关于源代码的东西的,特别是关于通过代码实现控制理论的(其实我现在也不太懂~~~),下面还有很多的基本知识需要阐述,在阐述以后会先给出一部分的关于代码框架的东西,不是很深入,请结合源码再看后面的东西。

        如果看到这里还对UAV、pixhawk不太了解的,请先阅读前一篇关于pixhawk的博客(地址:Pixhawk之前期准备)以及结合这个介绍的相当详细的网站:Pixhawk飞行控制器概览 。

        下面会给出几个比较重要的框架图,希望各位看客熟记!!!


三、实验平台

Software Version:ArduCopter(Ver_3.3)

Hardware Version:pixhawk

IDE:eclipse Juno (Windows)

四、基本知识介绍

        下面的5个部分您都了解么?

1)名词解释

惯性测量单元IMU(InertialMeasurementUnit)

姿态航向参考系统AHRS(Attitudeand Heading Reference System)

地磁角速度重力MARG(Magnetic,Angular Rate, and Gravity)

微机电系统MEMS(MicroElectrical Mechanical Systems)

自由度维数DOF(Dimension OfFreedom)

无人驾驶飞行器UAV(UnmannedAerial Vehicle)

扩展卡尔曼滤波EKF(ExtendedKalman Filter)

无损卡尔曼滤波UKF(UnscentedKalman Filter)

惯性导航系统INS(InertialNavigation System)

全球导航卫星系统GNSS(GlobalNavigation Satellite System)

天文导航系统CNS(CelestialNavigation System)

可垂直起降VTOL(VerticalTake-off and Landing)

2)坐标系介绍

        有两个基本坐标系:“地理”坐标系(Earth Frame)和“载体”坐标系(Body Frame)。”地理”坐标系指的就是地球上的“东北天(ENU)”坐标系,而“载体”坐标系值的就是四轴自己的坐标系。当我们在实际控制当中,我们关心的显然是载体坐标系相对于地理坐标系之间的变化,所以我们通常使用的旋转矩阵是把“地理”坐标系转到“载体”坐标系的矩阵,两者之间的转换关系自行百度吧,讲的很详细。转化的方法就是坐标系的转换,目前有三种方式:四元数(q0123)、欧拉角(yaw(Z轴)、pitch(Y轴)、roll(X轴)属于其中一种旋转顺序Z-Y-Xà航空次序欧拉角)、方向余弦矩阵(9个系数)。其中使用四元数运算比较快,但是它没有实际的物理含义,纯数学推到。

3)姿态数据

        姿态的数据来源有5个:重力、地磁、陀螺仪、加速度计、电子罗盘。其中前两个来自“地理”坐标系,后三个来自“载体”坐标系。。在“地理”坐标系中,重力的值始终是(0,0,1g),地磁的值始终是(0,1,x)。这些值就是由放置在四轴上的传感器测量出来的。在单位时间内的位移被定义为速度,速度有线速度和角速度之分,分别对应两种传感器测量这两种不同的速度:线速度传感器(加速度计)、角速度传感器(陀螺仪)。

4)导航的基本原则

        导航的基本原则就是保证两个基本坐标系的正确转化,没有误差。只有实现了这个原则,载体才可以在自己的坐标系中完成一系列动作而被转换到地理坐标系中看起来是正确的。为了达到这个目标,需要对两个坐标系进行实时的标定和修正。因为坐标系有三个轴,偏航yaw修正由电子罗盘(基于载体)、地磁(基于地理)对比修正误差补偿得到。俯仰pitch和横滚roll上的修正由加速度计(基于载体)、重力(基于地理)对比修正误差得到。在完成了基本原则的基础之后,即保证两个坐标系的正确转化后,利用基于载体上的陀螺仪进行积分运算,得到基于载体坐标系的姿态数据,经过一系列PID控制,给出控制量,完成基于载体坐标系上的稳定控制后,反应到地理坐标系上的稳定控制,从而达到我们观察到的定高、偏航、翻滚、倾仰等动作。下一篇博客会给出具体的PID回路控制框图,这篇博客就不添加了。

        加速度计在地球上测量的是重力加速度,如果载体沿着z轴旋转,加速度计是无法感知他的运动的;类似的,电子罗盘测量的是地球上的磁场方向,如果载体沿着y轴旋转,电子罗盘同样也是无法感知他的运动的。综上所述,加速度计和电子罗盘只能得到2维的角度关系,通过某种方式的融合,可以得到正确的三维姿态信息。

        对于上述论述可以看出,导航姿态从理论上讲只用陀螺仪是可以完成任务的。但是由于陀螺仪在积分过程中会产生误差累计,加上白噪声、温度偏差等会造成导航姿态的解算随着时间的流逝而逐渐增加。所以就需要用加速度计在水平面对重力进行比对和补偿,用来修正陀螺仪的误差。但是对于竖直轴上的旋转,加速度计是无能为力的,此时用的是电子罗盘。也可以测量出水平面内的地磁方向用来修正陀螺仪的水平误差。通过这两个器件的修正补偿,使得陀螺仪更加稳定、可靠的工作。

5)AHRS和IMU的差异

        AHRS由加速度计、磁场计、陀螺仪构成,AHRS的真正参考来自于地球的重力场和地球的磁场,它的静态精度取决于对磁场的测量精度和对重力的测量精度,而陀螺仪决定了他的动态性能。在这种前提下,说明AHRS离开了地球这种有重力和磁场环境的时候是没法正常工作的。而且特别注意,磁场和重力场越正交,航姿测量效果越好;也就是说如果磁场和重力场平行了,比如在地磁南北极。这里的磁场是向下的,即和重量场方向相同了。这个时候航线交是没法测出的,这是航姿系统的缺陷所在;在高纬度的地方航线角误差会越来越大。

        IMU(Inertial measurement unit)学名惯性测量单元,大学的理论力学告诉我们,所有的运动都可以分解为一个直线运动和一个旋转运动,故这个惯性测量单元就是测量这两种运动,直线运动通过加速度计可以测量,旋转运动则通过陀螺。假设IMU的陀螺和加速度计的测量是没有任何误差的,那么通过陀螺则可以精确的测量物体的姿态。通过加速度计可以二次积分得出位移,实现完整的6DOF,也就是说你带着一台这种理论型的IMU在宇宙任何位置运动。我们都可以知道它当前的姿态和相对位移,这将不局限于任何场。

  从上面的描述何以看出。实际上AHRS比IMU还多一个磁场传感器,而为什么AHRS的级别却低于IMU而需要依赖于重力场和磁场呢?这是由传感器器件架构所决定的。AHRS的传感器通常是成本低廉的mems传感器。这种传感器的陀螺仪和加速度计的噪声相对来说很大。以平面陀螺为例:用ADI的陀螺仪进行积分一分钟会漂移2度左右,这种前提下如果没有磁场和重力场来修正三轴陀螺的话。那么基本上3分钟以后物体的实际姿态和测量输出姿态就完全变样了,所以在这种低价陀螺仪和加速度计的架构下必须运用场向量来进行修正,而IMU实际上也是这样的。因为我们知道没有绝对精确的传感器,只有相对精确的传感器,IMU的陀螺仪用的是光纤陀螺或者机械陀螺,这种陀螺的成本很高。精度相对mems陀螺也很高,精度高不代表准确,IMU的姿态精度参数通常是一小时飘多少度。

  而用加速度计积分做位置的话。AHRS是不现实的(1分钟就能飘出几十米,而且是成二次方的速度递增)。AHRS通常要结合GPS和气压计做位置,IMU积分做位置的是一天多少海里。这样的一个参数数量级。也许在海上还能用的到,这就是AHRS和IMU在我的理解里的一个差异。

五、源码框架介绍

        先来一发高清好图,一直再找它,终于找到了,正所谓“众里寻它千百度,蓦然回首那图却在灯火阑珊处”。希望大家能从该图大致的理解这个该死的pixhawk代码框架,下图就不做解释了,肯定都能看的懂。


        上面的图记下了么?记下了接着往下看~~~

1)阅读下面内容时请结合源码阅读,便于理解。

        The basic structure of ArduPilot is broken up into 5 main parts:
(1)vehicle directories
(2) AP_HAL
(3) libraries
(4) tools directories
(5) external support code

(1)Vehicle Directories
        The vehicle directories are the top level directories that define the firmware for each vehicle type. Currently there are 4 vehicle types – Plane、 Copter、APMrover2 and AntennaTracker。
        Along with the *.cpp files, each vehicle directory contains a make.inc file which lists library dependencies. The Makefiles read this to create the -I and -L flags for the build.
(2) AP_HAL
        The AP_HAL layer (Hardware Abstraction Layer) is how we make ArduPilot portable to lots of different platforms。 There is a top level AP_HAL in libraries/AP_HAL that defines the interface that the rest of the code has to specific board features, then there is a AP_HAL_XXX subdirectory for each board type, for example AP_HAL_AVR for AVR based boards, AP_HAL_PX4 for PX4 boards and AP_HAL_Linux for Linux based boards。
(3) libraries
(4) Tools directories
        The tools directories are miscellaneous support directories. For examples, tools/autotest provides the autotest infrastructure behind the autotest.diydrones.com site and tools/Replay provides our log replay utility.
(5) External support code

        On some platforms we need external support code to provide additional features or board support. Currently the external trees are:
PX4NuttX – the core NuttX RTOS used on PX4 boards
PX4Firmware – the base PX4 middleware and drivers used on PX4 boards
uavcan – the uavcan CANBUS implementation used in ArduPilot
mavlink – the mavlink protocol and code generator

2)Libraries介绍

(1)核心库
AP_AHRS:采用DCM(方向余弦矩阵方法)或EKF(扩展卡尔曼滤波方法)预估飞行器姿态。
AP_Common:所有执行文件(sketch格式,arduino IDE的文件)和其他库都需要的基础核心库。
AP_Math:包含了许多数学函数,特别对于矢量运算。
AC_PID:PID控制器库。
AP_InertialNav:扩展带有gps和气压计数据的惯性导航库。
AC_AttitudeControl:姿态控制相关库。
AP_WPNav:航点相关的导航库。
AP_Motors:多旋翼和传统直升机混合的电机库。
RC_Channel:更多的关于从APM_RC的PWM输入/输出数据转换到内部通用单位的库,比如角度。
AP_HAL,AP_HAL_AVR,AP_HAL_PX4:硬件抽象层库,提供给其他高级控制代码一致的接口,而不必担心底层不同的硬件。AP_HAL_PX4:GPIO、I2C、UART、RCinput/output、scheduler、semaphores、storage。
(2)传感器相关库
AP_InertialSensor:读取陀螺仪和加速度计数据,并向主程序执行标准程序和提供标准单位数据(deg/s,m/s)。
AP_RangerFinder:声呐和红外测距传感器的交互库
AP_Baro:气压计相关库
AP_GPS:GPS相关库
AP_Compass:三轴罗盘相关库
AP_OpticalFlow:光流传感器相关库
(3)其他库
AP_Mount,AP_Camera, AP_Relay:相机安装控制库,相机快门控制库
AP_Mission: 从eeprom(电可擦只读存储器)存储/读取飞行指令相关库
AP_Buffer:惯性导航时所用到的一个简单的堆栈(FIFO,先进先出)缓冲区
AP_AccelCal、AP_Declination、AP_RCMapper、AP_RPM、AP_RSSI
AP_ADC:Analog to Digital
APM_Control: pitch/roll/yaw controller
DataFlash:flash memory
GCS_Console/GCS_MAVLink:地面站通信、飞行日志

3)关于主控MCU STM32F4的选择和协处理器STM32F1

        在源代码中,大部分代码都是运行在主控MCU STM32F4芯片上,并且是通过直接配置寄存器来实现相应的功能,代码位于“/ardupilot/modules/PX4Firmware/Build/px4fmu-v2_APM.build/nuttx-export/arch/chip”中。

4)关于pixhawk使用的OS:NuttX

        在modules /PX4NuttX/nuttx/sched文件中有os_start.c定义文件,内部进行了一系列的关于操作系统的初始化。在os_start()函数里面进行了如下初始化。


        以上并非必须初始化,可以有选择性的初始化。Ifdef/ifndef….

        重点了解一下关于nuttx中的modules /PX4NuttX/nuttx/mm。

5)姿态控制的软件流程

        简单的软件流程官方给出了大致的介绍,该部分详见官方介绍:Code Overview

六、再深入一点

        如下顺序不分先后,都是平时自己整理的,等以后对ardupilot的整体框架了解的比较透彻以后再回头修改吧。

1)关于飞行模式


2)关于参数的使用



3)关于一些报警和灯显、日志


4)关于校准和失控保护


5)关于RC输入和输出(接收机)


6)关于机型选择和电机控制


        代码赏析:如下事例摘自motors.cpp中的一段关于电机解锁和上锁的源码,这段代码试飞过无人机的肯定一看就懂~~~但是,如果没有感性的是飞过无人机,那么。。。。。。。您自己理解吧

// arm_motors_check - checks for pilot input to arm or disarm the copter
// called at 10hz
void Copter::arm_motors_check()
{
    static int16_t arming_counter;
    // ensure throttle is down首先判断油门是否为最小
if (channel_throttle->control_in > 0)
{
        arming_counter = 0;
        return;
}
//油门最小则检测yaw的行程量
int16_t tmp = channel_yaw->control_in;

    // full right  解锁
if (tmp > 4000) 
{
        // increase the arming counter to a maximum of 1 beyond the auto trim counter
        if( arming_counter <= AUTO_TRIM_DELAY )
 {
            arming_counter++;
        }
        // arm the motors and configure for flight
        if (arming_counter == ARM_DELAY && !motors.armed()) 
{
            // reset arming counter if arming fail
            if (!init_arm_motors(false)) 
{
                arming_counter = 0;
            }
        }
        // arm the motors and configure for flight
        if (arming_counter == AUTO_TRIM_DELAY && motors.armed() && control_mode == STABILIZE)
 {
            auto_trim_counter = 250;
            // ensure auto-disarm doesn't trigger immediately
            auto_disarm_begin = millis();
         }
    // full left 上锁
}
else if (tmp < -4000)
{
        if (!mode_has_manual_throttle(control_mode) && !ap.land_complete) {
            arming_counter = 0;
            return;
        }
        // increase the counter to a maximum of 1 beyond the disarm delay
        if( arming_counter <= DISARM_DELAY ) 
{
            arming_counter++;
        }
        // disarm the motors
        if (arming_counter == DISARM_DELAY && motors.armed()) 
{
            init_disarm_motors();
        }
    // Yaw is centered so reset arming counter
}
Else
{
             arming_counter = 0;
           }
}

七、总结

        阅读源码是在eclipse中直接看的,没有用SI(据说很高级,但是用不习惯)。通过上述介绍,对ardupilot这套代码有了初步的理解,初期接触这套代码的第一感觉就是“What's the fucking code!”,经过一段时间的不懈努力,终于有了些头绪,苍天不负有心人。

        接下来的博客内容是关于这套ardupilot代码如何使用操作系统的、Where is the fucking function main?、进程问题,还有就是验证控制回路,PID的使用,EKF等等,应该会分开写吧,这么多东西~~~

        整整写了一晚上啊,写博客真不是一件容易的事情,写的有点乱,没头没尾的,希望各位看客喜欢。有错误的请帮忙指出来,大家一起进步~~~~

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

Pixhawk之UAV控制理论、ardupilot源码框架介绍 的相关文章

  • Docs » Learning the ArduPilot Codebase » EKF » Extended Kalman Filter Navigation Overview and Tuning

    原文 xff1a http ardupilot org dev docs extended kalman filter html extended kalman filter navigation overview and tuning 本
  • 【Pixhawk】注册一个字符型驱动设备

    最近学习Pixhawk的SPI xff0c 本以为PX4是STM32单片机而已 xff0c 写个SPI驱动应该很简单 但是当我看到mpu9250的那些cpp文件 xff0c 我一下就蒙了 由于PX4用的NUTTX系统 xff0c 类似Lin
  • 搭建pixhawk飞控无人小车--替换自带遥控器

    因为小车原装遥控器接收机和电调版整合在一个小板子上 xff0c 且没有相关资料 xff0c 无法接入飞控 因此单独购买遥控器 在某宝上购买富斯遥控器i6 xff0c 总共六个通道 三个双向开关 一个三向开关 遥控器简单入门视频如下 xff0
  • Pixhawk串口名称与硬件接口对应关系

    Pixhawk提供的串口较多 xff0c 通过ls dev 可以看到有如下7个tty设备 xff1a ttyACM0 ttyS0 ttyS1 ttyS2 ttyS3 ttyS4 ttyS5 ttyS6 但每个串口名称对应到Pixhawk硬件
  • 树莓派结合PIXHAWK飞控实现四轴双目视觉避障

    树莓派结合Pixhawk飞控实现四轴双目视觉避障 灰信网 xff08 软件开发博客聚合 xff09 无人机双目视觉避障的实现 本文将介绍如何使用树莓派结合PIX飞控实现无人机双目视觉避障的功能 主要硬件 我们以双目摄像头 43 树莓派 43
  • APM(pixhawk)飞控疑难杂症解决方法汇总(持续更新)

    原文链接 xff1a http www nufeichuiyun com p 61 28
  • APM 学习 6 --- ArduPilot 线程

    ArduPilot 学习之路 6 xff0c 线程 英文原文地址 xff1a https ardupilot org dev docs learning ardupilot threading html 理解 ArduPilot 线程 线程
  • 树莓派3B使用mavlink串口连接PIXHAWK_V5

    参考网址 xff1a http ardupilot org dev docs raspberry pi via mavlink html https dev px4 io en robotics dronekit html https do
  • 【MATLAB UAV Toolbox】使用指南(三)

    可视化自定义飞行日志 通过配置flightLogSignalMapping可从自定义的飞行日志中可视化数据 加载自定义的飞行日志 在本例中 xff0c 假设飞行数据已经被解析到MATLAB 中 xff0c 并存储为M文件 本示例重点介绍如何
  • H无穷控制

    H无穷优化控制问题可归纳为 求出一个使系统内部稳定的控制器K s 使闭环传函Tzw的无穷范数极小 LQG的弱点 对控制的一个主要挑战使多变量控制系统设计 因为MIMO系统的传函是一个矩阵 LQG是一种在状态空间的框架内 对MIMO系统进行设
  • [非线性控制理论]4_反馈线性化_反步法

    非线性控制理论 1 Lyapunov直接方法 非线性控制理论 2 不变性原理 非线性控制理论 3 基础反馈稳定控制器设计 非线性控制理论 4 反馈线性化 反步法 非线性控制理论 5 自适应控制器 Adaptive controller 非线
  • 从不懂到会用,PID从理论到实践~笔记

    从不懂到会用 PID从理论到实践 哔哩哔哩 bilibili PID的适用性 一阶 二阶的线性系统 前馈系统只是对干扰做一个补偿 单闭环系统 双闭环控制系统 一个是还没发生干扰但我知道你会干扰进行反应 一个是看到你对我干扰后并发生后才进行反
  • Matlab迭代算法实现

    牛顿迭代法 雅可比迭代法 高斯赛德迭代法 超松弛迭代法 SOR 共轭迭代法 牛顿迭代法 代码实现案例 原函数输入 function y newton x y exp x 4 2 x 1 任意函数 end 保存要进行牛顿迭代的函数 牛顿迭代函
  • [非线性控制理论]4_反馈线性化_反步法

    非线性控制理论 1 Lyapunov直接方法 非线性控制理论 2 不变性原理 非线性控制理论 3 基础反馈稳定控制器设计 非线性控制理论 4 反馈线性化 反步法 非线性控制理论 5 自适应控制器 Adaptive controller 非线
  • [动态系统的建模与分析]9_一阶系统的频率响应_低通滤波器

    动态系统的建模与分析 8 频率响应 详细数学推导 G jw 滤波器 运放滤波器 3 反相同相比例放大电路 Multisim电路仿真 运放滤波器 2 运放反馈原理 运放滤波器 1 理想运放 虚短虚断 现代控制理论 11 现代控制理论串讲 完结
  • 谈谈滞后补偿器与PI控制及其原理分析

    本文一览 1 什么是滞后补偿器以及和PI控制的联系 2 PI控制对系统的影响 1 什么是超前补偿器以及和PI控制的联系 上一篇文章提到了超前补偿器 超前这个词的含义就是相位提前 相位提前所带来的的好处就是减少振荡 加快系统的稳定 但是使用超
  • [现代控制理论]11_现代控制理论串讲_完结_pdf获取

    DR CAN的现代控制理论的笔记就结束了 加上这篇一共11篇 现代控制理论 11 现代控制理论串讲 完结 pdf获取 现代控制理论 10 可观测性与分离原理 观测器与控制器 现代控制理论 9 状态观测器设计 龙伯格观测器 现代控制理论 8
  • [现代控制理论]5_系统的可控性_controllability

    现代控制理论 11 现代控制理论串讲 完结 pdf获取 现代控制理论 10 可观测性与分离原理 观测器与控制器 现代控制理论 9 状态观测器设计 龙伯格观测器 现代控制理论 8 5 线性控制器设计 轨迹跟踪simulink 现代控制理论 8
  • 用MATLAB和内点法实现带有时变不等式约束的分布式优化

    文章目录 问题描述 内点法 MATLAB实现 仿真结果 源代码 问题描述 考虑代价函数 f i x i
  • [现代控制理论]5_系统的可控性_controllability

    现代控制理论 11 现代控制理论串讲 完结 pdf获取 现代控制理论 10 可观测性与分离原理 观测器与控制器 现代控制理论 9 状态观测器设计 龙伯格观测器 现代控制理论 8 5 线性控制器设计 轨迹跟踪simulink 现代控制理论 8

随机推荐

  • 超链接的世界:深入解析外设数据传输方式

    超链接的世界 xff1a 深入解析外设数据传输方式 一 引言 Introduction 1 1 研究背景及其重要性 xff08 Background and Importance xff09 1 2 文章主旨和结构 xff08 Purpos
  • 文件结构魔法:探索数据管理的核心秘密

    文件结构魔法 xff1a 探索数据管理的核心秘密 一 文件结构引言 xff08 Introduction to File Structure xff09 1 1 文件结构的基本概念 xff08 Basic Concepts of File
  • 英语基础句型之旅:从基础到高级

    英语句型之旅 xff1a 从基础到高级 一 起步 xff1a 掌握英语基础句型 Getting Started Mastering Basic English Sentence Structures 1 1 英语句子的基本构成 The Ba
  • 硅谷的主干道:深度解析计算机总线的秘密

    目录标题 一 序言 Introduction 1 1 计算机总线的概念 Concept of Computer Bus 1 2 计算机总线的重要性 Importance of Computer Bus 1 3 关于博客的组织结构 Struc
  • android之蓝牙控制小四轴飞行器

    本app基于匿名开源小四轴app xff08 http www anotc com Product Overview 8 xff09 改编 匿名小四轴接上串口蓝牙模块后 xff0c 可直接使用本app控制 其它飞控修改通信协议后方可使用 本
  • 算法c++好处及STL优点

  • airsim 安装指导(无人机、无人车视觉导航仿真平台)

    说明 xff1a airsim是基于UE4开发的仿真平台 xff0c 听到UE4这个名字不是做游戏的同学 xff0c 可能会觉得陌生 xff0c 但是其实我们经常玩的一些游戏就是基于UE4开发的 xff0c 比如最近比较火的吃鸡游戏 借助于
  • FreeRTOS Heap_1、Heap_2、Heap_3、Heap_4、Heap_5的区别

    FreeRTOS提供了五种内存管理的方式 xff0c 下文将对以下五种内存分配进行说明 xff1a 1 Heap 1 Heap 1 堆大小通过FreeRTOSConfig h中的configTOTAL HEAP SIZE定义设置 xff0c
  • UE4数字人驱动(一)—坐标系转换

    好记性不如烂笔头 xff0c 之前通过研究VRPN实现了自定义的设备添加 xff0c 现在需要在UE4里利用采集的人体运动数据进行数字人驱动 整个功能实现包括 xff1a UE4端VRPN数据接收 数据坐标系转化 动捕骨骼与数字人骨骼匹配与
  • vscode下cmake工程环境配置以及调试配置(c++)

    1 准备工作 1 1MinGW的下载 MinGW将其托管到sourceforge上了 xff0c 也可以前往sourceforge下载 xff1a https sourceforge net projects mingw w64 files
  • 真香!腾讯竟然又偷偷开源了一套Android原生UI框架!

    今天在浏览技术新闻的时候 xff0c 发现腾讯就在今天开源了一套 Android 原生的 UI 框架 你们有没有发现 xff0c 腾讯特别喜欢干这种事 xff0c 哪一种事呢 xff1f 喜欢开源 UI 框架 xff0c 小程序也是这样的
  • STM32 Keil5报错-Target uses ARM-Compiler ‘Default Compiler Version 5‘ which is not available-安装编译器解决

    现象 Keil MDK 5 3 6 编译代码报错 xff1a Target uses ARM Compiler Default Compiler Version 5 which is not available Rebuild starte
  • prometheus编译安装

    prometheus是搜集应用程序所使用的CPU 内存 以及磁盘使用大小的神器 xff0c 它可以根据用户所配置的性能阀值给出相应的处理 xff0c 比如 邮件告警等 xff0c 在这里就不啰嗦了 xff0c 由于本人也是刚刚学习 所以能说
  • 不同硬件传感器数据之间的时间同步问题

    主要分为硬同步和软同步 硬同步就是用一个硬件触发器 xff0c 直接通过物理信号 xff0c 触发相机和LIDAR记录一个data frame 软同步提供一个相同的时间源 xff08 一般都是主控电脑utc时间 xff09 给相机和LIDA
  • 多传感器融合定位开源工程与论文

    目录 1 LIC Fusion xff1a 基于激光雷达 惯性导航和相机结合的里程计 2 使用点线特征配合激光雷达辅助的单目视觉里程计 3 间歇的GPS辅助VIO xff1a 在线初始化和标定 4 强大的高精度视觉惯性激光SLAM系统 5
  • [BLE]CC2640之定时器(Clock)事件

    一 定时器 xff08 Clock xff09 所谓定时器本质上递减计数器 xff0c 当计数器减到零时可以触发某种动作的执行 这种动作可以通过回调函数来实现 xff0c 当定时器计时完成后 xff0c 自定义的回调函数会立即被调用 回调函
  • [BLE]低功耗蓝牙介绍

    一 BLE的协议栈框架 BLE协议栈包括两个部分 xff0c 主机 Host 和控制器 Controller 二者通过HCI Host Controller Interface 标准接口相互通信 常用的单芯片单模BLE芯片有TI的CC254
  • [BLE]低功耗蓝牙之GAP、GATT

    一 开篇 本篇主要介绍一下关于BLE开发过程中必须了解的两个协议 xff1a GAP xff08 通用访问协议 xff09 GATT xff08 通用属性协议 xff09 两个协议都隶属于Host层 xff0c 直接关系到应用层开发 xff
  • [memory]虚拟地址空间分布

    一 开篇 踏入嵌入式软件行业也接近2年了 xff0c 从研一开学起懵懵懂懂的开始学习C语言 xff0c 由于本科时对这方面了解的少之又少 xff0c 所以学起来比较困难 xff0c 但是有一群无私奉献的小伙伴 xff0c 慢慢的 xff0c
  • Pixhawk之UAV控制理论、ardupilot源码框架介绍

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