Эффективная интеграция данных гироскопа скорости с PythonPython

Программы на Python
Ответить
Anonymous
 Эффективная интеграция данных гироскопа скорости с Python

Сообщение Anonymous »

Я работаю с 3-осевым гироскопом и хотел бы интегрировать данные о скорости, чтобы определить ориентацию моего гироскопа как функцию времени. Гироскоп скорости измеряет мгновенный вектор вращения, который можно превратить в небольшое вращение dR ~ w*dt. Базовую интеграцию можно выполнить, отслеживая текущее вращение R и применяя мгновенное dR на каждом временном шаге. Я написал функцию Python, которая делает это:

Код: Выделить всё

from scipy.spatial.transform import Rotation as R
def rate_int_py(gyro_rates, R0, dt):
R_curr = R0
out = list()
for i, w in enumerate(gyro_rates):
dR = R.from_rotvec(np.deg2rad(w * dt))
R_curr =  dR * R_curr #note left mult
out.append(R_curr)
return R.concatenate(out)
Однако эта функция не особенно быстра, и я надеялся получить большую скорость «numpy», а не скорость «python». Я попытался сделать это с помощью numpy.cumprod, но получил немного другой ответ. Я считаю, что проблема в том, что вращения не ассоциативны, и cumprod накапливает «вправо», а не влево, умножая текущее вращение на следующий dR. Вот код этой попытки:

Код: Выделить всё

from scipy.spatial.transform import Rotation as R
import numpy as np
def rate_int_scipy(gyro_rates, R0, dt):
rots = R.from_rotvec(gyro_rates*dt, degrees=True)
rots = R.concatenate([R0] + list(rots))
res = np.cumprod(rots, axis=0)
res = R.concatenate(res)
return res[1:]
В любом случае эта попытка была спорной, поскольку numpy при воздействии на неродные типы numpy по умолчанию использует «обычный» Python, и поэтому эта функция в любом случае работает медленнее, чем собственный Python.
Мой вопрос заключается в следующем: как люди работают с данными гироскопа в Python? Я не думаю, что мой вариант использования вообще нишевый. В итоге я написал процедуру c, которая делала то, что мне нужно, но я бы предпочел использовать чистый Python.

Подробнее здесь: https://stackoverflow.com/questions/798 ... ith-python
Ответить

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

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

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

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

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