Yönünüzü Kilitleyin: Yön Tespiti için IMU Kullanımı
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.
Sırada Ne Var?
Python SDK'mızı Kontrol Edin:
RAiV Python SDKÖrnek Kodlar İçin Github Depomuzu Kontrol Edin:
Github Depomuz