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) вокруг себя. Проверьте направление движения в градусах, выводимое компьютерным скриптом.

Оценка направления движения с помощью RAiV

Что дальше?

Проверьте наш Python SDK

RAiV Python SDK

Проверьте наш Репозиторий На Github Для Получения Примеров Кодов

Наш Репозиторий на Github