0

我们使用 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;
}

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

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

先感谢您。

4

1 回答 1

0

此类问题的标准详尽方法

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

电源相关问题

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

替代原因:短路/衍生?

机械问题(又名振动破坏传感器读数)

过去,我曾看到 MEMS 传感器在剧烈振动(振幅 +-4g)下会受到很大影响。而“遭受很多”我的意思是加速度计甚至没有记录重力和陀螺仪返回无意义的数据。如果振动很重要,您需要更好的无人机框架或更好的传感器隔振。

软件问题(数据/算法/实现)

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

  • 错误/错误的嵌入式实现。
  • 算法在工作条件下失败。
  • 其他:数据看起来错误(阅读问题),软件未达到时间周期限制。
于 2017-10-31T16:01:10.953 回答