我们使用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;
}问题不在于无人机的摇晃。如果我们把马达开到最大速度,然后用手模拟角度,我们就能得到正确的角度。因此,电机的补偿也是正确的。
如果我们需要添加更多的代码,请直接问。
提前谢谢你。
发布于 2017-11-01 00:01:11
这类问题的标准详尽方法论
你可以选择自上而下或自下而上。在这种情况下,我更倾向于考虑与硬件相关的问题,但这取决于您:
电源相关问题
当你用手拿着无人机全速运转时,他们有安装螺旋桨吗?没有螺旋桨的马达在全速运行时只吸引了满载的一小部分。在举起无人机重量时,电压下降可能会导致电子故障。
另一种原因:短路/派生?
机械故障(又称振动损坏传感器读数)
在过去,我看到MEMS传感器在强振动(振幅+-4g)下遭受了很大的痛苦。我所说的“痛苦很多”是指加速度计甚至不能记录重力,陀螺仪返回的是无意义的数据。如果振动是有意义的,你要么需要一个更好的无人机框架,要么需要更好的传感器隔振。
软件问题(数据/算法/实现)
如果它肯定与电源和机械方面无关,您可以记录原始传感器数据并脱机处理,看看是否有意义。为此,您需要在无人机中嵌入相同算法的实现。在这里,您将能够区分:
在工作状态下,
https://stackoverflow.com/questions/45674958
复制相似问题