四轴飞行器的串级PID参数整定经验

2023-05-16

       

       串级PID即将两个PID控制器按照串联的方式连接起来,前一个的输出作为后一个的输入两者共同控制控制对象。对于四旋翼来讲最普通的就是外环角度环,内环角速度环,两者怎么联系呢,有的说法是:外环:输入为角度,输出为角速度;内环:输入为角速度,输出为PWM增量,这种说法不错但是容易让人误解,输入角度输出怎么变成角速度了,看了别人的程序也没有将角度转化成角速度的处理呀,因为一般思维总会这样想:由角度得到角速度肯定是角度变化量比上时间才对,其实并非如此,这样理解就片面了,其实是与后面的PID控制器有关,前一个PID程序输出的其实还是角度,只是后级PID把它作为角速度了,为什么这么理解,听我给大家举个例子假如说期望横滚角为零度,而此时传感器横滚角为负值那么误差为期望减去测量值为一正值,这个正值经过PID的计算,计算出的结果就是后级PID的输入,后级 PID没有用遥控器控制的期望值,他的期望值就是前级PID的输出值,这个输出值经过PID的计算得出的就是飞行器现在需要的角速度,当然要映射为PWM 增量,角速度还是有电机的升力提供的。那么这个角速度是干嘛用的呢,要把它和期望——遥控器输入值联系起来,期望是横滚角为零,那么这个加速的的方向肯定是纠正现有误差的。如果程序没错的话姿态会被慢慢校正,这个过程是最初输入期望角和姿态角相差最大,那么前级PID输出的值也大,就是后级PID输出角速度也大,但是随着误差被纠正前级PID输出减小,后级一样减小,直至误差为零,那么角速度也为零,没有角速度飞机就是平稳状态。


       对PID有所了解之后在保证姿态角正确,干扰处理的很好之后就可以开始调试PID了,第一步确定硬件没问题,确定电机转向及顺序,这一点大家不要认为它是固定模式,实际上是和程序有关的,就是和你PWM输出有关系的,输出模式可以大致这样写pwm输出=油门±俯仰PID量±横滚PID量± 航向PID量搭配原则是横滚和俯仰在对角电机上市相反的即异号,航向是同号的,至于为什么就和动力学原理有关了。确定顺去及位置的方法最好动手实践确定是对的,在正常的时候斜着放飞机保证总是低的一端的两个电机先转,保证这个之后一般来说顺序就是对的了(在调内环的时候一样的思想可以用,就是给定期望角速度为0然后你手动的给飞机一个角速度应该转哪两个电机自行补脑),然后是正反转,这个对角相同,相邻相反。


       这是准备工作,也就是硬件的部分保证没有差错,当然如果油门行程都没有设置你也不用看这个帖子了。


       串级PID主调内环,内环为增稳环节,如果系统姿态和期望姿态没有偏差系统角速度为零就是理想状态。调PID的方法大致有烤四轴,云台(万向节)四轴,悬吊四轴,云台四轴最为安全,悬吊法最为接近实际飞行情况最为可靠,烤四轴本人没有用过不做评断。第一步就是更改程序结构,改变程序结构就是将内环的输入改为用遥控控制的值(期望角速度)注意这里和姿态角没有关系,只和角速度有关系,所以不要疑惑,为什么看上面串级PID的解释。调内环的时候给期望角速度为零,四轴是不会回到平衡位置的,因为这里根本没有用到姿态,调内环的目的就是内环参数能够很好地跟随打舵(角速度控制模式下的打舵)控制量。在平衡位置附近(正负30度左右),舵量突加,飞机快速响应;舵量回中,飞机立刻停止运动(几乎没有回弹和震荡)也就是说让角速度为多少时能够马上跟随,首先调P,从小到大调节,太小表现为软趴趴的,就是回复力很小,给定角速度为零时用手拨动感觉阻力小,这就是控制力不够需要增大P,有人说需要找到临界振荡值,在我看来没必要,虽然笔者也找了,但是最后由于希望飞行器比较稳定,还是减小了P,大概只有临界振荡值得一半,那调到什么程度呢,个人认为期望角速度为零时,用手拨动感觉阻力较大时就可以,然后可以推动遥控改变期望角速度,适的P能较好的对打舵进行响应,又不太会震荡,但是舵量回中后会回弹好几下才能停止(没有D)。


      微小的振荡是正常的,不要追着不放,然后加入D,微分控制作用的特点是:具有超前调节功能,可有效改善被控对象有较大时间滞后的控制品质。在偏差刚刚出现时产生很大的控制作用,加快系统响应速度,减少调整时间,从而改善系统快速性,并且有助于减小超调,克服振荡,从而提高系统稳定性,但不能消除静态偏差。但是微分作用的输出只与偏差信号的变化速率有关,如果有偏差但不变化,则微分输出为零,故微分控制不能消除余差。所以微分控制器不能单独使用,它常与比例或比例积分控制作用组合,构成PD或PID控制器。(来自课本)个人理解D就是阻尼,就是预知偏差并提前阻碍偏差进一步恶化。加上D,D的效果十分明显,加快打舵响应,最大的作用是能很好地抑制舵量回中后的震荡,可谓立竿见影。太大的D会在横滚俯仰混控时表现出来(尽管在“烤四轴”时的表现可能很好),具体表现是四轴抓在手里推油门会抽搐。如果这样,只能回到“烤四轴”降低D,同时P也只能跟着降低(D具有增大比例稳定范围的作用)。D调整完后可以再次加大P值,以能够跟随打舵为判断标准。但是加上D之后系统还不会处于理想状态,只要重心有问题四轴就会朝某个方向慢慢倾斜,这是正常的,这是就需要考虑加入I,积分。只要偏差存在,输出就会不断累积(输出值越来越大或越来越小),直到偏差为零,累积才会停止。所以,积分控制可以消除余差。积分控制规律又称无差控制规律,只有加入积分系统才能真正的维持在某个位置不懂平衡。加入积分后一般要稍微减小P因为I会使P的稳定范围减小,积分作用太大就会让P处于震荡状态,但是两者又要保持平衡,即在回复力,消除余差,合适的超调三者保持最优组合。达到要求后就要还原程序结构,开始调外环,外环比较好调,找到合适的打舵灵敏度即可,可以使用P,也可以使用PI。


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

四轴飞行器的串级PID参数整定经验 的相关文章

  • ROS的geometry_msgs/PoseWithCovarianceStamped Message 消息格式

    溪西创客小屋 geometry msgs PoseWithCovarianceStamped Message Raw Message Definition This expresses an estimated pose with a re
  • 线程和进程的理解

    一 介绍线程和进程 什么是线程 是程序执行的最小单位 xff0c 一个进程在执行过程中产生建多个线程 xff0c 同一进程中的 多个 线程共享同一块内存空间及系统资源 xff0c 线程数进程的一部分 xff0c 因此线程数也被称为轻量级进程
  • Windows安装tensorflow-gpu

    0 想在Windows环境安装tensorflow gpu xff0c 显卡必须是N卡 xff08 本文以3070显卡为例进行说明 xff09 1 安装好Anaconda以及Pycharm xff08 安装教程 xff1a https ww
  • 16.进程-进程间通信概述

    进程间通信 xff0c 也就是大家常说的 IPC Inter Process Communication xff0c 指的是不同的进程间进行交流 xff0c 本质上就是进程之间发送和接收数据 xff1b 本质上 xff0c 信号也是属于进程
  • PNP问题-位姿估计方法梳理(pose estimation)

    tags 单目视觉 位姿测量 目标3D精确模型已知 xff08 建立2D 3D对应关系 xff09 xff1a 点特征 P3P问题 基于针孔成像模型 Gao的方法 xff08 opencv emgucv xff09 Kneip 的 P3P
  • 室内无人机定位导航

    个人观点 xff1a 可研究的方向 1 静态规划方面 xff1a 将控制与定位结合起来 xff1b 修正回环检测误差 xff0c 提高算法的计算精度和执行效率 xff1b 2 动态规划方面 xff1a 用神经网络识别运动物体的行进方向 xf
  • 树莓派3b程序控制无人机 (一)——电脑连树莓派

    设备 xff1a 树莓派3b xff08 备有键盘 xff0c 鼠标 xff09 xff1b win10 x64笔记本 xff1b UAV pixhawk飞控板 etc network interfaces 的设置可参考以下链接 xff1a
  • 三星6410裸机程序开发

    网上关于S3C6410裸机程序开发都是基于RealView RVDS 也有一些是基于eclipse的 xff0c 但都没有详细介绍在eclipse中如何建立S3C6410裸机程序工程 尽管友善之臂提供的6410裸机程序示例使用了eclips
  • linux socket can程序cantool

    最近写了个自认为不错的基于linux socket can程序 xff0c 主要功能 xff1a 程序具备全部CAN功能 xff0c 包括CAN标准帧 扩展帧接收与发送 CAN总线错误判断 环回等功能适用基于LINUX SOCKET机制实现
  • Linux CAN编程详解

    Linux CAN编程详解 是一篇百度文库上的文档 xff0c 主要描述了以下内容 xff1a can总线介绍及其帧类型 xff1b Linux 系统中CAN 接口配置 xff1b Linux 系统中CAN 接口应用程序开发 xff1b L
  • c++中冒号(:)和双冒号(::)的用法和c/c++ 位域结构体

    1 冒号 xff08 xff09 用法 xff08 1 xff09 表示结构体内 位域的定义 xff08 即该变量占几个bit空间 xff09 typedef struct XXX unsigned char a 4 unsigned ch
  • CAN总线与RS485的比较

    最近一个项目总体方案设计为分布式系统 xff0c 于是在通讯上纠结于CAN总线还是RS485 因此在网上搜索一些了一些关于RS485和CAN总线的资料 xff0c 除进一步认识RS485通讯特点外 xff0c 认识了CAN总线的特点及其与R
  • Linux内核中常见内存分配函数

    1 原理说明 Linux 内核中采 用了一种同时适用于32 位和64 位系统的内 存分页模型 xff0c 对于32 位系统来说 xff0c 两级页表足够用了 xff0c 而在x86 64 系 统中 xff0c 用到了四级页表 xff0c 如
  • MII、RMII、GMII接口的详细介绍

    概述 xff1a MII Media Independent Interface 介质无关接口 或称为媒体独立接口 xff0c 它是IEEE 802 3定义的以太网行业标准 它包括一个数据接口和一个MAC和PHY之间的管理接口 数据接口包括
  • Visual Studio .NET 2003中出现“无法启动调试 没有正确安装调试器”错误的解决方法

    最近 xff0c 装了Visual Studio NET 2010后 xff0c 在Visual Studio NET 2003中进行运行调试 xff0c 突然出现 无法启动调试 没有正确安装调试器 提示 xff0c 不能向往常一样进入控制
  • ftime()函数

    ftime 函数取得目前的时间和日期 相关函数 xff1a time ctime gettimeofday 表头文件 xff1a include lt sys timeb h gt 函数定义 xff1a int ftime struct t
  • 几道经典的嵌入式C语言笔试题

    C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法 这些年 xff0c 我既参加也组织了许多这种测试 xff0c 在这过程中我意识到这些测试能为带面试者和被面试者提供许多有用信息 xff0c 此外 xff0c 撇开面试的压力不谈 xf
  • 解决eclipse中出现Resource is out of sync with the file system问题

    作者 xff1a reille 本博客网址 xff1a http blog csdn net reille xff0c 转载本博客原创文章请注明出处 本文内容概要 xff1a 解决eclipse中出现Resource is out of s
  • 代码中特殊的注释技术——TODO、FIXME和XXX的用处

    作者 xff1a reille 本博客网址 xff1a http blog csdn net reille xff0c 转载本博客原创文章请注明出处 本文内容概要 xff1a 代码中特殊的注释技术 TODO FIXME和XXX的用处 更多请
  • 个人网站梦想终实现即reille blog | velep.com成长之路

    最近用wordpress开放平台软件建立了一个属于自己的个人博客网站velep com即reille blog xff0c 中文名 xff1a reille博客 xff0c 圆了自己多年来的梦想 xff0c 感觉像是在这大千互联网里找到了属

随机推荐

  • PaddleX树莓派部署--神经计算棒2代

    PaddleX树莓派部署 神经计算棒2代 PaddleX支持在树莓派上插入NCS2 神经计算棒2代 通过OpenVINO部署PadlleX训练出来的分类模型 注意 xff1a 目前仅支持分类模型 仅支持Armv7hf的树莓派 前置条件 OS
  • Hbase数据结构和体系架构

    1 HBase与关系数据库比较 1 xff09 行式数据库 优点 1 数据存储在一起 2 INSERT UPDATE数据较容易 缺点 1 选择操作 xff08 select xff09 时 xff0c 即使是几行所有数据也要被读取 2 xf
  • Ubuntu安装remmina

    官方教程 xff1a https github com FreeRDP Remmina wiki sudo apt span class hljs attribute add span span class hljs attribute r
  • ros运行rviz时出现QXcbConnection: XCB error: 148错误

    原因 xff1a 由于使用了vnc远程控制下位机 xff0c rviz是一个基于opengl开发的图形插件 xff0c 需要使用理论的屏幕参数 xff08 thetis screen xff09 xff0c 使用vnc会导致屏幕参数值不对
  • FreeRTOS内核源码解读之-------系统启动(三)

    前面文章两篇文章介绍了FreeRTOS的启动过程 xff0c 但是有些问题还没有解决 xff0c 在本篇文章中将会逐一解决 首先 xff0c 在 FreeRTOS内核源码解读之 系统启动 xff08 一 xff09 中提到Cortex M4
  • C++ MathGL 二维数据绘图

    C 43 43 MathGL环境搭建参考 https blog csdn net vaincury article details 105438971 MathGL官网 http mathgl sourceforge net doc en
  • 面经——小马智行2022秋招嵌入式

    笔试 单选 xff1a 双向链表 实时操作系统特征 死锁的必要条件 小端对齐时 xff0c 不用sizeof判断int长度 const typedef 结构体字节对齐 堆和栈 n阶阶乘的时间复杂度 tcpudp static 常见通信协议
  • silicon labs平台通过串口升级固件方案

    开发环境 windowssimplicity studio 5geck sdk 4 1 一 bootloader 新建BGAPI UART DFU工程 工程新建完成以后看一下linkerfile ld文件的flash和ram的配置跟自己的a
  • Postman前置脚本

    位置 xff1a 作用 xff1a 调用脚本之前需要执行的代码片段 一 产生随机数字 生成0 1之间的随机数 xff0c 包括0 xff0c 不包括1 xff1b var random 61 Math random console log
  • Ubuntu下启动后网卡没有服务没有启动的问题

    参照了很多帖子 xff0c 两个典型的帖子分别是 https blog csdn net ErErFei article details 98205463 Ubuntu 18 04设置开机自动启动 https blog csdn net w
  • 错误:datatype/md5sum

    学习中科院ros入门时 xff0c 在用roscpp实现主题的发布和订阅 xff0c 遇到以下错误 xff1a ERROR Client listener wants topic gps info to have datatype md5s
  • C++的门道(一些C++的关键坑)

    C 43 43 的门门道道 导语 C 43 43 是一门被广泛使用的系统级编程语言 xff0c 更是高性能后端标准开发语言 xff1b C 43 43 虽功能强大 xff0c 灵活巧妙 xff0c 但却属于易学难精的专家型语言 xff0c
  • EGO-PLANNER安装问题记录以及如何在Ubuntu22.04LTS上安装ROS noetic

    一 Ubuntu系统版本及ROS版本 笔者误操作升级系统版本到了Ubuntu22 04LTS xff0c 在这个版本中系统不支持ROS1的安装 xff0c 笔者尝试用ROS2运行ego planner xff0c 并未运行成功 xff0c
  • 算法竞赛中常用的STL

    C 43 43 标准模板库 xff08 STL xff09 封装了大量十分有用的数据结构和算法 xff0c 熟练使用STL将会使我们的程序编写如虎添翼 接下来会介绍几种在程序竞赛中常用到的STL类 如果想了解更多 xff0c 推荐直接访问官
  • Lwip从入门到放弃之(一)---基础网络知识扫盲

    Lwip从入门到放弃之 基础网络知识扫盲 一 由于工作中用到了有关Lwip的有关知识 xff0c 本人作为一个网络通信协议的门外汉 xff0c 打算系统的学习一下以太网通讯的有关知识 而Lwip作为一款开源的轻量级TCP IP协议栈 xff
  • nginx电信合规100分配置

    在日常线上部署中 xff0c 总会遇到nginx配置基线漏洞 xff0c 整理了一份nginx100分配置分享下 可以通过基线扫描 nginx conf user nobody worker processes 1 error log lo
  • gitee码云webhook,代码提交后同步到服务器。

    1 创建脚本 xff0c 写入以下内容 脚本放入www根目录下 span class token delimiter important lt php span span class token variable json span spa
  • Socket接口编程

    简介 1 Socket 英文原意是 孔 或者 插座 的意思 在网络编程中 通常将其称之为 套接字 当前网络中的主流程序设计都是使用 Socket 进行编程的 因为它简单易用 更是一个标准 能在不同平台很方便移植 2 socket是统一的编程
  • Linux基础命令-chattr更改文件隐藏属性

    目录 前言 一 chattr命令介绍 二 语法及常用参数和模式 2 1 一样用help或man查看语法 2 2 常用参数 2 3 命令的模式 三 参考实例 3 1 给文件添加无法修改的权限 3 2 从指定文件移除隐藏属性 3 3 给目录添加
  • 四轴飞行器的串级PID参数整定经验

    串级PID即将两个PID控制器按照串联的方式连接起来 xff0c 前一个的输出作为后一个的输入两者共同控制控制对象 对于四旋翼来讲最普通的就是外环角度环 xff0c 内环角速度环 xff0c 两者怎么联系呢 xff0c 有的说法是 xff1