完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
关于MPU6050简单算法
**倾角传感器**(角度传感器,并不是四轴飞行器常用部件): 其基本的运动状态分别为 机翼 陀螺仪 电子罗盘 MPU6050九轴姿态融合传感器:3轴加速度、3轴角速度、3轴磁场数据 卡尔曼滤波 互补滤波 融合 PID 四轴飞行器飞行原理 就是指四轴飞行器,电机安装的位置。十模式,前进方向与四轴其中的一个电机一样,,X模式飞控的箭头指的方向则是两个电机的的中间 其基本的运动状态分别为 垂直运动 俯仰运动 滚转运动 偏航运动 前后运动 侧向运动 机翼 四个旋翼的结构和半径都相同,旋翼1和旋翼3顺时针旋转,旋翼2和旋翼4逆时针旋转,这样设计可以抵消陀螺效应和空气动力扭矩效应而导致的飞行器自旋。 陀螺仪 在四周飞行器中,陀螺仪是一种用于测量四轴飞行器旋转速度的传感器 那么,在小四轴上,陀螺仪的作用是什么呢? 我们知道,把一个物体悬浮在空中的方法可以是给物体的四个角施加拉力。如果物体某个方向的力度不够,那么物体就会因为重力的作用朝这个方向倾斜。通过在该物体上装上陀螺仪,就可以知道物体倾斜的方向,然后据此调整物体四个角的拉力,就可以达到让物体悬浮的目的。 倾角传感器(角度传感器,并不是四轴飞行器常用部件): 倾角传感器用于相对于参考水平的系统倾斜角度的测量,分为单轴,双轴,单轴只能测一个方向上的倾角,双轴能同时测两个方向上的倾角。从工作原理上可分为“固体摆“,”液体摆“,”气体摆“三种倾角传感器,还有加速度传感器测量倾角。 角速度传感器(角速率传感器、陀螺仪) 线加速度计的原理是惯性原理,也就是力的平衡,A(加速度)=F(惯性力)/M(质量) 我们只需要测量F就可以了。 多数加速度传感器是根据压电效应的原理来工作的。 所谓的压电效应就是 "对于不存在对称中心的异极晶体加在晶体上的外力除了使晶体发生形变以外,还将改变晶体的极化状态,在晶体内部建立电场,这种由于机械力作用使介质发生极化的现象称为正压电效应 "。 电子罗盘 指的是利用现代的传感器威廉希尔官方网站 ,能够输出数字方位信号的传感器,替代老式的指南针,方便与其他电子系统接口。广泛应用在,手持式仪器仪表、机器人导航、定位、航行系统、船用自动舵、八木天线定位、车载GPS 导线、航模定向,汽车指南针,虚拟现实等。 MPU6050九轴姿态融合传感器:3轴加速度、3轴角速度、3轴磁场数据 首款整合三轴陀螺与三轴加速度的新型MEMS传感器,解决了以往组合陀螺仪与加速度传感器组合使用时容易产生轴间差,可通过频率最高至400KHz的IIC端口,以单一的数据流的形式,向应用端输出完整的九轴融合演算数据。 ** MPU6050**初始化步骤: 初始化IIC接口 复位MPU 设置陀螺仪和加速度传感器的满量程范围 设置其他参数 配置系统时钟源使能陀螺仪和加速度传感器 关于MPU6050简单算法 以四轴常用的FS_SEL=3为例,这时陀螺仪的量程为-2000到+2000。 由于MPU6050采用的是16位带符号数作为陀螺仪测量数据输出,即数据类型是int16。所以以16进制来表示,最小的数是FFFF,由于最高位为符号位,所以相当于-7FFFF,即-32767;最大的数是7FFF,即32767。 综合上述的描述,我们可以得到,数字-32767对应-2000度每秒的陀螺仪角速度,32767对应2000度每秒的陀螺仪角速度。把32767除以2000,就可以得到16.40, 即我们说的灵敏度。 从上面的计算可知,把从陀螺仪读出的数字除以16.40,就可以换算成陀螺仪的角速度数值。举个例子,如果我们从陀螺仪读到的数字是1000,那么对应的角速度数据是1000/16.40=61度每秒。 在四轴姿态计算中,我们通常要把角度换算成弧度。我们知道2Pi代表360度,那么1度换算成弧度就是:2Pi/360=(23.1415926)/360=0.0174532。用倒数表示就是:1/57.30 通过上述分析,我们就可以知道,当采用量程为-2000到+2000的范围,把我们从陀螺仪获取的数据做如下处理,就可以用于四元数的姿态解算(用gyro_x来代表从陀螺仪读到的数据): gyro_x/(16.4057.30)=gyro_x*0.001064,单位为弧度每秒。 滤波 卡尔曼滤波 是一种时域滤波器,算法的核心思想是,根据当前的仪器“测量值”和上一刻“预测量”和“误差”,计算得到当前的最优量,再预测下一刻的量。 里面比较突出的观点是,把误差纳入计算,而且分为预测误差和测量误差两种,通称为噪声 还有一个非常大的特点是 误差独立存在,始终不受测量数据的影响。 互补滤波 当我们用三角函数直接解算出姿态后,需要对其经行滤波以及和陀螺仪的数据进行融合。因为加速度是很容易受外界干扰的,一个手机开了震动模式放在水平面上,实际角度是0度,但是解算出来的值是在0度正负某个范围内呈均匀分布的,这样的值显然不适合使用,因此需要陀螺仪的帮组。陀螺仪输出的数据是多少度一秒,对这个数据积分就可以算出系统偏转过的角度。陀螺仪受震动影响小,故短时间内可以信任它,但是陀螺仪会有温飘,其误差是随着温度而改变的,陀螺仪出厂后还会存在一定的静差,而且积分也有误差,故长时间不能信任陀螺仪。由于加速度计长时间来说值得信任,故可以用互补滤波来融合二者的优点,消减二者的缺点。 公式:Angle=0.95*(Angle-Angle_gydt)+0.05AngleAx;陀螺仪数据正负号根据自己需要而改变在上式中我们可以看出互补滤波是由两个小式子相加得到的,小式子前有一个系数,二者相加为1,我们可以理解这两个数是我们对加速度计和陀螺仪的信任度,你信任哪个的程度大点,哪个的权值就相应的变大,其输出数据在最终结果中占的比重也越大。前面一个式子是用陀螺仪积分计算角度,后面一个式子是用加速度计解算出的角度,当加速度计比重很小时就可以压制加速度噪声,也就是进行了低通滤波,前式也就是对陀螺仪进行了高通滤波。从公式中不难得出互补滤波的原理,陀螺仪占的比重偏大,短时间内以陀螺仪数据为准,加速度计占的比重较小,长时间内以加速度计来校准角度数据。一般情况下来讲,陀螺仪比加速度计的比值取值为0.95:0.05或0.98:0.02。当然也可以根据实际情况降低陀螺仪的比重。 互补滤波就是在短时间内采用陀螺仪得到的角度座位最优,定时对加速度采样来的角度进行取平均值来校正陀螺仪的角度,也就是说,短时间用陀螺仪比较准确,以他为主,长时间用加速度比较准确,这时候加大他的比重。 加速度计要滤掉高频信号,陀螺仪要滤掉低频信号,互补滤波器就是根据传感器特性不同,通过不同的滤波器,然后再相加得到整个频带的信号 弥补了对mpu6050来说,加速度计对四轴飞行器的加速度比较敏感,取瞬时值计算倾角误差比较大;而陀螺仪积分得到的角度则不受加速度的影响,但是随着时间的增加积分漂移和温度漂移带来的误差比较大的缺点 融合 所谓融合,就是把陀螺仪测量出来的数据和加速度计测量出来的数据以一定比重混合在一起。和大家在做蛋糕过程中,加多少牛奶,多少面粉方法类似。 PID 三角函数直接解算欧拉角+互补滤波+单级PID版本 效果:简单暴力,但是补滤波效果差,单级PID响应慢,打舵跟随效应差。 三角函数直接解算欧拉角+卡尔曼滤波+单级PID版本 效果:卡尔曼滤波噪声偏大,滞后略微严重,单级PID难操作,打舵响应慢,跟随效应差。不过比较适合初学四轴的人,难度比四元数加串级PID版本低,易于理解。 四元数姿态解算+互补滤波(德国开源四轴)+串级PID版本 效果:四元数难理解,基于PI控制的互补滤波不适合非专业人员,PID参数较单级PID参数难调。打舵响应极佳,稳定程度高,易于操作,是目前四轴的主流算法 单极PID:当你知道系统当前状态和期望状态后,如何将系统从当前状态调整到期望状态是个问题,在此我们可以用PID进行调整,PID分为位置式和增量式,位置式适合舵机等系统,在此使用的是增量式。 串级PID就是两个PID串在一起,分为内环和外环PID,内外两环并联调节,这样的好处的是增加系统的稳定性,抗干扰。 pid与滤波的关系,这也是一个很有意思的问题,一个是从控制角度理解,一个是从滤波角度理解。这一个我只是一点理解,就在这里先说一点。pid中,i相当于低通滤波器,极限情况下理解:直流信号肯定会持续积分,反而高频的噪声正负叠加被屏蔽了,所以i是低通滤波器。而D是高通滤波器,同样极限情况下理解:直流信号微分为0,高频的噪声微分却有了值,所以D是高通滤波器,和我们平时说到的D太大容易放大噪声造成震动等效。 PID算法的一般形式: PID的流程简单到了不能再简单的程度,通过误差信号控制被控量,而控制器本身就是比例、积分、微分三个环节的加和。这里我们规定(在t时刻): 输入量为rin(t); 输出量为rout(t); 偏差量为err(t)=rin(t)-rout(t);? 下面,我给大伙推理一下四轴如何平稳飞信的思路,欢迎各位批评指出 首先,为了让四轴平稳的悬停或飞行在半空中,四个电机必须提供准确的力矩->假设力矩与电机PWM输出呈线性关系,也就是必须提供准确的4路PWM->4路PWM由遥控器输入(期望角度)、PID算法及其参数和姿态解算输出(当前角度)组成,假设遥控器输入不变(类似脱控)、PID算法及其参数也较为准确(PID参数无需十分精确,但只要在某个合理的范围内,控制品质差不了多少),也就是姿态解算的输出必须是十分准确的,可以真实反应飞行器的实际角度->姿态解算的结果由加速度计和陀螺仪给出,根据前述惯性导航的描述,加速度计补偿陀螺仪,因此要得到精确的姿态解算结果,务必要求加速度输出精确的重力加速度g->这里仅讨论悬停飞行,因此忽略掉额外的线性加速度(事实证明,在四轴强机动飞行过程中,线性加速度必须要考虑并消除),假设加速度计输出重力加速度g,这个重力加速度g必须十分“精确”。 我先写到这里,总结一下:精准力矩->精准PWM->精准姿态->加速度计输出“精确”重力加速度g。这里的“精确”打了引号,意思不是说加速度的性能十分好,要输出精确的当地加速度g,而是说它能够准确反应机架的角度。为了达到悬停、平稳的飞行效果,控制算法输出的PWM会让加速度计输出的重力加速度g在XOY平面内的分量就可能少,也就是说:PID控制算法控制的不是机架水平,而是加速度计水平,PID不知道机架是什么东西,它只认加速度计,它的使命就是让加速度计水平。我现在假设加速度计与机架存在某个角度,比如右倾30°,四轴主视图如图所示。 上图中,加速度计(红线)与四轴机架的水平面(虚线)呈30°。起飞后,PID控制算法会尝试将加速度计调整至水平位置,因此四轴就会往图中左边飘,倾斜角度也为30°。这就是为什么飞机无法垂直起飞,或者飞行过程中往一个方向飘的原因:加速度计和机架没有水平。因此在加速度计的机械安装时,尽量保证加速度计与机架水平。如果有些朋友已经将加速度计固定在飞控板上,可以通过遥控器的通道微调功能设置悬停时的期望角度,软件上校正这种机械不水平。 位置式PID和增量式PID 输出不同:位置式PID控制的输出与整个过去的状态有关,用到了误差的累加值;而增量式PID的输出只与当前拍和前两拍的误差有关,因此位置式PID控制的累积误差相对更大。 是否有积分部件:增量式PID控制输出的是控制量增量,并无积分作用,因此该方法适用于执行机构带积分部件的对象,如步进电机等,而位置式PID适用于执行机构不带积分部件的对象,如电液伺服阀。 是否有记忆功能:由于增量式PID输出的是控制量增量,如果计算机出现故障,误动作影响较小,而执行机构本身有记忆功能,可仍保持原位,不会严重影响系统的工作,而位置式的输出直接对应对象的输出,因此对系统影响较大。 PPM PPM是四轴飞行器遥控器普遍使用的一种遥控信号格式。它的全称是Pulse Position Modulation,中文的意思就是脉冲位置调制。它是一种周期性信号,每个信号周期里面包含一个或者多个脉冲。 在四轴飞行器中,PPM信号每个周期时间是20ms, 即遥控信号的频率是50赫兹。在一个周期内,包含了一个同步脉冲和多个遥控信号脉冲,用来分别代表油门,方向,飞行模式等。比如在APM飞控上,用4个通道分别控制前后(Pitch),左右(Roll),旋转(Yaw)和油门(Throttle),用第5个通道来控制自稳模式,定高模式,悬停模式,无头模式,返航模式,降落模式,等六种飞行模式。 第一行PPM描述了一个四通道遥控器的PPM信号波形。图中共有5个低点平区间,时间长度均为0.5ms,用于代表四个遥控通道CH0-CH3的数据和一个同步码。另外,图中也有5个高点平区间。CH0-CH3的高电平时间长度在0.5ms和1ms之间变化,用于代表不同的遥控数据。 第二行PPM-1描述了CH0-CH3均为最小值下的波形,我们从图中可以看出,每个CH的脉冲时间宽度是1ms, 同步脉冲时间宽度为16ms。 第三行PPM-2描述了CH0-CH3均为中间值下的波形,我们从图中可以看出,每个CH的脉冲时间宽度是1.5ms, 同步脉冲时间宽度为14ms。 第四行PPM-3描述了CH0-CH3均为最大值下的波形,我们从图中可以看出,每个CH的脉冲时间宽度是2ms, 同步脉冲时间宽度为12ms。 第五行PPM-3描述了CH0,CH2均为最小值,CH1,CH3均为最大值下的波形,我们从图中可以看出,CH0,CH2的脉冲时间宽度是1ms, CH1,CH3的脉冲时间宽度是2ms, 同步脉冲时间宽度为14ms。 硬件 飞行器相关硬件包括:主控制器:stm32F103RBT6,工作频率:72MHz。姿态测量系统:双轴陀螺仪IDG650和单轴ISZ650,三轴加速度和三轴磁力计组合模块LSM303DLHC。无线通信模块:2.4G 无线收发模块nRF24L01.驱动装置:四个N沟道场效应管SI2302DS。动作执行装置:四个直径6mm的空心杯电机,两个直径45mm正反浆。供电装置:3.7V/130mAh锂电池 单极PID: 当你知道系统当前状态和期望状态后,如何将系统从当前状态调整到期望状态是个问题,在此我们可以用PID进行调整,PID分为位置式和增量式,位置式适合舵机等系统,在此使用的是增量式。公式:PID=Pe(n)+I[(e(n)+e(n-1)+…+e(0)]+D*D后面的当前误差减前次误差也可以直接使用陀螺仪的数据代替,原理一样。 串级PID: 单极PID适合线性系统,当输出量和被控制量呈线性关系时单极PID能获得较好的效果,但是四轴不是线性系统,现代学者认为,四轴通常可以简化为一个二阶阻尼系统。 为什么四轴不是线性系统呢? 首先,输出的电压和电机转速不是呈正比的,其次,螺旋桨转速和升力是平方倍关系,故单极PID在四轴上很难取得很好效果,能飞,但是不好飞。为了解决这个问题,我们提出了串级PID这个解决方法。串级PID就是两个PID串在一起,分为内环和外环PID。在此,我们使用内环PID控制,外环PI控制。单极PID输入的是期望角度,反馈的是角度数据,串级PID中外环输入反馈的也是角度数据,内环输入反馈的便是角速度数据。通俗来讲,内环就是你希望将四轴以多少度每秒的速度运动,然后他给你纠正过来,外环就是根据角度偏差告诉内环你该以多少度一秒运动。这样,即使外环数据剧烈变化,四轴的效果也不会显得很僵硬。在内环中,PID三个数据作用分别是:P(将四轴从偏差角速度纠正回期望角速度)D(抑制系统运动)I(消除角速度控制静差)外环PI中,两个数据的作用是:P(将四轴从偏差角度纠正回期望角度)I(消除角度控制静差) 整定方法: 将内外环PID都归0,适当增加内环的P,调整P至四轴从正面朝上自然转动到正面朝下时能感受到阻力,且没有抖动,有抖动就应减小P,当P减小到无抖动或者轻微抖动时即可。 让内环的D慢慢增加,到你用手能明显感受到转动四轴产生排斥外力的阻力即可,D能抑制P产生的振荡,但是D过大也会导致高频振荡,调整D至系统无振荡且能抑制外界的力即可。 给内环一点点I,注意的是I的积分要在油门开启后才开始,油门关闭就清0,且必须有积分限幅。I推荐取越小越好,我取的是0.01,I取大了会导致系统振荡。 将内环P减半,将外环P调至内环的50-70倍,根据系统产生的高频振荡降低内环的D,直至高频振荡消除即可。 给外环一点点I,根据实际情况对参数进行优化调整,调整过程中要注意区分各个参数的作用,时刻记住,P是回复力,大了会低频振荡,D是抑制力,大了会高频振荡,I是静差消除力,越小越好,大了会产生振荡。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1780 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1081 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
728 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1679 浏览 2 评论
1938浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
732浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
596浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
557浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 07:34 , Processed in 0.728425 second(s), Total 46, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号