PX4代码解析(1)

本文档详细介绍了PX4飞控系统的代码结构,重点解析了src目录下的drivers、include、lib、modules、platforms、systemcmd和examples等核心部分,涉及驱动程序、通信接口、控制算法等内容,旨在帮助读者理解和学习无人机控制系统。
摘要由CSDN通过智能技术生成

前言

做pixhawk飞控有一段时间了,但在学习过程中遇到许多困难,目前网上找不到比较完整的PX4学习笔记,我打算结合自己理解,写写自己对PX4源码的理解,不一定对,只是希望与各位大佬交流交流,同时梳理一下无人机知识。
目前打算分享以下几个内容:代码架构;通信协议;姿态解算算法,控制算法。先这样,后面想到再加。本章先来聊聊px4代码结构

一、代码整体结构

既然要聊px4代码结构,那就先把px4代码结构图放出来,因为px4源码仍然在不断更新迭代,因此老版本与新版本目录结构可能有些不同,我的代码解析参考版本为V1.11。
在这里插入图片描述刚开始接触PX4源码时,一看这么多目录,当时心态就崩了。但不要紧张,其中有大部分文件夹对我们初学者来说是用不到的,最主要的文件如下表

目录作用
src功能源代码,包含所有控制相关的功能代码
build编译目标目录,包含程序源代码编译后生成的编译选项,目标文件,中间文件等
cmake编译配置文件,存放PX4项目编译相关的配置
platforms存放飞控程序运行平台代码
msg内部通信接口,用来存放内部通信的消息文件
Mavlink外部通信接口,存放mavlink协议所用头文件
ROMFSROM文件系统,飞控程序启动相关配置以及不同机型的混合控制文件
Tools存放仿真及与其他软件使用的工具脚本

以上便是PX4源码常用目录的作用,下面我先介绍最重要的文件夹src,文件夹会后续在详细讲解。

二、src文件夹解析

src文件夹可谓是PX4项目的精华,其中包含了无人机算法的所有实现,src文件夹中的内容分为以下6个部分
在这里插入图片描述(1).drivers文件夹
包含飞控程序中所有的驱动程序,其文件夹内容如下:
在这里插入图片描述
模块功能从模块命名很容易看出,例如px4io是负责FMU与IO通信;gps就是gps定位模块;这些模块根据命名就可以知道其作用,这里不在过多描述
(2).include文件夹
该文件夹主要包括飞控程序所包含的头文件
(3).lib文件夹
包含很多公共算法函数与数学工具函数,部分模块具体功能如下表

模块名称功能
airspeed空速计算
mathlib数学函数库
matrix矩阵计算
battery电源功能
controllib控制算法
conversion旋转转换
EKF扩展卡尔曼滤波
rc遥控器协议解析

(4).modules文件夹
包括无人机相关上层应用的控制模块,如导航,规划,地面站通信,命令执行等内容

(5).platforms文件夹
定义与运行平台相关头文件,实现工作队列,多进程,多线程等相关系统特性

(6).systemcmd文件夹
文件夹实现了多个系统命令,飞控采用系统为nuttx,后续会详细介绍

(7).examples文件夹
PX4官方提供的一些学习的例子

  • 34
    点赞
  • 178
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PX4是一个开源的飞控固件,其PID控制器部分的代码如下: ```c++ void PID::update(float desired, float measured, float dt) { // 计算误差 float error = desired - measured; // 积分误差 _integrator += _ki * error * dt; // 限制积分误差 _integrator = math::constrain(_integrator, -_integrator_saturation, _integrator_saturation); // 计算微分误差 _derivative = (_kd == 0) ? 0 : (_prev_error - error) / dt; // 计算输出 _output = _kp * error + _integrator + _kd * _derivative; // 限制输出 _output = math::constrain(_output, -_output_saturation, _output_saturation); // 更新上一次误差 _prev_error = error; } ``` 该代码实现的是一个标准的PID控制器,其中包含了三个部分,分别是比例控制、积分控制和微分控制。算法流程如下: 1. 计算误差:目标值与实际值之间的差距。 2. 积分误差:将误差累加起来,用于消除稳态误差。 3. 限制积分误差:对积分误差进行限制,防止积分饱和。 4. 计算微分误差:计算误差的变化率,用于抑制超调和减小调节时间。 5. 计算输出:将比例控制、积分控制和微分控制三个部分的输出相加,得到最终的控制输出。 6. 限制输出:对输出进行限制,防止输出过大或过小。 7. 更新上一次误差:将当前误差保存下来,供下一次计算使用。 这段代码的实现比较简单,但是需要注意的是,积分误差和微分误差的计算需要进行限制,否则会出现积分饱和和微分爆炸的问题。此外,PID控制器的参数需要根据具体的控制对象进行调整,以获得更好的控制效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值