Проблема с фильтром Калмана: гироскоп измеряет дельта-вращение, но угол AoA — это абсолютный уголPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Проблема с фильтром Калмана: гироскоп измеряет дельта-вращение, но угол AoA — это абсолютный угол

Сообщение Anonymous »

Я работаю над проектом, в котором объединяю данные гироскопа (который измеряет дельта-вращение) с измерениями AoA (угол прибытия) (абсолютные углы в градусах) с помощью фильтра Калмана. Цель состоит в том, чтобы оценить абсолютную ориентацию объекта.
Однако результаты фильтра, похоже, расходятся или ведут себя неожиданно, и я подозреваю, что проблема заключается в фундаментальном различии между ними. типы измерений:
Гироскоп: измеряет скорость вращения (изменение дельты с течением времени).
AoA: обеспечивает измерение абсолютного угла (например, 20 градусов).
Вот реализация фильтра Калмана, я используя:
def predict(posterior, angular_velocity, delta_t):
x, P = posterior # mean and variance of posterior
dx, Q = angular_velocity # mean and variance of angular velocity
x = x + (dx * delta_t)
P = P + Q * delta_t**2
return (x, P)

def update(prior, measurement):
x, P = prior # mean and variance of prior
z, R = measurement # mean and variance of measurement

y = z - x # residual
K = P / (P + R) # Kalman gain
x = x + K * y # posterior mean
P = (1 - K) * P # posterior variance
return (x, P)

# Standard deviations (adjust if needed)
gyroscope_std = 0.013 # Estimated 0.013 dps
aoa_std = 10.27 # Estimated 10.27 deg

# Initial state from the first measurement
start = 0
initial_angle = df.loc[start, 'theta_deg']
x = (initial_angle, aoa_std**2) # (mean, variance)

predictions = []
timestamp = df.loc[0, 'timestamp']

for i, row in df[start:].iterrows():
if i == 0:
# Initial prediction is just the initial state
predictions.append(x[0])
continue

delta_t = row['timestamp'] - timestamp
timestamp = row['timestamp']
angular_velocity = row['gyroscope_dps']
aoa = row['theta_deg']

# Use the gyroscope reading as the process model input
gyro_reading = (angular_velocity, gyroscope_std**2)
prior = predict(x, gyro_reading, delta_t)

# Update with the AoA measurement
x = update(prior, (aoa, aoa_std**2))

predictions.append(x[0])



Подробнее здесь: https://stackoverflow.com/questions/792 ... lute-angle
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как включить гироскоп в Geckoview
    Anonymous » » в форуме Android
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Как политика измерения Layout Composable измеряет дочерний элемент с использованием родительских ограничений?
    Anonymous » » в форуме Android
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Android onKeyDown onKeyUp измеряет время
    Anonymous » » в форуме JAVA
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Android onKeyDown onKeyUp измеряет время
    Anonymous » » в форуме Android
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Оцените точки в соответствии с предыдущими точками, используя фильтр Калмана
    Anonymous » » в форуме C++
    0 Ответы
    33 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»