Фиксация курса: Использование IMU для оценки курса
RAiV включает в себя MEMS-датчик отслеживания движения с 6 степенями свободы (DoF), который сочетает в себе 3-осевой MEMS-гироскоп и 3-осевой MEMS-акселерометр. В этом посте мы кратко представим MEMS-гироскопы и акселерометры. Затем мы покажем, как вы можете определить направление движения с помощью примера кода.
Предупреждение: Для точного счета, пожалуйста, используйте внешний магнитометр и/или одометр с этим 6DoF IMU (инерциальной единицей измерения).
Что такое 6ДоФ ИДУ
Комбинация 3-осевого гироскопа и 3-осевого акселерометра технически известна как 6DoF IMU. Этот датчик хорош для обнаружения кратковременных движений
Гироскоп и его применение
Гироскоп измеряет угловую скорость (темп вращения). Выходные данные датчика показывают скорость и направление вращения вокруг осей X, Y и Z (крен, тангаж и рыскание соответственно).
Этот датчик может использоваться для:
- Цифровая стабилизация изображения - кадры изображения они смещаются, поворачиваются или деформируются цифровым способом для компенсации обнаруженного движения.
- Робототехническая навигация - роботы могут поворачивать под точными углами или сохранять устойчивый курс
Акселерометр и его применение
Акселерометр измеряет ускорение по осям X, Y, Z
Этот датчик может использоваться для:
- Датчик наклона - роботы могут проверять свое положение.
- Распознавание активности - роботы могут проверять свое движение и неподвижное состояние
Использование гироскопа
Одним из основных применений гироскопа является определение курса. Здесь мы покажем простой алгоритм оценки заголовка.
Подготовьте и загрузите код
В приведенном ниже примере мы будем:
- Калибровать как гироскоп, так и акселерометр на предмет смещения.
- Создать поток оценки курса
- Периодически получать оценку курса
Вы можете найдите этот пример в нашем репозитории на Github со всеми необходимыми модулями. Пожалуйста, скачайте пример кода из репозитория github и загрузите его в RAiV через веб-интерфейс.
# For accessing data pipeline
from qCU_Data import qCUData
# For gyro operations
from headingEstim import HeadingEstimator
from headingEstim import estimate_IMU_bias
import threading
def main():
# Create interface
theQCUData = qCUData()
# Initialize shared memory
if not theQCUData.init():
print("Failed to initialize shared memory")
return
event = threading.Event()
# Get gyro and accelerator biases
maxCount = 200
accel_bias, gyro_bias = estimate_IMU_bias(theQCUData, maxCount)
# Start heading estimator thread
headingEstimator = HeadingEstimator(theQCUData=theQCUData, gyro_bias=gyro_bias)
headingEstimator.start()
# Enter object detection loop
try:
# Main loop to get data
loop_count = 0
max_loops = 500 # Limit for demonstration
while loop_count < max_loops:
curHeading = headingEstimator.get_heading()
print(f"Heading: {curHeading:.3f}");
# Sleep 1 seconds
event.wait(1.0)
finally:
print("Cleanup completed")
# Stop heading estimator
headingEstimator.stop()
if __name__ == "__main__":
main()
Живое действие: Наша очередь
Поверните RAiV (или роботизированную платформу, на которой установлен RAiV) вокруг себя. Проверьте направление движения в градусах, выводимое компьютерным скриптом.
Что дальше?
Проверьте наш Python SDK
RAiV Python SDKПроверьте наш Репозиторий На Github Для Получения Примеров Кодов
Наш Репозиторий на Github