🚀

HereFlowを試してみた

2024/11/26に公開

やったこと

非GPS環境下でマルチコプターを飛行させたいので、小型オプティカルフローセンサであるHereFlowを試してみた

参考

https://ardupilot.org/copter/docs/common-hereflow.html
https://ardupilot.org/copter/docs/common-optical-flow-sensor-setup.html#common-optical-flow-sensor-setup
https://docs.cubepilot.org/user-guides/flow-senor/here-flow

使ったもの

設定

ファームウェアバージョン:Copter-4.4.4

Y軸を機体の前方に向けて、カメラを下向きにして搭載する
基板は柔らかい両面テープで固定することにより、振動を多少取り除く必要がある

パラメータ設定
hereflowにレンジファインダーは搭載されているが、最大2mまでであり、あまりお勧めされていない
適切なレンジファインダーを設定しておくこと
今回はSF20を使用してみた
ポート2での設定
CAN_P2_DRIVER : 1
CAN_D2_PROTOCOL : 1
FLOW_TYPE : 6
BRD_BOOT_DELAY : 3000
FLOW_POSの設定
センサーが2cm前で5cm下である場合、
FLOW_POS_X : 0.02, FLOW_POS_Z : 0.05
ARMING_CHECKのGPSを外す
とする
これで再起動して、起動後、ステータスの高度(レンジファインダーの値)が動いていることを確認し、opt_m_x, opt_m_y, opt_x, opt_yに数値が入って変化することを確認

チューニング

RCx_OPTION = 158 (Optflow Calibration)
適当なチャンネルにキャリブレーションを割り当てる
Setup the EKF3 to use GPS (the default)
EK3_SRC1_POSXY = 3 (GPS)
EK3_SRC1_POSZ = 1 (Baro)
EK3_SRC1_VELXY = 3 (GPS)
EK3_SRC1_VELZ = 3 (GPS)
EK3_SRC1_YAW = 1 (Compass)
EK3_SRC_OPTIONS = 0 (Disable FuseAllVelocities)

ロイターモードで10m以上の高度まで上昇させ、割り当てたスイッチを操作してキャリブレーション開始
ロール、ピッチを操作すると、GCSのメッセージが更新される
キャリブレーションが99%まで到達しても、100%にならず、スイッチを操作してキャリブレーション終了するとcompleteとなった

着陸させて、パラメータを書き換える
EK3_SRC1_POSXY = 0 (None)
EK3_SRC1_VELXY = 5 (Optical Flow)
EK3_SRC1_POSZ = 1 (Baro)
EK3_SRC1_VELZ = 0 (None)
EK3_SRC1_YAW = 1 (Compass)
EK3_SRC_OPTIONS = 0 (Disable FuseAllVelocities)

このやり方では、パラメータを書き換えなければGPSを使うかオプティカルフローを使うか切り替えられないが、プロポで切り替える方法は下記のようにすればいいみたい
RC8_OPTION = 158 (Optflow Calibration)
RC9_OPTION = 90 (EKF Pos Source) low is GPS, middle is OpticalFlow, high is unused
EK3_SRC1_POSXY = 3 (GPS)
EK3_SRC1_POSZ = 1 (Baro)
EK3_SRC1_VELXY = 3 (GPS)
EK3_SRC1_VELZ = 3 (GPS)
EK3_SRC1_YAW = 1 (Compass)
EK3_SRC2_POSXY = 0 (None)
EK3_SRC2_VELXY = 5 (Optical Flow)
EK3_SRC2_POSZ = 1 (Baro)
EK3_SRC2_VELZ = 0 (None)
EK3_SRC2_YAW = 1 (Compass)
EK3_SRC_OPTIONS = 0 (Disable FuseAllVelocities)
今後試してみようと思います

高度を安定させる

飛ばしているときに、風が当たると高度が安定しないので、それをどうにかする必要がある
EK3_SRC_POSZをレンジファインダーにする方法があるが、あまりお勧めされていないが、試してみたい
それかEK3_RNG_USE_HGTを設定することにより、基本的には気圧計かGPSを高度のセンサーとして使うが、一定の高度以下になったらレンジファインダーをメインにすることができるみたい
surface trackingモードがあるみたいで、それを使うという手もあるそう

RCx_OPTION : 75(SurfaceTrackingUpDown)
とすればいいだけ

Discussion