首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无人机飞行时会出现奇怪的角度

无人机飞行时会出现奇怪的角度
EN

Stack Overflow用户
提问于 2017-08-14 20:51:25
回答 1查看 105关注 0票数 0

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

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

但如果我们启动我们的马达,无人机就会一直转到负x角。最重要的是,以前是正的x角度现在是负的。因为无人机试图补偿这个角度,但角度是颠倒的,无人机永远不会回到它的原始状态。

代码语言:javascript
复制
#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;
}

问题不在于无人机的摇晃。如果我们把马达开到最大速度,然后用手模拟角度,我们就能得到正确的角度。因此,电机的补偿也是正确的。

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

提前谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2017-11-01 00:01:11

这类问题的标准详尽方法论

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

电源相关问题

当你用手拿着无人机全速运转时,他们有安装螺旋桨吗?没有螺旋桨的马达在全速运行时只吸引了满载的一小部分。在举起无人机重量时,电压下降可能会导致电子故障。

另一种原因:短路/派生?

机械故障(又称振动损坏传感器读数)

在过去,我看到MEMS传感器在强振动(振幅+-4g)下遭受了很大的痛苦。我所说的“痛苦很多”是指加速度计甚至不能记录重力,陀螺仪返回的是无意义的数据。如果振动是有意义的,你要么需要一个更好的无人机框架,要么需要更好的传感器隔振。

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

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

在工作状态下,

  • 错误/错误的嵌入式conditions.
  • Other:失败数据看起来错误(读取问题),软件未达到时间周期约束。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45674958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档