无人机飞行时会产生奇怪的角度

时间:2017-08-14 12:51:25

标签: c accelerometer sensor-fusion

我们使用L3GD20陀螺仪传感器和LSM303DLHC加速计传感器与互补滤波器相结合来测量无人机的角度。

如果我们用手模拟无人机的角度,例如,如果我们向前倾斜无人机,我们的x角度是正的。如果我们向后倾斜,我们的x角度是负的。

但是如果我们激活我们的电机,那么无人机将始终采用负x角。最重要的是,曾经为正的x角现在是负的。因为无人机试图补偿这个角度,但是角度被反转,无人机将永远不会回到原来的状态。

#define RAD_TO_DEG 57.29578
#define G_GAIN 0.070
#define AA 0.98
#define LOOP_TIME 0.02

void calculate_complementaryfilter(float* complementary_angles)
{
    complementary_angles[X] = AA * (complementary_angles[X] + gyro_rates[X] * LOOP_TIME) + (1 - AA) * acc_angles[X];
    complementary_angles[Y] = AA * (complementary_angles[Y] + gyro_rates[Y] * LOOP_TIME) + (1 - AA) * acc_angles[Y];
}

void convert_accelerometer_data_to_deg()
{
    acc_angles[X] = (float) atan2(acc_raw[X], (sqrt(acc_raw[Y] * acc_raw[Y] + acc_raw[Z] * acc_raw[Z]))) * RAD_TO_DEG;
    acc_angles[Y] = (float) atan2(acc_raw[Y], (sqrt(acc_raw[X] * acc_raw[X] + acc_raw[Z] * acc_raw[Z]))) * RAD_TO_DEG;
}

void convert_gyro_data_to_dps()
{
    gyro_rates[X] = (float)gyr_raw[X] * G_GAIN;
    gyro_rates[Y] = (float)gyr_raw[Y] * G_GAIN;
    gyro_rates[Z] = (float)gyr_raw[Z] * G_GAIN;
}

问题不在于无人机的晃动。如果我们将电机置于最大速度并手动模拟角度,我们就会得到正确的角度。因此也是电机的正确补偿。

如果我们需要添加更多代码,请询问。

提前谢谢你。

1 个答案:

答案 0 :(得分:0)

针对此类问题的标准详尽方法

你可以上下或上下。在这种情况下,我更倾向于考虑与硬件相关的问题,但这取决于你:

电力相关问题

当你用手拿无人机并全速运转电机时,是否安装了螺旋桨? 没有螺旋桨的全速电动机仅占其满载的一小部分。当提升无人机重量时,电压降会导致电子故障。

替代原因:短路/推导?

机械问题(a.k.a振动破坏传感器读数)

过去,我发现MEMS传感器在剧烈振动(振幅+ -4g)下会受到很大影响。随着"经历了很多苦难。我的意思是加速计甚至没有记录重力和陀螺仪返回无意义的数据。 如果振动是有意义的,你需要一个更好的无人机框架或更好的振动隔离传感器。

SW问题(数据/算法/实施)

如果它与功率和机械方面无关,您可以记录原始传感器数据并离线处理它以确定它是否有意义。 为此,您需要在无人机中嵌入相同算法的实现。 在这里,您将能够辨别:

  • Buggy /错误的嵌入式实施。
  • 算法在工作条件下失败。
  • 其他:数据看起来不对(问题阅读),SW没有达到时间周期限制。