ArduPilot代码解析之四 — 姿态和位置控制

给ArduPilot新手:从工程目录到编译运行,一份保姆级的代码框架解读 本文为ArduPilot新手提供了一份详细的代码框架解读,从工程目录结构到编译运行的全过程。通过解析开源代码的组织逻辑和共享库架构设计,帮助开发者快速上手无人机开发,掌握ArduPilot的核心编译和调试技巧。 阅读详情

目的和范围

本页面介绍了ArduPilot用于姿态(方向)和位置管理的级联控制架构。它解释了如何通过一系列控制回路将高级位置指令转换为电机输出,这些控制回路逐步细化期望状态,顺序为:位置→速度→加速度→姿态→角速率→电机指令。


控制架构概述

ArduPilot 采用级联控制系统,每一层都接收高层指令,并将其逐步转换为更低层级的目标。这种架构既能提供稳健的控制,又能实现平滑的轨迹跟踪。

主要特点:

  • 级联循环:每一层都接收来自上一层的目标值,并向下一层提供修正值。
  • 前馈:期望值直接传递,同时在每个阶段添加修正值。
  • 运动学整形:通过速度、加速度和加加速度限制来整形位置指令,以实现平滑的轨迹。
  • 解耦控制:水平轴 (NE) 和垂直轴 (U) 采用不同的增益独立控制。

位置控制 (AC_PosControl)

该类AC_PosControl实现了三维位置控制,具有独立的水平(东北平面)和垂直(上轴)控制器。每个轴都采用级联控制结构:位置误差驱动速度控制器,速度控制器再驱动加速度控制器。

级联控制结构

关键控制器类

控制器 类型 输入 输出 目的
_p_pos_ne_m AC_P_2D 位置误差(米) 速度目标(米/秒) 将水平位置误差转换为速度指令
_pid_vel_ne_cm AC_PID_2D 速度误差(厘米/秒) 加速度目标值(厘米/秒²) 将水平速度误差转换为加速度
_p_pos_u_m AC_P_1D 垂直位置误差(米) 速度目标(米/秒) 将高度误差转换为爬升率
_pid_vel_u_cm AC_PID_Basic 垂直速度误差(厘米/秒) 加速度目标值(厘米/秒²) 将爬升率误差转换为垂直加速度
_pid_accel_u_cm_to_kt AC_PID 垂直加速度误差(厘米/秒²) 油门输出 将垂直加速度转换为油门指令

输入整形和运动学路径生成

它不接受原始位置指令,而是AC_PosControl通过可配置的速度、加速度和加加速度限制来实现运动学路径整形。这确保了平滑的轨迹,避免了突变。

核心输入功能:

成形函数(位于库/AC_AttitudeControl/AC_PosControl.cpp2413-2682计算平滑轨迹的方法如下:

  1. 计算达到目标所需的加加速度需在加速度限制范围内
  2. 对加速度变化应用加加速度限制
  3. 对加速度进行积分即可得到速度
  4. 对速度进行积分以获得位置

ArduPilot飞控系统代码解读及架构分析 ArduPilot飞控系统是一个复杂而强大的系统,通过模块化设计和分层架构,实现了灵活的飞行控制功能。模块化设计: 各个功能模块相对独立,便于维护和扩展多种飞行模式: 满足不同的飞行需求强大的控制算法: 实现稳定的姿态和位置控制完善的安全机制: 保障飞行安全丰富的配置选项: 通过参数系统实现高度可定制性这种架构使ArduPilot能够适应从简单的多旋翼到复杂的自主飞行器等各种应用场景。类结构分析:Mode基类 (mode.h/mode.cpp) 阅读详情

相关推荐

Ardupilot姿态控制器 PID控制流程

APM的控制器主要分为attitude姿态控制器和pos位置控制器。这系列文章主要来讲一下姿态控制器内部的实现。本文主要目的是为了解析APM源码然后方便自己将其实现在自己的水下航行器控制器上的,因此将会以ArduCopter和ArduSub为例进行解析,其他无人机类型也是类似的,也可用作参考。 一、PID姿态控制器 1.1 Copter姿态控制官方原图 在真正开始解析源码之前,可以看一下Ardupilot官方网站上开发者手册对于直升机姿态控制器的描述(虽然官方的文档已经很久没更新了,4.x版本之后的..

moumde的博客 9550

ArduPilot导航算法详解:位置控制完整指南

深入剖析ArduPilot导航算法的核心机制,详解位置控制的实现原理与调参技巧,帮助开发者更好掌握ardupilot在实际飞行中的应用,提升系统稳定性与定位精度。

weixin_33597080的博客 596

ArduPilot代码解析之十一 — 多旋翼控制系统

本文介绍了ArduCopter多旋翼飞行器的控制系统架构,采用级联控制方式实现从位置指令到电机输出的完整控制流程。系统包含位置控制(50Hz)、姿态控制(400Hz)、速率控制和电机输出四个层级,通过嵌套回路实现精准飞行控制。详细说明了姿态控制系统的角度P控制器和速率PID控制器设计,以及位置控制系统的三级级联结构。同时介绍了电机混控算法和多种机架类型的支持,并阐述了飞行模式与控制系统的集成方式。最后通过ModeLoiter示例展示了从RC输入到电机输出的完整控制流程。

rainercool的专栏 687

ArduPilot代码解析之七 — 自动调谐系统

自动调谐系统通过执行受控飞行机动自动确定飞行器姿态控制回路的最佳PID增益,无需人工干预。系统采用多态类层次结构,针对多旋翼和直升机平台分别实现不同的调谐算法:多旋翼通过"抽搐"机动测量瞬态响应来调整参数,直升机则采用频域分析方法。调谐过程分为多个步骤,包括增益测试、验证和保存,最终应用安全裕度确保稳定性。系统支持通过飞行模式或辅助开关调用,并自动保存优化后的参数。该技术实现了飞行控制参数的智能化优化,显著提升了飞行性能和稳定性。

rainercool的专栏 1047

Ardupilot姿态控制进阶:从PID到四元数的实战解析

本文深入解析Ardupilot姿态控制从PID到四元数的进阶实战技巧。通过对比PID与四元数在复杂场景下的表现,详细介绍了四元数在避免万向节死锁、提升计算效率方面的优势,并提供了具体的调参方法和工具链建议,帮助开发者优化飞行器姿态控制性能。

weixin_26812607的博客 158

飞控四巨头:Pixhawk、PX4、APM与ArduPilot关系详解

飞控系统是无人机的核心,但Pixhawk、PX4、APM、ArduPilot这几个名词常让新手混淆。从计算机类比入手,说明Pixhawk是硬件主板,PX4与ArduPilot是运行其上的软件操作系统,而APM则是从早期硬件演变为ArduPilot的俗称。理解硬件与软件解耦的原理,才能正确选型。无论是想解决PX4源码仓库子模块未初始化的编译问题,还是希望借助WSL2在AirSim下搭建PX4仿真环境,或者对水下机器人使用APM固件感兴趣,都需要先理清这四者的关系。本文用一张谱系图和实操速查表,帮助你在飞控开发

weixin_34314962的博客 314

ArduPilot飞行模式深度解析:从Stabilize到Auto的9种模式全攻略

本文深度解析了ArduPilot飞控系统的9种核心飞行模式,从基础的Stabilize自稳模式到全自动的Auto任务模式。详细阐述了每种模式的控制逻辑、适用场景、切换时机及参数调优技巧,并结合代码解读与飞行日志分析,帮助用户深入理解飞控架构,实现更安全、高效的无人机操控与自动化作业。

qsc901234567的博客 867

ArduPilot代码解析之六 — GPS和位置传感

ArduPilot的GPS子系统支持多种GPS接收器类型,提供位置、速度和时间信息。该系统具有自动检测、多接收器并发连接、RTK校正和传感器数据融合等功能,支持标准GPS、DGPS和RTK定位方案。通过串行、CAN或网络接口连接,可配置多种卫星星座,实现厘米级精度。系统架构采用多实例管理,支持自动故障转移和混合模式,并能与AHRS集成进行位置估计。此外还提供GPS健康检查、航向计算和时间同步等功能,适用于从基本导航到高精度定位的各类应用场景。

rainercool的专栏 610

ArduSub程序学习(1)——ardupilot框架整理

AP_HAL层(硬件抽象层)是我们制作 ArduPilot 的方式可移植到许多不同的平台。有一个顶级AP_HAL libraries/AP_HAL,用于定义代码其余部分的接口 有针对具体的板子特性,然后就有了AP_HAL_XXX 子目录,例如,AP_HAL_AVR 用于基于 AVR 的 开发板,AP_HAL_PX4用于 Pixhawk 开发板和 AP_HAL_Linux 基于 Linux 开发板。工具目录tools directories工具目录是杂项支持目录。

weixin_49839886的博客 2806

ArduPilot代码解析之九 — ArduCopter(多旋翼飞行器)

ArduCopter是ArduPilot系统中的多旋翼飞行控制方案,支持四旋翼、六旋翼等飞行器。采用分层架构设计,包含400Hz主控制回路、25种飞行模式切换和级联控制结构(位置-姿态-速率)。系统集成共享控制库,实现传感器融合、导航算法和故障保护机制,支持MAVLink通信与全面日志记录。通过模块化设计和多速率调度,为各类多旋翼飞行器提供从手动到全自动的飞行控制解决方案。

rainercool的专栏 604

ardupilot开发 --- 代码解析 篇

代码解析,通过断点调试带你走进ardupilot,有图有真相!!

记录老板的每次pua,分享领导每天的毒鸡汤... 808

ardupilot开发 --- 位置控制与导航制导篇

ardupilot开发 --- 位置控制篇

记录老板的每次pua,分享领导每天的毒鸡汤... 2344

ArduPilot飞控源码级解析:从姿态环到位置环的控制逻辑

飞行控制器是无人机自主飞行的核心,其本质是一套分层闭环控制系统,涵盖感知、解算与执行三个关键阶段。理解姿态控制(Attitude Control)与位置控制(Position Control)的串级关系,是掌握飞控原理的基础——前者基于IMU反馈实现角速度PID闭环,后者则将GPS或视觉定位误差转化为期望姿态角。ArduPilot作为开源飞控代表,其C++类结构(如AC_AttitudeControl、AC_PosControl)清晰体现了外环-内环协同机制与硬实时调度约束。该架构广泛应用于多旋翼、固定翼等

weixin_29172963的博客 196

AnyLogic 8.8.3 最新版安装指南:从下载到配置的完整流程(附Java环境设置技巧)

本文提供了AnyLogic 8.8.3最新版从下载到配置的完整安装指南,重点解决了跨平台(Windows、macOS、Linux)部署中的常见问题。核心内容详细讲解了Java开发环境(JDK)的精准配置技巧,包括版本选择、系统环境变量设置与验证,确保为仿真建模工作奠定稳固基础。

efc1234567的博客 743

【开关电源】开关电源实战经验分享

开关电源原理设计、Layout设计经验分享

weixin_42098658的博客 4156

社会网络仿真软件:NetLogo_(14).社会网络数据导入与导出

在NetLogo中,社会网络的仿真不仅依赖于模型的内部逻辑,还需要能够灵活地导入和导出数据。这使得用户可以利用外部数据来初始化模型,或者将模型的运行结果导出以便进一步分析。本节将详细介绍如何在NetLogo中实现社会网络数据的导入和导出,包括常见的数据格式和具体的代码示例。

kkchenjj的博客 592

GameFramework专栏目录

本专栏是专门介绍GameFramework框架的,持续更新中,如有疑问可留言,24小时内回复。

TxNet 4713

FlexSim:FlexSim软件介绍与安装

在开始安装FlexSim之前,首先需要从FlexSim官方网站下载安装包。FlexSim提供不同版本的软件,包括教育版、专业版等,确保选择适合您需求的版本。下载页面通常会列出系统要求,包括操作系统、处理器、内存和硬盘空间,确保您的计算机满足这些要求。访问FlexSim官方网站。导航至下载页面。选择适合您需求的FlexSim版本。点击下载按钮,开始下载安装包。在开始构建模型之前,首先需要明确模型的目标。模型目标是指导模型设计和分析的核心,它定义了你希望通过模型解决的问题或探索的系统行为。

kkchenjj的博客 5789

C# 上位机之海康工业相机开发(SDK)实战教程

海康工业相机的C#开发核心是基于MVS SDK的“初始化→枚举→连接→采集→释放”流程,其中图像回调处理和格式转换是关键。严格按照SDK文档处理设备类型(网口/USB)和像素格式;及时释放图像资源,避免内存泄漏;错误码是排查问题的重要依据(可参考SDK中的“错误码说明”文档)。掌握这些基础后,可结合机器视觉算法(如OpenCV)实现缺陷检测、尺寸测量等高级功能,构建完整的工业视觉系统。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 3806

反应动力学仿真软件:Kintecus_(4).用户界面及操作指南

在 Kintecus 中,反应方程的定义非常灵活。您可以定义简单的一阶反应、复杂的多步反应以及不同类型的反应机制。

kkchenjj的博客 1171

手把手教你学simulink(13.2)--构建一个单相并网逆变器Simulink仿真模型

基于Simulink的单相并网逆变器项目的详细仿真实例。这个项目将重点放在逆变器的详细建模、最大功率点跟踪(MPPT)控制策略、并网控制和仿真分析上。我们将使用MATLAB/Simulink来构建整个系统,并通过具体的代码和模块来实现各个功能。

MHD0815的博客 539

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

上一篇: ArduPilot代码解析之二 — 载具基础系统(AP_Vehicle)
下一篇: ArduPilot代码解析之五 — 无线电控制(RC)输入
timmy-uav
博客等级 码龄26年 525粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

timmy-uav

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值