无人机字幕day06

day06

01-无人机-飞控任务-姿态控制-思路分析

01-无人机-飞控任务-姿态控制-思路分析哎,呃好了,各位同学,那首先呢先来稍微的回顾一下,就是我们目前做到哪儿了啊,呃遥控那边就不说了,其实主要是飞控这边对吧?呃,非控这边我们上周其实是呃哎通讯不呃,已经没啥问题了,电源没啥问题,灯控没啥问题,对吧?那目前就是飞控飞控,咱现在已经做到哪步了?同学是不是呃获取飞行姿态?
其实咱还没完全的获取到飞行姿态。咱们前面讲过,我们是需要用那三个角度是不是来表达的呀,对吧?
俯仰角偏航角和恒温角,但是我们目前其实还没有拿到这仨角度,咱拿到的,现在只有什么?
是不是只有这个MPU六零五零,它测得的原始数据啊,对吧?说白了也就是三个轴的加速度,再加上三个轴的,是不是角速度啊,对吧?只有这个原始数据,它目前还没有怎么着呢?呃,还没有转换成就是我们想要的那个所谓的欧拉角,对吧?啊,ok好,那前面也给大家讲过,就是这一块呢,我们是需要涉及到一个什么操作的同学,我们是不是需要涉及到一个就是所谓的姿态算算对对吧?么么叫做姿态解算呢?就是将FPU六零五零所测得的原始数据怎么着呢?
给它转化成我们期望的那三个角度啊,为什么一定要转化成那三个角度呢?
呃,其实这个道理很简单啊,为大家想想我们将来再去做这个就是所谓的PID控制的时候,那咱的期望值和我们的呃说白了就是咱的期望值吧。对吧我们的期望值是不是就是那角度都等于零了,对不对?哎哎,这是是是这样的,所以说你必须得先拿到这样的三个角度,你才能就是去通过PID去控制它嘛,对吧?就是这个意思啊,所以说我们现在首要的任务呢,就是将FPU六零五零,它所怎么着呢?他所得到的个原始数据据化化成们期望的那三角度度。那仨角度到底怎么得到呢?其实是有很多方案的啊啊OK有最简简单的比比说说我们接根根据这个角速度直接根据加速度,通过做一些,比如说通过积分运算呀,唉或者说一些这个三角函数的运算呀,其实就能得到那仨角度啊。这个其其实我前前面也给大家举过一个例子,咱们就角角为例啊,比如说我现在有角速度,我要想得到角度,那我只需要怎么着,只要从它开始呃起起飞呃,起飞之后,那我就开始怎么着呢?去进行这个积分运算,对吧?你对这个呃角速度进行积分运算,你得到的不就是它的角度嘛,对吧?是这样的啊,就是可以通过这样的一些简单的运算去得到咱们期望的这两这这几个角度,当然也有一些更加复杂的这个算法啊,是这样的啊。
好,那一会儿呢会给大家简单的介绍一下,就是常用的这样的几个算法啊。ok好,那这是我们目前呃这个完成的一个进度啊,就是说咱们已经拿到了原始数据,但是还需要去计算得到它的角度。那得到角度之后,大家说我们接下来就要干啥了?得到角度之后,是不是咱就可以根据这个角度去计算咱的这个所谓的PID量,对吧?那前面给大家讲过PID这边呢它是一个典型的什么控制来着叫闭环控制,对不对?哎,ok好,闭环控制的核心思想应该是什么呢?是我不断的去测量这个被控的,对不对?然后呢,将这个测得的被控量与我期望的被控量是不是进行比较啊,对吧?如果有误差,那我就通过PID这三个部分,根据误差去得出一个输出,再反馈到是不是咱这个输出电机上面了,对吧?ok好,这样的一个过程需要循环,不断的去执行的,对不对?所以我们在得到的那大角度之后呢,我们就可以先给它设置一个期望的角度。呃,以我们目前为例,我现在只需要让它平稳的升起来就行。好,这个时候我是不需要它前进后退,左左右移动的能理解就是吧?同学,所以这个时候我们的期望的这个被控量,我们期望的仨角度其实应该都是什么呀?都是零都是零啊。ok好,那完之之后怎么让它去保持这个零呢?是不是就得通过PID自己去计算了呀,对吧?
它实时的测量角度,实时的跟我的期望角度零进行比较有误差,它就调整有误差,它就调整。哎,是这样的一个循环不断的过程啊。好,所以我们要做的第二件事呢,就是写这个PID的计算逻辑。好了啊。那这个完了之后呢,其实呃把这其实呃这个PID压测完之后,接下来大家要做的事儿就是啥呢?
是不是就是将企业这个计算结果作用到咱们那个电机上就行了,对吧?唉,ok好,那这样一来我们这个就是呃所谓的姿态控制,就算是完成了。哎,好,那中间大家可以看到,我们要想做这个高度的这个控制,是不是还得额外的再来一套这个PID的逻辑啊,对吧?你得实时测高测高之后呢,将你测得的高度跟你期望的高度进行对比,对不对啊?OK然后呢再循环不断的进行调整,是这么一个思路啊。好了,那这个高度的事儿呢,我们明天再说,今天呢咱就先完成这三步就行,获取飞行姿态,得到那仨角度啊。第二一个计算PID第三一个把PID的结果作用到飞机上,那就OK了。哎,这是咱今天的任务啊,行,我把这个视频停一下。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

02-无人机-代码调整(低通滤波static&通讯任务&飞控任务周期)

02-无人机-代码调整(低通滤波static&通讯任务&飞控任务周期)下面OK呃,先说两个小事儿啊,哪俩事儿呢?首先第一个是咱前天写的,在那个代码里边有一个小问题,需要给大家说一下在哪在这个flightflight飞控里边呃,有同学发现的啊,呃在哪儿呢?在这个地方同学,我们昨我们我我我们前年是不是对这个就是MPU六零五零测得的这个原始数据,是不是咱做了一个滤波处理啊,对吧?关于这个角速度的滤波这块有一个小bug啊,不知道大家有没有注意到啊,反正有一个同学注意到了跟我说了,就是它的这个低通滤波的这个核心逻辑是什么来着?是不是呃采用前一个这个输出值的百分之多少?再加上当前这个测量值的百分之多少,作为是不是最终结果呀,对吧?它这么一个思路。ok好,那大家如说啥,你看你看我这个地方,就这个方法是不是循环不断的调用吗?对吧?啊,OK那我每来一个这个值,我是不是都得得拿前一个值啊,对吧?那你拿完之后呢,就是算完本次的值之后,是不是得把本次的输出作为前一个值保存下来呀,对吧?但是咱们能保保存下垃圾同。那我第一次来这儿是不是相当于生命的一个变量,等于是不是全是零啊,对不对?OK好,那完了之后算完之后,我把这个本次算完的结果附到这个上面了。确实是,但是你下一次来的时候,它这是不是又变成零了,同学对不对?所以你压根儿就没有拿到,是不是前一个值啊,能理解吗?所以这样应该怎么着?同学,你要不就把它写外边,要不这儿得是一个什么,是不是得是一个静态变量才行,没没问题吧。各位哎,这块一定要稍微的注意一下,这个咱之前确实是这个忽略掉了啊。哎,好,那其实好在就是咱们这个呃就是角速度呢,它的波动不是很大。所以咱们前边呢,其实呃咱们也能稍微看着一点点效果来啊,但实际上不明显,这个一定要记得加上这个死在地方啊,咱这个确实忘了加了。哎,行,那这个大家注意到就行了,这是一个啊。好,那完了之后呢,其实还有一个事儿需要给大家去说明一下咱们统一的调整一下吧。就是这个经过我昨天的测试呢,就是我发现啊我们目前的这个CPU其实不太够用了,有点啊,就是现在倒还好,但是加上我们的那个就是比如说非工任务,我们是不是还得去算这个PID啊,对吧?唉,加上那么多,包括还得去去进行那个就是欧拉角的这个计算对吧?加上这一系列的计算逻辑之后,你会发现就是咱的这个CPU就不太够用了,不太够用的表现是什么呢?说白了就是这个,当然它又不闪了,为啥因因因为是不是其他任务就已经把这个CPU给占满了,对吧?
根本就轮不到。这个是不是低优先级的任务上场了呀,对吧?所以这会儿会有一个这样的问题啊,这个问题咱怎么去解决呢?呃,当然你可以考虑,就是把咱们这个灯控任务的优先级给它提到最高,那怎么也能分它一位更对吧?
呃,但是我这考虑了一下,其实咱这样吧,咱其实没必要,就是说让这个执行任务和非控用,就是呃执行的这么频繁啊,咱们稍微的把它的执行周期给它延长一点,稍微延长一点啊OK我们目前是不是每四毫秒,是不是来一个数据,每四毫秒,我设置一下这个电机的转速啊,对吧?啊,实际上这个呢你给它调成五调成六也没啥影响,也能正常工作啊。OK这样一来它就能够释放很多的这个CPU资源去给其他任务用了啊,这个有点儿有点太那啥了,有点太太太太频繁了,不太够用了啊。所以这边咱们统一的同学把非控任务的呃这个周期以及咱下边这个通讯任务的周期呢都给它适当的调大一点,我们统一调成六。唉。好了,那呃这个你要调成六之后,大家想想啊,我们那边就是无人呃,那个那个遥控那边同学呃,是不是也要跟着相应的调一下比较合适啊,对吧?那咱们那个通信任务务,俩俩频这个所谓的频率或者周期呢,咱们候给它调成一致就行,对不对?我们来到福瑞RQS啊task点c完完之后呢,往上翻,我们找的谁找到这个通信任务,通信任务这边之前这个是四对不对?
我们两边因为那边就是六秒六毫秒接收一次。你这边发太快,其实也没没啥用啊,所以这边呢我们统一的给它调成六啊,两边咱们都是六c嗯,没没问题吧。各位好了,这是大家需要去做一些做调整的一个地方啊。呃ok总结一下一共俩事儿啊。第一个事就是我们前面那个非控任务里边在做这个就是呃所谓的低空滤波的时候,我们填一个值,没有真正没有真真正的保存下来,咱们需要给它保存一下,这是一个。那第二一个是啥呢?就是呃咱这个就是通信任务和非控任务的周期,我们都给它统一调整成六,就这俩事儿啊,好点一下视频。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

03-无人机-飞控任务-姿态PID-控制思路

03-无人机-飞控任务-姿态PID-控制思路哎,好了,各位同学。那呃为什么咱们要去把我们的这个这个就是IPU六零五零所测得的这个原始数据转成,就是咱这个所谓的三个角度,为什么要转?其实就是因为我们PID控制的时候需要用到这仨角度嘛,对吧?好,那所以接下来咱先简单的梳理一下,就是我们当前的这个PID的这个控制思路啊,之前给他发了一个图啊,呃或者一会我把我这个原图给大家发过去吧,大家到时候要想改的话也能改一改啊。呃,来咱看这儿就是前边是不是给大家介绍了一下,就是闭环控制呃,p环闭环控制系统里边的一些概念,对吧?像什么目标值误差值测量值被控控?像被控量传感器,这些东西大家应该都熟悉了啊。好,然后呢又给大家简单的介绍了一下,就是PID控制系统啊,它的一些基本概念,这个大家应该也差不多了解的。然后接下来咱们要做的就是啥呢?就是想一想咱这个系统我用PID控制的时候,对吧?
我的目ID控底是什么?我的被控量到底是什么?没没错吧,各位同学咱把把这个是想白白好了。那现在大家想想吧,就是我们我们前我前面给大家举例子,其实举的都是啥,其其实举的都是那个高度,对不对?因为高度它高度它只有一个被控量相对来讲比较简单啊。因为现在呢咱们回到这个姿态控制上面来,就是我想保证它的一个平衡稳定。那大家想想,咱这一块的这个应该怎么着啊?这是不应该是我们目前的一个就是PID控制系统的一个规划呀。这是咱们最容易想到的,对不对?来,咱们一起来看啊,首先那呃咱的这个被控量一定是什么?是不是那三个角度啊,对吧?我们能想到的欧拉角的三个角度,对不对?ok好了,那完了之后呢,那我们的目标角度应该是啥呢?就是你为了保证它能够平稳的飞行正常的起飞。那其实这三角度我是不应应该都零零啊。OK是这样的啊。好了,那完了之后,咱这个PID在呃控制的时候,它具体是怎么怎么工作的呢?其实就很简单啊呃OK比如举例子啊,我现在飞机飞起来了,飞起来了。好,飞起来之后呢,假如说的角度,假如说啊目前咱们这个是很稳定的,是没有误差的,没有误差,没有误差的话,那我这个就是MPU六零五零所测得的角度是不应该都零零啊,对吧?是零的话,当然它其实并不会直接测得这仨角度啊啊,它测的是不是那个角角度和加速度啊,对吧?这块儿我们需要进行一个所谓的姿态检算。姿态检算就是将这个角度转换成欧拉角啊。好,那这样一来咱就能得到测量角度了。那我们正常这个PID它需要怎么着呢?是不是根据你的期望角度或者叫做目标角度和咱的测量角度去计算一个是不是角度的误差呀,对吧?好,误差,现在是不是就需要给到这个咱们的说白了,就是我们这个角度控制器,也就是那个PIDcontroler吧PID控制器啊。好了,那刚才我说了,假如说目前咱是没有这个误差的,是平稳的那大家想想它会怎么着?假如是平稳的那这个角度控制器它会怎么着?同学,你要是平稳的,没有误差,那是不是理论上或者是大概率咱们这个输出的值应该是什么东西,是不是应该是零啊?大家想想是不是这么回事儿,大概率啊,就是你这个输出,你比如说我们以以谁为主PID咱们三部分嘛,比例部分积分部分和微分部分。你要是说现在误差是零的话,那你想想你的比例部分大概率应该是什么东西零嘛,对吧?它它只是一个呃误差是不是乘上一个系数啊?对吧?所以这部分肯定是零,那你的微分部分呢,因为你的误差是零,它没有变化率的,对不对?
同学这不变了,对吧?那所以说这个时候它应该也是零,对吧?顶多也就是谁呢?顶多是不是积分部分,它是有啥的呀?顶多它的输出不为零,因为积分是从开始到现在的是一个累积误差呀,对吧?它不是当前误差,你当前误差为零,并不代表你累积误差为零啊,所以这个输出可能不为零啊。这但是假如说啊这部分它也是零,或者说即便它不为零,就是我们这个输出它应该很怎么着,同学就这种样,应该应该会很小的对吧?所以这么小的一个输出,如果你直接把PID它的输出啊就是作用到我们电机上。作为咱们那个电极的转速,那这样一来肯定会出问题的会出什么问题?你电如果直接把它的输出给到我们电极,他他直接就找着了,同学直接是不是落下来了呀?能理解吧。你你因为你这个输出的值很小,你直接把这个值作为电机的转速,那那是不是直接掉下来了?学你不能让它停转啊,所以说一会儿咱们你会发现我们写代码的时候啊,是这样的,就是咱那个就是最终最终给到这个电机上的转速啊,并不是只由这个PID的输出来的那其实我们还得再加上一部分啥呢?油门我们得用油门打个底。其实我们最终你看代码就能看出来,我们实际上是用油门加上这个PID的值能理解吧。同学作为咱们这个电机的转速,哎,是这两部分共同作用的啊,油门是不是用来整体的去调整我们每一个电机的一个初始转算能理解吧。同学或者是一个最低转速,然后呢再让PID在这个油门的基础之上去做这个调整,来保证这个电机的转速是这样的啊,你必必须得有这个油门啊,刚才大家也分析了。
第一个你要没油门的话,纯靠PID是不是有可能这个它就直接不输出了呀,对吧?嗯,停了停了它,因为你想啊,我给它放地上,放地上,它是不是那个角度都是零啊,对吧?啥的?
没有任何误差,对不对?那这个时候它它是不是就不用控制的同学不控制,它还输出吗?它不输的电机就不转了,所以这个事儿肯定不能这么做啊,所以我们这儿必须得有一个油门打底啊。ok好,那再一个呢,大家想想啊,就算是说咱不考虑刚才那个问题,你想想如果纯靠PID的话,你推那个这油门很有用吗?同学是不是就没用了呀,对吧?所以说油门一定得有啊OK所以最终最终我们控制到那个就是设置到电机上的转速是要由这样的两部分组成的,一个是咱的油门。哎,OK好,那还有一个呢,就是咱那个PID的值。唉,是他们综合作用的一个结果。这一点大家要注意哈。好了,这实际上就是咱们最终的一个PID的控制思想啊,唉好了,那在模拟一个场景,假如说我现在处在稳定,现在在飞。ok好,那假如说现在呢我受到了一个干扰,比如说来了一阵风,对吧?来一阵风之后,比如说我这个飞机稍微的倾斜了一点,只要一倾斜。那我们这个传感器是不是就能够测量到它倾斜的这个角度啊,对吧?唉,测量到倾斜角度之后呢,跟我的目标角度零度是不是就产生了偏差,对吧?只要产生了偏差,那这个角度控制器是不是就会根据咱们的那个偏差来怎么着,是不是去调整咱那四个电机的转速啊,对吧?唉,好,这样一来呢,它就会时时刻刻的去调整,让咱这个飞机保持平稳。唉,就是这么一个思路,唉,就这么一个思路。唉,但是啊同学我们最终最终最终最终采用的其实并不是这样的一个所谓的单环PID控制系统,我们采用的是一个啥呢?是一个所谓的串级的,或者叫做级联的PID控制系统。哎,好,那这个系统它又是怎么工作的,然后采用它有什么好处呢?这个我先不给大家讲了,等咱们一会儿写PID代码的时候再给大家说,现在说有点有点太多了,大家可能就跟不上了啊。我们现在呢就是你大家不用担心啊,就是它和这个所实现的目标是一样的,就是要保证啥呢?最终最终还是要保证我们那仨角度是不是时时刻刻是零啊,对吧?同学只不过下边这种就是所谓的串级PID呢,它的响应速度要比上面这个单环的要更快啊。OK什么叫做响应呢?就是来点风吹草动,我就立马能够纠正,哎,这叫快能理解是吧?
同同学,你比如说我这儿来了,风吹草动,我得过一会儿之后我才能调整过来,那这就是叫做响应慢啊OK这种串级的PID控制系统,它的响应速度要更快。为什么快?一会儿我会给大家分析的啊,咱现在先不用管它的响应速度快,抗干扰能力强。哎,所以说我们这个无人机里边采用这种呃串级的更多一点啊,但是他俩的目标是一样的啊,是保证证三角度度零零OK先从这个角度去理解就行。然后下边那个一会儿再给大家引出来啊,咱先不用管它。行了。同学。总之啊,你不管采用哪种方式,最终的目标是不是就是要保证这仨角度都是零,对吧?
既然你要想保证这仨角度就是零,你你是不是得先得到这仨角度,对对吧?所以咱现在要做的是啥呢?就是去做一下这个所谓的姿态计算啊,来我把这个视频先挺。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

04-无人机-飞控任务-姿态PID-姿态解算概述

04-无人机-飞控任务-姿态PID-姿态解算概述啊,对呃OK那这个所谓的自带结算呢,其实有很多现成的方案啊,这个咱们去打开文档去看一眼同学,找到咱那个无人机找到笔记,找到这个飞控板,大家稍等一下啊,这里边有一个小表格,咱们可以简单的搂一眼啊,来同学,呃,咱们去找一找,我先给这个全部收起来啊,全部折叠,应该是在哪儿呢?应该是在这个背景知识里边啊,背景知识里边这儿是不是有一个常用姿态解算呀?
同学啊,k常常的的姿态态,算算解算算式式啊,这块呢给大家列出来了如下这样的几种啊,我们简单的了解一下啊,首先我们先看这一种吧,这一种是根据什么去进行这个结算的,是不是根据根据角速度积分去进行结算呀?这个其实我一一直在给大家举的例子,是不是就是这个呀,对吧?就是因为我现在已经知道了,就是咱这个无人机,它绕这三个角度旋转的这个呃这个角速度了,对不对?咱是不是能得到哎,沿这个轴的旋转角速度,沿这个轴的旋转角速度以及沿这个轴XYZ的旋转角速度啊,对吧?所以你要想得到他们这三个角度的话呢,我们就只需要对这三个角速度是不是进行时间上的积分就行,对不对?ok举个例子啊,比如说我想得到呃注意这是我的机头方向啊,朝这边的,我想得到它的横滚角,横滚角,那咱应该看什么横滚角,你是不是就看它沿我们这个应该是什么轴?
大家还记得机头方向,我这个是什么轴来着?我这是x轴吧,对吧?那咱是不是就得找到沿x轴的那个旋转的那个角速度啊,对吧?然后呢,角速度我对时间积分。唉,那这样一来的话呢,是不是就能实时拿到,就是咱这个所谓的呃,这叫什么角,这叫横滚角了呀,对吧?
应该是这么一个思路,对吧?那这个积分在我们的程序里边怎么去写啊?其实很简单,积分这个事儿呢,其实说白了,你最开始定一个呃一个比如说就叫角度,角度等于零。最开始因为是零嘛,你放在平面上,对不对?然后呢,咱们去测这个就是MPU六零五零的数据的时候,咱们是在那个非空任务里边去执行的呀,对吧?咱们是多长时间呃,测一次呃,一开始是四毫秒,现在是调成六毫秒一次了呀,对吧?那咱就怎么着就行了,你就每来预轮循环,我就用当前测得的值乘以一个六毫秒,每呃是不是再来一轮循环,我再用当前测得的值再乘一个六毫秒,是不是一直累加就行了呀,对吧?这是不是就相当于是积分呀?因为积分相当白了,就是速度乘以DDT嘛对,速度DT,然后再积分起来,对不对?但是但是我们现在是一个数字的的一计计算逻辑吧吧吧。所以轮轮循环我测一个值,我乘以DT一轮循环,我乘以一个值乘以DT那这样一来一直累加得到的,是不是?就是咱们当前的这个横滚角啊,对吧?就是这么个思路啊OK好,但是很明显,就是这种这种这种计算方式呢,它可能会存在一个什么呢?存在一个长时间计算会出现一个偏差啊,就是因为我们这个本来就是说它测量的可能并不准我稍微来点震动啊,或者是怎么着的。呃,再一个就是我们那个六毫秒,其实理论上同学无这个这个这个这个积分积分,你那个就是时间,它应该是无穷小的,对不对?
对吧?但是你六毫秒它是无穷小吗?它显然不是,所以它一定是会有一个什么呀,会有一个偏差的。而且这个偏差它随着时间的推移会越来越大,对吧?积分嘛对不对?也有误差,它是永远都不会消除的。大家能理解这个道理吧,它肯定是会越来越大的啊呃这个误差怎么来?其实大家应该能想象得到啊。举个例子,假如说啊我这个速度的变化,这是时间,这是速度角速度啊,角速度我的变化,假如说是一个这样的曲线啊,同学啊OK好,那正常情况下,你到这一点的时候呢,你的这个这个这个这个角度应该是什么?是不是应该是这阴影部分的面积啊,同学这不就是积分的逻辑嘛,对吧?但是你正常积分,你应该保证你就是你下边这个DT啊,它应该是无穷小,是不是你得到这个结果才准确呀,对吧?但是我们现在相当于啥呢?你只能是是不是六毫秒当做一个小呃,一一个刻度啊,同学,对吧?六毫秒唉,你测的值是这这块这个六毫秒你测的是这块,这这六毫秒你测的是这个面积,所以你这块是不是以BIRF是会出现一定的这个误差的呀,对吧?
而这个误差随着时间推移会越越大。哎,这是这种计算方式的一个问题啊,但是它能不能算出来一个差不多的值呢?肯定是能算出来的,而且是不是这仨角度值都都能算呀。对吧?算法都是一样的,因为三个轴的方向的角速度我们都有嘛,对吧?哎,能算啊,但是呃也说了会出现这个偏差问题啊。好了,那所以这种方案其实用的不多啊。好,接下来我们看第二种,这个呢叫做加速度计算,上边是不是单纯的。
根据那三个轴的是不是旋转呃,旋转运动的那个角速度算的呀,对吧?其实你根据加速度也能算出来,注意加速度是我们沿这三个轴直线运动的加速度吧。同学,你根据这个加速度也能算出来攒这个纸有没有同学知道怎么算这个东西,他说的需要利用一个是不是反三角函数啊,对吧?
这个能不能算出来能算?其实这个呢就是一些一个非常非常简单的就是高中物理的受理分析,就是一个简单的受力分析的问题。你把这个事想明白了,你就知道咋算了啊,呃,这样吧,咱实际的算一个值吧,咱实际算一下。
呃,我这样我把咱那个呃把什么,因为积分这个东西你得写代码才能算出来。但是你这个三角函数是是不是咱当场就能算呀,对吧?那咱这个咱算一个呃,我们找一下这个非控任务啊,同学稍等找一下。我那个非控任务应该是在这儿了,非控任务这边呢我们现场去算用这个加速度去解算一下它这个角度啊,来我们找一下这个呃taskpass来往下翻,往下翻,同学找到咱这个飞控任务啊,我这个飞控任务。目前这儿是不是会读取这个六轴数据啊,对吧?那接下来我需要让他把这个角度给咱们打印出来呃,加速度啊,这这是不是我正好就是我那仨加速度啊,对吧?呃,但是大家还记得我前面给大家演示那个滤波的效果的时候,这块是不是还打印了一个就是呃滤波前和滤波后的值啊,对吧?这个咱就不要了,省得他干扰咱们啊,这个给缺掉这个上面这个也给删掉掉,是大大一一定要注意啊,就是我们在开始开发的时候呢,这个printf你给他留着没问题。但是将来咱们这个写完了之后,我们要测试了,一定要给它注掉,给给删掉。因为这样一来才能节省节省CPU的时间。因为咱们前面算过啊,就是你用串口打印数据的时候一毫秒是不是就才打印十四十三四个字符啊,对吧?
所以说你要是打印了很多的这个内容的话,那那占用的时间太长了啊,所以这个大家该删的删,就是这个打印语句啊,或者给它注掉。行,那这个咱就先这么着啊,现在我给它稍录编译一下啊,大家稍等呃,刷录一下啊。嗯,咱简单演示一下,就是他这个算法的逻辑,其实这个很简单来这个烧录进去编辑完了啊,好,已经刷进去了。那刷进去之后,现在呢我们打开那个窝法,是不是应该是能够看到这个具体的值的呀,对吧?稍等啊稍等呃,这个就不支持了。先哎,好了,同学,那注意观察,这是不是我们目前得到的这几个轴的这叫什么速度,这是加速度吧,同学这是加速度啊,目前相对来讲是比较稳定的啊。好,那接下来这个所谓的使用加速度去解算咱这个欧拉角到底是怎么算的?我给大家演示一下啊,呃同学借我文凭同学借我,我们这个垫一下啊,我垫起来这个相对稳定一点。比如说我现在呢就想测一下什么角度呢?我想测一下它的比如说横滚角吧,同学哎,横滚脚那横滚脚的话,那我是不是应注意这是我的机头方向啊,我让它冲这边吧,这是我的机头方向,我是不是应该让让让它这么倾斜啊?
同学好。然后呢大家注意观察,我现在呢就直接把这个东西我就不拿手拿了,因为我手拿不稳嘛。你看那个线是不是老抖了,我就给它直接支在这个位置,让它保持一个是不是固定的这样的一个倾斜角啊,可能好不容易看不见啊。我这个用摄像头给大家照一下,应该很简单,这我给他支起来了,完了照着我了,怎么来看这儿呃,这个无人机大家先透着看一眼能看清吧,就是我这个我这个位置这个位置是不是就把它支起来了,对吧?能保证它是不是有一个稳定的这样的一个倾斜角,对不对?哎,好,那然后大家稍微的注意,哎,我这儿碰它了啊,我这还稍微的稳定一点行,目前是稳定的啊。然后呢,大家来看一下这个当前咱们测得的这个值啊,来往这边拖一下,呃,调一下刻度。
呃,哎稍等稍等啊,找一个合适的位置。好,大家注意观察。你看就是我在给它有呃加了一个倾角之后呢,你发现就是咱这个数据它发生了一个变化啊,发生了一个什么样的变化呢?就是首先这个红色的线,红色的线,这个代表的是咱们哪一个轴的这个就是加速度啊,红色的线代表的是咱那个是不是x轴这条线的这个加速度,它目前还是多少?其实还是维持在最开始,是不是那个零差不多零那个位置啊,对不对?OK它为什么是还是零呢?很简单,因为我目前啊是不是沿x轴倾斜的呀,那以说它沿x轴现在有加速度吗?没加速度。ok其实咱之前我给大家演示过,就是那个就是加速度计它里边的核心原理,它这个加速怎么来的呢?
其实里边是不是你可以理解为是有一个弹簧,是不是在拉了一个重物,对对吧?那说明我在x轴方向,我这个弹簧是不是在发生行变,没形变,是不是就没受力,没受力,是不是就没有加速度啊,对吧?所以x轴目前它仍然是零的啊,仍然是零,但是谁变了,同学注意观察,首先沿z轴方向的。哎,这个这个是z轴方向,对不对?那它的值跟之前相比怎么着了,同学是不是变小了呀,对不对?ok好,那完了之后谁也发生变化了,它变小了,公值谁也发生变化了,是不是沿y轴,它的值也发生了变化了呀,对吧?那就证明那我们当前的这个就是呃,记也就是沿y轴的那个就是加速度计啊,它里边的那个重物,你是不是受到了弹簧的这个牵引了呀,对吧?能能能理解这个事吧。同学OK好了,那现在呢咱们就来分析分析啊,就是就是这个重力,呃,就是沿z轴方向的这个值和就是我们下边的就是呃沿y轴方向这个值,那它俩之间应该有什么样的一个关系?这个事儿大家能不能想明白他俩有或者以及他们和我目前的这个倾洁的角度有什么关系?
其实哎很简单,就是你这你这么理解同学啊,咱们所谓的加速度,你就可以把它理解为是什么?是不是沿这个方向受的力啊,力跟加速度,是不是成正比同学没错吧,同学ok你把这个事儿想明白就行了,所以咱先来就比划比划这个事儿啊。假如说我这个重力加速度啊,呃目前啊目前呃不是重力加速,就是沿z轴方向加速度啊,或者说白了就是沿z轴方向受到力啊。
假如说咱们举个例子,它是a啊,然后呢这个仍然是零,对不对?咱不管,然后沿y轴方向呢,咱们就是b的啊,咱们假如就是这俩值。好,我们分析分析咱们俩之间的关系到底是什么样的啊,来吧,咱们分析最开始同学在水平的时候保持。比如比如说这就是我这个无人机啊,然后呢,咱们现在看到的是沿沿什么轴呢?
我们是就是面向我们的,是这个x轴,能能能理解这个事吗?同学面向我们的是x轴啊。好了,那完了之后冲上,这是不是就在z轴啊,同学啊?ok好了啊,那假如说最开始呃平衡的时候,那是不是它呃沿z轴方向受到的力,应该就是这个值啊,同学对吧?
受到的力跟假,假如咱们就不不区分这个加速度和力了啊。受到的力和加速度是不是应该是咱们理理解是一样啊,就是是不是就是那个值啊?然后沿x轴沿y轴方向,因为它是水平的,它是不是都没有受到力啊?对吧?同学好了,那接下来呢我现在把这个板子或者飞行飞行板啊,给它倾斜过来了。注意啊,这个是x轴,这就是x轴啊,这是那个点,我们现在沿x轴给它倾斜。好,比如说我倾斜了一个,这样的角度有点大了,不太好画了。那这样吧稍微的矮一点。ok好,是不是我给它倾斜过来了?同学好,那大家想一想啊,以我们高中所学的那个就是受力分析的这个角度来看啊,那它沿这个z轴方向的受到的力现在会怎么着?是不是会被分走一部分作用?在这个y轴上面啊,对不对?因为它倾斜下来了嘛,对吧?同学OK好了,那完了之后,假如说这就是它作用在那个y轴方向的那个力,它的一个大小。哎OK好了,那它俩之间是不是应该是形成了一个这样的一个,你可以理解为是一个平行四边形嘛,对吧?是不是应该有一个这样的一个对应关系啊,能能能理解这个说吧。同学ok好,那现在这个值应该就是谁,是不是应该就是就是咱们这个就是倾斜之后,这个z轴方向受到的力的大小对吧?也就是它应该是a没错的同学。ok好,那这个值应该是谁呢?是不是就是咱们沿这个斜面所受到这个力啊,对吧?它应该就是谁呢?它应该就是b是不是就是我们倾得的这个值啊?但是当然咱们就看绝对值就行了。同学啊,它是不应该就是b呀。ok好,那目前我们这个倾斜的角度是谁?各位同学这个是不就是倾斜的角度,对吧?同学ok你看啊,一开始这是这轴方向嘛,对吧?
ok好,那现在呢这条线是不是转到这条线了,对吧?所以这个角度是不就就我们倾斜的角度,那这个角度是不应该就是等于这个角度啊,对不对?ok好,那所以说这个角咱们认为它是西塔啊,所以说你会发现就是咱其实就能得到一个什么呢什么样的一个关系呢?应该就是tangent的西塔,它应该是等于贝塔呃,等于是这个b除以a吧,同学是不是就是b除以a呀,对不对?好,你是不是能得到一个这样的关系,你得到这个关系之后呢,其实咱们来一个反三角函数,是不是就能算出来,就是咱这个倾斜角度了呀,对吧?
那咱就算一下啊。OK那也就是说这个西塔它应该是不是等于呃,二可弹进它呃,后边跟着谁不是b除以a啊,对吧?各位同学OK好,那这样一来,这个西塔的角度是不是咱就能求出来了?哎,好,那接下来咱们就实际的去算一下这个数啊,这俩值我现在是不是都能读到啊,都能读到。那完了之后呢,我去算一下,不就完事了嘛,对不对?好,现在咱们开始算啊,记住啊,这个公式我盯一下吧,我盯一下这个公式啊。好了,我这个又倾斜了,这不用管,咱们已经把那个停了,无所谓,我把这个钉一下,这就是我们最终得到的公式啊。好了,那现在呢咱们要做的工作是啥,是不是就是读一下这个值,还有这个值,然后算一下就行了,对吧?咱们看绝对值啊,这个呢是一四是不是这么多呀?对吧?咱也盯一下啊。OK放在这个位置。呃,完了之后呢,这个呢是这点儿,咱们就当然它是有上下波动的这个东西,咱们就暂时先忽略这个误差啊,好,给它定在这个位置。
f三OK好,那现在咱们就开始算了。这个这个我看我看咱计算器算一下啊,呃计算器呃来拿过来,我们先算一下它俩的比值,它俩比值应该是七四九一,比上一四四六五,对不对?那你就直接算就行啊,七四九一,然后呢去除以一个一四四六五一四四六五。
ok好,等于等于多少,是不是等于零点五几啊,对吧?这个我们四舍五入下,我们约等于零点五二,这个没问题吧,同学零点五二啊。好,那接下来我们看这个三角函数里边有没有这个反的呃,这个算了,咱铺网上找一个啥吧,找一个这个找一个找一个这个反三角函数的计算器啊,反三角函数对吧?函数计算器啊OK呃,来看看这个呃,来你看他这儿有,对不对?他这是不是有这个有sine有有有arg弹性的这些东西啊,对吧?加a的都是反的那所以这边我们输入应该输入谁呃,输入咱是不是应该是输入b除以a的值啊,对吧?也就是刚才那个零点五二,对吧?零点五二,你就给它放进来,放进来之后呢,你就算是不是大个弹进它呀,对吧?应该是应该是这个吧?OK点一下。好,哎,你会发现我这倾斜的角度呢就是二十七度多。呃,离得近的同学可以看一下,就是从侧面看一下,就是这个倾斜角度就是差不多应该就是就是或者说我给大家转过来,就是刚才就是这么一个倾斜角度。
这个COD应该基本上就是三十度左右的一个角度吧。大家能看出来是这样的,我我就用这个垫了一下,就这么个倾斜角度应该差不多是三十度吧,差不多哎,差不多是这样的OK所以说这个其实就这么算也能算出来,就是咱这几个角度没没问题吧。各位。但是啊大家想想用这种算法,咱们只能算哪个角度,是这仨角度都能算吗?那仨角度指的是欧拉角,呃,横滚角,还有这个偏航角,你说这仨角度我们都能用这这个方法算吗?你想想啊,它其实这种算法的核心是什么呢?是根据是不是我倾斜之后,我这个就是沿z轴方向的一个力,是不是会分到其他的方向啊,对吧?会会分到沿这个斜,就是这个斜面的方向。哎,所以说那用这种方法算呢,我只能算谁呀,我只能算横滚角和呃就这个俯仰角。但是你那个偏航角就是旋转方向的一个角度,咱能通过这种方法算吗?同学你算不了,因为想啊,你不管就是咱看这个图就能看出来的。同学啊,来我再把这个给它放开来,我给它点开好。呃,现在呢我这个值已经归零了啊,同学注意观察往后看。好,那注意这个是不是又回到了那个就是一个g那么大了呀,对吧?另外两个差不多是归零了。大家想想你你你是不是不管我怎么去做这个旋转,不管我怎么去做这个旋转,就是沿这轴方向啊进行旋转,我这儿在转啊,你看这几个值的大小,其实应该都不怎么变吧,对吧?因为你想啊,你你旋转,那我这一轴方向受到的力会变吗?同学不会的呀,对不对?我水平方向受到力,它是不是理论上也不怎么会变呀,对吧?所以这仨值压根就不变,也就是说它压根儿就感知不到你沿这轴方向在旋转,大家能理解这个事儿吧。所以说你你用这种方式去算的话,你根本就算算不出来。这个所谓的就是这叫什么角啊?这这这个偏航角你算不出来啊,同同所以说说这种方式也就是用加速度进行解算的话呢,咱只能算谁,只能算俩啊,就是那个一个是沿x轴的,一个是沿y轴的旋转的角度,沿z轴的旋转角度咱是算不了的。哎,好了啊。那这一点大家应该是能想明白了,对不对啊?OK好了。呃,但是这种方式还有另外一个问题,就是它容易受到震动的影响,唉,应该能能想象得到吧,对对吧?同学,这个其实咱们之前拿原始数据能就就能看出来,是不是我们原始测得的这个加速度,它就要比那个角速度它不稳定的多呀,那个加速度是不是频繁的去进行震动啊,它是不是有各种这个信号的抖动啊,对吧?哎,它确实不太稳定,也也就是通过这种方式算算的这个东西它不太稳定,但是它有一个好处好处是什么呢?就是它不像那个积分那样是不是会会存在误差呀?对吧?这个我最开始什么样,我再放回到原来那个它置是不是是什么样啊,对吧?
ok它它是不会有误差的啊,就是它它确实不太稳定。那所以说通常情况下,你要真想用第一种和第二种这个方式去算的话呢,不会单独去用的同学一般怎么用呢?咱们会进行一个所谓的互补结算,怎么去进行互补结算呢?说白了,就是把这两者他们的结果怎么着呢?综合起来是不是进行使用啊,对吧?呃,所谓的互补,其实说白了就是非常简单,怎么着就行。比如举例子,你看你倾向于相信谁,你是倾向于相信他还是倾向于相信他。大家你觉得你倾向于谁谁,你你觉得这两个哪个算的应该更准一点,其实应该是第二个更准一点吧。同学它不会存在这个长时间的这积分误差啊OK所以说这边呢呃你就可以怎么做呢?两两两种算法,你都给它算出来。然后这个呢你取一个,比如说零零八的这角比对对面那个你取一个多少呢?你取一个零点二的比重唉,好了,那这样一来的话,是不是就能够得到一个所谓的互补结算的一个结果呀,对吧?就是这么一回事,所谓的互补就是优势互补吧,对吧?唉,你这个准,那我就但是但是你这个呃不稳定不稳定。好,那上面这个稳定对吧?稍面稳稳定,那我就给你来一点,那你上面这个有误差,那我就少来点,我就来下边这个呃,就是多来一点,就就这个意思啊。ok好,这就是所谓的算俩角度对OK但是互补结算的时候呢,你需要注意的一点,就是啊前面讲过这种方法是不是三个角度都能算对吧?这种方法是不是只能算俩角度,对不对?所以说你在互补的时候呢,其实是呃只有这两个角度是做了互补了。但是最后那个就是偏航角沿z轴方向旋转的一个角度,你只能采用这种方式,你下边这个你压根就算不出来,感知不到,是这个意思吧?同学唉好了,这就是咱这个呃咱们这样的一个呃一个一个说明吧啊OK好了。
那实际上大家呢你要是想自己去算的话呢,你就用这两两个东西算一下也行。但是这个误差确实有点大,这个咱实际也测过啊,这个不太好,不太好使,不太好使啊。ok好,那当然就是就包括这个互补,你算算也不太好使啊。OK好,所以说呢后来又出现了更加先进的这个方法,叫做什么呢?叫做四元素字态的算吧,这这块又涉及到了这个所谓的四元素了,对吧?呃,首先啊你看这人解解释的也很清楚,通过某个固定的算法得到角度,这个固定的算法到底是什么?这个其实说实话也很难啊OK好了,那这个东西我还真特意的去搜过相关的资料,就是你像这个次元数字算解姿态解算,包括我们上面的就是这这个互补结算,包括这个结算来自于哪儿呢?其实你要追根溯源的话,是来自于几篇论文的这你要真想研究的话,咱们得自去看看园了了就得啊是这样的OK好,当然咱这儿呢最终肯定还是拿来主意了。比如这个东西咱自己去算的话呢会花费很长的时间啊,而且还不一定能学明白啊,是这样的啊。大家可以看一看,就是这边也说了,就是四元数呢,我前面也说就是正常情况下,咱们普通这个就是机器计算机专业的这个本科是兼不到这个就是四元数的啊。你正常呃,除非你是专业的,比如说航航航航天这个专业的是不是有航空航天专业啊,对吧?再有要不就是数学专业的,可能会接触到这个四元硕。那否则的话大概率是接触不到的是这样的啊,那四元数到底是什么?这个其实大家也可以呃从网上去搜一下,比如四元硕,对吧?咱们点进来点来之后呢,可以简单的看一下它的这个说明啊,他说四元税嗯,从明确的角度而言是负数的,什么不可交换的延伸负数。这个大家应该是都学过的复数学过吧,是不是?就是咱们我忘了是初中还是高中了啊,是不是就是a加BI的这种形式啊,对吧?a是它的实数b加i是它的虚部嘛,对吧?i是的,那个虚数,然后满足i方是不是等于负一的这个结构,这个这个我你还记得吗?复数咱应该是学过的对吧?哎,OK好了,那它相当于是什么呢?是负数的一个所谓的延伸啊,然后这块呃具具的形式是什么样的呢?四元份具体的形式是这样的。a加上BI加上c阶,加上DK就是这么一回事儿。然后这个什么IIKK其实就是的那个虚数嘛,对对不对?OK那它代表的这个含义是什么?或者它的运算规则是什么样的呢?零次方等于一这个没问题,然后它的平方是不是也都等于负一啊,对吧?呃,等等等,反正就很复杂啊。OK好,总之啊,咱们就是最终总结一下,就是这个四元数,它能干什么呢?它能用四个数,它能用四个数去计算。我们这个一个物体在三维空间的旋转,他能用四个数去计算呃,一个呃就是三维物体在三维空间的一个旋转啊。ok好,那所以说是不是就可以通过这样的一个四元数去根据我们采集的值,然后呢,对这个东西进行计算,因为说白了就是他旋转旋转旋转,最终是不是就能得到咱们那几个角度了呀,对吧?呃,差不多就是这么一个逻辑,这个东西非常复杂,就是大家要想感兴趣的话呢可以看啊,就是我找到一个挺不错的视频。呃,大家要想看的话可以看一看。呃,但是那个视频呢是一个老外给做的那个个。他当然他正常常是在油,我上面有有一有一个个有一个这个就是有一个账号啊。然后他在咱们b站上也开了一个账号,那个博主呢叫做三b一b,就这个三b一b其实我当时还特意查了一下,就是这个名字啥意思啊?
是他的眼睛有四分之三是棕色的,四分之一是蓝色的,其实就是三bro一blue,它是那样的啊,就是你可以可可以看看那哥们们是一个专门讲,这个就是讲数学的,专门讲数学的,呃,然后呢讲各种高数啊,各种这个现金,现现现代数啊啊等等,危机三亚等等都会有。你要感兴趣,可以看看它。然后他有一个视频是介绍这个四元数的呃,它是怎么给你讲的呢?它也是因为刚才也说了,它是不是四元数复数的一个扩展呀,对吧?它是从复数引入,然后慢慢的给你去把这个四元数推导出来啊,这个我看了看啊,讲的确实挺形象的一个动画。但是这个就是听起来有费劲英文的,只能看字幕啊。呃,所以大家感兴趣可以去看一看三b一b啊,你就这些说三b一b四元数就能找到它啊。呃,行,那就说这么多吧,这个说多了,咱其实也就没没啥意义了。这个东西咱短时间也说不明白啊,所以最终一会儿我们采用的还是啥?就是拿来主义了,也是从网上直接找的现成的算法。刚才也说了,其实你要追根溯源的话,是有几篇论文的,可以查得到啊。好,那完了之后呢,直接拿过来用了,就啊OK好,那这种效果呢就是这个算法呢它有什么好处呢?呃,首先它算的比较准确,再一个呢它的计算量是比较小的。因为资元数里边呢涉及到了大量的这个矩阵运算,它的算起来呢是相对来说比较高效的。所以这个呃算量小算量小的话,那是不是咱们计算的时间就短呀,对吧?唉,所以说这种方式其实更适合咱们用在无人机上了啊。好了,然后再往下呢,还有一个就是更复杂的算法算法,叫做呃卡尔曼姿态评估。呃,这个其实就是怎么着呢?也是结合着咱前面讲的那个卡尔曼滤波,然后在那个基础上呢,又做了各种各样的扩展。前面讲过卡尔曼滤波,它是不是会呃,根据我们前边的这个输出呃这个输出,然后去估算下一个输出啊,对吧?呃,然后呢它只不过就是说把咱们这仨角度也当做,就是这个输出了。呃,然后呢估估算输出,估算输出也是不断的去优化。呃,但是这种算法呢就更复杂了。然后再一个呢,它计算量也非常非常的大。那所以这个东西咱们用在这个无人机上,其实就不是特别的合适啊。因为呃首先咱们CPU资源本身就不是特别的充,然后你再需要做那么大的呃这么大呃,计算量的去计算,对吧?所以时间又会很长啊,所以这个咱们就没有采用啊,最终最终采用的就是这个所谓的四元素这个解算啊。
行啊。呃,然后还是那句话,就是大家你要是感兴趣的话,你你课下你可以花点时间稍微的看一看那个视频啊,或者说介绍什么的,但是还是不太建议大家去花太多时间在里面。因为咱们现阶段先把代码搞清楚,然后后边等咱们以后真做这个领域的话,你要是感兴趣再去再去深入学习啊,是这样的啊,行了,那这就是一个基本的介绍啊啊。好了,那所以接下来呢咱们要做的工作呢,就是去把这个呃就是呃四元数的这样的一个结算的代码给它呃复制过来,咱们给他拿过来用一下就行了啊,来我听一下视频。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

05-无人机-飞控任务-四元数解算移植

05-无人机-飞控任务-四元数解算移植呃,好了,同学,那接下来咱们要做的工作呢,就是去做一下这个所谓的四个元素的结算啊,那这个咱们去拿一下这个相关的代码啊,这个在哪儿拿呢?呃,应该在公共层,公共层这边呢给咱封装了一个方法啊,叫做IMUMU呢。其实咱们直译过来呢叫做呃叫做什么呢?叫做叫性导航模块。其实说白了就是自带解算了啊。OK啊好了,那所以这个呢咱就直接往上拿就行啊,那我们也去新建这样的两个文件啊,呃来吧呃现在我们在哪儿?
我们也是进到这个是不是这个COM这个目录下呀,对吧?那这边呢我们新建一个呃目录,咱就叫做IMU呃所谓的惯性导航模块呢,其实就是根据我们这个就是飞机的惯性去计算它的各种姿态呢就是一个综合的一个名词啊,就是咱们用一下就行,拿过来咱叫做COM后边跟着一个IMU后边再来一个点h肯定肯CC咱这个也给它拿过来个个做点CC一会儿咱可以看看那个算法非常的复杂啊,把这边来一个header拍照。完了之后呢,接下来我们往下进行啊,下边咱要做的工作呢,就是拿出咱这个相关的代码了啊。呃,首先呢我们把这个h文件先给它复制一下,注意这里边呢前俩咱们不要,但是这个max点h咱们需要用到,因为这里边是不是需要需要涉及到一些数学计算呀,对吧?掉了一些函数啊,那我们把这个拿过来呃,到这儿吧。这LC拿过来之后呢,咱给它放在这个位置。唉,好了,那这就是我们目前拿到的这样的呃这个函数啊,然后大家可以简单的看一看。呃,首先这里边这儿是不是声明了一个结构体啊,对吧?结构体里边一共有四个数,这实际上就是咱们那四元数是不是那四部分呀,对吧?虽然说这四个数吧,刚才我们看了应该是a加上BI加上呃这个CDA加上什么呃,DZ对不对?OK这就是那呃三四个数啊,四个数啊。行,那完了之后,下边给出了这样的几个方法啊,一个方法是什么呢?是不是就是直接获取欧拉角啊,对吧?呃,大家可以看看,就是它这块需要接收的参数是什么啊?你要是想拿欧拉角,你首先得干啥?同学是不是得把我们就是前边通过MPO六零五零那个传感器测得的原始数据是不是给给呀,对吧?JYLACCL咱们得把原始数据给它原始数据给到它之后呢,它里边呢就会进行各种各样的计算。那完事之后呢,是不是就会把最终的结果是不是通过这样的一个结构体给咱们输出出来啊,对吧?这就是欧拉角的结构体这个结构题我们是不是一会得自己定义一下?其实想象想也能想到这里边,我们是不是应该定义三个元素,一个是偏旁角,一个是横空角,一个是俯仰角,对吧?哎,要不一会儿这个咱们给它定义出来啊。好,完了之后,它在计算的时候呢,需要用到,就是我们这个采样的周期。那一会儿需要把这个周期给它放进来啊,这个一定要注意啊调的时候用。然后这个这个这个周期是以秒为单位的啊,一会咱们得记得做一下这个单位的换算啊,行,这是它的h文件。接下来呢我们再去拿一下它这个c文件啊,c文件在哪儿呢?在这个位置我们就直接往这复制了啊,来往下走往下走,这就是他这个复杂的算法啊,里边有些名词咱听都没听过啊,来吧,拿过来呃,来往下翻,往下翻,找到这个c文件,直接复制过来。当是这会儿有些东西我们需要调整一下啊,来我们先把这个名字改了,我这儿没有这个前缀啊。哎,行了,那完了之后呢,来到这个h呃,这个我也改一下吧,这个统一的改成是不是呃去掉下边,这个也是去掉啊,c完了往下走,往下走,下边这个也是给它去掉啊。哎,好了,同学,那这就是咱目前的呃一出来这个这样的一个代码啊,呃我们可以先简单的快速的搂一下啊。同学呃,这里边这儿是不是定义了几个,其实就是几个换算的系数啊,几个换算的系数。呃,首先第一个是一个从什么到什么,从弧度到度到弧度到角度的一个换算关系。这个其实是他在做思元速度的计算的时候会用到的啊呃度就是咱角度那个单位,对不对?弧度这个单位大家还记不记得弧度应该也是一个角度单位吧,我要没记错的吧。呃,大家还记得弧度是怎么定义的吗?一弧度等于什么呀?我要没记的话,应该是这样的。比如说我这儿呢有一个圆啊,有个圆。好。那完了之后呢,呃比如说这是咱那个圆心,对吧?ok比如说我这儿有一个这样的角度,我要用弧度去进行这个表示的话,那应该是怎么表示呢?你是不是得看这一段的圆弧和半径的,是不是一个比值啊,对不对?ok好,那如大大家还能想起来吗?ok好,这个圆弧OK它的长度弧长啊,比上这个半径是不是就它那个弧度啊,对吧?
用这个值是不是来表述来表示这个角度对吧?
所以说一弧度应该等于多少角度呢?这个东西怎么算?这个怎么做呀?这个咋算还还还能想起来吗?一弧度,也就是当它和它的比值等于多少的时候,等于一的时候,是不是就这就是所谓的一弧度啊,对不对?
这可咋算呀?或者说你想想就是或者你再换一个角度去考虑,就是你整个这一个圆对吧?咱们一共要按角按角度度的的话,应该是多少度,应该是三百六十度,对不对?那它应该是多少弧度呢?是不是就用整个的周长去比上半径就是它的弧度啊,对不对?那应该是怎么算?周长应该是等于等于派d等于二派r吧,对不对?那完了之后,除以半径r是不是等于二派啊,对吧?说白了二派是不是就等于多少度,是不是三百六十度啊,对吧?那所以说这个就是弧度,这个就是角度,它俩之间的换算是不是一除就行了呀,对吧?这个数其实就是二派除以三百六,哎,或者反过来嘛,对吧?就是这么一个逻辑啊。好,这这个咱不用管它后边会用到啊,然后再往下这个是一个什么东西呢?呃,这个简单了,这个其实就是也是一个换算系数啊,这个是在把谁是在把我们那个MP幺六零五零测得的那个原始的是不是角速度换算成这个度,是不是他他加上一个换粉系数啊,这个四千除以六五五五三六,这个大家知道是怎么算的?呃,大家回忆一下啊,就是我们原来在做这个就是测试的时候呃,做做这个配置的时候,MQ六零五零。我们那个角速度是不是有一个测量范围?大家还记得吧?有一个量程,对不对?我们当时的量程选的是多少,是不是正负多少来着,两千是不是度每秒啊,对吧?同学啊,ok好了,那完了之后,我们测得的值它是多少呢?是不是零到六五五三呃,当然不是不是零到六五三六,因为什么呢?因为咱是有什么的,咱是有这个是不是正负的呀,对不对?所以应该是正负多少,是不是三万,是不是六千多呀,对吧?呃呃,三三万三万二三万两千多,没没没错吧,同学就是六五五三六,你除以个二嘛,对吧?
同学ok好了,那所以说呢你要去做这个,就是咱们这个单位的换算的话,你要想把我们测得的这个数换成成最终的这个度,每秒的话应该怎么着,是不是应该是用四千和六五五三六去做一个这个呃运算呀,对吧?好,那那那个事吧,你看你怎么用啊,要么就是它处理它,要么就是它处以它嘛,对不对?这其实就是在计算,谁计算,咱们那个就是呃就是MPU六零五零所测得的那个角速度和实际的就是这个度每秒这个单位之间的一个换算的系数。呃,这个其实也无所谓谓里边呢,其其实会会呃会会用它它啊,然后呃至于其他呢我们就不再一个一个去看了啊。好了,那完了之后再往下走,你看它下边就就是是不是取那个所谓谓的处角,它那个整体的一个计算公式了呀,对吧?
呃,可以看看它干了啥了啊,什么提取等效旋转矩阵中的重力分量,什么加速度规划呃,什么向量差等等等么乱七个二嘛,对吧?一一一些龙格,什么塔库算法,库塔算法听都没听过,对吧?呃,所以这个东西呢确实太复杂了,咱们课上呢就不再不再不再深入的去讲了啊。呃,这个东西我也长时间去看过,短时间,肯定也是呃整整不透,这个东西也整不透。咱们。所以呃就这么着吧。同学这个东西正常情况下也是肯定得有专门的,这个是不是算法去做呀,对吧?唉,行,那咱就这么着,直接拿过来用就行啊。那所以接下来呢咱们要做的事,就是编编一下,看这个东东西,它能不能啊?我现在呢先给他试着编一下,看看能不能过,不能过的话,咱们得还得还得去改一改东西啊,应该是过不了的。这里边咱们应该是差,是不是首首先有个结构体,我们是没有定义的呀,对吧?所以接下来咱们去定一下这个相应的这个结构体啊。呃,首先他说这儿有一个JYROACCES十r肯定没定义,我们看看他是说这个没定义是吧?啊,这我们是不是得引一下咱那个是不是那个头文件呀,对吧?来,我引入谁谁应该是引入呃,common,是不是那个types啊,对吧?下划TTPPES点h,咱得把这个拿过来啊。
好,这个没问题吧,来我们得点不过去啊,能点过来。行,那我们再重新编译一下啊,那这个这个就过了,然后接下来咱们要做的就是改其他的内容了啊。呃,他说首先第二一个是不是咱这个就是欧拉角的这个结构体,我们是没有定义的呀,对吧?这个咱确实没定义,这个咱去需要去定义一下啊,我们接到哪进到commontypes点h,然后往下翻定一下这个欧拉角啊呃应该是欧拉角,欧拉角呃,欧欧是哪个哪个病,这个是吧?欧拉角啊,ok好呃,行,那接着往下走,就就用这个就可以啊,咱们叫做欧拉脚,也就是olierangle,对吧?starack然后里边的三个角度呢,正好就是这仨这仨单词啊,p是肉还有药。那跟我们代码里边正好是一致的啊,就是这个东西正常情况下,你得看它代码里边是啥对吧?呃,可以看到它里边正好用的就是这样的三个属性,可以点一下啊,智内欧拉角嘛,对吧?哎,完了点错了,我们再回到这个位置来啊,真的呃走嗯,稍等一下啊,这边再contl一下呃,看一下,就是他这块儿这个怎么用的啊,呃欧大角嘛,对吧?
然后呢,往下翻,你就搜它那个三个属性,是不是这个啊嗯controlfcontrolc拿过来呃,垂掉,怎么变成这个了,对吧?咱们重点是看一下这个东西,acontrola啥情况,controlc拿过来OK好,可以看到这仨角度是不是?就是药还有脂,还有肉啊,对吧?那所以这个应该没啥问题啊。行,这个咱就完事了。接下来我们再重新编一下,看看哪还有问题啊。呃还有问题。他说的是是不是咱这里边没有什么peaCCLX还有什么ACCLY啊,对吧?这应该是和我们那个GYRO那个结构体的属性名相关的啊。来。首先我们看一下它这个位置,注意观察它这儿是不是掉了?GYROACCL也就是这个指针里边的GYL里边的GYROZ啊,对吧?我我们那个定义类型的时候,是不是咱并没有区分就是什么呃呃这个什么ACLIG还有GYL啊,对吧?所以我们直接是XYZ啊,所以这块呢直接改就行,咱应该把这个改成啥是不是统一的,给它改成这个y就行了,对吧?啊,这个改成y啊。好,那这个就搞定了。哎,它是它是啥?它是z啊,ZZZ咱们就z啊,一定要注意,不要改错了。好,这个完了之后,下边像这个地方是不是也需要改一下啊,对吧?ACCL这个是不是应该是把它改成x?没错吧,同学我换一下输入法啊,那这个改成x之后呢,呃来框成这个,那这个是不是应该改成y啊,对吧?然后再往下走,这个是不是就得改成这个z了呀?同学对吧?这个改成z啊,行了,那这个咱就搞定了。行,那我们再往下走,下面可能还有地方有问题啊,先编译一下吧,报错了,我们再改。好,还有还有那应该是在这个在上边了啊,在这个位置,那这块是不是也得改,对不对?那首先这个地方咱统一的也是改成x,这个是y,这个是z啊。好,再往下走,这个呢应该是改,是不是这块儿啊,对吧?或者一会儿大家做全局替换应该也行啊。x这个是y这个呢统一得改成z啊,呃跟它的命名不一致啊,这有点麻烦。行,还有一个地方,最后一个位置应该也是这个问题啊。呃,可以看到吧,这个也是XYZ,对不对?这个改成x这个呢改成这个y这个呢给它改成z啊,行了,那这回我们再重新编一下。呃,行,这回就过了啊OK那这样一来的话呢,就是咱这个就是呃四元数结算的这个算法,咱就拿过来了啊。行,那拿过来之后,接下来咱们要做的工作呢,就是去调一下,然后呢去看一下实际的效果怎么样啊?
来吧,那咱们要调的话,大家说正常情况下应该在在在哪调啊,是不是得在我们这个freeRQStask,应该是在这一步下边去调查吧。同学没没没错吧,各位同学因为你是不是得先拿到就是六轴的数据原始数据,然后才能给到。
他给到了之后,是不是才能够就是给咱们返回相应的结果呀,对吧?那是这么一个思路啊。好,但是在这儿调的话,我们最好给它包一层吧。我们我们在APP层去声明一个方法啊,因为在这直接调COM层方法,好像看着不太不太美观啊,所以这边我们稍微的套一层啊,这边咱就来一个啥呢?来一个word,咱叫做是不是?APP后边来一个这个下划线,咱叫做是不是flight呀?对吧?后边咱就叫做,是不是read也好,或者是get也好,get什么?是不是就是getAP层啊,对不对?好,那这些东西我们就先都给它去掉了啊。呃然后看一看就是他这边给咱们声明的这个参数是不是合适的啊?你想首先我要想拿欧拉角,我是不是必须得先把谁传进来?同学是不是得得把这个呃MPO六零五零得到的原始数据拿过来,对吧?这是一个,然后第二一个哎,咱得传一个是不是欧拉角的结构体的指针进来,我得给它填数对吧?这是一个,然后再有一个哎,刚才也看到了,咱们那块是不是需要用的到一个是不是就是咱们那个采样周期啊,对吧?它在计算的时候,所以说还得有一个参数,也就是那个DT咱也得给它传进来。这个得是float类型,包括我们刚才定义的欧拉角的这个参数类型。呃,这个属性类型也都得是float啊OK好,那这样一来这个函数就声明好了,那调用就简单了,我们就直接调一下就行啊。哎,拿过来这边我们需要引入一个呃COM后边跟上谁?COM后边是不是该跟上一个,咱叫做IMU点h啊,对吧?拿过来啊,好,接来往下翻。呃,你在这个位置去调一下啊,应该怎么着?是不是调用COM后边跟上一个来过来,后边再来一个啥,是不是geto拉角啊,对吧,拿过来。好,那现在我们要做的工作,就是把这几个参数是不是直接传进来就完事儿了呀,对吧?这个就没啥可说的了啊。行了,那这样一来我们就已经完成了这仨了o个在这这个这个所谓的欧拉角的这个结算的步骤了啊。行了,那这儿完成之后,我们需要给它呃创建一个声明,这个拿过来拿过来之后呢,我们再往下走就要干啥了,再往下走是不是就得进到task里边去,实际的调用一下了呀,对吧?咱们在这个位置调啊。好,我们这写一下,应该是二这块呢叫做是不是获取欧拉角或者是姿态解算呀,对吧?都可以啊。行了,那接着往下走,呃,下边就直接调APP后边我们跟上刚才的那个是不是叫做flightFRIGHT哎,我那个名字是不是起错了呀,对吧?
我看我写的是啥来翻一下APPflightgeto拉角,我这儿没有创建出来吗?创建出来类个controlz啊,我们再回到那边去调一下啊,应该是在task里边这个位置呃,拿过来呃,我调一下能不能调啊,哎,没问题啊,行,刚才没提示出来。行,那接下来咱们要过的是不是就是往里边去传入相应的参数同学呃,传参传参的话,我们需要传三个啊。首先第一个是不是就是咱那个GYLOACCEL它的这个指针呀,对吧?我们需要拿到里边的这个数据啊。好,第二一个是不是咱得传一个就是欧拉角的这个结构体啊,对吧?那现在呢我们需要声明一下,我们就在上面声明吧,来往上走,这个叫做欧拉角呃,这个结构体呃,ollerangryangle,对吧?哎,conroc拿过来这个东西,当然我们也要给它一个指针,对吧?然后再往下还有一个参数,是不是就是传入咱们那个采样的周期啊,对吧?采样的周期,这个咱选谁是不是就选它就可以啊,对吧?但是要注意咱这儿的单位目前是不是那个毫秒啊?所所以我们需要给它换算一下啊,就是人家这块有说明咱必须得使用,这个是不是呃秒为单位啊,对吧?要不然里边的这个倍数就不对了啊。行,那这边呢我们除以一个是不是一千就行,但是要注意,因为我们目前这个单位它正常以直接替换的啊,因为这儿说白了就是做一个文本替换嘛,对吧?你这块你要是直接换成六的话,它俩都是整数一除是变成零了呀,对吧?所以这块一定要除以一个就是浮点数,再除以一个一千点零就行了。同学啊,这个要注意一下行了。那这样一来我们就完成了这个所谓的姿态结算这一步了啊。那这步完成之后,接下来咱们这样我们去打印一下,看看它实际的效果怎么样啊?呃这边我们直接回车就行了。这边大家应该是就是printf对吧?好呃,我们还是使用窝法去做一个展示吧。
哎,注意观察同学呃,这块儿咱们在打印的时候一定要注意,就是这次咱这个类型这三个三个数的类型不是应该都是浮点数啊,对吧吧?所所以把这个拿来,然后呢把这仨角度给它传进来就行了。好,接下来咱们用窝个打印印,然后看一下这个效果怎么样啊,哎,咱们编译,然后给它收录一下,大家稍等来点进来。好,点开之后呢,现在我们把这个播放给它打开啊,然后大家注意观察一下,现在是不是咱这个呃值就已经有输出了呀,对吧?
可以看到,目前咱这三个值是不是基本上都是趋近于零的呀,对不对?也就是我这个算出来的这仨角度是不是都是零啊,对吧?所以接下来呢我们来看一看,就是呃实际的这个效果是如何的啊。比如举个例子,同学,我现在呢把我的这个无人机注意,我是沿x轴啊,我我就不给大家看了,我给大家说一下,有我沿x轴进行旋转,然后还是看一下吧,就是旋转的时候大家怎么怎么旋转啊,我把这个转过来呃,拿过来,然后呢这边儿稍微往这儿一点,稍微往前一点吧。呃,往这这儿行,那注意我我现在我怎么动呢?我让他沿这个x轴进行旋转啊,大家你要手拿着的话,你手拿不稳,呃,所以看起来效果不太好。因为你你压这个往这边推一点。哎,呃大家可以看到有没有变化,这个值有变化,但是但是变得太小,因为我这个是不是刻度调的,有点太大了呀,对吧?
我们再给它稍微放一放,因为你正常调你这个角度现在是角度了,对不对?角度是不是也就是呃,就是比如几十啊,对吧?所以这个调调的有点太大了啊,我们往上往上一点。行,你你要手拿的话,其实你你发现就是拿不太稳啊,就是它这个东西这个稍微缩放一点,就是它是不是其他两个轴也会跟着动啊,对吧?所以你要想看出来这个更好的一个效果,咱怎么着就行了。同学,你注意观察你你这样啊呃还是两个两两个角,你让它着地,对吧?
然后呢,你只拖什么?只拖另外两个,你这么拿能理解吧。同学就是你这样一来的话,就是他这个角度它会更稳一点。你看看另外两个基本不动,然后呢,就是这个动了,对吧?可以看到这应该是哪个轴同学XY呃,不是,这就不是XYZ了哈。这个咱们打印的是什么?
分别是什么角度来着看一下那代码啊,呃,咱那个代码目前打的应该是第一个是呃,这叫横这个偏呃,这个呃俯仰角对吧?这是横滚角,这个是呃偏横角,所以目前应该是哪个角度度滚角角,对吧?我沿x轴进行旋转,对吧?因为我们机头方向是朝x轴的对吧?呃,所以说正常应该就是横滚角没问题啊。然后你看这个角度现在差不多,应该是一个四十五度,对吧?我现在你从侧面看,应该也能看着,差不多就是四十五度啊。
ok好,基本上就是这么一个逻辑啊。完那当然我们给它放下来,放了之后呢,我再来看一下,就是它的这个比如说呃俯仰角俯仰角,也就是你机头让它朝下或者朝上嘛,对吧?唉,那差不多也是这么一个一个逻辑,没啥问题。然后呢,我再这样去旋转来看一下这个摄像头这样旋转这样旋转的话,那它是不是这个蓝色的,也就是它的那个什么角啊,这是呃是不是偏航角就在跟着动啊,对吧?基本上就是这么一个思路。好,大家如果那块儿能看到这样的一个效果,那就证明咱目前的这个呃结算应该是没啥问题的啊OK行,那就这些啊呃关于这个四元数结算这块儿呢,咱就只能是这么着了,只只能拿拿来意了啊。来我听一下视频。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

06-无人机-飞控任务-PID-计算逻辑编码

06-无人机-飞控任务-PID-计算逻辑编码好,各位同学,接下来咱们要做的工作就是下一个环节。我们要根据目前得到的这个飞行姿态角,也就是那三个角度,对不对?去计算PID首先我再明确一下,就是咱这个飞控任务,它的执行的逻辑是什么样的啊?它执行逻辑就是我们固定的一个执行周期是不是六毫秒啊,目前是对吧?每六毫秒它都要去读一下这个飞行器的这个三个角度。每六毫秒都要读一下这个角度。那每读到这个角度之后,我们都要干啥同学,我们都要把它的这个角度和我们期望的角度是不是做一个比较啊,对吧?OK好,如果比较出来之后,发现这个角度跟我们的期望值是有误差的,有误差,意味着什么呢?是不是我们需要去调整这四个电机的转速啊,对吧?好,那我到底怎么调整呢?是不是通过这个PID去做相应的计算啊,对吧?PID算完这个结果之后呢,它就会把值最终作用到哪作用到这个飞行器的飞机上边啊。ok好,那最终体现就是这四个电机的转速嘛,对吧?好了,那完了之后说白了,它就是在做啥,是不是就在做调整了呀,对吧?有误差,我就纠错。有误差就纠错,对吧?好,那这个纠错完之后啊,那我们这个飞机姿态肯定是会发生一定的变化。变化完之后,一会儿是不是又过了六毫秒啊?同学又过六毫秒之后,那我们这块是不是又会去得到一个最新的飞行的一个姿态,这仨角度多,对吧?好,哎,正常情况下,你会发现这次我调整之后呢,我的误差变小了,变小了之后呢,那是不是通过PID计算之后,得就是这个最终的输出是不是可能也就小了呀,对吧?小了之后也要作用到这个电机上。ok好,那完了之后呢,再进行测试,再进行调整。那它是一个这样的周而复始的一个过程,循环不断,一直都在做动态的调整。这就是这个PID控制咱这个飞行姿态的一个运行的流程。这一点大家得先搞清楚。哎,好了,各位同学。那所以接下来咱们要做了工工作,就是什么?是不是就是去写这个PID的计算逻辑了呀,对吧?咱这样我们先把PID的这个呃算法先给它搞定。搞定之后,咱们最后的调参对吧?现在咱们就开始先不用考虑这个参数。怎么调啊?我们先把这个具体的计算逻辑先给它写了啊呃来吧,这边因为PID计算呢其实是一个相对来讲比较独立的操作。呃,而且我们将来啊就是在哪儿呢?将来在咱的那个就是呃这个这个算定高的时候,定高同学是不是也要做PID的计算呀,对吧?所以咱这样,我们最好把这个PID的计算逻辑呢,我们给它提到哪一层?COM层这样一来是不是作为一个公用的算法去使用啊,对吧?所以在这儿呢,我们新建一个目录叫做PID。好,里边呢咱新建两个文件啊,一个是COM,后边我们跟上PID点HCTRLACTRLC。好,我们再来一个COM的PID点c哎,好了,就是这两个啊,来我们先在点h里边,声明一个这个头文件啊。好了,接下来咱们要做的工作呢,就是在这里边去实现这个PID计算的这个这个思路了啊,同学怎么去算这个所谓的PID啊,同学先定一个方法,咱们就叫做CUIvoid,后边跟成一个啥呢?
CUMPID后边cuculate对吧?CAL呃CAL呃CULATcalculate计算没问题吧,各位啊一下就给咱们传了这么多参数啊。呃,其实想想也是你正常用PID算的话呃,给好多东西吧。至少我PID是不是有仨参数的同学,那我还得有什么,比如什么期望值啊?呃,我的这个就是测量值啊,这些东西是不是都都得作为PID计算的这个参数啊,对吧?所以非常多啊,咱这样咱就咱就咱就稍微的那啥一点,稍微简化一点。我们把那个PID所有的参数,我们一会儿都给它封装到一个什么里边,咱们都封到一个结构体,直接传到结构体就完事儿了。
要不然这个就太乱了,这个方法来吧。那现在我们就先想一想,咱这个PID里边应该有哪些参数?呃,这样我我这个结构体结构体这个类型呢,一会儿我们还是给它放在types里边啊,但是为了方便呢,我方便,大家看我就先在这儿定义,一会儿咱们再给它挪过去啊,typedey一个咱们叫做STRUCTstruack的,对不对?好,完了之后,咱给它起个名字就叫做PID,是不是struack呀?对吧?来吧,那咱就想一想,这里边咱都应该有哪些参数?就是在算PID的时候,算PID的事儿来吧,同学咱们照着这个照着这个结构图去说啊,你看啊,我们在算这个PID的时候,到底都需要哪些东西。呃,首先第一个同学目标值咱得是是是得有目标之类有吧,对不对?ok第二一个是什么测量值,是不是咱得有啊,对吧?你要是这俩都没有,你压根儿没法算,对不对?好,那完事之后呢,我是不是就可以根据这个再根据这个就能得到啥,是不是就能得到那个误差了呀,对吧?啊哦,误差需要作为一个参数吗?其实不需要有它俩是不是就能得到误差,对不对?所以这是一个参数,这是一个参数,这个也没啥问题。好了,那接下来里边是不是就是咱那个PID的计算逻辑了呀,对吧?好,那PID里边,我是不是分成这样三个部分,比例部分积分部分,还有微分部分,对吧?每个部分是不是都有一个它们自己的系数,对吧?这个系数,那我们是不是也应当算做?呃,咱们这个PID里边的一个,你可以列为一个参数了。但是将来我们调PID是不是说白了就是调这这三部分那个系数啊,同学OK好了,那所以这仨系数我们也作为三个参数啊,三个参数OK好,那还需不需要其他的呃顶多顶多在需要其他的是不是需要一个啥呀?是不是需要一个第七啊,同学,因为你算积分的话,以及你算微分的话,是不是都需要用到DT对不对啊?
ok好,那地t是不是就是咱们那个说白了,就是那个采样的周期啊,相当于对不对?OK好了,那其实基本上就是这些东西啊,所以现在呢我先把这几个值,咱们都给它定义出来啊,来我们先定一个float呃,注意咱们这个所有东西咱们都用用浮点数计算。PID算是比较精确的一个计算吧。对吧啊OK好,所以这边我们先把这仨参数下系数给它定义出来啊。KP然后呢后边我们再来一个floatKI对吧?PID呃再来一个KD这就是咱们那个三部分的系数啊,同学将来调咱们调的就是它调就是它啊。OK好,接下来往下进行,我们还需要用到什么来着?哎,是不是还需要用到error,是不需要的,ever咱们自己算就就行,对不对?首先一个是期望值,期望值呢,我们可以叫做target,或者也可以叫做setpoint一些这个学术资料上面管它叫做setpoint吧,setpoint是不是?就是你的设定值啊,对吧?说白了也就是目标值,或者说也有管它叫做期望值的,也就是desire的value,或者我们简写一下,就就来一个desire就行了。
DESILE对吧?desire,这是咱们的期望值。说白了,就是啊我我我我注释一下,嗯,呃应该是咱的期望值或者叫做目标值吧。那这个调一下数法目标值。哎,好了,那接下来往下进行下边再有就是啥了,是不是得有一个当前的测量值啊,对吧?这个是非常关键的对吧?测量值marryvaluemeasure的value嘛,这个我们就直接写一个measure就行了啊,刚个叫做测量值好,直接让它提示。行了。那有了这些之后,我们想想还要不要其他的内容啊,刚才提到了,是不是还需要用到一个DT啊,对吧?
呃,这个DT我就不往里封装了啊,这个东西一会儿咱们作为一个单独的参数去去去去整嘛。就是DT跟我这个PID其实关系不是很大嘛,对吧?啊,来吧,那接来我们往下走,下边咱们还要放个什么东西。其实我们在做PID计算的时候,其实是有一些中间变量需要记录下来的。比如说举个例子,我们在算谁的时候啊,同学我们去算这个来看这张图,咱们去算。比如说这个积分部分的时候,同学你想想积分积分,你是不是得从开始到现在一直对这个误差进行累积啊,同学对不对?ok好,那所以你每次去做这个PID计算的时候,是不是得拿到截止到上一次的这个误差的总和,是不说我们最好把谁给它记下来,同学是不是这个误差总和给它记下来呀,对吧?这样一来我每掉一次,咱们这个方法我都能拿到上一个,再加上当前这个就完事了。所以这里边我们把谁也放在里边呢,把这样的你可以理解为是一些状态变量啊,我们也给它放在这儿,也就是谁。我们刚才提到了一个是不是累加累加的一个值啊,对吧?或者说我们就直接管它叫做什么FLOATOAT咱们叫做什么呢?咱就直接管它叫做积分integraal对吧?INTEJRAIO,这个是误差积分。哎,ok好,这个应该能想明白,对吧?好,那我还需要记住哪些这个状态变量呢?比如说同学上一次的误差,咱们要不要记药剂,对吧?因为前面咱们分析了,就是我算那个所谓的积分部分的时候,其实算的是什么来着?是算的,是不是就是那个所谓的误差变化率啊?对吧?误差变化率是不是用当前误差减去上一次误差,再除以一个DT就行了呀,对不对?那所以说上一次的误差,咱最好也给它记录下来,叫做lastever。这个呢咱写上叫做上一次的这个误差行,基本上啊就是需要这些吧,一会儿咱们多了呃,再删少了再补啊,就是这么一个逻辑。行了。那完了之后,我们在做这个PID计算的时候呢,呃直接就让他把这个PID的结构体给咱传进来就完事儿了啊。
来,那现在让它传一下啊。首先这边我们声明一个是不是PIDstruck这样一个参数啊,对吧?然后PID给它传进来传指针就行。好,完了之后,刚才也提到了,我是不是还需要用到一个额外的一个呃DT啊,对吧?DT我们也用float同学float。DT哎好了,当然你要是觉得哎,我把这个DT也放在这个结构体,其实也行也行,但是我还是觉得给它单独拎出来比较合适。好,接下来咱们往下走,下边咱就可以去实现一下。就是这个PID计算的逻辑了啊,大家要注意就是这个方后,我是不是将来它也要怎么着,也要循环,不断的被调用,对不对?是不是在我们当前的这个任务当中,是不是一次一次的去被调用了,对吧?哎,这个事儿大家要想明白啊呃好了,接下来咱们往下进行了,各位开始算这个所谓的PIE了,怎么算呀?比如说现在有一次来调你这个方法了,那我应该怎么着?首先别的不说同学,我应该先计算什么?当前的误差误差是不是我PID计算的,是不是相当于你可以理解为是唯一的输入吧。你看就是我看这个图就能看出来,你给到PID控制器的,是不是就是误差值啊,对吧?每次都要把误差给它啊。好,所以误差。咱们首先需要拿到那误差怎么算呀?误差误差。大家想想,我这定义个FLTfloatERROR它应该等于什么?是不是应该等于我们的测量值值去去那个期望值啊,对吧?哎,所以应该是PID结构体里边我们是不是有一个测量值叫做measure对对吧?好,完了之后减去谁减去,是不是desire?哎,这样一来是不是每次掉它都能拿到到,是不是最新当前的这个误差呀?这个先搞定好,接下来咱们还要算什么?第二部分还要做什么?接下来要算的是不是就是各项了呀,对吧?你就得算呃积分部分,比例部分是不是还有微分部分呀,对不对?呃,ok好,那比例部分怎么算同去比例部分其实很好算,就直接用谁用这个error,是不是乘以你这个PID里边的这个KP的系数就行了呀,这是不是得到的?就是比例部分。哎,OK好了,那这个好说一会儿咱们最终再进行呃,最终计算的时候再说吧。啊,ok好,那我们先先做好准备。那我现在加一想想,我要想算这个积分部分,你说我应该怎么算积分部分,想算积分部分,怎么算?是不是应该用截止到上一次的那个积分的值,再加上我当前的这次误差的这个积分,这这个值啊,这不就是是不是积分部分啊,对吧?然后是不是还得再乘以一个谁,是不是再乘以一个那个积分部分的系数,那就得到了积分部分了,应该是这么个思路。所以我们现在呢还是先做准备,先给积分部分去做准备啊,咱们那给他做准备应该算什么呢?是不是应该是计算一个是不是积分呢?对吧?计算误差积分啊,误差积分,这个叫做计算当前误差啊呃当前误差OK。
好,那误差积分到底咋算呢?是不是应该用PID里边的谁yntgraal?这是不是截止到上一次的误差积分呀,对不对?再加上谁?各位,是不是加上我们当前的这个误差,当然积分积分是不是我们还得乘以一个谁,是不是乘以一个DT呀,对吧?
哎,好了,那这样一来是不是就是我最新的这个误差积分了呀,没没问题吧,同学就这么个逻辑啊。好了哎,好,那当然呢我们这个正常,你算完之后,你还得把这个值一会还得怎么着,是不是还得附到我们这个PID结构体里边的这个积分上面了,对吧?为啥是不是将来你你你还得干啥呢?同学,你将来是不是还下一次你还得算呀,对吧?下一次你是不是还是同样的这个逻辑啊,对吧?就是这么一个思路啊,同学那也就是说目前这里边得到的是不是就是我当前最新的误差积分了,同学唉,好能能能能跟上这个逻辑吧。唉,好,这个就完事儿了啊,能能能懂吗?这块同学嗯OK行,要不懂的话就说啊。好,那接下来我往下走,这是计计算误差积分。那再往下我接下来要干啥,是不是得给那个就是微分部分做准备了同学。所以这边我应该计算什么?所谓的误差微分,其实说白了就是误差的什么东西,是不是应该是变化率啊,各位同学对不对?ok好,那接下来我们看看这个变化率应该怎么算变化率,其实就是这个单词叫做derivative。DERIVATIVE这就是那个所谓的PID里边那个d那个单词啊,这个d其实就是derive我们直译过来,其实应该是导数的意思,对不对?但其实本质上就是变化率啊。好了,变化率怎么算?是不是就是用当前误差减去上一次的误差,除以一个DT这不就是那个斜率变化率吗?同学应应应该能想明白,对吧?就是你正常情况下,你这误差,假如说是这么变化的,这是你上一次的误差值,这是你这次的误差值。好,那我这个斜率是多少呢?本次的减去上次的对吧?再除以是不是我这个DT时间得到的就是变化率了呀,对吧?就是这个思路啊,其实不难啊。好,所以接下来往下走,应该怎么着呢?是不是咱们就叫FLOAT就直接这么写就行人写的没毛病啊OK好,注意观察这个是什么?呃,我们生命的变化率嘛,对吧?这是当前误差,我刚算出来的这是不是我记录的上一次的误差,再除以一个DT啊,对吧?好,那大家大家想想,你说这个算完之后,我们必须得怎么着,你是不是得把当前误差记载到这个PID结构体里边的lasterror里边啊,对吧?这样一来,下次算是不是才能够呃,算出来呀,对吧?这个一定要注意啊。行了,这就是我们这个给PID去做这个准备工作的时候,需要做的三项事啊,三个事儿啊,完事事了,对不对?所以接下来大家要做的工作应该就是什么?是是不就是综合上述所有内容去得到一个最终的PID的结果呀,对吧?好,那应该怎么算同学?首先我们先看积分部分,应该呃就是呃比例部分应该怎么算啊?
比例部分是不是直接用PID里边的谁KD呃KP对吧?p就是那个就是那个比例的那个单词的首字母吧,对吧?它应该乘以谁?各位,它是不是乘以error这得到的,是不是就是咱们PID里边那个比例部分,对不对?好,接下来呢我们再算谁再算积分部分?那积分部分应该用用谁跟谁接近相乘乘是不是应该也是用PID里边咱们哪个系数是不是应该是KI这个系数去乘以谁乘以我们得到的是不是误差积分呀,对吧?是不是也就是发生序,它是不是乘以它?那这个是不是就完事了?哎,好了,继续往下进行,还得再加上所谓的微分部分,微分部分是不是就用PID里边咱们定义的那个谁哪个参数,应该是KD这个系数,对吧?乘以谁乘以我们刚刚算出来的,是不是当前的这个误差的变化率啊,你给它那这样一来是不是咱就得到了PID的最最终的计算结果来呀,其实就是这么一回事儿,每轮循环都要去执行这个操作,每轮循环都要执行这个操作。好,是它们仨加一起的,和就是咱们PID的输出结果。所以PID这个算法其实并不难,理解难难在哪呢?难是不是难在咱这三个参数到底怎么调上啊,对吧?我这个给多少这个给多少,这个到底给多少,这个其实没啥好办法,就是只能是咱们调。根据我们最终的结果是怎么试呢?举个例子,简单的一个思路,就是比比如先给个一看行不行?不行的话,给个十,对不对?给个十,如果这个出现了这个超调了,超调了之后说明给大了,对吧?给大之后怎么着?那给小点呗,一十取一个中间值,对吧?给五然后再看效果,对不对?然后不行的话,哎,你可能给个三或者给个七,对吧?你只能是这么一点一点去试了,这就是咱们的一个核心思路,一会儿咱们再演示啊。行,这就是PID的计算逻辑了。那一会儿同学想想这个结果我给它放哪儿了,结果两种思路,要么你return出去,或者说呢咱也像之前一样啊,我在这里边我再加一项呗,对吧?我来个啥呢?我来一个float是不是output呀,对吧?咱就直接把最终的结果是不是给它写在output里边就行了呀,对吧?所以将来我们在用PID的时候,只需要直接声明一个PID结构体的变量,那就能够把所有的参数都包含在里边了啊,就不用再额外的去声明这个输出的这个变量了啊,行了。那所以接下来单这就怎么着,我是不是应该是把这个最终的计算结果赋值到我刚刚定义的这个output这个属性上了,对吧?每次计算完之后,咱们就直接从这个PID的output属性拿这个结果是不是就OK了?同学这就是咱们最终的PID的计算逻辑了啊,整体思路呢其实并不复杂啊,并不复杂啊。行,我停一下这个。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

07-无人机-飞控任务-PID-串级PID代码编写

07-无人机-飞控任务-PID-串级PID代码编写好了,各位同学。那接下来呢呃需要给大家说一下,就是咱这个项目当中所采用的这个PID控制性方案啊,我们采用的是一种叫做串级PID的这样的一个控制方案,啥叫串级的?其实其实这个就是还是英文翻译的问题啊,其实它原本的那个英文叫做castadatecastadate。其实就有就有什么呀,就有这个所谓的这个叫这叫什么啊?呃,你可以理解是嵌套啊或者是级联能力。
一个块的同学它是有这样的一层意思啊。但是我们英文翻译过来呢,就把把它翻译成了串级PID。其实大家可以看一看,就是我们当前的这个图啊呃具体含义你先不用懂,你至少能知道这里边应该是涉及到了一个嵌套对吧?是不是涉及到一个嵌套关系啊,对吧?哎,OK这就是它的这个所谓的串级的意思啊,就是有级联有这个串呃,就是嵌套的意思。好,那所以接下来咱们看看就是它的这个PID控制系统到底是怎么做的啊?呃,注意观察的同学,你会发现这个所谓的串级PID控制系统里边一共有几个PID控控制器。同学有两个,一个是咱们所谓的是不是角度控制器啊,还有一个是啥?
这是一个角速度,控制器角度,加角速度。哎,OK这样的两极。哎,完了之后呢呃他是怎么去工作的呢?我们先来梳理一下同学,然后我再给大家分析这么做的好处啊。你注意观察他这个流程图是什么样的,它是这样的啊。首先我们控制的终极目标应该是什么东西?咱们控制的肯定是角度对吧?同学终极目标肯定是角度,我因为我要让它保持平衡,是不应该是这几个角度等于零啊,对不对?我其实我们本质上不是想控制角速度,我们就是想控制角度。唉,这一点大家先理解了。好了,完了之后呢,注意观察同学。那你要是想控制角度的话,那按照我们这个PID的逻辑,你是不是得有一个角度控制器啊,对吧?那这个角度控制器,那它接收的这个应值应该是什么呢?
是不是应该是我们角度的目标值,以及角度的测量值啊,对吧?然后呢,我们去计算一个角度的误差,然后给到这个角度的PID控制器,也就是说白了是不是调谁调,我们刚刚的是不是这个算法了,对吧?唉,ok好,那完了之后呢,往下进行。那正常你要是按照单环PID的这个控制思想啊,你的角度度角度的输出应该直接作用到谁?同学是不是直接作用到无人机直接作用到咱们那个电机上啊能能理解这个事同学。然后呢,他就会根据我这个偏移的角度去调整电机的输出来,是不是纠正咱们这个角度的误差呀,对吧?这是单环儿的思想,但是你再看他这个所谓的串级PID的这这这个这个流程图里边他干啥了啊?他并没有直接把角度控制器的输出给到谁,并没有直接给到咱们这个无人机,它给到谁了,他是不是给到了另一个PID系统啊,对不对?ok好了,你会发现它实际上是把所谓的外环啊这个分内外环的啊,因为它嵌套的嘛,这是咱们管它叫做内环啊,外边这个叫做叫叫叫做外环啊。好,那它实际上是把外环这个PID的输出作为了谁的同学,是不是作为了内环PID的是不是输入了呀,对吧?所谓内环PID的输入,也就是作为了谁了?
作为了它的目标角速度了啊,ok把外环儿输出。作为了内环的输入啊,ok好了,也就是说白了什么意思呢?你原来这个单环PID你是直接让谁直接让你的这个角速度控制器的输出去控制电机了,对不对?同学,而现在咱们是让角速度控制器的输出去控制谁了?去控制角速度了,你没让他直接去控制电机的转速。其实就是这么个意思,同学能理解这个事儿吧。同学哎,好了,那接下来我们往下进行,你再看一看就是内环PID它是怎么做的啊?ok它是不是收到了一个目标的角速度啊,对吧?那内环PID的逻辑就简单了,它只需要怎么着?是不是根据我得到的目标角速度以及什么,以及它直接通过这个传感器测得的角速,这个是不是能直接测得角速度啊?对吧?好,去计算一下,我距离目标角速度的误差好了。那完了之后,内环PID它要做的事儿,是不是就是保证这个目标角处在谁?是不是就在我们这个目标的角速度上就行了呀,对吧?他是分成了这样的两步走啥意思?OOK环PID根据我的目度度速差好,输出一个我的目标角速度好,然后目标角速度由谁来达成,是不是由内环?PID来达成啊,对吧?哎,它负责去实现你的目标角速度。当然,它怎么去实现目标角速度呢?是不是也是要靠什么呀?调整是不是咱们这个电机的转速啊,对吧?呃,是这么一个思路啊,同学好,这就是所谓的串机PID的一个结构。好,那接下来咱们来分析分析啊,就是它具体是怎么工作的,完了之后它到底有什么好处?咱们呃从这个角度来看啊,比如说同学,假如我目前啊同学,我目前这个无人机现在处在一个平稳的状态,现在就很平稳很平稳。大家想想啊,我的目外环啊,外环的目标角度,咱们要想让它平稳,是不是目标就应该是零啊,对不对?那你现在本身就是平稳的,所以我目前测得的这个角度也应该是什么?也应该是零,也应该是零的话,那我的角度误差是不是也应该就是零啊,所以这时候我的角度控制器,它期望的角速度当然说应该是什么?就是零吧,对吧?因为我现在本身就是稳定的,我不希望它有角速度,是不是应该就应该让这个角速度维持在零能理解是吧?所以他期望的角速度就是零。好,也就是说我那会儿PID它的目标值是不就是零啊,对吧?目标值是零,ok好计往下进行。那它正常是不是会实时的去测量当前的角速度啊,对吧?唉,发现它自己目前测的角速度就是啥?就是零就是零的话,那角速度误差是不是也就是零啊,对不对?所以这个时候其实PID系统对这个无人机其实没什么输出,无人机纯靠谁顶着,是不是靠咱们那个油门顶着呀,对吧?说明现在就是一个平稳的状态,大家能理解这个事儿吧。哎,好了,这是他现在正常工作的一个状态,这套思路应该是顺的,对不对?好,假如说各位同学,现在我们的无人机啊平稳的飞行受到了一个干扰。比如说来了一阵风,你给他吹了一下,哎,偏了一下,只要他一偏各位同学是不是现在就会出现各种误差。现在PID是不是应该介入了呀,对吧?好,那现在咱们对比这绍同学,对于我们上边的这种单环PID的这个逻辑啊,你想想我什么时候才会去纠正咱们这个问PPID什时候才会真正的介入。因为你现在单会儿是不是只监测这个角度的误差呀,是不是一定得等你这个角度得出现了一定的偏移之后,那是不是咱们这儿这个角度误差才会感知到啊?对吧?感知到PID是不是才会输出才会去介入,控制咱们这个无人机能理解啊,这个事儿同学我这儿用一个成语来说一下这事儿风吹草动,你得草动了之后,我这儿是不是能感感到到同学刚呃,他是不是才会去进行调整,才会进行纠正啊,对不对?这是单环的一个处理的逻辑。你再看一看他这个双环是什么样的?哎,大家思考一下啊,目前我现在是正常的稳定的工作,对不对?现在来了一阵风,来了一阵风之后,首先同学角速度和角度,理论上是不是都会变。因为我要偏的话,我肯定得有角速度,对吧?角速度有了之后,是不是肯定会有角度的一个偏移啊,对吧?好,那我问一下大家,你说是角速角速度的变化,先被侦测到还是角度的变化,先被侦测到那一定是角速度啊,对不对?ok其实咱们从这个数学上来讲,你也能想明白,你角度其实应该是怎么来的,是角速度积分得到的,对不对?对不对?角速度沿时间积分,我才能得到角度。所以说你从这个响应速度上来讲,是不是一定是角速度的变化,会优先被探察到了,对吧?也就是啥意思呢?风吹草动,我这个还没动呢,我我可能刚要动是不是就会有一点点这个速度啊,对吧?刚有一点速度,也就是风一吹,我就不到这个草动多少?那我这儿是不是就已经感知到了,对吧?这个得草动了才行,这个当然也得草动啊,但是动的很小一点点,它有速度就行,不一定有多大的角度,大家能理解这个事儿吧,就好比你这个百米冲刺啊。ok我一起步,我速度是不是就飞快,对不对?好,但是你这个跑的这个距离你是不是得跑一会儿才能有距离啊?就是这个意思啊。ok好,所以说角速度会很快的就被侦测到啊,就是角速度,现在有误差了。好,只要测得的角速度有误差了。那大家想一想,你说我这个内环的PID是不是就直接就介入了呀?我不用等我这个真的偏移了,多少度之后再去介入啊。我这个只要有一个角速度了,那我这儿p内部的PID就已经开始介入了,对吧?因为你角速度,因为我目前期望的角度是零嘛,对不对?好,那现在呢我测得了一个较较大的一个就是角呃角速度一个误差。好,这个时候那会的PID就开始介入去控制这个电极的转速了。唉,好了,那他它现在会期望调这个这个个角速度变成多少啊,是不是还是往零那个方向去调啊,对吧?往零调,那就意味着什么?同学往零条就意味着什么?是不是意味着让这个飞机是不是固定下来,稳定下来呀,对不对?
ok好,那如果说同学我这次的干扰很小,如果我的干扰很小,它甚至都能怎么着呢?可能都惊扰不到这个外环的PID可能光靠那会儿就已经把这事儿给搞定了。如果干扰很小,也就是说呃我这儿来了一个很小的干扰,对不对?就是力很小嘛,对不对?
好,我这儿刚有一个角速度,我通过那会儿就已经把它怎么着了,就已经把它纠正过来了,我六毫秒,我就已经把它纠正过来了。
纠正过来之后说白了啊,就是你下次再测我这个姿态结算完之后,我测得的角度,我这个角度误差可能就没有压根就没出现,或者是很小很小很小能理解这个是吧?
同学也就是外环PID可能都用不上,我那环儿就已经给你搞定了。
这就是使用这个所谓的串级PID带来的好处。通过刚才咱们举的这个例子,你应该能想象得到啊,就是内环PID它实际上更怎么着同学,呃,或者说就是呃串级PID要比这个单环PID要更怎么着响应的,是不是要更加的迅速啊,对吧?因为因为这个你必须得等我转过一定角度之后,对吧?我的系统才能感知到,你出现偏差了,我才能去纠正。而你下边这个呢我不用,等到就是你出现角度,你只要有角速度了,我就已经开始介入,开始调整这个电机转速。哎,所以它的呃呃这个响应速度要更快。那它的什么呢?它的这个所谓的就是抗干扰能力要更强一点,轻微的干扰,对它来讲都不是事儿,直接就调整好了。哎,这就是所谓的串级PID哎,好了,然后呃再明确两个概念啊,关于这个内环,我们管它叫做什么,那叫做这叫啥呀?这叫呃就是里边那个我们叫做内环PID外边这个呢我们叫做外环PID因为它确实是很形象嘛,两个环嘛,对不对?
同学好了,这就是所谓的串级PID它的一个思想啊,实际上这个串级PID啊,它的内外环怎么去选择?其实有一些固定的搭配的啊,一百这个怎么选的?你比如说如果我外环我控制是角度,那那会儿咱们就可以选什么呀?可以选角速度,对吧?如果我外环我控制的是高度,那我那会儿我就可以选什么呢?是不是就是垂直方向的速度啊,对不对?ok好,那再比如我这边外环,我控制的是距离,对不对?那我那会儿我就可以设置成什么呢?是不是就是水平方向的一个速度啊,对吧?哎,是这样的啊OK也就是说它是有这样的一个对应关系的。哎,串机PID它的其实有一些固定的搭配的啊,是这样的。好了,同学。那所以现在呢大家应该知道就是这个串机PID它到底它的优势体现在什么地方了,就是响应速度非常非常的快啊。好,那这样一来他俩配合就能够保证咱们这个飞机能够更快的就是应对这个干扰了,就是这么一思思路啊。好,那同学想一想啊,我现在要想算这个所谓谓串机PID的话,其实说白了,我就是得每次算PID我都得做两次,是不是计算呀,对吧?先大家说先算谁,你是先算外边还还是算算里边了,肯定得先算外边的,为啥?因为外边的输出是才是里边儿的输入啊,对吧?你是不是得先把外边算完了之后,是不是再算里边了,对吧?它是这么一个思路啊?好,所以说大家想想咱们这个代码要写的话,那应该怎么写呢?这边我们先把这个方法定下来啊,咱们叫做CIM,后边跟着一个PID咱们叫做啥呢?级联啊就是castcake,这就是咱们那个所谓的它的一个逻辑啊。好,大家想想你们这块我们应该怎么着,应该怎么算,是不是得来俩PID的这个结构体啊,对吧?哎,然后一个代表外核的一个代表内环的,然后我先算外边外边算完之后呢,把它的输出是不是给到那里边作为里边的什么呀?是不是那个期望值啊,对吧?哎,然后呢,我是不是再去算那会儿的这个PID啊,应该是这么一个思路啊,这个大家一定要注意啊。行,那现在呢我们就一起来看一看这块的一个具体的处理逻辑啊,呃应该怎么着呃,参数呢?这回就得俩参数了,我把这个给它拿过来。呃,三个参数来算上DT对不对?一个我叫做外核的PID,咱们就叫做outer了。OUTER啊。好,那同理,我里边呢,我我是不是还有有有一个所谓的给怎么没了?呃,是不是还得有一个inner啊,对吧?
OK拿过来这边呢,我们成INNERR那啊OK好了,那再往下呢,那个谁谁不能丢啊,同学这儿少个逗号,那个那个float那个DT是不是不能丢啊,对吧?这个也得有啊。OK好DT拿过来。DT哎好了,那这样一来的话呢,我们这个函数就算定义好了,定义好了之后具体怎么算啊?我们应该是先拿到,是不是它去算一下,谁算一下这个所谓的外环的PID我们把这个outer给它放进来。OUTR好完之后呢,DT是不是也要转进去同学?哎,好了,那这个算完了之后,那同学y环的结果是不是就算出来了?结果算出来之后,那是不是应该是在它的那个PID点out里边存着呀,对吧?好,那所以我应该把它取出来PID点应该是outer对吧?点点这个ououtput对不对?把它取出来,取出来之后,你应该怎么着呢?把它赋值给谁同学,是不是赋值给inner作为inner的什么那个输入,所谓的输入,其实就是那个期望值,对不对?
同学inner点应该是desire等于谁呢?是不是等于咱们这个alter的altt呀,对吧?赋给它完了之后再去算内环了,哎,应该是这么一个思路。哎,好了,那这样一来就能得到咱们最终的这个内环的输出了。好,那最终最终大家想想直接作用到我们那个电机上的,你说应该是内环的输出,还是外环的输出啊?看这个图应该是是不是那个内环的输出啊,应该是这么一个逻辑啊。ok好,内环儿的输出最终去控制咱们这个无人机,哎,是这么一个思路啊。好了,同学,那这就是咱这个所谓的串级PID的计算逻辑了啊。ok好,那接下来呢,我把这个视频停一下啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

08-无人机-飞控任务-PID-计算结果作用到电机转速-思路分析

08-无人机-飞控任务-PID-计算结果作用到电机转速-思路分析嗯,好,接下来同学我们进入下一个环节,咱们现在要做的事儿,就是把我们现在的这个PID的计算逻辑给它真正的应用到我们这个非控任务上啊,来吧,同学非控任务在哪儿,是不是应该是在这个位置啊,对吧?好,那现在注意观察,我现在读到了六招数据了,角度也得到了。接下来在这个地方,咱是不是就要开始计算这个PID了呀,对吧?好,我先写一下啊,应该是第三步,这应该是什么姿态控制的PID进行计计算啊,姿态PID这个计算计算。好,那计算完了之后,那同样是不是也要把那个结果是不是作用到咱那个电机压电机上面了,对吧?这时候就是形成闭环的各位同学。哎,好,所以这边为了跟前边保持对称,我们这个姿态PID计算呢,我们也怎么着呢?也在这个APP层,咱也去声明一个这个方法啊。好,这边我叫做word,后边来一个APP下划线啊,呃后边呢叫做FLIGHT哎注意啊,我这边跟后边区分一下,因为咱们除了有姿态的PID要算我们将来是不是得算一个高度的PID啊,对吧?所以这边呢我们区分一下啊,姿态,咱们叫做OTQ的ATTITUDE姿态PID哎好了,这就是我们现在要呃声明的一个方法。好,那大家现在想想啊,你说在这个里边,我们算的时候,我们要传入哪些参数算这个PID我们要调入哪些词?大家琢磨琢磨啊,就是这里边咱们一会儿肯定是要调谁,是不是调我们刚才写的那个PID的那个那个那个那个方法呀,对吧?啊,但是你算那俩PID它需要什么参数这个事儿,咱得想明白啊,各位也就是说一会儿在哪儿呢?在这个位置去调咱们那个方法的时候,你得给他把什么传进去,咱们是两环PID对不对?两环,你看啊,我们两环一个是控制角度的外环,是不是控制角度啊,对吧?那环儿是不是控制角速度啊?对不对?ok好,那所以说角度的测量值我是不是得有,但角速度的测量值,我是不是也得有对不对?所以说我要给他传参的话,是不是这俩都得给他传进去,各位同学嗯,没没没错了吧。好好,那除此外我们们在算PI的时候,是是不是需要用到一个DT所以这个DT是不是咱也得给它传呀?所以这儿我至少目前能想到的是不是得有这三个参数?对吧?好,所以接下来呢我们就把这仨参数呢都给它声明过来,其实跟上面那个是不是应该是有点类似的呀,对吧?好,直接CTRLC复制过来,完了之后给它放进去。好,这样一来咱们这个参数就算是定义好了啊,定义好了之后,接下来咱要做的就是开始计算了,拜拜咱们开始算了。同学。呃,大家要知道的是,我们现在要控制的角度有几个?各位三个三个角度,是不是咱们单独控制啊,对不对?所以我现在这个所谓的双环PID我得来几套是不是得三套啊,对吧?我一套控制一个角度,比如说我这一套是控制那个俯仰角的,比如说控制那个PITP式的对吧?我还得再来一套控制谁控制肉?对不对?还得再来一套,是不是控制那个YAW也就是那个偏航角啊,对吧?也是这个这个所谓的呃串级PIT我得来三套一套控制一个角度,这个东西没法融合在一起。就举个例子,有同学说,唉,我我就来一套来一套,你这个目标值咋给的?同学,我一个PID是不是只能有一个目标值啊,你不能把仨角度都扔到里边,能理解这个事吧。同学,所以说我得来三套PID这一点大家要注意啊。好,所以接下来呢咱们就来分别去写一下啊。首先第一个我应该是谁的,比如说是俯仰角的这个PID这个计算啊,俯仰角。那完了之后呢,我还得来,谁是不是还得来咱们那个就是比如说横滚角,对吧?横滚这输入法换一下啊。呃,横滚脚横滚角。好,那还得来一个啥,是不是就咱那个偏行表来,对吧?那填一下偏行角。哎,好,这仨角我得分别进行计算啊,没没问题吧。哎,好了,那继续往下进行同学。比如说我现在呢先算俯仰角的PID那咱们应该调哪个方法是不应该调那个串级PID的方法了,对吧?好,那现在呢我得把那个引进来,我现在引进来,一会儿大家就知道咋回事了啊,来引引到我们刚才那个是不是PID点的一百零h啊,对吧?拿过来好,接下来我们写这个相关的逻辑啊,先算俯仰角的这个串级PID那我们要调应该调,谁是不应该调CRM后边变成一个啥,是不是呃,PID应该是级联啊,对吧?
但是我那个个级连我是不是没有那啥,我没有给它是不是串级声明,咱咱们声明一下,串建声明好,没问题。
好,回回到这边来啊,回回到这边来之后呢,这边咱不调这个cover类的,这个是不是进行单环计算了,对吧?好,我现在调csk的,我进行双环计算。好,那按照我们前面定义义双环算吧。哎,好了,那给它传入两个这个PID的结构,d一个是外环的,一个是内环的对吧?
同学好,那现在问一下大家,对于俯仰角来讲,那我们的这俩PID应该都是什么样的?其实重点就是他们的期望值啊,就是他们的期望值和测量值都是谁呢?
没搞清楚你想关于对于俯仰角来讲,大家想想我的外环外环是不是控制角度啊?同学们,那我控制的是不是肯定是那个俯仰角,这个没啥可说的,关键是内环,它的角速度,你应该控制谁的角速度?这个时候咱得想明白,同学外环控制角度,内环控制角速度。我现在以俯仰角为例啊,同学那所以你给他传的这个角度的这个目标值应该是谁?
应该是咱那个俯仰角度目标值,对吧?哎,好,那关键是他的目标角速度,那应该控制谁呢?对吧?一会儿你是不得给他传一个这个目标角速度的一个测量值啊,对吧?
那应该是谁的角速度呢?您就想想哪个角速度会影响到我的俯仰角啊,应该是沿什么轴旋转的那个角速度啊来看一下这个图啊,同学给大家看一眼,这个事儿一定要捋清楚啊。好,注意现在这是机头,机头,现在是朝大家啊。好,那注意观察同学,我现在俯仰运动是不是应该是这么多,对不对?OK那所以你想想呃哪个角度是跟俯仰角相关,是不不应该我这个是x轴,咱们之前看了,对吧?这是y轴,对不对?所以应该是沿y轴的,是不是这个角速度是跟俯仰角是相相,对于它俩是一套的呀,对吧?哎,OK所以这个事一定要想明白啊。好,那所以接下来咱们要做的工作呢,就是去声明这儿是不是需要两个这个结构体啊,对吧?我们就声明两个结构体,我们直接放在上边的往上边。哎,这个是咱们的这个结构体啊,应该是PID的结构体啊。当然这个咱是也得声明,一共得声明,几个大家想想是不是得六个呀,对吧?你是不是每一个角度我都需要内外环,是不是两个PID两个PID是不是需要两个结构体?我一共三个角度,所以一共是需要六个啊。好,那结构体我现在先声明这个还是俯仰角的俯仰角。好,那按照我们刚才所说的啊,首先我们来一个PID是不是struact了呀,对吧?先来一个PID俯仰角俯仰角是不是应该是p十啊,对吧?PIDCH啊OK好,那完之后呢,它应该是不是等于我们这块其实可以给它赋一个初始值啊。
呃,其实初始值呢,别的我们都用默认值就行。但是谁这块儿咱们给它额外的声明一下呢,咱把那三个系数PID这仨系数,咱们给它声明一下,为什么要声明它啊?因为将来咱们调是不是就是调这几个系数啊,对吧?所以一会儿调,我们直接改这块就行了,这个比较方便啊。
好,那目目前我们先先先不写,因为写了之后,它是不是一会儿直接就作用上了呀?对吧?我们先给零啊,先给零啊,先不让它作用,一会儿咱们再慢慢的给它调啊。
那注意这个我们都得给什么数,是不是咱们都给它浮点数啊,对吧?啊,这样保持了肯定没问题啊,这是p然后呢再来一个KK什么KI对吧?呃,这个呢我们也是让它等于零点零哎就可以了。然后呢,再来一个KAD是不是就行了?KD呃点点啊点KD呃,等于是不是也是零点这个零f啊,对吧?p这边我们往后走走行了,其他那几个的全用默认值就行,都是零就行了。好了,那其实这个也也是零,但是一会儿为了方便,我们调嘛,对吧?哎PID这个没写错吧。好了,这是俯仰角的外环的,对不对?那按照我们刚才的分析,它俯仰角的内环儿,它应该控制的是谁?是不是们再来旋转那个角速度,对不对?所以这边呢我们来一个PID角速度是不是?JYYO对对吧?后边我们来一个啥,来一个后缀来一个y吧。好了,它是不是也需要这样的几个参数啊,对不对?那我们现在也都先给零各位同学好,这个没啥问题吧。哎,好了啊,那这样一来我们就搞定这个事儿了啊,那接下来我们要做的工作是啥呢?是不就是在计算咱们这个PID的时候,是不是把这结构体给它传进来呀,对吧?
但是在传之前,大家一定要搞清楚你这个内外环的PID你的期望值是什么?你的期望值是什么?因为咱们在算PID的时候,我们要给它传的值,就是每轴循环要给它传的新的值。其实就是你的目标值是不是和你的测量值啊,对吧?好,那我们要搞清楚内外环的目标值和期望值分别是什么?咱们先说外环啊,先说外环,外环是不是就是那个PID后边来一个p值啊,对吧?好,那大家说它的期望值应该是多少期望值。其实我们现在要想让它平稳飞行,我的俯仰角的期望值,大家应该是什么什么叫就是零啊,对不对?咱们暂时就先给零,但是大家应该能想象得到将来。如果说我们把那个就是前后左右移动的逻辑加上,那你的期望值还应该是零吗?就不能是零了,是零的话,它永远是不是不会前后左右移动啊,对吧?OK那将来你说应该给这个期望值设置什么呢?是不是动态的设置成我们遥控给它发过来的那个期望的,比如说这个俯仰角或者是期望的横滚角?
是不是应该是这个逻辑啊,对吧?哎,其实咱们到时候控制前后方向控制的就是PID的期望值。你期望值是什么PID就会努力的把这个值是不是调整到你那个期望值啊,对吧?那它不就可以前后移动了吧,就是这个思路,现在咱们先让它平衡就先给零啊。好,那我的测量值应该是什么呢?就是外核的测量值,外环的测量值是不是应该是我们欧拉角里边的那个值啊,对吧?哎,欧拉角是不是我们当前最新测量的得到的结果呀,对吧?应该是谁?应该是PITC是吧?俯向角嘛,对不对?好,这个就绑定了,那接下来再往下走内环,我们是不是也得给他一个就是期望值和它的测量值啊,对吧?那么一下大家内环的期望值是那环儿的期望值是不是应该是外环的输出啊?没没错,同学,那我还用在这儿单独的声明吗?不用一会儿,咱们调那个级联cassk的计算的方法的时候,是不是自然而然就给它传进去了,对吧?哎,所以这个不用管,那我们只需要关注一下,是不是内环的什么值就行,测量值就行了。那它的测量值应该是谁?是不应该是JYL这个是不是测得的角速度?各位同学它应该怎么着呢?是不是取它y轴的这个速度啊,没没没问题吧。同学,哎,但是需要给大家说明的一点,就是咱现在这个结构体里给的值,是不是还是从哪儿?从咱的那个就是呃MPU零零五零读出来那个原始数据啊,它是不是还它是那个度每秒啊?同学它不是度每秒,它是不是还是从呃呃呃十六位的那个是不是有符号数负三万多到正三万多,是不是还是那个范围啊,能理解啊,所以这块我们最好给它做一个转换啊,我们给它转换成度,每秒这个怎么转,这怎么转呀?这个怎么整?其实很简单,咱们除以一个什么就行,除以一个六五三五乘个四千是不就行了呀,对不对?或者说这个咱们直接怎么着就行,直接是不是用一下前面咱我记得应该是在哪儿?有一个系数在哪儿?是不是在这个四元数这个结算的这个算法里边,人家是不是给咱们定义好了一个系数啊,对吧?来,我们进到他那个c方法里,这一儿人家是不是最开始就有这么一个系数啊,对吧?是不是就是先除个六五三五再乘个四千,这时候就完成这个角度的转换了呀,对吧?所以咱其实不用再写了,你直接用一下它这个系数就行啊,一样的逻辑。呃,来我们拿过来拿过来,放到哪儿,放到咱们,你应该APP这个位置应该在这儿吧,来往下再往下看啊,到这儿你直接乘一下,人家,这个系数是不就行了。所者说我们自己算也行,就是一个呃除以六五五三五乘以四千的这么一个逻辑吗?大家能想明白这事儿吧,因为因为咱们角速度的量程是负两千度到是不是正两千度啊,对吧?所以整个的从最小值到最大值,它的量程应该是四千啊,对吧?而我们那个ADC的原始的值是十六位的。所以它应该整个的的是六五五三六,对不对?所以你就是除以六五三六乘以一个四千,不就完成这个范围的确定了吧。这跟咱们之前那个摇杆不是一个逻辑吗?之前我们遥杆采出来之后,咱们这个值是多少?之前咱们摇杆的值采出来之后,对吧?它不是零到四零九五啊,对吧?但是我要给它控制在零到一千,是不是也是先除个呃先乘个一千,再除个四零四零九五啊,对吧?
这不是一样的逻辑嘛啊,一样的逻辑啊OK好,就是这么个思路啊。行,这个咱们注意一下就行啊。好了,当然其实这个你不乘也行,你这个不乘将来的话,其实这个东西是不是就体现在这个系数上了,对吧?吧,也也可以,但是咱这边最好乘一下吧,统计单位啊。行了,那这样一来我内环的期望值就给了给了之后,接下来咱们要做的是不是就是调用这个classk呃,不是不是考AKSK的对吧?CSCAD级联的这个呃调试了啊。好了,那级联的词计算了啊,级联计算,那我这个外环应该是谁呢?应该是咱那个是不是PID后边跟上一个PH啊,对吧?PID哎,后边跟上一个PICC应该是它这是咱的外环啊,你咱的内环是谁?那会儿是不是呃沿y轴这个方向旋转的那个角速度对吧?唉,好了,那这样一来的话就完事儿了。
那当你在算它的时候呢,它是先算这个外核的,算完外核之后呢,再把外核的这个输出是不是给到那会儿作为它的desire了,对吧?好完之后呢,我这这个mirrr已经给了给完之后直接一算,那就ok了。这实际上呢就是计算俯仰角的这个逻辑。
那同样的道理,同学横滚角和偏行角,大家想想是不是理论上也应该这么去算呀,也该这么算啊。好了,那所以具体怎么算,那接下来我们往上翻,各位来看看怎么着啊,往上走。呃,现在咱们就开始算一下呗,对不对?那我把其他的那六四个结构比咱们也给它定义出来啊,首先应该是横滚角来,我们写一下。呃,我把这写完啊,写完咱们就休息会儿,大家再坚持一下啊。哎呃恒呃,横滚角对吧?呃,拿拿过来拿过来之后呢,这边大家想一想啊,我们这首先先它滚滚角,是不是也得分内外环啊,对吧?那它的外环是应该就是PID咱们叫柔啊,对不对?那想一想它的内环应该是沿哪个轴的横滚角,横滚角,应该是沿x轴的吧,同学对吧?这是横滚角,是不是应该是沿x轴的角速度啊,对吧?哎,所以说我们找到这个东西啊,来我们往下翻,这应该是PID。
后边我们来一个struct好了,再来一个PID后边跟着谁?应该是JYRO后边是不是得来x量对吧?好了,那当然它的初始参数,我们也先这么给就可以了啊。好,横滚角,我们现在就完事儿了。那接下来再有一个就是谁了,就是那个偏行角了,对吧?来我们写一下偏行角。好,那这个同样的,我们也应该有内外或两两个,应该是PID要对吧?然后再来一个,这个很显然应该是沿哪个轴,是不是就是c轴的呀,对吧?OK我们写一下,应该是PID后边跟成一个JYROZ对不对?好了,那这样一来这个也就是不是也就搞定了呀。同学好了,这个完了之后,我们继续往下进行,下边是不是在这个地方,咱们就要分别去计算这些内容了呀,对吧?那同样的道理同学,我们这儿也要先给它赋值,这个初始值一个这个期望值,以这测量值对吧?然后再进行计算啊,那road的desire我们现在是不是也给零了,对不对?好,下来往下走,那它的measure呢masor是不就是我们目前测得的这个row啊,对吧?好,继续往下走,再往下这块应该怎么着,是不是给那环儿去配一下它的迈络啊,是不是应该是这个没错吧,各位哎,好了,这个是对着的啊。好,接下来再算,这个就是级联呃,外环是柔内环,是沿x轴的角速度。哎,完了之后呢,再来一个DT这个就搞定了。好,偏航角其实也是同样的这个对称的写法啊,那我就直接让它提示了啊,外环desire零没问题,内环呢应该是这个呃这个呃外外环的这个design是它measure的是这个也没没问题。
然后呢,接下来就是下一个就是内环的这个measure应该是沿z轴的这个角速度了啊,最后我们再来一个啥,是不是再来一个这个就搞定了呀。
好好,这样应该是多了一个这个括号啊。行了,那这样一来我们这个就是所谓的PID的计算就能做完的啊。但是做完之后,我们正谓的p调用它在哪调同学是不是应该是在咱们这个flighttask里边,应该是在这个位置去调查吧。同学哎,好了,那当然你要调的话,我们这儿应该怎么着?呃,得给它是不是创建一个声明啊,对吧?右键我们创建声明啊,好,拿过来。那完了之后呢,我们再回到这个task这边来啊,这是task完了之后是不是在这个位置就去调咱那个APP后边这还有一个flight呃计算这个PID啊,对吧?然后我们给它传参要传的参数,其实就是谁是不是跟它这三个正好是一样的呀,对吧?需要有咱们的呃GLO也就是我们那个角速度对不对?需要有我们这个角度,然后呢,还有一就是咱们这个就是DT嘛,对吧?好,这样一来咱这个事儿就算是完成了。好,现在问一下大家啊,你这个算完了之后,现在他有没有作用到咱们的电机上边没有,就是我们现在最终的这个输出的结果是不是和咱这个最终的电机的转速是没有一毛钱关系的呀,对吧?哎,好,怎么让它产生关系?你说我这个代码应该怎么写?同学注意啊,我这几个PID的结果算出来之后放在了哪儿了,是不是已经存到了,就是咱们这几个结构体对象的那个output里边了呀,对不对?我是不是应该拿那个output,然后把那个output作到到哪?同学是不是作用到我们这个电机的转速上啊,对不对?好,哪个方法是设置电机转速的,咱们看这儿就能看出来,是不是这个方法呀?对吧?OK所以我们应该在这个方法里边给它体现出来啊。好,那具体在哪儿体现呢?嗯,爱豆模式下边,我们需要体现吗?不需要爱豆,我本身就不让它动,对吧?所以这个也不用做PID的调试啊,哪块需要调的同学normal解锁之后,是不是就得给它整上来呀,对吧?哎,我应该怎么整呢?其实前面就给大家说过,我不能直接把整个PID的计算,我计算结果就作为咱们这个电极的输出,也就是油门,我必须得留一部分。
你要是没油门了之后,它是不是连飞,它都不会飞啊,对吧?因为最开始我的这个误差就是零,它根本就不调,就没有输出,对不对?所以这块大家一定要注意啊,我们应该怎么着呢?保留油门的同时,再把那个PID给它加进来,但是具体怎么加这个事儿可就有点麻烦了,对吧?同学,我现在一共有几个PID的输出应该是三个,对吧?应该是三个啊,因为因为为什么是三个啊?虽然我们一共是六个PID,但是我们最终要的输出其实就是三个。为什么呢?呃,这个其实也分析了啊,这个给它缩小,我们其实最终作作用到电机上的是谁?是不是只有这三组PID里边的谁是不是只有内环啊,对吧?外环是不需要直接作用到电机上的啊,只有内环需要到作用到电机上。好,那我现在也就是说我有三个内环的PID的输出要作用到这四个电机上,那我怎么作用啊,我怎么往里作用啊,这个是不是就有点麻烦了?这这个其实还是一个一是一个难难点给咱得想想怎么往里作用,这个大家能不能想想象得到怎么往里作用。分析分析啊,可能一下说三个,咱们想不明白,咱们就说一个吧。先说俯仰角的那个啊PID的最终的输出,你作用到电机上,你应该怎么作用?咱们先把这事想明白俯仰角,比如说举例子同学,我现在俯仰角,这是我的机头中了大家了,对吧?冲着上面对不对?比如说我现在出现了俯仰角了,比如说俯仰现在机头朝下了。你说我这个PID的结果,我应该怎么反馈到这个电机上,应该让前两个,也就是我白色的这俩是不是得提速啊?后边这俩是不是得降速啊,大家能理解这个意思吧?哎,好了,那也就是说我俯仰角的这个结果是不是应该作用到这四个电极上都得作用,对不对?好,但是这四个电极它们作用的这个呃你可以认为是极性啊,极性是不同的,对不对?OK因因为两个加两个减速嘛,对吧?也就是你对作用到这个速度上,不不应该是两两个两个减减同学学是哪两个个加两个减这个事儿,咱咱得分析清楚吧。对于俯仰角来讲来讲,俯仰角的结果应该怎么作用呢?应该让是不是前面这俩也就是lefttoprighttop,我前面是不是叫top呀,对吧?因为它俩怎么着?他俩得加,大家说是这个意思不ok好了,那我后两个呢后两个是不是得减呀,对不对?ok加和减的都是谁的值,是不是都是咱那个俯仰角的PID的计算结果呀,能理解这个事吧。同学哎,好,同样的道理,你再考虑一下。如果我现在呢我这个偏航角不是不行行,就是我横滚角,我横滚角出问题了。我比如说我出现了一个横滚角,那这个时候我这个横滚角的PID的计算结果应该怎么作用?到这四个电极上,是不是也应该作用到这四个上,对不对?但是是很显然是不是左边这俩应该是加提速,右边这俩应该怎么着减,应该让它降降速这样一来,是不是我就平衡过来了呀,对不对?
所以说你横滚角的这个你也要怎么着呢?作用到这四个电极上啊,只不过这回加的时候,这个极性应该怎么处理呢?
应该是左边这两个,这是不是左边这两个呀,对吧,它应该怎么着加右边那两个是不应该是减呀,应该是这个逻辑吧。
同学好,现在关键问题来了,横滚脚,这个呢横滚角我应该怎么作用。比如说我现在举个例子啊,我现在哎转了偏了,那我现在要回过来,怎么回过来,这个可能没有。刚才那俩直观,大家再坚持一下,咱把这个事事讲完,咱就下午休息啊,代码一会儿下去课再写,你想想横滚角,这个我应该怎么让它旋中过来,这个可就不是那么直观了啊。首先大家得先捋清楚,你要想让这个就是我们的这个就是无人机沿z轴旋转应该怎么做到,你应该怎么控制这几个电机的转速,它就能旋转了。你看我让它倾斜,这个好好理解,我这俩快一点,那俩慢点,是不是就倾斜了呀,对不对?那纠正的话,那就反过来,对不对?哎,水平方向的这个很合理,关键是我沿垂直轴方向旋转,我怎么实现了,咱先说怎么实现。比如说我现在就让人人往往这边转,大家说我应该怎么去控制这四个电极的转速,他怎么就赚了,左上右下。哎,你得知道它是怎么转起来的。哎,好,首先各位同学咱们得这你得研究研究这四个螺旋桨,它的这个工作原理的同学啊,正常咱们这个电机转的时候,你分析分析啊,你想你要想让我们这个就是无人机,它推力向下。
大家可以看一下,你自己那个无无人那个那个螺旋桨啊,你要想让这四个呃就是螺旋桨,它推推力都向你分析析析析,那他们应该都怎么转。我们以这个为例,同学这个可能这么看这个角度不太好看出来啊,你得看它怎么倾斜吧。同学大家能理解这个意思吧,我看这个好不好看出来。呃,大家看这个螺旋桨,我要想让它的推力向下,大家说我应该让它怎么转,我是应该让它这么转的,还是让他这么做,能能能看清吗?同学就是你得看清楚这个螺旋桨,就是它哪边高哪边低啊,我这边啊是右边这儿高这低啊。
同学你应该是怎么说,你不一定是让让他投高的那个关呀,能能能理解吧。因为你朝高的那边转空气,对这个螺旋杆的力是还是向上的呀?大家想想是不是是不是这么回事儿,你一定要让它朝向高的那边转。你可以看一下自己那个轮眼啊。好,你要反过来转,你要这么转的话,那这个风向在往哪吹啊,什么什么往上回来啊,光往上回这个就声就掉下来了。所以说这个螺旋桨转的方向一定得搞清楚,一定是朝是不是高的那边转呀,对吧?这样一来,它的风才是向下的,没问题吧。同学好,继续往下思考。同学,你这个螺旋桨在朝高的那边去转的。同时啊,它会有一个向下的一个推力。同时它还会受到空气从哪个这是不一样。因为它这个东西它是这么亲斜的吧,它是这么清斜的,所以你在这么重要的环节呃,可能看不太出来啊。哎,你要这么重要的话,那空气对它这个论点是不是会有一个法条,要于作用力,能能给一块东西。所以如果只考虑这一个东西的话啊,其他如你你光这一个块钱这么赚,那一定要有向下的这个规律,其实还会对咱们这个无人机有觉得什么的方益,还会有一个水平方向的推力,水平方向推力,其实正好问他是怎么着的,跟它旋转的话,应该是相反的吧,对吧?各位同学,哎,其实就跟咱们那个直升机一样,同学直升机大家回忆一下,直升机是不是只有上面只有一个螺旋脚,它尾是是不还有一个垂直的一个尾翼啊?尾翼那个尾翼是用来干啥的?就是为了平衡这个螺旋桨受到水平滑的这个力量。要不然你这个无人机也有东西转下来,就在转圈了,它后边那就是起到一个反作用,就不让转圈,大家能理解这个意思吧?OK好,那为什么我们这个无人机它没有这样样一个就是竖的螺旋桨去平衡的这个水平方向受到的力呢?很简单,答案是这么做的。你注意说啥,我这个螺螺旋桨咱是不是这么重要?一个对方这么说,除了会有一个向大的力,还会给一个无人机,一个是不是这么旋转的力啊,能能理解吧。
就是说白了就是反沿沿谁沿你这个螺旋桨的反方向嘛,对吧?它这么转,那它就会受到一个反方向的一个推力啊。好,那注意观察同学,它是这么转啊,这个是这么转,你再注意观察与它对角线的这个地方,它它是怎么转的?它俩的旋转方向是一样的,它俩旋转方向一样的。因为你看啊就是这个螺旋桨,可能你看着不清楚啊,我其实是这边高同学这边高那边低,所以转的时候呢,它是不是也得这么转,它也得这么转,这俩是完全一样的一个布局,能理解这个事儿吧。同学哎,ok好,然后我们再看另外两组,看这里,你看这组哪根高呢?这组是这边高的,所以他转的时候得这么转,这个得这么转,而这个呢是不是得这么转呀,能能理解事吧。同学ok那与它对角的这个东西呢,跟跟跟跟这个是一样的,也就是我们这两个对角线,它们是完全一样的,转的方向是一样的。但是两个对角之间,它们是刚好是怎么着的,正好是相反的那这样一来有一个什么样的好处呢?
就是首先他们都会有向下的推力,这个没有什么问题,对不对?然后他会怎么着?它属于平方类的力,是不是短好抵消了呀,对不对?ok好,那你刚才提到了,就是这个对角线,我这么转,那这个飞机它会有一个这个方向的力,对不对?好,那这个对角线呢,我这么转能理解吧。OK它是不是正好会有一个这个方向的力啊,对吧?好,两组正好抵消,所以它水平方向其实不用加那个就是垂直的那个螺旋桨,它也能保持这个就是一个平衡,是这样的一个逻辑啊。好了,所以大家现在想一想啊,我要想让咱这个无人机,你沿c轴方向旋转,那你觉得我应该怎么做呢?其实应该是让对角线是不是比如说这个对角线它快一点,这个对角角这这慢慢点儿,哎,那是不是它就会朝特定的方向旋转。哎,好,那到底他朝哪个方向旋转?其实这个东西你自己看看他的旋转方向是不是能就能分析出来,对吧?哎,好,那反过来之后,你让他俩快点,你让这俩慢的,是不是也就朝另一个方向旋转了呀,对不对?OK它是这样的啊,哎这样你还就能够保证咱沿沿c轴旋转了。所以一会儿大家想想啊,如果我这个所谓的偏航角出现了这个误差。那我这个偏航角的PID的计算结果是不是也要作用到这四个电机上面了,对吧?好,作用到这四个电机,关键是你这个方向怎么确定的,是不是应该是保证对角线的是一样的。没错吧。同学,比如说举个例子,我应该保证对角线lefttop和rightbottom,它俩是不是应该是一样的呀,对吧?当然当然它俩到底是加是减,你得看他朝哪边偏了啊,比如说这边我就让他加。那同理这俩呢,你是不是就得让他减呀,是不是应该是这么一个思路。所以说一会儿咱们这个具体怎么写代码啊,咱们下节课再说啊,大概思路是这么一个思路啊。行了同学那先讲到这儿,我把视频。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

09-无人机-飞控任务-PID-计算结果作用到电机转速-代码编写

09-无人机-飞控任务-PID-计算结果作用到电机转速-代码编写好了,同学,那接下来呢我们来看一看,就是到底怎样把PID的计算结果应用到这个电机的转速上边。呃,首先咱们这个电机转速在不同的模式下,咱们的赋值逻辑是不一样的,对吧?所以normal肯定是不用赋值的,呃,不是不是idol,肯定不用赋值,这个normal肯定是得得赋值的对吧?哎,好好,那我我现在啰嗦一句啊,你说将来做了一个定高的时候,要不要加?我们这个就是姿态相关的PID要不要加?其实也得加对不对?定高的时候,除了有定高的PID你这个姿态也得加,要不然你飞都飞不稳,你定高是不是肯定是定不住啊,对吧?哎,所以这个一定要注意,到时候这个相当于是三部分的一个融合,结果。有你的这个油门,有你的姿态PID有你的高度PID而这个呢只有两部分,一个是你的油门,一个是你的姿态PID啊。好,现在咱们开始啊。呃,首先啊我先问一下大家,咱能不能直接就像我刚才说的,直接就往这个油门上面进行加,或者是减直接这么走不行,为什么不行呢?在有可能就会出现,就是举个例子啊,我这个油门最大是不是给到一千呀,对吧?
我油门给到一千了之后,我再往上加,我肯定不能让他加了。因为咱们是不是最多就到一千呀,对不对?OK好,这个时候PID的作用是不就起不到了。我油门比如说已经到顶了,油门就已经一千了。你如果PID再往上加,当然PID你要是减的话,那还好,但是你加还能加上去吧。同学是不是加不上去了呀,对吧?所以你再加上这个PID之后,咱们一定要对这个油门,咱们得做一个限制啊,能理解吧。哎,比如说我们给它限制在零到八百,哎,或者零到七百之间OK好,剩下的那三百的空间由谁来去调整呢?由PID来调整,大家能理解这个意思吧?哎,是这样的啊,所以接下来呢我们需要对油门里边的那个值,咱们做一个限幅呃限幅限幅单之前是不是写过一个limit函数同学。
但是那个limit当时是在遥控那边的的吧,我们复制制一下,下同学找一下这个projectremote,你找那个limit走你limit,当时咱应该是写在哪儿了,写忘了找一下吧。
LIMIT其实我们应该搞一个什么?搞一个这个com里边搞一个util,把这些是不是常用的这个函数宏啥的,咱们是不是给它给给它给它定义一下了,对吧?统一的定义到一个文件里,哇,这么多呃,区分哪一点东西区分能呃不不不是应该是上面这个对吧?咱们区分下大家写啊走进,哎,这也挺多的啊,我去我那个咱自己的文件呢呃在这儿呢啊不是这个不是这个这个我天找不着了。
呃,大家回忆一下,当时是在哪个文件里来着,我有点想不起来了,我有点啊应该是在遥杆那块儿吧。呃,二点呃,二点四g那块是吗?嗯,是吗?是二点四g吗?找一下啊,那就找一下INNC呃,应该是在NT二点四g是吧?在这里limit呃,我搜一下啊,LIMIT应该在头文件里边要定义的话,应该是啊,没有吧,没有啊,因为摇杆吧,我记得是也没有算了,这次重重重新重新写一个,要不我再我再搜一遍,我搜LLIMT对不对?我加上那个括号,我那块儿是不是有一个括号啊,对吧?啊,这个好找。哎,在这呢哎在这个头文件了,是不是在这个头APP层,对不对?
当时咱写了一个这样的红花照,咱直接拿过来啊。拿过来之后呢,我们给它放到咱的这个呃flag呃这个flight里边的flat这边呢我们就还是放到头文件吧APPflight放在这儿行,然后来啊注意啊,同学我我这个limit就是最外层,我这是不是也有一个括号啊,对吧?咱这个嗯比如我我我最外层,我还加括号,我的目的是啥呢?就是让咱这个limit能够支持啥呀,支持嵌套啊,这个事儿大家注意一下啊,好了,下来往下进行下边,我们就开始往这里边加了啊。首先甭管是哪个电机的转速,咱们的油门是不是都给它做一个做一个限制,对吧?我这给它限制一下啊,limitLIMIT对不对?好,我给它限制多少呢?咱们就给它限制在比如说零到八百就行了啊,我们给那个呃PID留二百的空间就足够了啊,调整这个东西就够用了。哎,行,这个完了之后,接下来咱们要做的事儿应该是什么?是不是就是把那几个PID的结果往这个上面去进行作用了呀,对吧?好,接下来咱们就开始啥啊,咱们就一个个来吧,咱们先看那个俯仰角的这个计算,结果怎么往上呀?下角来,我这儿做了一个图,方便大家去看啊,来应该在哪哪呢?应该在呃在这儿呢,哎这是俯仰角,按照咱们的分析啊,你要是想去调整这个俯仰角的话,各位,那或者说要想把俯仰角的这个结果作用到这个转速上,那应该怎么着?
应该保证前两个顶上那两个电极的转速是不是应该是相同的呀,对吧?就是我加或者减,应该是相同的,对不对?那后边儿这俩是不是也应该是相同的呀,对吧?但是他们两者之间是不是应该是反的,应该加这个减。
那这个要是加呢,是不是上面那个就得去减呀,应该是这么个思路啊。ok好,所以接下来咱们就开始啊,那关键问题来了,俯仰角的这个GPID的计算结果应该取谁,是不是应该个减那那环PID的结果呀,对吧?那环儿ID那关于俯y角来讲,那会儿应应该是沿y轴的那个是不是PID啊,对吧?哎,所以说我们这应该怎么写呢?咱先这么写啊,来,首先,那我就先比如说先给它吧,先给它,我先加上一个啥呢?加上一个PID后边跟上谁,是不是?就是TYRO后边跟上谁应该是沿y轴,对不对?y轴,然后点儿是不是output就可以呀,对吧?好了,同时同学往下进行controlc,我拿过来这个完了之后,那谁跟它一样来着,是不是顶上那俩是一样的呀,对吧?也就是lefttop跟righttop是一样的啊,注意我这个是lefttop,你写的时候,你看你跟我是不是一个顺序啊,不要写错了啊,lefttop跟redtop跟它是不是一样的呀,对吧?所以这个是不是也应该是加上它,对不对?ok好,那这个时候另外两个,那显然是不应该是跟它相反,应该就是减了呀,对不对?
这个就是减了啊。ok走,你下边那个也是一样的道理啊,同学好,往下进行,这个是不是完完儿了,对吧?当然现在同学肯定会有一个减了啊,那我为什么不是它俩是减,然后这两个是加呢,为什么不是这样的呢?
也就是说白了啊,我这个PID的计算,结果在往这个电机上面去应用的时候啊,我到底是给它俩提速,还是给它俩减速。那这个我是不是不太清楚啊,现在对不对?这个到底怎么去控制这个事儿呢?不用管,各位,咱就呢咱这样呢,你就正常写,你只要保证一点就行,只要保证它跟它是相同方向,它跟它是相反方向就行了。那至于我到底是谁加速,谁减速?这个到时候咱们直接通过,谁就能控制了呢?是不是通过我们PID里边,咱这个系数就能控制了呀,对吧?咱们到时候可以先试一下啊。比如举例子,我这样呢,我到时候我先给个正值,我看一下它调这个方向的时候调的,对不对?对不对?如果偏了,它更偏了,那说明我们是不是给反了呀,对吧?哎,ok好,那完了之后,我再试一试这个负的对负的。如果说偏了之后,它唉给我回过来了,那是不是说明咱们就调对了呀,对吧?就是我们不用去在这儿去考这个事,将来咱们调参的时候试一试这个参数的正负就行了啊,这个大家注意一下就行了啊。好,所以现在只要保证一点呃,方向相同的是相同符号啊就行了啊,也这个呃把这事搞清楚就行了,别的先不用管啊。好,接下来我们再往下走,这是俯仰角的PID的结果是不是咱就应用上了呀,对吧?接下来呢我们再应用第二一组。第二组该谁了,是不是该那个横滚角呀?对吧?横滚角,我们得保证谁横滚角啊,同学保证谁跟谁是一样的?哎,我这儿是不是呃,俯仰角,这没问题啊?横滚角哎,对,横滚角,保证谁跟谁谁长?是不是应该保证左侧这俩一样,右侧这俩一样啊,对不对?OK好,那横滚角的这个PID的计算结果应该是沿x轴的,是不是它那个呃旋转的那个角速度的PID啊,对吧?好,所以接下来咱们去调整一下啊,好,还是一样的,你就只管加啊。OK好,现在这是lefttop,这个比如说我就加就行了啊,这个我给它加上一个PID后边跟着一个GYRO这个应该是x对吧?后边来一个output好,谁跟它是一样的,lefttop跟leftbottom,也就是左侧这俩应该是一样的对吧?所以第二一个controlc咱们也应该是给它加上,哎,没问题吧。哎,好,那剩下剩下另外俩那就没啥可说的,是不应该是减呀,对吧?哎,所以接下来呢我们就给它减一下啊。好,这边我就直接俩一起减吧,拿过来减controla拿过来。好了,那是不是这个横滚角的,我们也就作用上了呀,对不对?好,接下来就是这个呃偏航角了,哎,偏航角偏航角来,刚才咱们已经分析析了了,对吧?咱应该保证什么来着?是保证对角线,这俩应该是一样的。没错吧,同学哎OK好,那接下来呢我们去作用一下啊,这个就简单了,来找一下对角线来,我们还是第一个,我们先来个加啊,加上谁应该是PID,后边应该是z轴了,对吧?z轴的output啊,ok好,这个有点换行了是吧?我们再回过来啊,好,拿过来这一轴的output,哎,乱了,拿过来,应该是PPOT对吧?
哎,好,那这个完了之后,接下来我们得找谁,是不是得找它的对角线呀,对吧?它的对角线应该是呃lasttop对应的应该是rightbottom吧,对吧?应该是它啊,所以它俩应该是相同的。controlc我拿过来,完了之后呢,中间的那俩是不是就是减了呀,对吧?哎,好,那现在我们写一一下CTRLC咱拿过来。哎,好了,减这个也是这个减啊,controlv拿过来controlv行了。那这样一来,咱这个就算是给它作用上了。哎,这样一只要当我们就是进到这个,就是咱这个normal模式,那PID就开始起作用了,就开始起作用了啊。好了,那完了之后还有一点需要注意啊。就是大家想想你说有没有可能啊,我们这边这个最终最终算完的结果,他比如说超一千了,有没有这种可能性,也有可能。其实PID这个到底输出多少?这个东西咱们其实控制不了。
对不对?同学他完全是不是自己根据这个误差算呀,对吧?误差越大,我是不是输出的可能就越大呀?对,那当然这个就有可能会出超出多少了,超出咱这个一千啊,所以最终咱最好再做一层什么再做一层限幅,对吧?我们最终外边再做一个整体的limit,这个咱们给它限制到多少,是不是给它限制到零到一千就行了呀,对吧?好,这边咱们拿过来,然后走走走这边我们来一个谁来一个啥,是不是来一个这个逗号,再来一个零,再来一个一千。
哎,这样一来是不是咱们就完成了这这样的一个整体的限幅了呀,对吧?哎,好,这是大家需要注意的一点啊。行了。那现在呢我们这个PID的结果就作用到电机上面了。然后大家在写的时候呢,呃最好不要就是说直接就是照我这个写啊,就是你这个谁加谁减,谁加谁减,是不是一定得根据,就是咱这个实际的情况进行分析啊,对吧?哎,大家把这个事落实了就可以了。行了,同学呃,我这儿没写错吧,没问题啊。好了,那这个就完事儿了,我把这个视频停一下。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

10-无人机-飞控任务-姿态控制-思路梳理

10-无人机-飞控任务-姿态控制-思路梳理那好了,各位啊,那现在我们一起来梳理一下,就是我们这个非控任务,我们找到task点c,你看非控任务这块这块儿怎么做的?首先我们这个任务务目前应该是每六毫秒,是不是执行一次,对吧?每来一次之后都要去读一下六轴数据,这个会得到是不是角速度加速度那些东西啊,对吧?好,完了之后呢,我们通过这个四元素的一个结算的一个计法就得到了,是不是咱们那仨角度啊,对吧?好了,那得到这些值之后呢,接下来就进入到是不是这个PID的计算了呀,对吧?进到PID计算。那进来之后它是怎么算的呢?它是三个角度,是不是三套PID啊,对吧?每一套PID是不是都分内环和外环两个,对吧?所以说一共是六个PID的这个计算啊OK每次都要去算算,那它算的时候都是根据什么?是不是都是根据当前的测量值,以及根据当前的期望值是不是进行计算的呀,对吧?好,那它的目的是什么?就是让你的测量值无限的接近于谁?你的期望值,这就是PID的逻辑,它会无限的让测量值接期望值。那那实就是这么一个思路路啊。好了,那每次来都会调整一下,每次来都会调整一下啊。好,对,调整完之后,那算完这个PID之后呢,它会把结果保存在哪儿,是不是保存在咱们这个内环的PID的是不是这个output里边啊,对吧?那所以注意观察同学算完PID之后,我们下边再去设置置机转速的时候,候这个置置对吧?是不是我们现在如果进到了no模式,就会将PID的计算结果。是不是考虑在内了呀,对吧?那放在咱们这个电机转速成就是这么一个思路,这是咱们闭环的一个思路啊,大家把这个事先捋清楚了。好了,那当然我们现在去做这个测试的话,你会发现这个根本就不起作用。
因为PID目前的参数是啥?这几个系数全是零全是零呢?它们的输出是不是一定是零啊,对吧?也就是PID目前没啥用啊,呃下午我们再给它一点一点调啊,调的时候,咱们就能看出来这个效果了啊,停停一下视频。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

11-无人机-飞控任务-PID调参-俯仰角-内环-P-确定极性

11-无人机-飞控任务-PID调参-俯仰角-内环-P-确定极性嗯,好了,各位同学接下来咱们要做的工作呢就是去调整这个PID参数。那当然调这个这个参数,咱不可能三个角度一起调对吧?三角度一起调的话,那肯定越调越乱,对吧?因为不知道到底哪个起效起作用了,对吧?所以说我们需要借助一个这样的无人机的调试架呃,来限制咱们这个可以转动的角度来一个角度,一个角度的来啊,所才也给大家说了,目前我这个绑法呢其实是只有这个呃俯仰角,它是自由的,其他这个角度都是动不了的啊。所以咱现在要做的就是调整俯仰角的PID参数。那俯仰角PID参数相关的是不是一共有六个值啊,对吧?呃,外核的呃PID还有内核的PID那我们调的话应该从哪开始调起呢?
呃,咱先明确一下,是先调外环,还是先调内环这个事儿,大家能不能想清楚问析问题啊?呃,如果我现在先调外环,各位同学,大家想想能不能起到这个作用,能不能起到咱们这个想要的效果不行,为什么不行啊?大家要知道的是,咱最终最终输出给这个电机的转速。呃,其实说白了是谁的那个结果呀,是内环PID的结果,对吧?哎,我那图呢是内环的啊。OK好,那现在咱们内环那仨参数,你要是不先调的话,它是不是都是零,都是零的话,那是不是无论你的外环给它什么样的这个期望值,那它的输出是不是也始终都是零啊,对吧?所以说是不是始终我们没法去看到这个它输出的效果能也解个事儿同同,所以肯定不能能先调外环,应该得先调内环,内环调差不多了之后,保证内环能够有输出了之后,咱是不是再去调外环,应该是这么一个思路吧,对吧?
所以咱应该是先调内环,这个大家一定要注意啊呃无论是哪个参数,咱们都应该有一个这样的原则,先调内环啊。好,那既然要先调内环内环儿,是不是仨参数PID对吧?那我们先调哪个呢?其实在最开始就给大家说过啊,实际上PID这三个部分里边呢是不是比例部分是占大头的呀,对吧?主要还是靠它,对不对?另外两个是不是为了起到一个微调的作用了,对吧?举个例子,比如说我前边出现了,这个就是稳态误差,对不对?已经稳定了,但仍然有误差。好,这个时候你去调调调调,i对不对?好,那如果说我出现了了这个震,对对不对?说所谓谓震荡,是不是就超调了呀,对吧?哎,到了这个就是目标值了,然后超过去了,可能又回来,超过去回来,这叫震荡嘛,对吧?好,这个时候咱是不是再再去调低啊,对吧?应该是这么一个思路,所以说肯定是先调p啊,先调比例部分它能搞定另外两个甚至都可以不用啊,对吧?好,所以我们应该先调p各位。好,那先调p的话,那咱这儿这个p应该怎么给呢?给的话,咱那是这样的。因为我们之前前是把这个PID的结果往这个电电机上应应的时候,其实我们并没有考虑虑是这个值的正正负吧,我们只只是保证了。哎,就是说以这个俯仰角为例啊,只是保证了前两个电机,它们的就是这个增益值是相同的,相同方向的都是加对吧?另外两个是不是都是减压,对吧?我们其实并没有考虑到就是这个output,它到底是一个正数,还是一个负数,咱没考虑这个正负的事儿,对不对?哎,所以说我们现在首先要搞清楚的,就是你这个PID你到底应该是一个正的参数,还是一个负的参数,也就是这个极性,咱们得先搞清楚,这个怎么搞清楚呢?不太好搞,就是咱只能试了,对吧?同学我们直接一试,是不是就能看出来呀,对吧?比如说我现在呢不知道到底正负我先给个小点的数。比如说给个一对吧?给个一点零,这就是一个正数,对吧?同学好,那正数我们现在呃就是给捎进去,然后看一下现象呃,分析分析它到底是正的还是反的,是不是就完事儿了,对吧?
好,那现在呢我就给它捎录进去,咱们一起来分析分析到底是正的还是反的啊,现在我编译大家稍等一下,我那个哎咱这还有点问题呢,对吧?呃,PIDstruct呃,我应该是哪个地方,应该是传那个啥吧,是不是应该传指针呀?
呃,哎哎哎,应该是这个地方,对吧?同学,我们应该传指针,但是我传的都是这个呃值啊,那我们快速的改一下这儿,以及这儿还有这还有这儿,对吧?我们统一都给它传指针,是不是就行了?好了,那接下来呢我们再重新来一下啊,来重新编译,大家稍等。呃,好的,那我目前是不是将那个呃俯仰角的内环PID它的p它的参数是不是设成了一点零呀,对吧?好,现在编译完了之后呢,我们给它稍录进去啊。好,现在已经烧录进去了。那接下来呢我把这个遥控得给它呃打开,然后呢咱们就开始调了啊。那现在呢我看一下,这边大家想想就说如果说啊就是咱们这个方向对了,那它它的现象应该是什么样的,这个咱们得提前想明白,要不然的话,一会儿看了一下,你又不知道到底是对了还是没对对吧?你说它的现象应该是什么样的。首先啊咱现在是不是只考虑内环就行,因为外环是不是根本就没有给内环输出啊,对吧?
哎,或者说咱们反过来,当然你也不能完全不考虑外环啊,为啥因为外环的输出是不是作为内环的期望值啊,是对吧?同学ok好,那你说现在外环的输出是多少?对于我们当前的这个逻辑来讲,外环输出是不是一定是零,一定是零。也就是说,对于内环的PID来讲,我的目标角速度应该是多少零。也就是说,内环PID它现在应该是努力维持这个角速度是零,对吧?大家能理解这个事儿吧。同学啊,ok好,那所以我们看看它是不是呃这个这个趋势啊,如果它是在维持这个角速度为零,那那就说我们给对了,对吧?如果它越来越大,那是不是正好给反了呀,对不对?你想啊同学,比如说举例子,我现在有一个这样的一个角速度,它正常应该是以我们这个就是无人机为例,比如说它应该是让前两个慢一点,后两个快一点,那就停了。那结果他要给反了的话,是不是角速度越来越快,他要是给反了的话,能理解这事吧。同学哎,好了,那所以接下来呢咱们来看看我们这儿到底调的对,还是不对啊,来看一下。呃,我得把这个线拔,要不然他有你要给错错了话话,是是不是可能就越来越快的话,就绕在一起了呀。同学这个事一定要注意一下啊,大家能看清对吧?好了,那现在呢我们就重新的去做一下这个测试啊,然后大家在测的时候呢,最好是怎么着啊?就是你在呃烧完这个程序之后,需要把我们这个无无机门得得得怎么着着,重启一下啊,这东西西开关是在这个位置,为什么一定要重启一下呢?这还不太有碰着那个位置,把这个给挡住了那个按钮。那个哎我们这儿是不是有那个远程关机啊,来。但是远程关机的话,它开也不太好开说的,我先给它连上呃,或者一会儿烧的时候就保持它平衡。
大家还记得吧?就是我们这个无人机它会怎么着来着?是不是在启刚启动之后,咱们那个MPU六零五零,它会做一个什么来着,是不是校校准呀?它会在平水平的时候,静止的时候是不是计算一下咱那个零偏呀,对吧?计算完零偏之后,是不是呃才会正常的工作,对吧?所以说大家在做的时候呢,在烧住这个程序的时候,或者让这个无人机开机的时候,一定得保证它处在一个水平的这样的一个状态啊,能理解事吧。那所以我这边呢我现在保证它水平,然后呢我我我我使劲按一下也就够不着啊,因为我这儿把那个给挡住了,给大姐,我找东东西,这还不太好整,找个找个小棍儿帮我戳一下就行。大家那会儿有没有一个哎,这个挺合适,ok这个非常合适啊,咱用这个给它关一下机,完事之后呢,我再重新开机。好,现在是一个水平的一个状态,对不对?ok好了,那这个时候呢,我们用这个遥控大家屏幕里边能看到吧。嗯,OK好,然后呢,我现在呢给它解锁了啊,是不是已经开始闪了呀,对吧?ok好,那现在我们就给了啊,如果我这边要是调对了的话,那大家想想啊,我一松手呃,由于它受到重力,它是不是肯定会往一边偏呀,对吧?好,那他这个呃PID应该会阻止他是不是呃,翻转呀?它会让这个角速度尽量降为零,对不对?好,那现在我试试它会不会啊?哎,初级同学,那他现在有没有就是可可能可能不明显啊,可能不太明显。呃,说为啥?因为我们那个值给的特别小,对不对?呃,然后呢我现在注意观察里面对比一下啊,我现在不让它转了,不让它转了的话,你看他下来的速度是什么样的。哎哎哎,有没有大家大家能不能看到,就是我只要一让它就是动,那这个电机是不是就会转起来,对吧?这个现象咱们是调对了,还是没调对,给对了,还是没给对,好像是看不太明确啊,但其实应该是给对了,应该是给对了。
因为按照我刚才的分析啊,如果你要是给反了的话,对吧?他本来应该让前面那俩快,结果他让后边俩快的这么说,转的应该是越来越快呀。对,咱其实可以对比一下,看一下这个效果啊,同学这不然怎么着呢?呃,我这边给他一个负的一点零。这样一来的话呢,他理论上应该会疯狂的,是不是旋转呀,对吧?来。好,那接下来我试一下啊,这个我稍录一下,这个就有点危险了。同学他要是一直加速,一直加速,那那是不是对不对?就得大家得注意一下这事儿啊,所以这边一会儿一会儿咱做一个安全措施,再稍等我先给他说这几个这个拿过来。好,那现在这边是不是保持着平衡了,对吧?哎,保持平航没问题。行,完了之后呢,我这儿呃重新编译重新上录啊啊。好,现在是不是已经刷进去了呀,对吧?哎,好了,那接下来我们再重新的看一下这次的效果,这个线给拔了,妈里远点儿,没图摄像头啊,没上头是吧?呃,行,选手啊,选手好,大家现在看这次的啊,来我给他解锁就线掉下来了。其实他没事,他解锁,然后呢再往下走啊,已经接手了,对吧?现在我给油门我不敢给太大啊,大家意观察,当然要问就出现了一个很危险的事儿啊,就是他一直是不是在反向的这个进行负反馈啊,对吧?本来是应该停,这结果他越转越快,速度越来越快。那我这边是不是一直在正向的激励,一直走走走是不是就越来越大了,对吧?就是所以很危险,而且你注意观察同学,我这我刚才怎么让他停下来呢?就是在这种情况下,我油门拉到底它都停不了。大家想想是不是这么回事,我油门拉到底。那他这边儿就是在算这个东西的时候,它是不是呃你前面为零,但是你后边算出来是不是一直为为啊,而且越来越大,所以它越转越快啊,所以这个时候咱只能有强,我刚才是直接远程关机了,所以它就它它才停的,要不然它停不了。那这件事呢?所以咱们这边是这样,我们为了呃为了咱们测试的时候安全一点。呃,咱咱这这同同学啊注意观察我在在哪呢?我在这个就是设置电机转速这个方法啊,最终给速度之前,咱们做一个判断,统一做一个判断,做一个啥判断呢?
如果我现在的这个油门,也就是呃这里边有参数,叫做你们么个date,对吧?如果这个东西它要是比如说小于某一个阈值的时候啊,比如小于三十吧,就说意味意思就是我把油门拉到底了,能这解思事吧,拉到底之后,那我就怎么着了。强制的把每一个电机的转速咱都给它设置,为啥咱都给它设置为零?就是这样一来咱们调试的时候是不是更加安全呀?能这个事吧,要不然的话就会出现我刚才那样啊,可会啊,来,所以这边大家一定要注意啊。呃这个主要是为了安全安全起见啊,这边拿过来拿过来,包括这个也是啊,这一共是几个呀,这是四个电机,对吧?都为零,然后得设置它呃,没问题吧,各位同学那这边我写一下啊,这呃安全考虑安全考虑啊。行,这个一定注意一下就行啊。好了,那这个我们在呃,我就不用再测了吧。同学现在咱们应该已经确定好了,就是我们这个方向,它这个到底是正还是负了,对不对?
显然这儿是不是应该给正啊,对吧?但是给正的话,刚才咱们也看到了,就是它确实能够一定程度上减缓。这个就是咱们这个就是无人机下落,但实际上并没有起到咱们想要的效果。它理论上应该努力维持什么,他可能维持不了这个角度同学你想想啊,我们现在是不是外环,根本就没没有工作呀,对吧?
所以那会儿只是负责,让这个就是角速度是不是为零。所以说他正常情况下,如果起到了一个比较好的效果,他应该是怎么怎么样的一个现象啊,应该可能是往下落落,但是它会快速的让它这个落的速度呃,小速度变成什么变成零单,想只要一变成零之后,那我受到重力的影响,它还会再怎么着,是不是还会继续往下滑呀,对吧?哎,ok好,它应该是这样的一个就是哎滑一段角速度停了,对吧?角速为零,停一下,滑一下停一下滑一下停一下,它理论上比较好的效果,应该是这样的一个现象,对不对?哎,ok好,那所以呃目前咱们没有看到这个效果。而且我们刚才其实始终都没有见到过,就是它的角速度变成零,对吧?它只是慢慢掉下去了,但是从来都没见到过零,那就说明啥这个值给的大,还是小肯定是小了,对不对?所以接下来咱们要做的应该就是调整是不是这个值的大小的呀,对吧?哎,好,那怎么调大小,我现在单独录一段啊,同这儿。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

12-无人机-飞控任务-PID调参-俯仰角-内环-P-确定大小

12-无人机-飞控任务-PID调参-俯仰角-内环-P-确定大小呃,好了,各位同学,那接下来我们要做的第二一步就是去调整,就是这个KP的它的大小。我们刚才给一有点小,那给多少呢?这个其实也没什么概念,你就试着慢慢调呗,对吧?我要是说胆小的话,我就慢慢改。比如说我先来个二试试,看看什么效果。对吧胆儿大的话,对吧?我上来直接先来个十,我看看是不是怎么回事,对吧?如果十要是大了的话,那我理论上我再调小点不就行了呀,对不对?就是你可以可以自己按照自己的策略来呀,其实咱这个胆儿可以大一点,这玩意儿它没事,它顶多就是自己在这转圈呗,或者是来回震,这个其实也无所谓。对不对?一百有点了了,可以啊,一百就就不不一了,咱咱就十就慢不了。其其实因为我因为我我有上帝视角啊,同学因为我调过它十就已经不小了。来。那现在我们试一下这个事啊,呃给到十完了之后,是不是得重新刷录程序啊,对吧?啊,来那现在我给插进来。好,然后呢现在给您进行稍录啊,我先给大发点声音这个行。好,那接下来呢我们编译呃,二十号重新烧录。
好,现在已经刷上去了啊,然后大家看一下这个这个图啊,来我把这个给他拔掉,哎,一定要拔了啊,要不然的话容易绕在一起,我遥控呢不用在这了。完了之后呢,现在我给这个遥控解锁,哎,最大最小哎,刚是已经开始打了,对吧?大家能看到闪吗?好的OK啊。好,那现在开始断了啊,这个我先拖着一边一点就可以打开我手看看这次怎么样啊,这个油门不用推太高,基本上给到这个中间,它就它就能看到效果了啊,来看这个哎哎哎就是首先啊同学他能这次能有能有没有看到,就是说他让那个角速度变成零那那个操作有对吧?但是它有疯狂的什么操作,这叫抖动分,疯狂的振动分,其实就是出现了一个什么操作呢?这就是出现超调了它本来应该让角速度变成零就停下来。但实际上你会发现它它是不会会往反方向再转一下了。对不对?那就说明出现了超调了,大家可以再感受一下啊,来是不是来回摆动来回摆动,不就是角速度,它那个方向进行了。这个就是呃说白了,就是本来我想降到零第二变成负的了,是不是反这就说明出现了超调现象,出现超调现象,咱们这儿怎么解决呢?呃,当然前面讲过就是谁是用来负责减少这个超调现象的,是不是就是那个d呀,也就是那个微分部分所谓的对吧?OK好,它确实是这样的,但是咱们最好啊一开始先不要去调这个呃就是它位分啊,就是咱们记住一个这样的原则。如果说那KP能够解决我们的问题,那咱们就调KP就行了啊,OKKP不行了。然后我们再上这个KD啊,应该是这么一个思路,我们现在其实就有可能是这个KP是不是给的有点太大了呀,对吧?太大了,那咱们就适当的,先给它调小一点,那调多少呢?我也不知道,对吧,那你一小那十大那调个中间值,对不对?我们调个五试一试啊,对吧?好,那所以下来呢我们调成五,我现在呢先给它编译一下,大家稍等。好,那接下来要做的就是给他烧录了,对吧?烧录的话,那我又得把这个线插上啊,我我先插上插上之后,一会儿再给大家试一款吧。来我给他放这儿。好,现在基本平衡的一个状态啊,那现在呢我给它捎录进去,好进去了。然后大家看一下这个啊,好,我把遥控拿下来之后,大家看一下这个效果啊,把这些拔掉,看五怎么样啊,来我们把它追上去拿下来。然后一会儿我稍微涂了一下啊,看看这次什么样的一个现象剧啊,谁哎,是不是他至少能呆住了同学对吧?刚才说晃了一下之后,晃的有点点太大,然后他就掉掉下来了,对吧?但是这一次呢,他至少能呆住了,害怕震动是不是一开始是比较小。但是后来是越来越大,对不对?OK好,那那就说明什么是不是还是有点大呀,对吧?还是有点大啊,那还是有点大,那这个咱们就只能是再继续调小了,对吧?这回我们再比如说调成二点五,或者说调成三什么的都行啊,对吧?
你就去对对外来呗,对吧?比如我这来个三吧,去呃,看看三怎么样,我重新编译这么快。好,那接下来呢我们往下进行啊,来这个拿过来啊,看一下这次的效果如何,我上上线吧,就是调这个东西呢,就是不能着急,咱得耐耐点心,对吧?就得一点点试啊。好,我要给它保持密好二十的态度打开是吧啊,之后呢我重新编译重新发录啊。好,这回是三了,对不对?然后咱们看一下这个三的效果如何啊,对方同学我把这个给他八六好拔掉了,拔掉之后呢,接下来我这个油门解锁啊,好,最高最低。好,现在水油门看一下这个三怎么样?哎,大家看这次这次还有震动吗?这次没有震动了,对吧?而且你注意观察它是不是达到我期望的那种效果啊。那个啊大家不知道从这个屏幕里能不能看出来啊,就是它下落的时候是不是先停一下,然后继续落停一下,继续落后边同学这个看屏幕能看出来吗?看不出来这个效果对吧?很明显不是很明显,对吧?但是你要是实际看,可能是他那个帧率的问题啊,就是你实际看这个东西前面同学不知道能能应该是能够看清的来注意观察啊,你看他是不是停了一下,慢慢的是不是停了一下,然后继续往下落,停了一下,继续往下落,但是它停那一刻停的时间肯定很短啊。因为你这个重力是不是一直有啊,对吧?它就停一下,然后肯定立即往下落了,对吧?哎,但是实际上是能看出来这个效果的,至少大家现在能看出来,它现在已经不等到了,他已经不走了,对吧?能可以能能看出来一点吗?哎,OK他确实这样是走一段停,走一段停,因为咱这个东西它不可能去维持它的角度,因为那会儿只控制角速度嘛,对吧?它比如让你这个角速度趋基于零,一直趋近于零,只要你动,我就让你变量,只要你动我就变量,所以肯定是滑一段停一下,滑一段停一下,滑一段停一下,这其实就是一个它比较理想的工作状态了。其实咱们调到这个三这块呢,基本上就差不多了啊。当然大家呢你要是觉得哎这个效果可能还不太好,我还想再怎么着着呢?比如说我再再它调调一点试试,哎,或者说我再调小一点试试,对吧?你调成四啊,我调成二都想看一下,其实都行。但是经我测试呢这个三左右啊,其实就呃基本上就这就就是这么一回事儿了啊。OK好了,那所以内内环这块呢我们就暂定先给它一个三。但这个三它到底是不是合适的,其实这个咱们还是得怎么着呢?得等外环是不是咱们统一都调完了之后,是不是再去做这个相应的这个去继续调整了,对吧?啊,是这样的,因为为为啥呢?因为大家要停一下,是KP这个事儿呢呃如果你调的大,那它确实是会出现超调,对吧?那我调小了,这个超调现象是不是就会消失啊?对吧?但是k调小了也会有它的问题。k调小了会有一个什么样的问题呢?就是我纠正错误的速度会变慢,但是没想是不是是不是这回事,对吧?你正常你这个输出对吧,是不应该是这个系数乘以那个误差呀,对吧?显然这个越大,那我这个是不是纠正误差,你给的输出就越多,我纠正速误差的速度就越快呀,对吧?好,那你这个给小了确实超调没了,但是我纠正速度纠正错误的速度会偏慢。大家能理解这个意思吧。所以这个呢呃也不一定说就是说我没没什么了就行,不一定就是说我这儿没有抖动了,那就算始调好了,也不一定你还得看一会儿就是它的这个纠正速度,那不能满足你的要求。
如果满足不了要求,那咱得怎么着呢?满足不了要求呢,也就是这个东西我其实还得调大,有抖动也得调大,但是你这个抖动又不能影响,这时候只能怎么着了,是不是他和他就得配合一下俩,对吧?哎,就这个大点这个呢是不是稍微来一点,是不是抑制它这个抖动啊,对吧?但是也得保证我这个调整的速度是这么一回事儿,他他俩其实一个相辅相成的那当然我们目前啊因为还看不了整体效果,所以这个我们就先暂定一个三点零就先这么着啊。好,我把这个视频停一下去。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

13-无人机-飞控任务-PID调参-俯仰角-外环-P-确定极性

13-无人机-飞控任务-PID调参-俯仰角-外环-P-确定极性呃,好了,各位,那接下来咱们要做的工作呢就是调整这个KT的参数了。看看这个咱们给多少比较合适啊,那不首先先确定极性,不知道的话,我是不是还是先给先给一就行了,对吧?
先给一试试啊,哎变一呃编译之后呢,我给它那个稍录一下,大家稍等啊。我先插上线,一会儿再给大家切屏啊,插线来这个拿过来好看上这个啊,然后呢最好是保证它的平衡,这个是龙量都得帮我扶一下,你得帮我扶一下,就是保证它的平衡,我稍录个啥行手不要抖来,我们给他说一句。
好了好了,现在已经ok了啊,是是行呃,现在呢我们接下来要做的事儿,就把这个线就给它拔了呀,对吧?咱给这个线拔掉。呃,完了之后呢,接下来咱们要做的是不是就是得呃这个给他解锁呀,对吧?来走好,大家先看现象啊,然后我们再分析他这个给的对不对啊?好,我现在是不是已经呃,给油门了呀,对吧?哎,想想,如果如果说我们给对的话,他现在是不是外围儿,我们的期望值是多少?那个角度零,那他是不是应该会努力的维持,这个就是俯像角是零啊,对吧?好,大家看看能不能维持住啊,哎有没有位数的动影,这我呃先说有没有维持路,同学没维持住,对不但是那咱们是给对了,还是没给对呢?来,我看看啊,你再想想我们是给对了,还是没给对呢?哎,怎么感觉我是不是没烧这个需脚烧了吗?呃,烧了啊烧了烧了。呃,那咱是这这个到底是给对了,还是没给对呢?好像我加上这个一之后,你会发现,就是他跟刚才咱那个就是我没加时候候现象是不是差不多呀,也是慢慢的往下唠唠一下,然后停,然后再往下唠又停,再往下唠,是不是又停了,好像也没看出来到底对不对?他是在维持还是没维持呢,咱也不知道。他是在维持,还是说没维持住,对不对?好好像不太清楚,没没关系,对,比一下就行了,只要一对比,咱就能看出来这个效果。比如说现在呢我先给他一个负的,我们再来看看看看这两者之间的这个对比是什么样的啊。好,那现在我变异大家稍等一下啊,然后呢我再给它消录进去,大家稍等啊,有线考察行,先待会儿儿明白切zerozerozerozero了之后呢,现在我给它捎不进去啊,刚才是给的正的,现在给负的,然后看一看就是这次他俩跟刚才有什么区别啊,来吧,那现在我们继续测试,呃,我现在把这个线还给他拔掉啊,拔的时候其实最好也要就是保持平衡,因为它有可能拔的时候,它这个会重启一下下吧。那现在我们就开始,我现在解锁好微信屏啊,没没投屏是吧?那我就先让他们行来走一下,好看类似的啊,来看这次我们现在是负责了,对吧?那这个怎么样?这次大家注意观察,他也没维持住,但是不是要比刚才咱们给一点零的时候下降的要慢多了,对不对?那就证明实际上我们刚才那个一其实是正的还是反的呀?是给反了这个负一才是对的。刚才那个其实就是因为就是我们这个值给的太小了,所以说它的效果不是很明显。如果你这个上零就给十的话,你给个负十,你那个再给个正十,你一看就能看出来这个区域啊。哎,是这样的啊,所以实际上咱这儿的应该是调调负数才对,就是正负。你要看不出来,你对比一下哪个能够保持咱们这个角度更接近于零,哪个就是对的,应该是这么一个思路了,对吧?哎,好了啊,那这个老赖说我停一下这个视频。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

14-无人机-飞控任务-PID调参-俯仰角-外环-P-确定大小

14-无人机-飞控任务-PID调参-俯仰角-外环-P-确定大小哎,好了,同学,那我现在先问一下大家,你说现在咱给的这个值是大还是小?那当然大小说的是绝对值啊,同学那肯定是小吧。你要是大的话,他是不是应该是努力维持住这个角度,但是他现在明显,刚才他他他尽量维持,但始始终是维持不住的对吧?同学所以肯定是小小的话,那得大点对吧?还是你胆小的话,慢慢来胆大的话,直接来个十,对不对?他这次他是有怎样的一个效果啊,来吧,那些来的时候重新编译,重新操作,大家稍等一下啊。好编译。然后呢,我现在插一下啊挑一下啊,对,这回可能就得不压着了。哎,那现在咱们给它捎不进去,好刷录了之后呢,大家来看一下,这个就是这个现象啊,大家可以猜测一下,你说这回他正常的现象应该是什么样的呢?如果那个质量给大了的话啊,那会怎么着?我们哎,走吧,最高的同学看啥,大家看到没有?是不是来回的就是抖动啊,对吧?但是这个抖动跟刚才咱们那个就是那会儿那个抖动它效果不一样,刚才那个那会儿的抖动是什么样的,确实是确实抖。但是它抖的时候,它会怎么着,慢慢的时候朝一个方向翻滚过去啊,对吧?但是咱这个呢是怎么着,是在是不是这块来回这么抖啊,对吧?说明他是在努力维持,这个是不是负下角是零,对吧?但是维持的时候有点过了呀,对吧?所以才会抖动。那显然这个参数调的有点太大了,那太大的话,那没啥好办法,那再调小点呗,对不对?那所以接下来咱们要做的就是给它调小,那刚才一不行,十有点大。那所以还是咱们先取个五点零,先看效效果,效果怎么样啊,来吧。那接下来呢我们给它稍录进去,大家稍等等,我还是编译了吧,我这个床还挺稳,这就给放好了,大家稍等啊奶烧肉。哎,超了之后呢,我们还是接着看这个效果,我遥控拿下来啊。哎,呃,首先呢我把这个线给他拔掉,扔一边对比好下来的结果去做好看,这次怎么样啊,油门推到一半就行啊,哎还是抖,但是明显比刚才是不是抖的小点了,对吧?
抖的小点了啊,哎基本上维持了再好就行,但是当然肯定还是大的,没啥啥可说的,对吧?那所以下来大家要做的还是再给他调选这个我调成多少呢?调成三对不对?调成三,那就只能是这么来了,来介绍呃,这个拿过来好,先买点儿呃,财务就其他呢我再稍微进去。呃,然后呢切一下这个屏幕。好,那大家大家看这个怎么样啊,来还是献给他八六。比如说呢我们解锁,哎,这是三个啊。哎,你看这个震动的是不是又更小了,但是他慢慢的越来越大,慢慢的越来越大,那就说明还得有什么还是有多少,他他基本上能维持住了,对不对?就是这个平衡啊,那明显还是大,那所以接着调呗,这都已经到三了。同学啊,那所以接下来咱们就刚才一不行,这个三那这次咱们试试二呗,对吧?试试二啊,哎这回我们再重新的给它进行编译,就是这个东西咱们不能不能着急啊,其实我们这个哎程序其实会优化一下,就是咱们要是在遥控那边啊,咱们加了一个功能,可以用来做调试的,对吧?那比如那几个按键,我一按哪个键,我这个PID参数就调大点,哪个调小,是不是就不用来回这么去,一会儿稍录一会。
哎呀,哎呀,对吧?哎,这个确实有点麻烦来吧,那我就看看这二啊,就是咱先这么着吧,来接着往下走。喂,我这个线应该是哪儿输了,这边没插上,ok买电瓶车呀。好,这回刷安的这回是二点零的啊,二点零,看看这次怎么样,这是拔掉好了,这个完成啊,结束了拿下来,然后停会儿对号叫什么二点零,其实还是会走的。大家看到没有这个二点零,它还是走,哎,哎呦,还是走啊,但是他慢慢的能回来,有没有看到你他他其实在努力的回来,但是可能还是回的有点费劲。那那现在是不是要回来来了,但是他还是会走,那既然是走,那就说明什么还是有点儿还是有点大,那刚才一是不是有点太小,现在二又有点大那一点五呢?其实大家应该也意识到了你这个值调的越小,它这个角度回复的将来肯定是越大越慢的。那调太小的话,其实也不合适,就是即便说它不抖了,你这个调这么小,好像也不太合适,为啥?因为你比如说来点风吹草动,我是不是得等半天我才回不来呀?对不对?纠正错误的速度太慢了,也不行。咱们不是说他光光不抖就行了啊,咱们还得让他快,我们的目标是又快又稳,对不对?但现在我们现在只是在一味的求稳,其实并没有求快啊,那一会儿我们再看看怎么着怎么样啊,看一点五的这个效果。哎,结果那我切屏了吗?同学我也没切是吧,我切一下啊,我接着听呃,这个那现在呃微信解锁了啊,不用玩了,这是一点五的效果啊。同学哎,也是在慢慢的走动,然后是不是逐渐的回稳,对不对?然后大家注意观察,我现在我给他一个给他一个给他一个就是外力啊,比如说我现在给他归到这样一个倾晰的角度。然后呢,我动手看他能不能回来,他在努力的回来,大家看到了吧,努力的回来啊,但是但是但是很慢,他很慢啊,慢慢的能不能回来呢?其实也你看不是也能凑合回来呀,对吧?回来之后,是不是又出现了走动了,对吧?
就是咱这个参数啊,现在光调这个p值是不是可能已经不太行了呀,对吧?就是就算是我我当然目前看它出现它仍然有抖动,仍然有抖动,是不是说我们这个值还是有点挺高,还是有点大的对吧?OK你再小,比如说我给它调成,比如一点一一点二,对吧?你就算是调到那个位置,它即便说不抖动了,但是我们也看到了,它回来的速度是不是非常慢呀?这个远远是达不到咱们的要求的。所以说现在我们光调这个东西,就是已经满足不了咱的要求,光条他已经满足不了他的要求。
所以我们得怎么着了同学,哎,所以应该怎么着了。前面讲过啊,就是如果说靠KP能够解决,对吧?能够就是在我们就是规定的我或者说我们的要求的这个速度呃,时间之内就是回回到咱们这个期望值。如果他能在规定的时间内到达这个期望值OK那我们就只投它就行了。但是目前来看呢,是啥呢?光靠这个东西应该是不能在我们就是期望的这个时间内去来到这个期望值。因为它回复的太慢了,我们的期望值现在就是一个角度是零嘛。对吧?它得半天才能回过来。那这而言,你这个真来点风,我得调半天,我再回复,那这个响应速度太慢了啊,所以那这肯定不是咱们的思路,光调它应该不行,我们得满足两点又快又稳,就是回来的也得快。然后呢,你还不能超调,这是咱们呃就是最最理想的一个效果。所以这儿咱必须得怎么着,同学就必须得是不是得用到这个KD了呀,对吧?OK好了,那也就是说我们现在这个值其实不应该调这个小你调这个小你你是不是不管你KD怎么调这个速度,它肯定是上不去的,对不对?你要想上速度这个事儿,这个数是不是一定得给大呀,对吧?所以咱现在的思路应该怎么着,你这个你倒不如啊,怎么着呢?你把它再调调什么,你再调高点完了之后呢,你抖动抖动靠谁消除,是不是靠KD消除啊?对吧?因为是这么一个思路啊,所以接下来咱们要做的就是调整KT和KD对吧?他俩配合,然后呢实现一个又快又稳的消果啊。好,我现在先停一下时间,单单独。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

15-无人机-飞控任务-PID调参-俯仰角-外环P增大&内环D调整

15-无人机-飞控任务-PID调参-俯仰角-外环P增大&内环D调整哎,好了,各位同学,那接下来我们进入下一个环节,看看咱这儿怎么调是比较合适的啊。
呃来吧。那按照我们的分析,这个数给太小了,无论如何也满足不了我们的要求,对吧?所以我倒不如能够大点,对吧?刚才我们给十的时候是疯狂震动,对吧?我们给五的时候是不是稍微的轻微的动,但是它肯定也是能够保持,也是能够以一个较快的速度时候回到这个中间呀,对吧?我们先给个五吧,先给个五一会儿不行,你要是觉得它再大,那你这个是不是再调大点了,对吧?就是这么个思路啊,说我们先给个负负五啊,也就是它的绝对值啊OK那接下来呢咱们要做的其实就是调整这个KE了呀。哎,那KD咱们有内环外和两个d值。那我们先调谁呢呢?这场就还是那个原则,咱们先调谁先调内环,但还是先调内环环啊,为什么?因为因为内环它响应的速度比较快的,对不对?它有点同是可论,它能能感知出来,我优先调整内环啊,所以这回我们这个内环的KD咱们先试着给一个。那当然这个是不是理论上也应该有极限啊,那我们是应该给正还是给给负这个是不是咱也得试试才行,同学啊,对不对?好,那所以接下来呢咱们就试一试啊。好,那现在同学问一下,大家在我们没有KD的时候,我们这么调,那刚才也看到了,它是不是会在就是中间这个角度是不是来回摆动啊,对吧?理论上KD有了之后,我要是给对了这个方向,那我这个摆动的幅度应该是变大还变小变小,对吧?你要是给反了,那什么摆动幅度会变大呀?嗯,能所所以说咱们这儿呢还是得先确定它的极性啊。呃,大小不知道的话,我的这个极性不知道,我还是先给个正的,咱们先试试看效果怎么样啊,来吧,那我现在编一,然后呢刷录啊,我先这这线插上,哎,大家稍等来这个拿过来啊,我现在先给他放平了。行,好评了,平了之后呢,接下来呢我给他去稍微一下啊,在做里。好,那现在我们来看一下这个实际的效果。同学啊来这边呢我把这个线线了拔拔啊,好,拔掉了啊。然后呢我们现在给它去解锁。好好,大家看一下,就是这次的建议是什么样的啊?来大家看到没有?是不是现在稳的很,就是在在视频上看是不是已经很稳了同学,但实际上在在就是在我这样来看它,实际上是在快速的震动,不知道同学能不能看出来啊,现在能看出来吗?你看我给他推一个脚步,完了之后,我动手他会回来。但是回的过程是不是一直在进行抖动啊,对吧?同铁,那说明咱现在的这个说明咱现在的这个就是方向是给对的,还是给错了,给对了。你看我是不是刚才我没就是给给负五的时候啊,给负五的时候,这个东西它实际上是一直在哪啊?一直在来回摆动,对不对?OK好,那现在我给了一个KD首先那个大幅度的摆动是不是没有了呀?对不对?OK好了呃,那首先证明咱们一定是给对了这个方向。因为你要给反了的话,按照我们分析呃,它理论是会让这个摆动是不是越来越大的呀?对吧?哎OK好,所以咱们方向一定是给对了。接下来咱们分析,我这个大小是给大了,还是给小了这个得分析分析呃,这个得分析分其他同学,我现在呢我再给他给油门,然后呢注意注意观察同学啊,我这边把这个打开,然后大家更观察,就是我现在给他推一个角度推缴的时候,那里面应该得自己回来,对吧?你让他回来,回来的时候是怎么回的,能看出来吗?这个摄像头上看不出来是吗?我我我看一眼啊,点一个角度啊,也能看出来一点,他是慢慢的,是不是震着往上走了,嗯,对不对?他是怎么来的?他实际上是就是我给他就是慢速的回放一下,看到没有?刚才是给了一个角度,他回的时候他是正回的,走停走停走停走停走停,它是转回来的,他不是直接一下回来的那大家想想你说这应该是给大的,还是给小的那个值应该是给大还是给小注意他是怎么着来着,他是要怎么着,他是要阻止这个变化率,是不是变得过快呀?变化率变得越快,那是不是它会让这个输出越小啊,对吧?所以说它是在阻止变化率变得快,那所以咱是给答案也可以,小啊,肯定是给大了,对不对?同学这说明什么?他认为你回复的时候,你这个角速度变化率太快了,它是不是让你这个输出比降低啊,对吧?让你这个角速度变得更慢,因为咱调的是内环嘛,对吧?哎,角速度变得慢,是不是继就有可能会停一下啊,慢到极致,是不是就停了同学?哎,但是停了之后呢,我外环发现我现在还是有角度去停,那会儿继续调整。那所以它是一个停一下,哎,走停一下,走停一下,它是这么一个思路。那所以说咱这儿呢,应该是给大了,应该是给大的话,那接下呢我们给小一点事实,那给小的话,你一点零大,那我要是北小的话,那就给给多少,是不是给个零点一就行了,对吧?ok好,那这个拿过来好了,那所以接下来呢我们再给它稍录进去看一下这个线怎么样啊,拿过来走。好,现在保持正常平方数了。那接下来呢这个是零点一啊,其实一般情况下就是这个呃KP它一般会都会比下边KIKD至少得多一个数量级。
你看正常,你这个KP拿着是呃,个位数字,对不对?那这个呢一般就是零点几就差不多了啊,是这样的啊,呃主主要的大头还是在这个KP上面啊。行,那现在我给它捎不进去了,那现在呢大家看一下这个效果,这一次它它是怎么样的一个效果啊?哎,稍等啊,我把这个给他拔掉啊,然后呢解锁,然后再往上走。好,现在其实挺稳的吧。同学大家注意我,我给他一个角度啊啊。好,哎,你看这一次是不是一下就回回过来了呀,走对吧?同学,但是回就是他回来的时候,他回的很快,而且不是像刚才咱们那样,就是他来回及走,不是那么回的,对不对?他是怎么回的呢?他是直接回来,但是回来之后是不是有一个反弹呀?大家看到没有?就是那就说明你这儿是不是还是出现了什么操规令,还是出现了超调,对吧?理论上你要不出超调,应该是我回到这个水平之后,立即停下,不会过去,对不对?那还是有超调,那就说明你这个值有点很高,你这个又又小了点,又小了点,就是这么一回事啊。所以小了之后,咱你要是想调合适的话,是不是还得再调大点儿,对吧?哎,这回你正常你可以给个当然是一不行,现在是零点一小了,那你正常给个零点五是不就可以了,对吧?哎,ok好,那我这边呢我暂时先给个零点二了。因为我之前测试的话,应该是我这调到零点二呃,零点二呃,是比较合适的,或或者咱咱来吧,其实零点五也行,这个我也测了零点五也行啊,零点五也行,来,我们给它零点五,其实基本上这个范围就差不多就定下来了,就是那质疑到底哪个更合适?有时候可能你靠肉眼,你都看不出来了,就是你比如说调成零点三五,我调成零点四,你肉眼你都分辨不出来,对不对?它可能差的差别就是很小了啊,这东西对这个东西,然后每个人调的时候可能都有所都有所不同啊,都有一个细微的差别。好,现在我给他零点五了,对不对?拿过来,哎,咱给他捎不进去。呃,然后看这次啊呃还还是把这个东西给拔掉。对,拔掉完了之后,我们这边能给他给油推到最高,推到最低结合啊,别玩儿好,大家看现在是不是挺挺稳的呀,对吧?来注意,我先给一个小度啊,给个小度走,哎,看到了没有给角度好,是不是就是他能够很稳的回到这个水平,对吧?走,现在还有双程吗?同学走是不是没有空调了,但是我一下好像有点冷风,有点慢,对吧?这个有点慢的话,这个没啥太好的办法,你这回就得调别的同学,你要是觉觉得这吧九月二十八咱调谁KD是不是把这个KD咱们调大一点,对不对?
比如说我把这个值呢我再给它调到,刚才咱们是五十这个比如说给个中间值吧,比如说我们给个给个七给个八的,对不对啊,你可以这样再试试,看看能不能快一点啊,同学来吧,那咱就试试试试就试试啊,来吧,很啰嗦,这种地方呃,行,我现在已经基本上北平了,然后呢负七点零,然后呢这边三点零这个零点五来这边呢走着好,现在是不是已经ok了呀,对吧?OK了好了,那接下来呢我们再重新的去看一下这个效果啊,这个调的话挺费电的。我现在这个电还有几格话,就只剩一格电了,就有可能一会儿调着调就没电了,没电就只能插线条了,那就那就刺激了那道吧?还有那现在我这个对他b哎呀,来坐飞机呃,造飞机也是对我来走。但是这次啊现在首先它目前应该是一个平的,没问题,对吧?已经能保持平衡了啊,然后我先我切切了是吧?然后呢给个角度走。哎,你看这次走是不是回的很快走好,对吧?走来是不是很会很快啊?那个哎这这个其实就算是一个比较好的效果了,好走对吧?其实已经相对比较稳了啊OK好了,那基本上拿这个PID就是调到这个长度啊,就算是能正常工作了。其实这个就已经能正常工作了啊,是这样的啊。那也就是说至此呢,拿这个俯仰角差不多,就算是调整完了可以看到就是这里边我们是不是并没有用到这个KI下分了,对吧?因为这里边咱没有这个锁,就稳稳态误差出去,什么叫稳态误差啊?就是当我举个例子,我这个如果说它最终维持在一个,就是比如说倾斜角,它不再调整的,这是有有稳态误差,对吧?但没有没有的话,那就不用调它啊,所以这边呢基本上就是这么一个值。当然大家呢自己在调的时候呢,也可以在更精细化的调一调。比如说这个呢,我给个七点五,看看这个,我给个零点四看看,对吧?其实都行。但是课上咱们节省时间,就我就不再带大家再再去调这个细条了,这个已经能够正常工过了,基本上啊好了,那我把这个视频给大家填。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

16-无人机-飞控任务-PID调参-俯仰角-内环D调小

16-无人机-飞控任务-PID调参-俯仰角-内环D调小阶段啊,哎好了,那刚才呢我们是把那个KD调成了零点五。那现在呢我们因为零点五回复的有点慢啊,所以说我们这块呢又把它调成了零点二了啊,零点二回复的又快了快了,但是有一点点轻微的调调,这个我们是可以接受的啊,那一一会如果一会儿不合适,我们再适当的给它调大一点也行啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

17-无人机-飞控任务-PID调参-偏航角

17-无人机-飞控任务-PID调参-偏航角
    对呃来各位同学。那接下来呢我们来看一看,就是目前这个偏航角的PID的参数PID的系数全为零的时候,当前的现象是什么啊?呃,来我现在呢需要把这个给它拔一下啊。呃拔了之后呢,我现在已经把那个程序捎进来的同学啊,拔了之后,我需要给它就是重启一下,为什么重启?因为呃因为大家应该都知道,就是咱们那个去呃,我再问一下,大家就是启动它的时候,一定要保证它水平。这个事候大家能想明白是为啥吗?因因为我们刚启动的时候,是不是会去计算我们那个MPU六零五零那几个轴的那个零偏呀,对吧?如果你本来就是倾斜的,然后你计算出来那个偏移量是不是就会非常的大,对不对?那它就会认为你现在就是水平的那一会儿的调整是不是都是朝着这个方向调了,对吧?肯定就乱套了,所以一定要保证它启动的时候水平的那所以现在大家呢就是先给它呃调平了。完了之后呢,咱们关机,然后呢再开保证它水平的时候开啊。好,那现在呢我这边就已经开了,然后呢,我结合啊,现在已经接走了,对吧?给油那点油就打走了,稍微等一下啊,老聊。ok好,这是咱们目前没有这个就是调那个就是咱那个平衡角的时候,它的一个效果。你看它其实水平方向是能平的对吧?这个大家能能能看出来吗?就是我这个东西它是一个下边是一根杆儿啊,一根杆啊啊,所以说他现在是自己能保证平衡,但是这个旋转它其实自己控制不了,对吧?
同学就是它这边有点风,就是你可能你开着窗户哪儿来一阵风之后,它可能它就会旋转。那我我直接推,那我怎么推,它也是会继续旋转。但是到目前老是往这边走,这个跟它周围的环境其实有挺大关系的。你周围环境我这边离这儿近可能有有点这个就是牛风过去之后,它它它会有反作用力什么的等等,都会受到影响。总之它现在是保证不了它这个就是z轴方向的这个平衡的,没没没办法同学。哎,这样,但是水平方方向们们才才看到它其实维持的还是比较不错的对吧?哎,那就证明我们刚才的那个偏航角和哎,刚才咱们那个俯仰角和横滚角PID调参调的是OK的。
好,所以接下来咱们要做的就是调整的话的这个z轴的这个所谓的偏航角PID的三份啊,来吧。
那看这块具体怎么调,老规矩,咱还是先从那块儿调起,对吧?调的话还是先调p就行啊,那p这块呢我们老规矩还是得先确定它的极性,对不对?哎,那所以这边呢比如说我们还是老先来个一,那就来个一来个一之后呢,我重新的编译,然后呢大家稍等一下啊,编译完了之后呢,我现在呢给捎录进去,呃,稍微录一下啊,咱给它插上好,插上之后,这回就没法保持和平衡了啊,就是只能让一会儿再重启一下。编辑完了再来我刷进去啊,现在我调的是这个偏航角。然后呢KP现在是等于一点零啊,呃ok然后呢我们来看一下这个效果怎么样。嗯,来我这块呢还是先把线拔掉?完了之后呢,为了确保他每问题你几下啊,遥控拿下来呃,终结。对对啊,关掉开机啊,开机了啊。呃完了之后呢,我现在呢解锁走啊,最动成功没有。然后看这次啊就是我给的那一个数,对吧?呃,首先大家需要注意的一点,就是咱们那会儿是干什么用的来着?咱那个那会儿是干啥?那会儿是不是也是维持那个角速度为零啊,对吧?同学,如果我们给对了的话,它应该是尽量的会让这个角速度是不是朝零靠啊,对吧?那所以接下来呢看着我,我就随便给它一个,就是呃一个力,你让它转啊,你看它是不是会会会停下来啊,哎我随便给一个走行没行,同学他好像不听,他是一直在等呢,是不是一直在转呀,对吧?好像不会停,对不对?而且每当要停着的时候,它就又转起来了,好像是这么一回事,对吧?你看现在他可能是受到了反应作用力。因为我们那个值给的特别小啊,就是目前来看,其实咱们看不出来,它到底是给对的,还是没给对啊,所接。接下来大家这样,你要是想看实际的效果,实际上你可以试着怎么了?同学把这个数给它,你比如说就是分不清正负,你就给它给大一点去分能理解这个事儿吧。同学,那接下来我这样,我就先给他一个负的,咱们看一看负的这样的一个效果是什么样的啊,来重新的这个变异,然后呢重新少录一下啊,我感觉这个可能是给反了,我感觉应该是给反了。呃,这边呢稍稍呃上路完了之后呢,咱们再看一下呃,还是拔掉晚点,忘了,我重启一下啊,来开机。哎,好了,那现在我们给他解锁啊,走干嘛啊,已经接手成功了啊,来给油,他这是啊没共屏啊,没共屏是吧,这次好像他还是这样,对吧?其实咱好像也来来,我先让他停一下啊,停下之后呢,我再就推他一下,他好像也是跟刚才差不多的一个现象吧,刚才是不是也这样。哎,但是这回他会反转了,哎,他停没停下来,好像停它它有这个停的趋势,对不对?但是它为什么一直就是在在转呢?它停不下来,是因为可能周围这个就是吹过去之后,这个风它它有缓作用力嘛,对吧?就是导致它它会一直在动啊,就是因为我们现在没没有办法控制它的角度,我们控制它的是不是角度度趋近于零啊,对吧?它现在就是动一会儿,你看它停不停,我这个杆儿其实也不稳,这个杆儿也一直在晃,我把这个杆固定一下,怕的怎么着啊,不然你不行,嗯,好像也停不下来,所以这个到底是给正了,还是给反了。其实我现在也看不出来,这个咱就要不就把这个数咱等着吧。调大点,我们看一看它的效果怎么样,是这个意思吧?同学比如说我这儿给它上来整个多少呢?整个十咱们给个十,我看看能不能定住啊,他要再定不住的话,如果这回这回如果这个负的要是反的,咱们要是呃推他一下,他应该会怎么着疯狂的加速旋转,应该是反反的,是不是加速原转,对吧?要是正了的话,我推一下应该是会停的。哎,呃,对吧?所以说接下来我们看一下这个十啊,你给一的话,这个效果不明显,我也看不出来啊,来这个咱们烧一下,看这次怎么样,这个哪里来呃,烧饼拿过来之后呢,然后给它刷进去啊。行了,然后看这次的啊呃供点,我这个我来看啊,这次先关机没有完了。好,嗯,再见啊,结合啊,应该是吧,解锁了。唉,我这个有点太快了啊,没接没解啊。好,写完了,来水油门那个啊,他还是转。但是这次我推着这个杆点啊,这咱们推他一下走,能停下来,对不对?拿这边对一下,这会儿好像有点旋风似的啊。就是我不行,我把它出去给咱们找一个稍微空旷一点的,我调一下这个摄像头就推出去了。大家看一下这个能能能凑着看着啊,就我总感觉它好像有点旋风式啊,这个角度能看到吗?
还行啊,呃然后看这个走,好像他总是要往这边调。对不对?然后呢,我再往这边飞,能不能停,他能停下,能能降下来吗?带走不太一样,也能差不多屏。哎,好像一直效果都不是很明显啊,是不是咱们这个参数绝对有问题啊啊,是有问题是吗?跟之前好像一直都是差不多的效果,对吧?估计这块儿没有供应上了,我总感觉是是哪写错了是吗?呃,偏航角的魔术转换系数好像写错了是吗?咱看一下啊,偏行角的,我们找找啊哦这个地方哦,确实啊就是咱这是不是应该是乘以一个什么东西,是不是得乘咱们上边的这个比例啊,对不对?结果咱乘的是这个东西,所以就是好像其实说白了就是一个比例的事儿,就是我们调的那个数是不是一直好像都是没起到太大的效果,也一直都是大还是小,因为一直都是比较小啊,估计是这样的问题。那所以这边咱们调一下啊,效果一直不明显啊。行,那这个就咱先给它纠正过来,完了之后,这回再看效果啊,我现在给的是负十,对不对?负十啊,那现在我重新烧录一下啊,看这次哎,那我重新烧一下啊,看这次怎么样。七元呃,就是比较情况,这没有效果,一直不明显。
来看这次啊,嗯我还给拿拿来吧吧,那一那那会儿好像看不太清那块我就放在这个地方呃,放在这儿啊,然后呢把这个东西再拿出来,这儿看见有啊,看不见知道的。嗯,对,那哎嗯这就行了,对吧?哎,好,那我刚才这个程序烧没了,烧了吧,那是超了啊,超呃,超了。呃,他完了之后往上翻一下,就是我们那会儿给的那个参数,现在给了多少,咱们给的是负负十,对不对?OK看这次的啊呃切一下屏幕。好了,完了之后呢,我们再把这个东西给它拔掉,然后呢去重新开一下机。好,开机看一下啊,解锁,然后拿下来别玩儿。好,来,我们看这次的啊呃目前是不是已经能够维持这个角速度为零了,它基本不怎么动啊,来我我我手动推一下这个杆儿呢,有点那个不稳啊,大家看是不是他很努力的,再怎么着在维持这个角速度变成零对吧?它已经到什么程度到,就是因为它要调整这个电机的这个转速嘛,就是说哎带着他快按理说他不应该不应该倾斜吧,对不对?同学,我们这儿应该是哪给货的那正常我觉得应该是不会倾斜的吧,那就是我这么转,他应该是啊,其实其实没错,就是你看它这个转速啊。同学,你转的话,是不是那两个坏了,这个对角线是哪嘛的呀,对吧?其实应该还好,但是这个应该是怎么着呢?应该是咱这个值,我觉得应是给的有点过大了,只给的有点过大了啊,过大导致什么呢?就是呃到了一个什么程度啊,就是到了一个这样的程度,就是我推的过快,它调的过快就会导致比如说只让这两个电机转,然后这俩电机就怎么着了,就停了。这样一来看是不是就保持不了这个平衡了呀,对吧?然后所以它就它就会往一边往这儿偏,或者往这偏,大家能理解这个意思吧。哎,它是这样的一个现象。所以应该是应该是没问题,就是只给右右儿过大了啊。所以这个时太大了,但是这个方向对不对?同学方向对不对?
方向也给对了,你要是不给对的话,它不会说让它停下来了,它会疯狂的旋转,对吧?试一下测一下,咱们看看这个什么效果。我给十的话啊,大家稍等一下,我就百分之十,咱们咱们瞅一眼啊,这个可能有点危险啊,我觉得这个应该用不着我推,因为咱们这儿有空气流动,稍微给它点风,它可能是不是就会让它加速的旋转呀,对吧?来烧了啊,然后来看一下这个效果,那我得我得我得少点啊,先这个关机,然后再开机,那我截图啊,手提包。
好,我做好了啊,大家看到没有?自己就是不是一直在这儿疯狂旋转呀,对吧?就这个应该没啥问题了,对对对吧?同学,所以一定是给反了啊,那所以这边呢咱这儿给了一个负多少,给了一个负十,刚才对吧?
负十这个值肯定是有点大的对吧?所以我们这儿调小一下,呃,因为刚才负一的效果是什么样的,我们是不是没看出来呀,对吧?所以现在我们再给它调成负一,因为刚才那个有个系数咱写错了嘛,对吧?那现在我调成负一看看负一是什么效果啊?总之这应该是一个负数,应该是一个负数,来把这个给它插上。好,然后呢收入OK那现在呢这个就负一调好了啊,然后呢,看一下这个负一是怎么样的效果,这个拔掉遥控拿下来,那这边咱来一个喂结束了,我还在说啊。首先他现在是不是能够保持平衡,对吧?然后我说一下啊,你看这个角度它能不能停下来,能停能停,但是啊啊没截屏是吗?我谢谢你啊,你看就是它其实是能凑或者不行,但是很有限啊,就是这个效果对吧?很有限,而且它一直在往这个方向转,那肯定是因为我这个空气流动的问题啊,其实能停,但是就是小,所以这个值你要是给负一的话,应该不太合适吧,同弟没电了,没电了是吧?我我我换一下电池啊,好极性难已经确定了啊,是负数。然后呢,这个大小我们稍微负一这个调成负五。好,那现在呢我们再重新的编译,重新稍作,大家稍等一下啊,来给它收进去,我现这个产线。嗯,好,现在我稍入进去。ok好,现在咱们看一下这个效果,来,我把这个拿过来来,大家看一下啊,这个法院重写一下,确保没问题啊。好,已经ok了,现在我们解锁来来来,你又解锁了啊,那我先把手拿掉啊,刚才这次呃是什么呀?我们现在改成负五,对吧?哪个现在是在能看到,对吧?来,我归他一下啊,他这个基本上是能够是不是停下来呀,基本上是能停下来的啊,但是还是会有点儿有点栽头的这个这个这个这个这个事儿出现,对吧?这是因为啥是因为我刚才就是启动的时候,它并没有平衡。你看就是目前它其实就一直处在一个什么,不是一直就处在一个就是不太平衡的一个状态,对吧?本身就不平,这是因为我开机的时候我没调频啊,去咱们就看他这个角度。
你看我对一下,哎,这个好像还是有点儿栽头的这个事儿不见,对吧?那这个是不是还是有点儿,这是大还是小啊,好像还是有点大啊,我觉得还是有点大,还有点大,那我们这个再给调小点吧,有点太大了啊,这个我们调成,我看调成多少比较合适呢?比如这个我们给它调成个,刚才是呃负一,是不是有点小啊,然后这边负稍微有点大,那我们调成比如说调一个负三十,看三怎么样?嗯,哎这个咱们编译,然后再那个收录一下稍录的插线吧,这玩意儿就得一次一次的试了来。呃,好了,那这个就完事儿了。对吧?那完事之后,接下来我们继续往下进行啊,我看我我给速度那块没给错吧。呃,咱这边是左上,这是左上,对不对?来top,然后右下这是对角线,对吧?它俩是一样的,然后中间这俩是一样的,这个倒没问题啊,应该没啥问题啊。
行,然后计算PID那块有错吗?应该也没错吧。偏航角这个它要,然后是给ZZ乘以这个行,这个也没啥问题啊,应该没问题。行,那我们就接着调吧,就是现在是不是给到负三了呀,对吧?SNE然后呢,咱给它收录,这回我开机的时候,我尽量保证它是它是水平的不对,我现在给它拔掉,我尽量保证它的水平。好,然后我重新开一下啊,ok开机现在我们给往上一点,往下一点来解锁了。然后开机来我们看这次的效果怎么样啊?现在呢比如说我我追他一下,哎,是不是能回到这个零,但是好像它有点问圆,好像它有一点点超调吧。
就是哎呀,我这个位置应该就是这个空气流动有点问题,就是它不静止,他不会,就是他正常情况下,他是不是应该是会有一个就是逐渐趋近于零啊。对吧?但是它一直旋转,应该是一直受到外力啊,我感觉但是我一推它它其实会做出反应的,我一推其实是会做做出反应的。
走好,这会儿推的有点不不水平嘛,你看水平都呃走走,这还是有点问题的,这还是有点儿,我感觉还是有点大呢?这个这个单给呃这边我想想啊,咱这个给多少比较合适呢?给给三是不是有点大给我,因为因为因为正常情况下,就是我我们推过去,他他应该能停就行,不至于说就是让那个电机转速直接就变成零了,然后出现偏这种现象,理论上不应该出现这种现象,对吧?就感觉还是有点大呢,这个我们给了多少呢?比如说我给到呃,刚才是三,现在现在比如我们给个二或者给个一点五试试啊,那你再试一下,试一下。那个来我们现在重新给它编译重新上录啊,再看一下这次的效果,月亮太太麻烦了,这东西啊只是一次一次的,他不至于让他出现这个偏的这个界面吧,哎,现在应该就差不多了,对吧?同学啊OK呃一点五万,我们现在再来看一下,这次为了拔掉这个膏会稍微的拧一点麻让的它那那啥来着啊,那我直一点吧。行,这边重新开机啊开机,然后呢可能再重新的解锁了。
好自由。好,那现在是不是就已经背起来了呀,对吧?那现在呢我们带同学注意一下走。哎,大家看这次是不是就已经不会再出现,就是说它翻了的那个现象了,对吧?就是调的是不是劲就没那么大了,然后它是不是也会也会也会趋向于就是那个速度为零了,对吧?但是它之所以一直在转啊,我怀疑就是开着窗画这个风什么的,就是它一直往这儿走。但是现在目前他他他是不是会掉?哎,好一点,你看现在是不是就靠未停了同学。但是但是又在动啊,又在动来,我们看看他会它会有一个停的过程。但是停的时后就立即要动起来了,不知道大家能不能看出来那停的那一刻,他现在时候停了一下,又又开始动,就是因为他只维持什么东西啊,只为值就是角速度为零,他不会管你的,这个就是角度,是不是咱们那个希望的那个角度,对不对?他只管角速度啊。OK你看你推它一下,它是会是不是倾向于平的呀,对吧?对不对?但是他一直调这个方向转,就是因为周围是有环境导致的啊,这个其实就没啥太好的办法。一会儿咱们调加上外环之后,可能就会好一些OK好走走,那他是不是能停下来的同学,对吧?能停下来,那就证明啥。那那就证明我的这个这个已经起PID已经起作用了。
PID已经能够就是说让它的这个角速度是不是控制在那个零那个位置了呀,对吧?那控制到底好不好?这个事儿呢,其实目前来看呢,就是控制的,其实稍微的有点怎么着呢?有点慢啊,就是稍微的回复的。有一点点慢啊OK这个我们就先这么着啊,一会不行,咱再说这个我就先给到一点五啊。
不行的话,一会儿我们再试着给它调到,比如说调到二或者是一点八呀,一点九啊,这个上下动一啊,不行,先这么着啊啊,这个先这么着啊,同学这个基本上我们能看出来就是它是可以让就是这个角速度是不是趋近于零的了,对吧?OK接下来咱们看外边有活这个其实还是老规矩,我们是不是还是得先试它的这个极性啊,对吧?所以这时候我还是先给个一点零呃,注意这个值千万别给太大。你像我刚才给大了,给大了之后,它的效果是什么样?就是说调的太狠了,直接是不是某一个对角角线这个电气转速降为零了呀,对吧?降为了之后,他直接整个是不是就就偏了呀,对吧?这一定要注意啊。好,这边呢我们调成,比如说呃负的一点五完了之后,上面那个点成一点零啊OK我们看一下这次的效果是什么的啊,当这这呢呢你就还是得先确定方向,看方向,对不对啊?大家想如果这个方向要是对了的话,它应该是什么样的。对了的话,应该是基本是能固定在,是不是起始那个角度啊,对吧?注意啊,就是同学要注意一下问题,就是咱这个所谓的偏移量偏移量啊,或者说这个误差是跟什么?是跟我起始的时候,是不是那个角度能理解吗?是不是一直都是起,因为起始是零吗?起始角度是不是零了,对吧?好,那所以说咱们的误差其实说白了都是相对于起始的那个位置,起始那个方向的误差了,对吧?它应该是努力保持在就是起始的那个位置,那个角度啊,这一点要注意。所以一会儿咱们得看它起始是朝哪边的啊,来。
所以如果调对了,它应该是努力维持起始的那个位置。如果调反了,那就不是了啊。OK好,那所以这两张看一下,我变异,然后呢我稍录一下。好了。那现在呢咱们一起来看一下,我这边呢还是把这个拔掉。
然后大家可以观察一下,我现在的机头方向是朝哪边是朝是面向大家的对吧?
这是那机头啊,这是机头,大家看看能看了吗?嗯,啊,这是这是这是机头啊,所以他要是调对了的话,应该是努力维持这个方向。我熟悉一下啊,重启回来之后怎么样合同拿过来,然后我们接锁啊缩减,然后往下啊,马上走。哎,看他们能不能维持住啊,走,你看他维持了东学,他不维持,而且还一直就是越分越快了呀,对吧?这个明显我们应该是怎么着的,应该是反了,应该是反了啊。呃,OK好,本来举个例子啊,我现在本来是朝这边的,他为什么会会这样呢?本来朝这边我稍微往这边偏了点,偏偏了点的话,他理论上应该让某个对角线加快。另外一个对员是不是减降低呀,对吧?然后呢,让他回去,结果呢他整反了,他反是不是肯定越越走越远呀,对吧?所以就会一直转这一看就是反了啊。所以反了的话,这边我们是不是就得给他来一个正呃负的一一一点零了,对吧?OK好,那所以说我们现在试一试看这个是什么样的效果。哎,大家说的嗯,又又被发现了,这边咱给他放上去,大家稍等啊。左点好,现在已经可以了。呃,可以之后呢,我们现在开始继续进行调试啊,我切一下那个摄像头不对,好,我这个给它拔掉,拔掉之后呢,最好重启一下啊,把重体把它找平啊。好,现在我们呢给它标门拉下来解锁啊,走好看这次啊好同学他这一次他其实至少没有像刚才那样,是不是那么动啊,对吧?你现在他是不是在慢慢的回到原来那个位置,但是因为有阻力,他回不去啊,因为我这个不知道风哪来的那一直往这边吹呢,对吧?来,你看我往这边吹它一下,他应该会回去没电了是吧?没电了。那还好,这个没电无所谓,这个没电了,他应该至少不会卷起来。对吧?这个咱就插了电也没事啊。
哎,好了,那我们接下来再重新重新重新解锁啊。因为现在进入iphone模式了,走走,但是但是插一个线吧,有一个坏处啊,坏处呢这个线会干扰咱们这个测试都要紧抗干扰这的测试啊,就是我我我这个线就是很难受这种。但是基本上啊就是咱这个刚才应该应该看到了,就是咱这个方向是不是应该是没问题的呀,对吧?OK是没电了,还是我那会儿过热了呀?就是拿那个是不是一个那个电子太烫了的话,它会都会有问题,对吧?不非我换个换同学的无人机啊,你看是不是烫了,我不写,我这别等了,这是没电了,我这又没电了,就是不变了啊。行,那也就是说我们刚才这个值调成多少之后,不是调成呃,咱们调成负一点零之后就发现它是不是有点那个有有有有有点那个小啊,对吧?哎,能回,但是慢啊,所以这边咱们在市场可以调大点,我调整多少,按照我们之前的思路是不是这个直接给它来到十就行了,对吧?来到十看一下这次效果怎么样啊,大下车等来收录一下,这个咱就直接插上线条,其实也没啥问题。这个倒没啥事儿,来,我给他刷录一下。嗯,是来我拿一下呃,就是你给到十之后,即便有这个线的干扰,应该就是也不行,应该也没啥问题。
我现在呢重新拔一下,对访完件之后呢,再重新查验。嗯,好,接下来我给他解锁,好,往下拉。嗯嗯,爷会儿哎,这个好像是有点过热了啊,就是现在我这个油门给给推上去,它现在这个电机外速也上去了,灰置有点过热了。那这样了,你要不我换个机器吧,我换一下这个同学去公园的测一下。好,来,我们看一下这个实际的效果遥控嘛,在这儿谁来啊?现在我们开始测试,我把这个拔掉呃,拔掉之后呢,这个最好重新拍一下戏,我拿了嗯,好大一下啊,中控开机好大致观察啊,哎我现在解锁,然后已经解锁了,对吧?嗯,三现在目前是基本可以维持在这个角度了,对吧?然后我推一下啊,对吧?是不是还行,但是还像有点什么,就是有有点超调,对不对?你看是不是稍微有一点高点,就是他会震一下,对吧?
今儿也还行,也还好啊,那就是我这边给过来也还行啊,也还行,稍微有一点就是你给坏了,他会震一下啊。
你要是觉得这个效果不太好的话,其实我们可以再试着把哎稍微调小一点儿。你要是觉得这个有点大的话,你可以适当调小一点。比如说你调个五啊,六啊七啊八呀的其实都行啊,比如我这儿呢,我给个五试试吧,我给个五试试啊,这个其实就相对比较灵活了啊。哎这个拿过来呃,拿完之后呢,我再给它烧一下,我们看看这个十这个壶怎么样啊?十其实也还行,就是稍微的有一点点潮焦来。咱们再看这次的啊,呃拿过来拿过来,这边呢还是先给关机,这个线线没有啊关机,了解好中间水平的一个角度啊来走来。好,现在是不是也能保持这个平衡啊,对吧?然后我对一下,我对一下,就是这我们也也没差太多,其实它的效果啊,就是它现在不震了,刚才是不是因为我这个本身一开始就不太水平啊,就是你看它是不是直接平的呀,对吧?刚才那个是不是倒了之后,稍微回过一下,然后再回来啊,对吧?其实这个就无无无所谓了。其实这个关于偏航角这块块呢不是很重要,因为它不会影响到我这个飞机的什么呀?这个稳定性对吧?它顶多就是可能会有一点稍微的旋转,对吧?这个倒还好呃,主要是什么呢?
主要是这个就是咱那个翻滚角平呃,横滚角和这个偏航角。主要是那两个啊,所以这个偏航角呢,我们就就这么调吧啊,就给个这个五六七八,其实效果都差不太多啊。然后下边这个我们给个一点五,那其实就基本上能维持咱们这个角度啊,其实这个就就这么着吧,我把这个视频停。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值