多旋翼PID控制器笔记

2023-05-16

多旋翼PID控制器笔记

  • 高度控制
    • 垂向速度环
    • 加速度指令到油门指令的映射
    • 垂向加速度环
  • 水平控制
    • 水平速度环
    • 水平加速度到姿态的映射
    • 姿态环
    • 欧拉运动学方程
    • 角速度环
    • 欧拉动力学方程

高度控制

垂向速度环

垂向速度指令在NED坐标系下给出,采用PI+前馈控制,输出垂向加速度指令。速度指令和前馈加速度可由参考模型给出。对I项,需要进行限幅和抗饱和。根据设计要求对最终加速度输出进行限幅。
垂向速度控制器
为了加快响应速度,可以加入D项,或者引入加速度环。

加速度指令到油门指令的映射

垂向速度环给出了NED坐标系下z轴加速度指令(可认为是惯性加速度),多旋翼拉力方向一般在机体系下z轴方向,加速度计输出值为比力在机体系下的分量坐标,为了方便,首先需要将加速度指令转换到机体系z轴所需的加速度指令,即考虑到机体的倾斜,维持竖直方向加速度所需的机体z轴的加速度。
这里,仅考虑了机体倾斜的影响,忽略了水平加速度指令的影响,即垂向与水平进行了解耦。也可以按照转换矩阵对全局加速度指令进行理论上的转换。
得到机体系下的期望加速度后,根据多旋翼的质量,可得出期望拉力,再通过动力系统(电机螺旋桨)油门输入与拉力的映射关系(可通过电机螺旋桨拉力测试得出),可以得到无量纲拉力指令(0-1油门)。
由期望加速度得到的油门只是在多旋翼悬停状态的油门增量,而维持多旋翼悬停的“基础油门”,是对抗自身重力所需的。因此,想要得出最终的油门指令,需要将加速度指令转换为比力指令。

比力 f \boldsymbol{f} f(Specific force):作用在单位质量物体上的非引力之外力。加速度计的测量值即为比力。
a i = f + μ \boldsymbol{a}_i=\boldsymbol{f}+\boldsymbol{\mu } ai=f+μ
其中, a i \boldsymbol{a}_i ai为惯性系下绝对加速度, μ \boldsymbol{\mu } μ为万有引力加速度,在NED坐标系下可近似表示为 { 0   0   g } T \left \{0\: 0\:g\right \}^T {00g}T

比力指令可以直接映射到油门指令,简单粗暴。
加速度指令到力映射

垂向加速度环

因为加速度计可以测量出机体加速度,为了得到更好的控制效果,可以增加垂向加速度环。垂向加速度环采用PI+前馈控制,输出无量纲多旋翼总体拉力油门指令。
比力误差可对应油门增量,油门增量经过积分可得到总油门,这是增量控制。加速度环的P项,其实相当于速度环中D项,也可以加快响应速度。前馈的作用是加速度指令的直接映射,加快响应速度。
如果油门与拉力的映射能准确测量,比例和前馈项也可去掉,算是增量动态逆原理。但目前油门和拉力的映射仅仅是在静态情况测量,动态或复杂气流环境误差可能较大。(by 鞠总)
垂向加速度控制器

水平控制

水平速度环

水平速度的控制在机头水平坐标系(C系)下进行,NED坐标系下的速度指令可以通过偏航角进行转换。

由NED系到C系的转换矩阵
M O C = [ cos ⁡ ψ sin ⁡ ψ 0 − sin ⁡ ψ cos ⁡ ψ 0 0 0 1 ] M_O^C = \begin{bmatrix} \cos\psi & \sin\psi & 0 \\ -\sin\psi & \cos\psi & 0 \\ 0 & 0 & 1 \end{bmatrix} MOC=cosψsinψ0sinψcosψ0001

水平速度环同样采用PI+前馈控制,输出垂向加速度指令。前馈指令可由参考模型给出。
水平速度控制环
最后需要根据允许最大倾角对加速度指令的输出进行限幅,允许最大水平加速度可由允许最大倾角得出。
A C C m a x = g tan ⁡ ( T i l t A n g l e m a x ) ACC_{max}=\frac{g}{\tan(TiltAngle_{max})} ACCmax=tan(TiltAnglemax)g

水平加速度到姿态的映射

多旋翼水平方向的加速度由机身倾斜产生,滚转角产生y方向的加速度,俯仰角产生x负方向的加速度。
假设多旋翼竖直方向处于悬停状态,则 { − A C C x   − A C C y    g } T \left \{-ACC_x\: -ACC_y\:\:g\right \}^T {ACCxACCyg}T矢量与机体系z轴指向相同,求解机体系z轴的欧拉角,即可得到相应期望滚转、俯仰角。示意图如下:
水平减速度与姿态映射示意图
欧拉角的产生顺序,一般采用z-y-x顺序,因此需要先求俯仰角,然后求解滚转角。
θ = tan ⁡ − 1 − A C C x g \theta=\tan^{-1}\frac{-ACC_x}{g} θ=tan1gACCx
ϕ = tan ⁡ − 1 A C C y g / cos ⁡ θ \phi=\tan^{-1}\frac{ACC_y}{g/\cos\theta} ϕ=tan1g/cosθACCy

姿态环

由期望水平加速度求出期望欧拉角后,姿态环采用P控制,输出欧拉角变化率指令。
在这里插入图片描述

欧拉运动学方程

姿态环得出的是欧拉角变化率指令,方便起见,需要转换到机体坐标系下进行角速度控制。根据欧拉运动学方程,机体角速度与欧拉角变化率与关系可以表示为
[ p q r ] = [ 1 0 − sin ⁡ θ 0 cos ⁡ ϕ sin ⁡ ϕ cos ⁡ θ 0 − sin ⁡ ϕ cos ⁡ ϕ cos ⁡ θ ] [ ϕ ˙ θ ˙ ψ ˙ ] \begin{bmatrix} p\\ q\\ r \end{bmatrix} =\begin{bmatrix} 1 & 0 & -\sin\theta\\ 0 & \cos\phi & \sin\phi\cos\theta\\ 0 & -\sin\phi & \cos\phi\cos\theta \end{bmatrix} \begin{bmatrix} \dot{\phi}\\ \dot{\theta}\\ \dot{\psi} \end{bmatrix} pqr=1000cosϕsinϕsinθsinϕcosθcosϕcosθϕ˙θ˙ψ˙

角速度环

角速度环采用PID控制,输出无量纲力矩指令。
角速度控制器

欧拉动力学方程

刚体绕定点的转动过程可由欧拉动力学方程描述:
M b = I ω ˙ b + ω b × ( I ω b ) M^b=I\dot{\omega}^b+\omega^b\times(I\omega^b) Mb=Iω˙b+ωb×(Iωb)
其中, ω b \omega^b ωb为机体系相对惯性系转动的角速度,可由陀螺仪测量出。 I I I为刚体惯量矩阵,可表示为
I = [ I x x − I x y − I x z − I y x I y y − I y z − I z x − I z y I z z ] I=\begin{bmatrix} I_{xx} & -I_{xy} & -I_{xz}\\ -I_{yx} & I_{yy} & -I_{yz}\\ -I_{zx} & -I_{zy} & I_{zz} \end{bmatrix} I=IxxIyxIzxIxyIyyIzyIxzIyzIzz
对于结构上关于x-z、y-z平面对称的多旋翼,惯量矩阵可以简化为对角阵,即 I = diag { I x x   I y y   I z z } I=\textup{diag}\{I_{xx}\:I_{yy}\:I_{zz}\} I=diag{IxxIyyIzz}
对应欧拉动力学方程可表示为
[ L M N ] = [ I x x ω ˙ x b + ( I z z − I y y ) ω y b ω z b I y y ω ˙ y b + ( I x x − I z z ) ω z b ω x b I z z ω ˙ z b + ( I y y − I x x ) ω x b ω y b ] \begin{bmatrix} L\\ M\\ N \end{bmatrix}=\begin{bmatrix} I_{xx}\dot{\omega}^b_x+(I_{zz}-I_{yy})\omega^b_y\omega^b_z\\ I_{yy}\dot{\omega}^b_y+(I_{xx}-I_{zz})\omega^b_z\omega^b_x\\ I_{zz}\dot{\omega}^b_z+(I_{yy}-I_{xx})\omega^b_x\omega^b_y \end{bmatrix} LMN=Ixxω˙xb+(IzzIyy)ωybωzbIyyω˙yb+(IxxIzz)ωzbωxbIzzω˙zb+(IyyIxx)ωxbωyb
参考 刚体质量分布与牛顿-欧拉方程
由于目前暂无法方便测量角加速度,因此不加角加速度环。由角速度环得出角加速度指令,经过欧拉动力学方程,得出力矩指令,力矩指令除以最大拉力,进入控制分配后与力臂参数运算,即可得出所需无量纲油门指令。

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

多旋翼PID控制器笔记 的相关文章

  • mac 彻底关闭mysql

    我一直关闭不了mysql 即使用尽了各种方法 下面命令都不能正确的停止 xff1a brew services start mysql kill 9 96 ps ef grep mysqld safe grep v grep awk 39
  • ROS2学习笔记(六)-- 自定义消息和服务实现控制指令优化以及在线换图

    简介 xff1a 前几节我们主要介绍了关于ROS2通讯机制 主题 xff08 Topic xff09 的发布与订阅机制的使用方法 xff0c 一般情况下 xff0c 数据周期发布 数据交互频率高 xff0c 或者数据生产与消费不是强关联的功
  • 【已解决】Uncaught SyntaxError: Unexpected token o in JSON at position 1

    Uncaught SyntaxError Unexpected token o in JSON at position 1 原因是用ThinkPHP内置方法 this gt ajaxReturn imgs 39 JSON 39 返回的数据已
  • 打印js中一个对象的所有属性的值

    做过js的人都知道 xff0c 变量就var xff0c 一般我们是看不出来这个var有什么属性 xff0c 要想知道它的各种属性有什么 xff0c 方法如下 xff1a 1 可以用下面的方法打印 function outputObj ob
  • 263企业邮箱在foxmail上的成功设置(smtpwcom/popwcom.xxoo.com)

    263企业邮箱在foxmail上设置了好几天 xff0c 终于成功了 xff01 长话短说 xff0c 我使用的263邮箱没有以 64 263 com结尾的 化名 64 xxoo com结尾 xff0c 设置时不管使用smtp pop xx
  • 解决MAC用HDMI连接显示器就没声音问题

    声明 xff1a 我的MAC装了Windows系统 xff0c 问题是在Windows系统出现的 xff1a 1 右键点击声音图标 xff0c 点击 播放设备 2 原本默认设备是S24F350的 xff0c 改为扬声器就有声音了
  • 【已解决】Uncaught SyntaxError: Unexpected token in JSON at position 0

    代码 xff1a onUploadSuccess function file data response 一个文件上传成功后的响应事件处理 var data 61 parseJSON data if data result 61 61 0
  • 像《我是歌手》一样说我是程序员

    初中以前 xff0c 从大山里走出来的我 xff0c 不知电脑为何物 高考完后 xff0c 第一次跟同学去网吧看爱情动作片 xff0c 才第一次接触网络 xff0c 感觉网络是有点污的东西 家里三代务农的我 xff0c 那个时候对商机这个东
  • form提交后没有得到值——可能的原因之一

    原因居然是 xff0c 在表单的Input只写了id 61 34 xxx 34 xff0c 没有name 61 34 xxx 34 xff0c 事实上 xff0c 写了name才能让后端获取到值 我的公众号 xff0c 农村人城里生活所思所
  • 实战尚硅谷项目——尚医通(1)

    一 尚医通架构图与业务流程图 二 项目需求技术 SpringBoot xff1a 简化新spring应用的初始化搭建以及开发过程 SpringCloud xff1a 基于SpringBoot实现的云原声应用开发工具 xff0c 使用的技术有
  • 实战尚硅谷项目——尚医通(4)

    本文章仅做个人项目学习过程记录 xff0c 不做详细介绍哈 一 搭建项目目录 xff0c 引入相关依赖 完成后项目目录结构如下 xff1a 二 完成数据库表的建立和实体类model 完成后数据库表如下 xff1a 完成后实体类model目录
  • C++学习之路之(变量命名规则)

    简单变量 变量的命名规则 变量名中只能用字母 abc 数字 0123456789 和下划线 名称的第一个字符不能是数字区分大小写不能将C 43 43 关键字用作名称尽量避免以下划线开头 系统头文件里将宏名 变量名 内部函数名用 开头就是为了
  • ROS2学习笔记(八)-- ROS2参数应用实现道路识别调试

    简介 xff1a 参数也是ROS2系统中很重要的一项功能 xff0c 主要是用来对节点进行配置 xff0c 一般用在调试过程中 xff0c 通过命令行的方式修改节点的一些配置 xff0c 用以辅助调试 xff0c 另外节点参数也支持导入和导
  • 删除docker容器和镜像的命令

    在删除docker容器的时候需要先停止docker xff0c 先删docker容器然后再删除镜像 然后docker rm docker容器的名字 xff08 docker rm mysql xff09 docker rmi 镜像的id
  • 精通SOA:基于服务总线的Struts+EJB+WebService整合应用开发(网上书店系统 - SOA实施)

    目前全球最大的软件服务商IBM 在实施SOA 方面一直处于领先地位 xff0c 因此通过介绍如何用IBM 的服务总线产品来构建SOA 架构更能使开发人员把握SOA 的精髓 服务总线是实现SOA 架构最核心的部分 xff0c 它将对系统内部或
  • 离散LQR:原理,求解与拓展

    该文档用以总结离散LQR的基本原理 xff0c 反馈控制率的求解和一些拓展 xff08 时变系统 xff0c 跟踪命题等 xff09 主要参考的是Stanford的课程EE363 Linear Dynamical Systems的部分课件
  • CMake添加不同目录文件的方法

    三种使用CMake构建工程添加子目录的方法 文件目录结构 span class token punctuation span CMakeLists span class token punctuation span txt inc ansi
  • 使用readdir函数读取一个文件夹的子文件,打印并统计个数

    readdir一般与opendir结合使用 readdir包含的头文件 xff1a include lt dirent h gt readdir函数的原型 xff1a struct dirent readdir DIR dirp 函数的作用
  • ModelSim 仿真常见问题及解决办法

    下面介绍一下使用ModelSim仿真时经常出现的一些问题的解决方法 xff1a 1 Can 39 t launch the ModelSim Altera software 这是由于Quartus II 软件中与 Modelsim 关联设置
  • 蓝牙协议栈

    蓝牙协议栈 蓝牙技术规范的目的是使符合该规范的各种应用之间能够实现互操作 互操作的远端设备需要使用相同的协议栈 xff0c 不同的应用需要不同的协议栈 但是 xff0c 所有的应用都要使用蓝牙技术规范中的数据链路层和物理层 完整的蓝牙协议栈

随机推荐

  • vscode 结合git基础操作之代码冲突解决

    在branch demo 1上面提交一个var d 61 xxx xff0c 假设不是我提交的 既然不是我提交的 xff0c 我在本地的代码并没有git pull 把最新的代码拉下来 xff0c 我就写了一个var f 61 xxx xff
  • Nextcloud使用手册

    1 用户登陆 访问地址 xff1a http 127 0 0 1 8080 管理员用户名 xff1a admin 密码 xff1a 2 面板介绍 边就是分享的链接 收藏 地址 xff0c 中间就是我们上传的图片 文档 程序等了 xff0c
  • 布谷鸟算法(cuckoo_search)可能会遇到的问题

    1 布谷鸟算法是先进行在pa的判断 xff0c 然后决定是进行Levy飞行还是做出相应毁坏蛋的行为 xff0c 再所有的粒子一起输出 2 布谷鸟算法里面的gamma函数在有的地方可能不能使用 xff0c 比如S Function xff0c
  • protues仿真常见问题解决方案

    目录 1 如何确定自己的仿真版本 2 仿真软件破解 3 仿真工程格式 4 未加载HEX文件 5 缺失元件模型 6 低版本无法打开高版本问题 7 仿真结果异常问题 8 仿真图打开失败 9 仿真运行过程中闪退 10 缺失 SDF文件 仿真出问题
  • 第20章 USART—串口通讯—零死角玩转STM32-F429系列

    第20章 USART 串口通讯 全套 200 集视频教程和 1000 页 PDF 教程请到秉火论坛下载 xff1a www firebbs cn 野火视频教程优酷观看网址 xff1a http i youku com firege 本章参考
  • UC/OS-II 源码下载【资源】

    目录 1 前序 2 官网下载源代码 3 STM32F1示例代码 1 前序 你是不是也在学习ucos相关知识 xff0c 想要去网上下载源码 xff0c 但是又不知道去哪里下载 xff0c 网上冲浪大半天也没找到源码 xff0c 结果键盘无故
  • 文件系统编译进内核

    1 利用busybox制作根文件目录 需要有init 和 linuxrc 2 makemenuconfig 在general setup 中设置 initial ram filesystem and RAM disk 后指定文件系统源文件路
  • 零基础制作平衡小车【连载】13---平衡小车代码讲解(附源码)

    前言 今天聊一聊代码 xff0c 只有直立功能的代码 代码总体思路 给定一个目标值 xff0c 单片机通过IIC和mpu6050通信 xff0c 得知数据后 xff0c 根据角度环计算出一个PWM值给电机驱动器 xff0c 从而控制单机转动
  • NRF51822---开发板介绍(连载1)

    无线遥控器项目先放一放吧 xff0c 要学习的东西太多了 xff0c 一开始以为很简单 xff0c 结果坑越挖越深 还保持采用NRF51822的方案做手柄 xff0c 在做之前先把51822这个骨头啃下来 我又重新开了一个专题 xff0c
  • nrf51822+rfx2401c系统板(开源原理图、PCB)

    快过年了 xff0c 没啥东西可送的 xff0c 就把刚做的射频板子开源了吧 原理图 3D图 板子还有点毛病 xff0c 不过问题不大 把PCB隔断 xff0c 飞根线就行了 xff0c 等你拿到手就能看到了 下图中画黑色圈的两个过孔把信号
  • 无名小哥对无名飞控中的问题回答总结

    文章目录 IIR二阶数字低通陀螺仪数据噪声传感器矫正姿态解算惯性导航控制滤波性能系统响应巴特沃斯滤波器的截止频率如何取累计漂移姿态估计精度误差大控制周期时间保证传感器数据不丢帧 IIR二阶数字低通 对于IIR而言 xff0c 阶次越高 xf
  • Vue反向代理服务器

    在项目中创建 vue config js 文件 module exports 61 devServer proxy 39 api 39 target 39 http localhost 3000 39 pathRewrite 39 api
  • putty连接centos7 Network error:connection timed out

    首先说明一下 xff0c centos7系统下的开机服务不再在 etc inittab的管理之下了 xff0c centos7使用systemd模块管理系统的服务 xff0c 所有的服务文件都改为 etc systemd system的 s
  • ESP32_使用天猫精灵利用巴法云控灯例程测试

    1 说明 虽然官方例程写的是ESP8266 xff0c 但是改一下就能直接用到ESP32的 xff0c 参考这个链接 xff1a esp8266接入天猫精灵教程 xff0c 附开源app控制 巴法开放论坛 xff0c 整个过程非常非常简单
  • 附录A 进阶游戏编程书籍总结与推荐

    章节导读 很多游戏编程书籍都有一个通病 xff0c 一本书写完 xff0c 读者看完之后 xff0c 不知道下一步该如何前进 这里的附录就是让大家看完这本书后 xff0c 知道自己接下来可以学习什么 xff0c 如何进一步提升自己 为学习思
  • 最受欢迎的菜品

    7 2 最受欢迎的菜品 20分 某自助餐厅要求餐厅的客人在就餐后进行投票 xff0c 选出一款最喜爱的菜品 xff0c 每日营业结束后进行投票统计 xff0c 选出投票数最多的菜品为最受欢迎的菜品 请编写一个程序帮助餐厅快速完成这个统计工作
  • 利用grafana&prometheus 快速配置k8s监控面板 & 主机监控面板

    系列文章目录 1 使用helm快速安装 grafana amp prometheus 2 利用grafana amp prometheus 快速配置 k8s amp 主机监控 3 grafana amp prometheus 快速配置报警规
  • 使用idea创建一个简单的servlet项目

    在创建一个简易的项目之前首先需要在idea配置好tomcat的环境 xff08 1 xff09 点击add configuration xff08 2 xff09 点击 xff0b 号 xff08 3 xff09 选择好你的tomcat版本
  • 为什么我们需要uCos?带你透彻理解RTOS

    与uCos见面还是大学的时候 xff0c 老师让我为毕业设计选一个课题 xff0c 要求有关嵌入式实时操作系统 xff0c 于是开始在网上搜索 xff0c 顺理成章的就发现了uCos xff0c 于是开始了uCos之路 xff0c 但后来由
  • 多旋翼PID控制器笔记

    多旋翼PID控制器笔记 高度控制垂向速度环加速度指令到油门指令的映射垂向加速度环 水平控制水平速度环水平加速度到姿态的映射姿态环欧拉运动学方程角速度环欧拉动力学方程 高度控制 垂向速度环 垂向速度指令在NED坐标系下给出 xff0c 采用P