最近做小四轴的一些问题
来源:互联网 发布:机顶盒的电视直播软件 编辑:程序博客网 时间:2024/06/07 20:24
最近在折腾原来做过的小四轴,把数据用Matlab处理了一下
主要有一个问题就是震动很大,平着放的话角度能震动到30-40度
但是装上桨之后就没那么震了,但是还有一个问题就是会死机
首先想到是电机转动的时候电池电压被拉低但是我调试的时候是连着串口线有供电的
所以猜想是程序的问题,我把PID部分去掉了,只保留姿态解算部分,在我不插桨的时候是好的
但是当我插上桨的时候就又死机了
但是我还不明白是怎么回事,好像和程序有关
感觉可能和芯片也有关
因为这个芯片可能是用过的旧芯片,即STM32F405
在我焊上去的时候是有读写保护的
在ST—Link Utility里面选Target选项更改Option Bytes.
先把几张图一存
上面是单片机1000Hz速度解算的角度(震到100多度了。。。)
下面是把陀螺仪加速度计的数据自己用Matlab处理的角度
这个角是pitch
角Roll
还是有些差别的
上面都是没插j桨的,插上桨的是这样
ax 滤波前 滤波后
ay 滤波前 滤波后
az 滤波前 滤波后
z的滤波的效果看起来还是不错的
三个角度 pitch roll yaw
imu的Matlab程序如下
clear all;clc;Kp=1.0;%比例常数Ki=0.005;%积分常数halfT=0.002;%半周期T=0.004;%周期为4ms%变量定义q0 = 1; q1 = 0; q2 = 0; q3 = 0; %四元数exInt = 0;eyInt = 0; ezInt = 0; %误差积分累计值 pitch=0.0; roll=0.0; yaw=0.0;t_pitch=zeros(2048,1);t_roll=zeros(2048,1);t_yaw=zeros(2048,1);%发送的频率为250Hz,pitch,roll,yawtest_dat=load('data_minicopter_1023_3.txt');gx=test_dat(1:2048,1);gy=test_dat(1:2048,2);gz=test_dat(1:2048,3);ax=test_dat(1:2048,7);ay=test_dat(1:2048,8);az=test_dat(1:2048,9);for ii=1:2048 %四元数积分,求得当前的姿态q0_last = q0;q1_last = q1;q2_last = q2;q3_last = q3; %把加速度计的三维向量转成单位向量norm = 1/sqrt(ax(ii)*ax(ii) + ay(ii)*ay(ii) + az(ii)*az(ii));ax(ii) = ax(ii)* norm;ay(ii)= ay(ii)* norm;az(ii)= az(ii)* norm;%估计重力加速度方向在飞行器坐标系中的表示,为四元数表示的旋转矩阵的第三行vx = 2*(q1.*q3 - q0.*q2);vy = 2*(q0.*q1 + q2.*q3);vz = q0.*q0 - q1.*q1 - q2.*q2 + q3.*q3; %加速度计读取的方向与重力加速度方向的差值,用向量叉乘计算ex = ay(ii).*vz - az(ii).*vy;ey = az(ii).*vx - ax(ii).*vz;ez = ax(ii).*vy - ay(ii).*vx; %误差累积,已与积分常数相乘exInt = exInt + ex.*Ki;eyInt = eyInt + ey.*Ki;ezInt = ezInt + ez.*Ki;%用叉积误差来做PI修正陀螺零偏,即抵消陀螺读数中的偏移量gx(ii) = gx(ii) + Kp.*ex + exInt;gy(ii) = gy(ii) + Kp.*ey + eyInt;gz(ii) = gz(ii) + Kp.*ez + ezInt;%一阶近似算法q0 = q0_last + (-q1_last.*gx(ii) - q2_last.*gy(ii) - q3_last.*gz(ii)).*halfT;q1 = q1_last + ( q0_last.*gx(ii) + q2_last.*gz(ii) - q3_last.*gy(ii)).*halfT;q2 = q2_last + ( q0_last.*gy(ii) - q1_last.*gz(ii) + q3_last.*gx(ii)).*halfT;q3 = q3_last + ( q0_last.*gz(ii) + q1_last.*gy(ii) - q2_last.*gx(ii)).*halfT; %四元数规范化norm2 = 1./sqrt(q0.*q0 + q1.*q1 + q2.*q2 + q3.*q3);q0 = q0 .* norm2;q1 = q1 .* norm2;q2 = q2 .* norm2;q3 = q3 .* norm2;% t_yaw(ii)=gz*(0.0610351* 0.001);% t_pitch(ii)= -atan2(2.0*(q0*q1 + q2*q3),q0*q0 - q1*q1 - q2*q2 + q3*q3)*57.2957795;% t_roll(ii)= asin (2.0*(q0*q2 - q1*q3))*57.2957795; t_yaw(ii)=gz(ii)*(0.0610351* 0.001)/0.0010653; t_pitch(ii)= -atan2(2.0*(q0.*q1 + q2.*q3),q0.*q0 - q1.*q1 - q2.*q2 + q3.*q3)*57.2957795; t_roll(ii)= asin (2.0*(q0.*q2 - q1.*q3))*57.2957795;end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%figure(1);subplot(211);test_pitch=test_dat(1:2048,10);plot(test_pitch);subplot(212);plot(t_pitch);figure(2);subplot(211);test_roll=test_dat(1:2048,11);plot(test_roll);subplot(212);plot(t_roll);
0 0
- 最近做小四轴的一些问题
- 最近的一些问题
- 最近遇到的一些问题
- 最近遇到的一些问题
- 最近碰到的一些问题
- 最近积累的一些问题
- 最近遇到的一些mysql的问题
- 最近遇到的一些问题及发现
- 最近遇到的一些小问题汇总
- 最近发现的一些小问题
- 最近遇到的一些小问题总结
- 最近用MySql的一些问题
- 最近跑hadoop遇到的一些问题
- ios中最近遇到的一些问题
- 最近碰到的一些 SSL 问题记录
- 最近遇到的一些问题以及解决方案
- 最近遇到的一些问题总结
- 25 最近遇到的一些问题汇总
- js事件委托机制
- 第一篇个人博客,仅为记录学习的历程,点点滴滴。
- 最长回文子串(Manacher算法)
- Ubuntu16.04安装jdk1.8
- Maven打包时报Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war解决方案
- 最近做小四轴的一些问题
- windows下MatConvNet深度学习框架的搭建
- AngularJS 动画
- 基本线程同步
- cesium原理篇(二)--网格划分
- CSS基础学生11-CSS用z-index进行层次堆叠
- $.extend()详解
- cglib中Enhancer的简单使用
- oracle数据库的blob和clob类型,是什么意思和区别