四旋翼飞行器的控制规律及算法实现

2023-05-16

四旋翼飞行器的控制规律及算法实现
http://bbs.loveuav.com/forum.php?mod=viewthread&tid=211&fromuid=19507

(出处: 爱无人机 - 专注无人机开发与设计)


四旋翼的基本飞行须参考3个测量量,Pitch,Roll和yaw,然后控制4个电机的转速以达到升降、悬停等动作。

      四旋翼飞行器的动力学模型复杂,受外界环境影响大,对控制器的自适应和鲁棒性要求都比较高,故控制方法挺多,比如什么反步法(Backstepping),LQ,ADRC。

     不过,专家们也许都比较喜欢说术语,忽悠人吧,其实这玩意控制起来比看论文中的要简单得多,主要就是个——PID,要不分段PID,模糊PID,自适应PID,PID神经元网络....  够啦,总之没那么复杂。   
                           

     首先,四个电机,如何控制侧倾? 如果单单考虑控制一个电机来侧倾,这不严谨,因为当动作其中一个电机时转速的变化改变了反扭矩的大小而对角的另一个电机产生的扭矩没有改变,此时四旋翼不仅侧倾还会在yaw上面产生额外的运动,所以控制电机应该成对去控制,比如:
       定义电机排布方式如下:
                                                M1
                                                  |
                                         M2 —— M3         
                                                  |
                                                M4

       这就是 四旋翼 “+” 飞行模式,不难理解,要调整pitch,只要改变M1与M4的转速,调整roll,则改变M2与M3的转速,所以可以得到如下控制规律:
             M1   M2   M3   M4      (H为Hold 保持)
正俯仰   +      H      H     -
反俯仰    -      H      H    +
正横滚   H      +      -     H
反横滚   H       -     +     H
顺航向   +       -      -     +
反航向    -      +     +      -
上升      +      +      +     +
下降       -      -       -      -

      不过自己搞的四轴并不是使用 “+” 模式,那没意思,我喜欢 “X” 模式。 咋一看,似乎复杂了,其实不然,只不过是在每次动作时要操作四个电机而已。
      定义电机排布方式如下:
                       M1     M2
                          \    /
                          /    \
                       M3     M4

     可以这么看,把 M1&M2当成 ’+‘ 模式中的M1;M3&M4当成 ’+‘模式中的M4,另外两组类推。
所以也可得到 “X” 模式的控制规律:
             M1   M2   M3   M4   
正俯仰   +      +      -     -
反俯仰    -      -      +    +
正横滚   -      +      -     +
反横滚   +       -     +     -
顺航向   +       -      -     +
反航向    -      +     +      -
上升      +      +      +     +
下降      -       -       -      -

      好了,两种模式的控制规律表都在手了,接下来是如何控制,使其能自主悬停?这里实质上也没什么奥妙,就是通过PID,调整电机PWM,减小期望与当前姿态的误差,即可实现悬停、航线等复杂动作。

     AHRS姿态解算要可靠,这是重头戏! 我的经验是:开启电机,强震动下AHRS只要能保证解算的姿态误差幅度在1°以内即可。接着就是一条经典的PID公式:u(t) =Kp*[e(t)-e(t-1)] + Ki*e(t) + Kd*[e(t)-2*e(t-1)+e(t-2)] ,u(t)即为本次给电机的控制量。
    这里e(t)即为当前时刻期望姿态与测量姿态的误差。
    因为是控制3维刚体运动,所以需要当前各轴误差,上次的各轴误差,上上次的各轴误差,还有三套PID参数(也可只用一套参数),可以写成如下矩阵形式:

—      —         —                                                                   —        —     —               
|  Up(t)  |         |  ep(t)-ep(t-1)    ep(t)    ep(t)-2*ep(t-1)+ep(t-2)  |         |   Kp   |   
|  Ur(t)   |    =   |  er(t)-er(t-1)     er(t)      er(t)-2*er(t-1)+er(t-2)    |   *    |    Ki     |   
|  Uy(t)  |         |  ey(t)-ey(t-1)    ey(t)     ey(t)-2*ey(t-1)+ey(t-2)   |         |   Kd   |   
—      —         —                                                                   —          —    —

       Up,Ur,Uy,分别为各轴的控制量;ep,er,ey分别为各轴的姿态误差;

      到这里就基本差不多了,只要将控制量加在给定的PWM数值上,再赋给定时器即可。

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

四旋翼飞行器的控制规律及算法实现 的相关文章

随机推荐

  • 【MongoDB】——TTL Index

    TTL Index
  • ubuntu下的串行口通讯编程

    Linux 操作系统从一开始就对串行口提供了很好的支持 xff0c 本文就 Linux 下的串行口通讯编程进行简单的介绍 串口简介 串 行口是计算机一种常用的接口 xff0c 具有连接线少 xff0c 通讯简单 xff0c 得到广泛的使用
  • stm32 摄像头寻迹+平衡车

    链接 xff1a http download csdn net download u010925447 9866006
  • 【书籍推荐】自己动手写操作系统

    于渊 编著 尤晋元 审校 2005年8月出版 ISBN 7 121 01577 3 48 00元 xff08 含光盘1张 xff09 374页 用理论指导动手实践 xff0c 用实践深化理解理论 xff01 本书在详细分析操作系统原理的基础
  • 贝塔、伽马分布

    最近开始自学PRML xff0c 为此又补了概率论中的一些知识点 相较于古典概率通过各种估计手段来确定参数的分布 xff0c 贝叶斯学派则是使用后验概率来确定 xff0c 为了方便计算后验概率 xff0c 引入共轭先验分布来方便计算 xff
  • elementUI中el-dropdown的command如何传递多个参数

    el dropdown的command事件默认传递一个参数 xff0c 即每个下拉选项el dropdown item中设定的command的值 xff0c 那么如何传递多个参数呢 xff1f 实现方法 xff1a 动态设置el dropd
  • 记录ubuntu18.04下搭建nuttx RTOS的过程

    官方参考链接 xff1a https nuttx apache org docs latest quickstart install html Getting started 61 61 gt Installing 主要记录一下按照链接指导
  • 词袋

    brief描述子 一般Sb 61 48 Lb为256 brief描述子不具备旋转尺度不变性 词袋 提取大量图片的描述子 xff0c 将描述子用k means聚类成K堆 xff0c 这是第n层 xff0c 把每一堆再次聚类形成下一层 xff0
  • 板子和电脑配置ros通信

    它们需要连在同一个路由器上 1 获取板子和电脑的ip 比如板子名为RV1126 RV1109 xff0c ip为192 168 5 48 电脑名为qian hw xff0c ip为192 168 5 25 2 在电脑端设置 xff1a ba
  • 通过跟踪效果来看vins输出结果

    下面是vins跑出来的结果 xff0c vio输出是绿线轨迹 线速度是0 28m s xff0c 拐角的地方是我根据蓝线把vio轨迹掰正了 vio在初始阶段走的比较弯曲 xff0c 后有一段笔直的轨迹 xff0c 这里旋转非常慢 xff0c
  • vins-fusion 融合rtk原理

    vins fusion融合rtk原理 xff1a 使用优化的方式融合 xff0c 假设融合后的位姿是fusion T n vio输出的位姿是vio T n xff0c rtk输出的位姿是rtk T 只有最后一帧 那么 fusion T的初值
  • Docker 方式搭建 Prometheus + grafana

    prometheus 官方仓库 prometheus 官方文档 GETTING STARTED 参考 基于docker 搭建Prometheus 43 Grafana的过程详解 按照官方仓库文档中写的 Docker images Docke
  • 报错:The following signatures couldn‘t be verified because the public key is not available: NO_PUBKEY

    apt update 最后报错 sudo apt update 报错 91 packages can be upgraded Run 39 apt list upgradable 39 to see them W An error occu
  • ubuntu上 eclipse+arm-linux-gcc+jlink+s3c2440a开发环境搭建

    0 环境搭建概述 所需工具 xff1a xff08 1 xff09 Eclipse Eclipse的本身只是一个框架平台 xff0c 但是众多插件的支持 xff0c 使得Eclipse拥有较好的灵活性 xff08 2 xff09 CDT C
  • 在函数里修改全局变量

    names 61 39 Lilei 39 def change name global name 全局变量我来撑控 names 61 39 Hi 39 print names change name 39 Hi 39 print names
  • 守护进程详解及创建,daemon()使用

    转载于 xff1a http www cnblogs com mickole p 3188321 html 侵删 一 xff0c 守护进程概述 Linux Daemon xff08 守护进程 xff09 是运行在后台的一种特殊进程 它独立于
  • 在VsCode中如何使用Git

    大部分前端都是用VsCode作为代码编辑器 xff0c 那么我们如何在VsCode中使用Git呢 xff1f 准备工作 xff1a 1 在vscode中安装插件GitLens 使用教程 xff1a 1 点击文件 新建窗口 2 克隆git仓库
  • 关于C++继承类和对象

    继承是C 43 43 中一个很好的特性 xff0c 它能够从已有的类派生出新的类 xff0c 而继承类继承了原有类 xff08 称为基类 xff09 的特征 继承类有三种 xff0c 公有继承 保护继承 私有继承 使用公有继承 xff0c
  • 是程序员就去Leetcode刷题吧

    leetcode 是一个美国的在线编程网站 xff0c 上面主要收集了各大IT公司的笔试面试题 xff0c 对于应届毕业生找工作是一个不可多得的好帮手 这个网站的的好处在于它会告诉你测试数据以及你的输出和正确的输出是什么 xff0c 方便大
  • 四旋翼飞行器的控制规律及算法实现

    四旋翼飞行器的控制规律及算法实现 http bbs loveuav com forum php mod 61 viewthread amp tid 61 211 amp fromuid 61 19507 出处 爱无人机 专注无人机开发与设计