コーディングドローンで、加速度・ジャイロなどのモーションセンサーの誤差を補正するためのテストです。センサー誤差の確認と補正コマンドの送信、確認応答までの一連の流れを記録します。
センサーエラー状態の確認
drone.sendPing():通信確認(セッション確立)drone.sendCommand(CommandType.ClearBias):センサー異常の確認コマンド送信エラーイベント受信
setEventHandler(DataType.Error, EventError)
※センサー異常がある場合、指定した関数が呼び出されます
補正コマンドの送信
drone.sendCommand(CommandType.ClearBias)
モーションセンサーのキャリブレーションを実行します
| 関数・定数 | 説明 |
|---|---|
sendPing() |
通信確認用Ping |
sendCommand(CommandType.〇〇) |
任意の補正・確認命令を送信 |
CommandType.CheckError |
センサーエラー状態確認 |
CommandType.MotionCalibration |
モーションセンサー補正 |
setEventHandler(DataType.Error, EventError) |
エラー検出イベントを処理 |
eventError |
エラー情報を通知するイベント |
sendCommand() が反応しない場合、事前に sendPing() で接続を活性化しておくと安定します。# ドローンセンサーキャリブレーションを要請した後、エラーで現れたキャリブレーションの進行状態を
画面に表示
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()