PX4代码框图
- 格式:vsd
- 大小:53.00 KB
- 文档页数:1


PX4源码分析以及思路随笔1PX4源码分析,以及思路随笔。
目录:1.0 环境安装1.1 roll pitch yaw2.1 loop()3.1 fastloop()3.1 .1 read_AHRS()3.1.1.1 ins.update()3.1.2 rate_controller_run()3.1.2.1 _motors.set_roll()(嵌套了rate_bf_to_motor_roll)3.1.3 motors_output()3.1.3.1 update_throttle_filter()3.1.3.2 update_battery_resistance()3.1.3.3 update_lift_max_from_batt_voltage()1.0环境安装1.首先安装px4_toolchain_installer_v14_win.exe,并配置好java 环境(安装jdk,32位)。
2.安装GitHub网站:/dev/docs/building-px4-with-make.html若提示失败,在IE浏览器中打开网页,http变为https,不断尝试。
3.克隆程序(需要翻墙),可能多次失败。
4.从C:\px4\toolchain\msys\1.0内的eclipse批处理文件打开eclipse。
5.按照/dev/docs/editing-the-code-with-eclips e.html从第二张图开始。
注:第二张图位置为ardupilot的位置。
返回目录2.1 loop函数:1.Setup各种初始化,先忽略。
2.初始定义第一个是函数名,第二个单位为赫兹为过多少时间调用一次,第三个单位为微秒,即为最大花费时间。
const AP_Scheduler::Task Copter::scheduler_tasks[] = {SCHED_TASK(rc_loop, 100, 130), /* 控制角 */SCHED_TASK(throttle_loop, 50, 75), /*油门控制*/SCHED_TASK(update_GPS, 50, 200), /* GPS更新*/3.从Loop()开始。
1、PX4/Pixhawk飞控软件架构简介PX4是目前最流行的开源飞控板之一。
PX4的软件系统实际上就是一个firmware,其核心OS 为NuttX实时ARM系统。
其固件同时附带了一系列工具集、系统驱动/模块与外围软件接口层,所有这些软件(包括用户自定义的飞控软件)随OS内核一起,统一编译为固件形式,然后上传到飞控板中,从而实现对飞控板的软件配置。
PX4配套的软件架构主要分为4层。
理解其软件架构是开发用户自定义飞控应用软件的基础。
a) API层:这个好理解。
b) 框架层:包含了操作基础飞行控制的默认程序集(节点)c) 系统库:包含了所有的系统库和基本交通控制的函数d) OS内核:提供硬件驱动程序、网络、UAVCAN和故障安全系统上述是个面向PX4系统实现者的相对具体的软件架构。
实际上还有另外一种面向PX4自定义飞控应用开发者的高层软件架构描述,相对抽象,但更简单,就是整个PX4的软件从整体上分为2层:a) PX4 flight stack:一系列自治无人机自动控制算法的集合b) PX4 Middleware:一系列针对无人机控制器、传感器等物理设备的驱动及底层通信、调度等机制的集合PX4软件架构中,最有意思的一点在于整个架构的抽象性(多态性)。
即,为了最大限度保障飞控算法代码的重用性,其将飞控逻辑与具体的底层控制器指令实现进行了解耦合。
一套高层飞控算法(如autopilot、GeoFence等)在不做显著修改的情况下,能够适用于固定翼、直升机、多旋翼等多种机型的控制场合,这时候就体现出PX4飞控的威力来了:在用户程序写好之后,如果需要替换无人机机架的话,仅需简单的修改一下机架配置参数即可,高层的用户自定义飞控应用几乎无需修改。
理解上述初衷至关重要。
有很多搞自动化出身、没太多软件经验的朋友倾向于直接使用底层控制协议来控制飞控板,但实际上PX4架构已经在更高的抽象层面上提供了更好的选择,无论是代码维护成本、开发效率、硬件兼容性都能显著高于前者。
4X4 矩阵按键原理和代码解析目录1 键盘概述 (1)2 矩阵按键工作原理 (2)3、4X4 矩阵按键代码解析 (2)1 键盘概述键盘分编码键盘和非编码键盘。
键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘。
而靠软件编程来识别的称为非编码键盘。
在一般嵌入式应用中,用的最多的是非编码键盘,也有用到编码键盘的。
非编码键盘又分为独立键盘和行列式(又称为矩阵式)键盘。
所谓独立式键盘,即嵌入式CPU (或称MCU)的一个GPIO 口对应一个按键输入,这个输入值的高低状态就是键值。
矩阵键盘用于采集键值的GPIO 是复用的,一般分为行和列采集,例如4*4 矩阵键盘就只需要行列各4 个按键就可以了,矩阵键盘的控制较独立键盘要复杂得多,本实验未涉及,所以对其原理不做详细介绍。
独立按键一般有2 组管脚,虽然市面上我们常常看到有4个管脚的按键,但它们一般是两两导通的,这2 组管脚在按键未被按下时是断开的,在按键被按下时则是导通的。
基于此原理,我们一般会把按键的一个管脚接地,另一个管脚上拉到VCC,并且也连接到GPIO。
这样,在按键未被按下时,GPIO 的连接状态为上拉到VCC,则键值为1;按键被按下时,GPIO虽然还是上拉到VCC,但同时被导通的另一个管脚拉到地了,所以它的键值实际上是0。
我们的开发板上有一组4*4 矩阵键盘。
通过P12 的PIN1-2 短接时,其实S1/S2/S3/S4 可以作为独立按键使用,它的一端接地,另一端在上拉的同时连接到FPGA 的I/O 口。
当I/O 口的电平为高(1)时,说明按键没有被按下,当I/O口的电平为低(0)时,说明按键被按下了。
我们不再只局限于独立按键这么low 的应用了,这里我们将要把所有16 个按键都使用起来,实现我们真正的矩阵按键功能。
要做矩阵按键,那么大家首先要确认把自己的SF-CY4 开发板上插座P12 的PIN2-3用跳线帽短接。