先进非线性控制方法 INDI 快速部署到PX4用于四旋翼控制(part2)

2023-05-16

目录

  • 一、PX4 v11 的姿态控制解析
    • 1. 角度环控制
    • 2. 角速度环控制
    • 3. 控制分配
  • 二、简易INDI如何部署到PX4
    • 1. 获取角加速度 和 电机转速测量值
      • (1)角加速度
      • (2)转速
    • 2. 具体实现过程
      • (0)简要回顾与分析
      • (1)获取角加速度
      • (2)获取指令微分
      • (3)修改控制律公式
      • (4)获取 M c 0 M_{c_{\tiny 0}} Mc0
  • 结语

一、PX4 v11 的姿态控制解析

这一部分主要介绍PX4核心控制算法是怎么实现的。其实核心的控制算法部分很简单,大部分代码都是在进行各种分情况讨论,各种安全检查。下面简单介绍一下,希望大家看了之后有点收获,能给我点个赞,嘿嘿。

1. 角度环控制

这部分代码在 src/modules/mc_att_control里

主程序在 mc_att_control_main.cpp 里

简单介绍就是先生成姿态角指令(roll, pitch, yaw的指令,即attitude_setpoint)
姿态指令生成
姿态指令生成👆(在函数最后publish了)

然后根据这个指令计算姿态角速度指令(即_rates_sp)

计算姿态角速度指令
计算姿态角速度指令👆(_attitude_control是AttitudeControl类的实例,具体实现在同文件夹下的AttitudeControl里)

然后把姿态角速度指令发布
发布姿态角速度指令
发布姿态角速度指令👆


2. 角速度环控制

这部分代码在 src/modules/mc_rate_control里

即根据姿态角速度指令来计算得到期望力矩,这也是本文需要改的部分。

主程序在 MulticopterRateControl.cpp 里

简单介绍就是先订阅 角速度指令rates_sp 的消息
获取角速度指令
获取角速度指令👆

然后计算控制力矩指令
根据当前的角速度和角速度指令计算控制力矩
根据当前的角速度和角速度指令计算控制力矩指令(就是这个att_control)👆

接着发布这个att_control
控制力矩指令发布
发布控制力矩指令att_control👆


3. 控制分配

这部分内容也挺多的,主要是在 src/lib下的 mixer 和 mixer_module里,四旋翼的具体实现是在src/lib/mixer/MultirotorMixer/MultirotorMixer.cpp 里
直接看分配的主要函数:mix
多旋翼分配实现
多旋翼分配实现👆
其实就是先获取控制力矩指令,然后分情况调用函数进行分配。

比如在使用jmavsim仿真时调用的是 mix_airmode_disabled 函数
mix_airmode_disabled中分配的实现
mix_airmode_disabled中分配的实现👆
这部分就是具体的实现过程了,首先是先不考虑 yaw 进行分配,然后最后再单独分配 yaw.

二、简易INDI如何部署到PX4

1. 获取角加速度 和 电机转速测量值

经过 part1 的推导之后我们知道,INDI需要得到角加速度的值来进行计算,猜怎么着?我惊奇的发现 PX4 v11 里这个角加速度值已经算出来了,之前的版本里都是没有这个量的,而且这个角加速度的量在现在的 PX4 里也没有用到,不知道他们是要搞什么。

(1)角加速度

接下来讲一讲这个角加速度的始末:

这个角加速度怎么来的呢?
在src/modules/sensors/vehicle_angular_velocity是用来计算角速度和角加速度的,其中的.cpp 文件里有计算的流程

计算角速度和角加速度的过程
计算角速度和角加速度的过程👆

简单来说就是:
  获取陀螺仪数据并矫正热误差
→   矫正运行中的偏差
→   应用陷波滤波器对上面得到的角速度值原始值进行滤波
→   对滤波后的角速度进行微分得到角加速度值
→   把角速度和角加速度存一下
→   对两个值应用低通滤波器进行平滑处理

处理完了就把两个量发布

发布角速度和角加速度量
发布角速度和角加速度量👆

于是我们就可以在msg里找到 vehicle_angular_velocity.msg 和 vehicle_angular_acceleration.msg 这两个文件了,也就是说可以通过 μORB 订阅到这两个topic了。另外,这个 vehicle_angular_acceleration.msg 目前还没有存到日志文件里,可以通过简单处理把他存到日志文件里,便于后面的分析。


(2)转速

经过 part1 的推导之后我们知道,INDI需要得到 电机转速 的值来进行计算,猜怎么着?我惊奇的发现 PX4 v11 里这个电机转速值已经估计出来了,之前的版本里都是没有这个量的,而且这个电机转速的量在现在的 PX4 里也没有用到,不知道他们是要搞什么。(他们不会要把姿态控制换成INDI吧。。)

这个电机转速测量值(估计值)我是先在msg文件夹下发现的,就是 rpm.msg 。但是这个东西我还妹有完全搞明白,不知道是根据什么估算的电机转速,有兴趣的朋友可以了解一下px4里这个 rpm 是怎么估计的。(我知道有的穿越机电调可以回传电机转速,这个就比较成熟了。还有篇文章是用类似鼠标里那个光栅编码器来测转速的,不过这个可能撞一下就坏了,不太好)

但是!要说但是了。
我试了下,这个转速估计值在jmavsim仿真里是没有的计算出来的,没试gazebo。

另外,用这个电机转速还有个问题在于,px4里实际输出的电机指令也不是电机的转速,而是分配之后,到每个电机头上的归一化的(可以认为是推力)值计算出的 pwm 值,所以考虑电机转速回传之后,会带来很多麻烦,我嫌麻烦还没有分析这个,所以暂且按下不表。

于是我的处理方法是,用类似的滞后环节去模拟电机的响应过程。也就是对电机进行建模,然后估计电机的当前转速。目前的简易做法是计算出力矩指令之后,加上一个滞后作为实际得到的控制力矩


2. 具体实现过程

(0)简要回顾与分析

INDI 的原理在 part1 中已经介绍过,下面简要回顾并分析下需要修改的地方:

对于角速度控制环来说,令指令跟踪误差为 e Ω = Ω − Ω r e_{\tiny \Omega}=\Omega-\Omega_r eΩ=ΩΩr
则角速度跟踪误差的动态方程可以写成
e ˙ Ω = Ω ˙ 0 − Ω ˙ r + g ( x s t a t e s ) Δ ω 2 \dot{e}_{\Omega}=\dot{\Omega}_{\tiny 0}-\dot{\Omega}_r+g(x_{states})\Delta{\omega^2} e˙Ω=Ω˙0Ω˙r+g(xstates)Δω2

那么根据 INDI 的原理可以得到(电机引起的)力矩的增量
G M Δ ω 2 = − J ( Ω ˙ 0 − Ω ˙ r + K p e Ω ) G_M\Delta{\omega^2}=-J(\dot{\Omega}_{\tiny 0}-\dot{\Omega}_r+K_pe_{\tiny \Omega}) GMΔω2=J(Ω˙0Ω˙r+KpeΩ)

然后可以得到力矩的指令:
M c = G M ⋅ ω 0 2 + G M ⋅ Δ ω 2 M_c=G_M\cdot{\omega_{\tiny 0}^2}+G_M\cdot\Delta{\omega^2} Mc=GMω02+GMΔω2
其中 ω 0 2 \omega_{\tiny 0}^2 ω02是估计出来的或者测量回来的转速。

或者写成 M c = M c 0 + G M ⋅ Δ ω 2 M_c=M_{c_{\tiny 0}}+G_M\cdot\Delta{\omega^2} Mc=Mc0+GMΔω2
其中 M c 0 M_{c_{\tiny 0}} Mc0是计算或者估计出来的当前控制力矩

也就是说,需要改的或者添加的就是 (1)获取角加速度,(2)获取指令微分,(3)修改控制律公式,(4)获取 M c 0 M_{c_{\tiny 0}} Mc0。( (2)可选,因为这个东西我看有的控制方法里用,有的不用,比如在PID的误差 e e e 微分里就包含这个指令微分,但是如果用测量值 y y y 计算微分量的话就不包含这个指令微分)



需要修改的代码都在 src/modules/mc_rate_control/Multicopter


(1)获取角加速度

角加速度已经发布了,所以直接订阅就行了
怎么订阅,有个简单的方法,直接按照角速度订阅的方式来一遍就行了:
订阅角速度
订阅角速度👆,照例订阅一下角加速度即可

(2)获取指令微分

直接对订阅得到的 rates_sp 进行微分即可,不过这一步我省略了…

(3)修改控制律公式

角速率环的控制律公式在src/modules/mc_ate_control/RateControl/RateControl.cpp里,就一行:
rate_control_law
角速度PID控制律👆

这是经典的PID控制,这里我们如果要改成INDI只需要:
INDI角速度环控制律
角度环INDI控制律👆

这两个式子就是在实现
        G M Δ ω 2 = − J ( Ω ˙ 0 + K p e Ω ) G_M\Delta{\omega^2}=-J(\dot{\Omega}_{\tiny 0}+K_pe_{\tiny \Omega}) GMΔω2=J(Ω˙0+KpeΩ)
     和 M c = M c 0 + G M ⋅ Δ ω 2 M_c=M_{c_{\tiny 0}}+G_M\cdot\Delta{\omega^2} Mc=Mc0+GMΔω2

e Ω e_{\tiny \Omega} eΩ的符号不对是因为我的误差的定义和PX4正好相反)
另外解释下,其中我在yaw通道加了个微分误差factor,因为仿真的时候发现yaw通道老震荡,所以多加了微分项抑制一下。按理说是不需要微分项的,后面可能要看一下为什么会出现震荡情况。

另外,在本文中这个 G M Δ ω 2 = − J ( Ω ˙ 0 + K p e Ω ) G_M\Delta{\omega^2}=-J(\dot{\Omega}_{\tiny 0}+K_pe_{\tiny \Omega}) GMΔω2=J(Ω˙0+KpeΩ)公式里的 J J J就相当于一个可整定的参数。原因有四点:(1)我这里没有修改Mixer里的 G M G_M GM,(2)操纵导数本来就比较难获得(需要螺旋桨的力系数和力矩系数),(3)INDI里的操纵导数本来就是一个可以用来整定的量,(4)操纵力矩分配之后映射到的是输出给电机的PWM信号,而PWM信号和电机转速之间的关系也是个黑箱

(4)获取 M c 0 M_{c_{\tiny 0}} Mc0

M c 0 M_{c_{\tiny 0}} Mc0 也就是上面 角度环INDI控制律 图里的torque_prev.
这里我是直接用一个低通滤波器作为控制力矩响应模型的。
意思就是说,真实的控制力矩响应比控制力矩指令就差了一个低通滤波器过程。即:
M c 0 = M c ⋅ G l p f M_{c_{\tiny 0}}=M_{c}\cdot{G_{lpf}} Mc0=McGlpf

实现起来就是这么一句:

torque_prev = _lp_filters_rate.apply(torque1);

由于懒,我这里用的 filter 还是px4自带的low pass filter。

!!!!!这里需要注意的一点是:由于之前获取角加速度的时候,也用了低通滤波器和陷波滤波器,导致角加速度与当前的真实角加速度有滞后,所以为了让测量或者估计的真实力矩响应与角速度同步,需要在测量或者估计的真实力矩上 加上同样的滞后。

OK,这四部分就介绍完了,剩下的就是调调参数的事情。我大概调了半天,才调到和之前的 PID 效果差不多的样子。

结语

目前我改的这个 PX4 v11 不是一个稳定的版本,是开发中的版本(很神奇地在里面发现了角加速度估计值和电机转速估计值,不知道开发人员是在憋什么大招)。但是要修改其他版本其实也是大同小异,毕竟v11里只是把角速度控制单独拿出来放到一个文件夹下了而已。

INDI的好处是鲁棒性和容错性比较强,在模型失配程度比较高的情况下也可以得到比较好的控制效果,另外在出现故障或者外部扰动的时候也能快速恢复稳定。这实际上得益于INDI能够实时将系统动态通过角加速度反馈到控制器中,比如当外部有强风吹的时候,PID需要有积分项才能重新实现在强风影响下的稳定,相当于是一个对强风影响的估计,这个过程是比较慢的,但是反馈角加速度可以快速把这个影响反馈到控制器中。大概就是这个意思,如果要深入理解可能要结合仿真比较好。

就介绍到这里,如果大家看了之后有什么想法,欢迎交流。

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

先进非线性控制方法 INDI 快速部署到PX4用于四旋翼控制(part2) 的相关文章

  • 【学习记录】Kalibr标定相机与IMU的一点记录

    一周更多的时间在搞这个Kalibr的相机与IMU的标定 xff0c 记录一些问题 xff1a 相机重投影误差 相机一定要好好标定 xff0c 如果重投影误差太大 xff0c 是优化不出来外参的 好在相机内参 xff0c 与IMU外参标定 x
  • 【学习总结】VIO初始化学习1:Monocular Visual–Inertial State Estimation With Online Initialization and Camera–IMU

    最近看了一篇论文 xff0c 很是头大 xff0c 大概看懂了个所以然 记录一下 论文 xff1a Monocular Visual Inertial State Estimation With Online Initialization
  • PYTHON用法第一篇:print的用法。

    hello大家好 xff0c 我是会编程的杜子腾 xff0c 今天我们来学习一下python实例 xff1a print用法 使用材料 xff1a 一台电脑 python各版本 随便一个 xff0c 尽量选python3 python文本编
  • 那些女程序员们的故事

    点击上方蓝字 关注我们 xff0c 和小伙伴一起聊技术 xff01 程序媛是程序员大军中一道美丽的风景线 xff0c 今天的这篇文章就选取了一些女程序员们的故事 xff0c 希望当所有人了解了他们的经历后 xff0c 能让这个 重男轻女 的
  • shell中脚本变量和函数变量的作用域

    原文地址 xff1a http blog csdn net ltx19860420 article details 5570902 1 shell脚本中定义的变量是global的 xff0c 其作用域从被定义的地方开始 xff0c 到she
  • 最简单易懂的10堂算法入门课——算法是什么

    算法太重要了 人工智能 xff0c 机器学习 xff0c 大数据 xff0c 这些越来越常听到的字眼 xff0c 背后其实都是一个个 算法 诸多高新科技 xff0c 似乎都离不开 算法 的 加持 科学家 工程师 技术人员 xff0c 现在如
  • Opencv之Aruco码的检测和姿态估计

    1 介绍 Aruco码是由宽黑色边框和确定其标识符 id 的内部二进制矩阵组成的正方形标记 它的黑色边框有助于其在图像中的快速检测 xff0c 内部二进制编码用于识别标记和提供错误检测和纠正 单个aruco 标记就可以提供足够的对应关系 x
  • linux与window文件通过串口传输方法(zmod传输方法)

    我们在调试linux产品时 xff0c 有的产品没有网口 xff0c 只有串口 这时nfs tfp都用不了 只能用串口来传输文件 把windows上文件通过串口传输到开发板上 开发板和电脑通过串口连接 2 使用MobaXterm工具 xff
  • CentOS 7 需要安装的常用工具,及centos安装fcitx 搜狗输入法的坑旅

    Centos常用设置 1 当最大化时隐藏标题栏 或者使用tweak tool 在字体中将标题栏字体设置为0 建议这个方法 2 添加epel源 yum y nogpgcheck install http download fedoraproj
  • 小学数学公式大全

    小学数学公式大全 第一部分 xff1a 概念 1 加法交换律 xff1a 两数相加交换加数的位置 xff0c 和不变 2 加法结合律 xff1a 三个数相加 xff0c 先把前两个数相加 xff0c 或先把后两个数相加 xff0c 再同第三
  • c++中的点号(.),冒号(:)和双冒号(::)运算符

    1 冒号 xff08 xff09 用法 xff08 1 xff09 表示机构内位域的定义 xff08 即该变量占几个bit空间 xff09 typedef struct XXX unsigned char a 4 char型的字符a占4位
  • C++ 对象和实例的区别,以及用new和不用new创建类对象区别

    起初刚学C 43 43 时 xff0c 很不习惯用new xff0c 后来看老外的程序 xff0c 发现几乎都是使用new xff0c 想一想区别也不是太大 xff0c 但是在大一点的项目设计中 xff0c 有时候不使用new的确会带来很多
  • 巫泽俊...《挑战程序设计竞赛》算法及相关书籍论点

    为什么要参加程序设计竞赛 能提高程序设计能力 xff0c 掌握技巧 减少错误 xff1b 能结识更多的同好 xff0c 交流切磋 xff1b 能更好地推销自己 xff08 大赛的前几名往往受到世界知名公司的青睐 xff09 秋叶拓哉认为 x
  • (struct)结构体变量作为函数参数调用的方法小结

    结构体变量 结构指针变量 结构数组作为函数的参数应用实例分析 struct stud long int num float score 结构体变量作为函数的参数 xff0c 修改之后的成员值不能返回到主调函数 void funvr stru
  • 搭建nginx反向代理用做内网域名转发

    基于域名的7层转发的实现 xff08 NAT 43 反向代理 xff09 在实际办公网中 xff0c 因为出口IP只有一个 xff0c 要实现对外提供服务的话就必须得做端口映射 xff0c 如果有多个服务要对外开放的话 xff0c 这只能通
  • 从平面上最近的点对,谈谈分治算法

    首先介绍一下分治 xff08 Divide and Conquer xff09 算法 xff1a 设计过程分为三个阶段 Divide xff1a 整个问题划分为多个子问题 Conquer xff1a 求解各子问题 递归调用正设计的算法 Co
  • NOIP2017 国庆郑州集训知识梳理汇总

    第一天 基础算法及数学 基本算法 递推 递归 分治 二分 倍增 贪心 递推 指通过观察 归纳 xff0c 发现较大规模问题和较小规模问题之间的关系 xff0c 用一些数学公式表达出来 在一些题解中 xff0c 和 计数DP 是指同一个概念
  • 挑战程序设计竞赛 — 知识总结

    准备篇 1 5 运行时间 概述编写的目的是面向ACM程序设计竞赛 xff0c 不可避免的要涉及复杂度和运行时间的问题 xff0c 本节给出了解决问题算法选择的依据 假设题目描述中给出的限制条件为n lt 61 1000 xff0c 针对O
  • 阿里巴巴笔试题选解

    阿里巴巴笔试题选解 9月22日 xff0c 阿里巴巴北邮站 小题 xff1a 1 有三个结点 xff0c 可以构成多少种二叉树形结构 xff1f 2 一副牌52 张 去掉大小王 xff0c 从中抽取两张牌 xff0c 一红一黑的概率是多少
  • 腾讯2014软件开发笔试题目

    腾讯2014软件开发笔试题目 9月21日 xff0c 腾讯2014软件开发校招 简答题 广州 简答题 xff1a 1 请设计一个排队系统 xff0c 能够让每个进入队伍的用户都能看到自己在 中所处的位置和变化 队伍可能随时有人加入和退出 x

随机推荐

  • MAVLink简介

    MAVLink简介 Mavlink协议最早由 苏黎世联邦理工学院 计算机视觉与几何实验组 的 Lorenz Meier于2009年发布 xff0c 并遵循LGPL开源协议 Mavlink协议是在串口通讯基础上的一种更高层的开源通讯协议 xf
  • C/C++ 服务器程序(从入门到精通)

    Windows 服务被设计用于需要在后台运行的应用程序以及实现没有用户交互的任务 为了学习这种控制台应用程序的基础知识 xff0c C xff08 不是C 43 43 xff09 是最佳选择 本文将建立并实现一个简单的服务程序 xff0c
  • 图像处理常用算法(C++/OPENCV)

    添加椒盐噪声 void salt Mat amp src int number for int i 61 0 i lt number i 43 43 int r 61 static cast lt int gt rng uniform 0
  • 【解决linux下连接向日葵失败或连接之后断开的解决方案】

    解决linux下连接向日葵失败或连接之后断开的解决方案 linux在软件中搜索lightdm桌面管理器并安装即可 xff01
  • 机器学习推荐系统评价指标之AUC

    机器学习推荐系统评价指标之AUC 综述AUC的计算过程AUC的优势 综述 AUC是机器学习模型中常见评价指标 xff0c 在推荐系统中也十分常见 和常见的评价指标Acc xff0c P xff0c R相比 xff0c AUC具备一定的优势
  • 多线程访问同步方法情况

    文章目录 1 多线程访问同步方法1 1 两个线程同时访问一个对象的同步方法1 1 1 代码演示1 1 2 运行结果 1 2 两个线程访问的是两个对象的同步方法1 2 1 代码演示1 2 2 运行结果 1 3 两个线程访问的是synchron
  • 剑指 Offer 33. 二叉搜索树的后序遍历序列

    题目描述 xff1a 输入一个整数数组 xff0c 判断该数组是不是某二叉搜索树的后序遍历结果 如果是则返回 true xff0c 否则返回 false 假设输入的数组的任意两个数字都互不相同 参考以下这颗二叉搜索树 xff1a 5 2 6
  • 求解空间两个三维坐标系之间的变换矩阵

    三维刚体变换模型 即旋转 平移矩阵 RT矩阵 的估计方法 原理简单阐述 只要算出变换矩阵 就可以算出A坐标系的一个点P在坐标系B里的对应点坐标 即 T为3x3的转换矩阵 t 为3x1的位移变换向量 这里点坐标均为3x1的列向量 非齐次形式
  • Ubuntu下网络调试助手 NetAssist

    近期在ubuntu下开发一个网络相关的程序 之前在windows上开发时 xff0c 一直使用NetAssist这个小工具 xff0c 简洁实用 所以就安装了一个对应版本的网络调试助手 NetAssist 下载地址 xff1a 链接 xff
  • 程序员裸辞三个月,终于拿到大厂offer!网友:不应该!

    一个行业发展成熟 xff0c 必定会重新洗牌 xff0c 就像朝代的更替一样 xff0c 现在互联网发展就是遇到了这样的瓶颈期 xff0c 出现了衰退 xff0c 就形成大家口中所说的 互联网寒冬 但是有技术的人哪里怕过寒冬 xff0c 所
  • HttpUtils 用于进行网络请求的工具类

    用于进行网络请求的工具类 xff0c 可进行get xff0c post两种请求 xff0c 值得一提的是这个utils给大家提供了一个回调接口 xff0c 方便获取下载文件的进度 span class hljs keyword impor
  • deepin系统

    https www uc23 net xinwen 76259 html 据介绍 xff0c 深度操作系统 xff08 deepin xff09 自 2015 年开始 xff0c 就放弃基于 Ubuntu 作为上游 xff0c 选择 Ubu
  • 学习日志2

    这几天一直在思考如何解决摄像头与vins与fast planner如何相结合再应用的问题 因为摄像头是因特尔的D435i xff0c 于是决定在gazebo上实现D435i的仿真 由于D435I版本较新 xff0c 因此github上基本没
  • 学习日志3

    这几天准备用分别用ego planner与fast planner进行飞行仿真 本来准备在双系统的ubuntu上安装ego planner xff08 之前ubuntu上已经安装过vins fusion vins mono与fast pla
  • 学习日志5

    最近老师让我阅读了一篇新文章 xff0c 文章标题如下图 文章通过解决时间分配问题以及通过模型预测轮廓同时控制问题控制 xff08 MPCC xff09 优化能够使四旋翼无人机找到最优轨迹 xff0c 可以快速地避障 xff0c 速度甚至可
  • 万字长文 | 阿里大佬 ssp offer 的后台服务器开发学习路线

    前言 小北去年经历春秋招 xff0c 拿到了不少大厂 offer xff0c 其中包括 sp ssp 等 xff0c 感觉在复习准备校招上还是有一定方法的 xff0c 因为我自己是 Linux C C 43 43 路线 所以这一篇的主题是
  • 看完谷歌大佬的刷题笔记, 我直接手撕了200道 Leetcode 算法题

    如果你刷leetcode觉得吃力 那么一定需要这份谷歌大佬的leetcode刷题笔记 在这里推荐一个谷歌大佬的刷题笔记 每一道题的题解都写得非常清楚 作者在美国卡内基梅隆大学攻读硕士学位时 xff0c 为了准备实习秋招 xff0c 他从夏天
  • JVM中的栈区域

    一 栈 xff1a 在JVM中也叫栈内存 xff0c 主要负责java程序的运行 xff0c 栈在线程创建时被创建 xff0c 栈时线程私有的 xff0c 也即每一个线程都有自己的栈空间 xff0c 线程之间的运行不受影响 相互独立 二 栈
  • 初步认识ADRC(自抗扰控制)与应用

    这是一个目录 ADRC的基本原理一 参考资料推荐二 为什么PID好 xff0c 以及 xff0c 为什么PID不够好1 为什么PID好 不依赖于模型的控制器2 为什么PID不够好 PID的缺点 三 ADRC给出的方案 如何保留PID的优点
  • 先进非线性控制方法 INDI 快速部署到PX4用于四旋翼控制(part2)

    目录 一 PX4 v11 的姿态控制解析1 角度环控制2 角速度环控制3 控制分配 二 简易INDI如何部署到PX41 获取角加速度 和 电机转速测量值 xff08 1 xff09 角加速度 xff08 2 xff09 转速 2 具体实现过