🛠 Motionセンサー補正(モーションセンサートリム補正)


✅ 概要

コーディングドローンで、加速度・ジャイロなどのモーションセンサーの誤差を補正するためのテストです。センサー誤差の確認と補正コマンドの送信、確認応答までの一連の流れを記録します。


🔁 処理の流れ

  1. センサーエラー状態の確認

  2. エラーイベント受信

  3. 補正コマンドの送信

🧩 使用関数一覧

関数・定数 説明
sendPing() 通信確認用Ping
sendCommand(CommandType.〇〇) 任意の補正・確認命令を送信
CommandType.CheckError センサーエラー状態確認
CommandType.MotionCalibration モーションセンサー補正
setEventHandler(DataType.Error, EventError) エラー検出イベントを処理
eventError エラー情報を通知するイベント

📌 補正実行時の注意

💡 補足

# ドローンセンサーキャリブレーションを要請した後、エラーで現れたキャリブレーションの進行状態を
 画面に表示
from time import sleep

from CodingDrone.drone import *
from CodingDrone.protocol import *

def checkError(error, flag):
    if error & flag.value != 0:
        return True
    else:
        return False

def eventError(error):
    
    print("* eventError() / SystemTime({0:10}) / ErrorFlagsForSensor({1:032b}) / 
    ErrorFlagsForState({2:032b})".format(error.systemTime, error.errorFlagsForSensor, 
    error.errorFlagsForState))

    if checkError(error.errorFlagsForSensor, ErrorFlagsForSensor.Motion_Calibrating):
        print("    - MOTION センサーを補正中です.")

if __name__ == '__main__':

    drone = Drone()
    drone.open()

    # イベントハンドリング関数登録
    drone.setEventHandler(DataType.Error, eventError)

    drone.sendPing(DeviceType.Controller)
    sleep(0.1)

    drone.sendCommand(CommandType.ClearBias)
    sleep(0.1)

    for i in range(30, 0, -1):
        print(i)
        sleep(1)

        error = drone.getData(DataType.Error)
        if error and not checkError(error.errorFlagsForSensor, ErrorFlagsForSensor.
        Motion_Calibrating):
            print("* MOTION センサー補正が完了しました.")
            break

    drone.close()