mpu6050效正方法?
本帖最后由 pww999 于 2012-8-16 16:08 编辑mpu6050效正方法?
最基本方法是得出数据减去偏差得到0点,
-----------------------------------
6050应该有写入数据效正0点?,
是否可以写入数据得到 摆平静止时的0点呢??
下面有一种方法也是
用processing显示姿态时,是做了一个快捷键,比如按H,直接归零。设定当前状态位0位。 哦? 是不是也是按 H后,自动减去偏差值归零? 要翻翻这个 6050的库,是否有这个函数了~ 本帖最后由 pww999 于 2012-8-22 10:00 编辑
简单写了个按下按钮自动减去偏差,0漂会变化,所以效果不会很好?试试:
int mn;
float m,n;
....
void setup()
{
pinMode(4,INPUT);
m=0;
n=0;
.....
}
void loop() {
accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
//-----------------------------------------------------------------------------------------------------------------
//或许放在中断里处理比较好,减少程序运行时间
mn=digitalRead(4);
if(mn==high){ //检测按钮是否被按下 高电平时执行
angleA= atan2(ay , az) * 180 / pi; // 根据加速度分量得到的角度(degree)
omega=(gx )/Gyr_Gain; // 当前角速度(degree/s)
if (angleA>0){m=angleA;}
else {m=-angleA;}
if (omega>0){n=omega;}
else {n=-omega;}
}
angleA= atan2(ay , az) * 180 / pi-m; // 根据加速度分量得到的角度(degree)
omega=(gx )/Gyr_Gain-n; // 当前角速度(degree/s)
...... 本帖最后由 pww999 于 2012-9-3 12:40 编辑
另外一种:
int mn;
float ayy,azz,gxx;
....
void setup()
{
pinMode(4,INPUT);
ayy=0;
azz=0;
gxx=0;
.....
}
void loop() {
accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
//-----------------------------------------------------------------------------------------------------------------
//ay*=0.0..;//*以对应的G
//az*=0.0..;
//gx*=0.0..;
mn=digitalRead(4);
if(mn==high){ //检测按钮是否被按下 高电平时执行
if (ay>0){ayy=ay;}
else {ayy=-ay;}
if (az>0){azz=az;}
else {azz=-az;}
if (gx>0){gxx=gx;}
else {gxx=-gx;}
}
angleA= atan2((ay-ayy) ,( az-azz)) * 180 / pi; // 根据加速度分量得到的角度(degree)
omega=(gx-gxx )/Gyr_Gain; // 当前角速度(degree/s)
...........
...........
}
不错,值得参考一下
页:
[1]