我正在使用Lego Mindstorm的NXT系统构建一个平衡机器人.我使用的是HiTechnic的两个传感器,第一个是加速度计,第二个是陀螺仪.我已经成功地滤除了传感器和衍生角度的噪声,两者的范围在-90到90度之间,0度完全平衡.
我的下一个挑战是结合两个传感器值来校正陀螺仪随时间的漂移.下面是我根据实际数据创建的示例图,用于演示陀螺仪的漂移:

我见过的最常用的方法是将这些传感器结合起来使用卡尔曼滤波器.但是,我不是微积分的专家,我真的不懂数学符号,但我确实理解源代码中的数学.
我正在使用RobotC(就像任何其他C衍生产品一样),如果有人能给我一些如何在C中完成此任务的例子,我将非常感激.
谢谢您的帮助!
解决方案结果:
好吧,kersny通过向我介绍补充过滤器解决了我的问题.这是一个说明我的结果的图表:
结果#1

结果#2

如您所见,滤波器校正陀螺仪漂移并将两个信号组合成单个平滑信号.
编辑:因为我正在修复破碎的图像,我认为显示我用来生成这些数据的装备会很有趣:

我很感兴趣,卡尔曼滤波器中的传感器融合设置中的双输入是如何建模的?
比如说你有一个加速度计和一个陀螺仪,想要呈现"地平线",就像在飞机上一样,这里有类似这样的好演示.
你如何实际收获两个传感器的正面特性并最大限度地减少负面影响?
这是在观察模型矩阵(通常用大写字母H表示)中建模的吗?
备注:在math.stackexchange.com上也没有任何答案地问过这个问题
最近我做了一些研究,使用加速度计+陀螺仪来使用那些传感器在没有GPS帮助的情况下跟踪智能手机(参见这篇文章) 基于陀螺仪和加速度计的室内定位系统
为此我需要我的方向(角度(俯仰,滚动等))所以这里到目前为止我所做的:
public void onSensorChanged(SensorEvent arg0) {
if (arg0.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
{
accel[0] = arg0.values[0];
accel[1] = arg0.values[1];
accel[2] = arg0.values[2];
pitch = Math.toDegrees(Math.atan2(accel[1], Math.sqrt(Math.pow(accel[2], 2) + Math.pow(accel[0], 2))));
tv2.setText("Pitch: " + pitch + "\n" + "Roll: " + roll);
} else if (arg0.sensor.getType() == Sensor.TYPE_GYROSCOPE )
{
if (timestamp != 0) {
final float dT = (arg0.timestamp - timestamp) * NS2S;
angle[0] += arg0.values[0] * dT;
filtered_angle[0] = (0.98f) * (filtered_angle[0] + arg0.values[0] * dT) + (0.02f)* (pitch); …Run Code Online (Sandbox Code Playgroud) 我在一个涉及陀螺仪的项目中工作......
我正在使用Arduino和ITG 3200来读取陀螺仪的数据.每个轴(x,y,z)得到3个以度/秒为单位的值.
我的问题是:我如何知道设备的实际(物理)位置或方向(比方说飞机).必须有一个数学公式或类似的东西.