RAiV, 3 eksenli MEMS jiroskop ve 3 eksenli MEMS ivmeölçeri birleştiren 6 serbestlik dereceli (DoF) bir MEMS hareket izleme sensörü içerir. Bu yazıda MEMS jiroskopları ve ivmeölçerleri kısaca tanıtıyoruz. Ardından, örnek kodla yön tespitinin nasıl yapılacağını gösteriyoruz.

Uyarı: Parakete hesabı (dead reckoning) için lütfen bu 6DoF IMU (Atalet Ölçüm Birimi) ile harici manyetometre ve/veya yolölçer kullanın.

6DoF IMU nedir?

3 eksenli jiroskop ve 3 eksenli ivmeölçerin kombinasyonu teknik olarak 6DoF IMU olarak bilinir. Bu sensör kısa süreli hareketleri tespit etmede iyidir.

Jiroskop ve kullanım alanları

Jiroskop açısal hızı (dönme hızını) ölçer. Sensörün çıkışı, X, Y ve Z eksenleri etrafındaki dönmenin hızını ve yönünü (sırasıyla Yuvarlanma, Eğim ve Sapma) gösterir.

Bu sensör aşağıdaki amaçlarla kullanılabilir:

  • Dijital Görüntü Sabitleme - algılanan hareketi telafi etmek için görüntü kareleri dijital olarak kaydırılır, döndürülür veya bozulur.
  • Robotik Navigasyon - robotlar tam açılarda dönebilir veya yönlerini sabit tutabilir.

İvmeölçer ve Kullanım Alanları

İvmeölçer, X, Y, Z eksenleri boyunca ivmeyi ölçer.

Bu sensör aşağıdaki amaçlarla kullanılabilir:

  • Eğim algılama - robotlar hizalamalarını kontrol edebilirler.
  • Aktivite tanıma - robotlar hareketlerini ve durağan durumlarını kontrol edebilir.

Jiroskop Kullanımı

Jiroskopun ana kullanım alanlarından biri yön tespitidir. Burada yön tahmini için basit bir algoritma göstereceğiz.

Kodu Hazırlama ve Yükleme

Aşağıdaki örnekte şunları yapacağız:

  • Hem jiroskopu hem de ivmeölçeri sapma için kalibre edeceğiz.
  • Yön tahmini iş parçacığı oluşturacağız
  • Yön tahminini periyodik olarak alacağız

Bu örneği, gerekli tüm modüllerle birlikte Github Depomuzda bulabilirsiniz. Lütfen örnek kodu github deposundan indirin ve Web arayüzü üzerinden RAiV'e yükleyin.

# 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()

Canlı Sunum: Dönüşümüz Muhteşem Olacak

RAiV'i (veya RAiV'in monte edildiği robotik platformu) kendi etrafında döndürün. Derece cinsinden yön için PC komut dosyası çıktısını kontrol edin.

RAiV ile Yön Tahmini

Sırada Ne Var?

Python SDK'mızı Kontrol Edin:

RAiV Python SDK

Örnek Kodlar İçin Github Depomuzu Kontrol Edin:

Github Depomuz