※本飛行テストは、GPSが利用できない室内や地下でもドローンの自動巡回を可能にさせる方法として、マーカーを活用した画像処理による自律飛行の有効性を検証するために行ったものです。
※本飛行テストの開発環境や実際に使用したArUcoマーカーについては、技術情報ページに詳しく記載しています。
飛行概要
- 飛行日: 2019年05月31日
- 飛行機体: Parrot Bebop 2
- 飛行目的: 小型ドローンの屋内自律飛行テスト(異なるフロアーへの移動)の検証
- 許可申請: 不要
マーカーについて
STEP1、STEP2と同様にArUcoマーカーを継続して使用する点は変更ありません。ただし、今回は前回の反省点であった「景観としてはあまり良いものとは言えない」点を少しでも改善するため、できるだけ景観を損なわない設置方法となるよう再検討を行いました。
具体的には、複雑な飛行制御に必要な機能を維持したまま、①壁に設置が必要なマーカーの種類を減らす、②マーカーのサイズをできるだけ小さくする、さらに、③飛行ルートの変更が柔軟に出来るようにも配慮し、新たな設置ルールを考えました。
マーカーの設置ルール(STEP2からの変更点)
【順序指定マーカー】
基本的にはSTEP2と同様の設置ルール。ただし、STEP2ではマーカーIDは連番であった制約を廃止し、代わりにマーカーIDとサイズに関する以下の項目を追加
- プログラム上にマーカーIDと飛行順序を関連付けて登録する(特に連番の必要はない)
- プログラム上にマーカーIDとマーカーサイズを関連付けて登録する(特にサイズの規定はないが、飛行中のドローンから認識可能なサイズであること)
【距離指定マーカー】
- プログラム上にマーカーIDと方向転換の位置を関連付けて登録し、マーカーの設置は不要
【動作指定マーカー】
- プログラム上にマーカーIDと方向転換の種類を関連付けて登録し、マーカーの設置は不要
【回避用マーカー】
基本的にはSTEP2と同様の設置ルール。
- プログラム上にマーカーIDと回避機能の有効・無効を関連付けて登録する(特にサイズの規定はないが、飛行中のドローンから認識可能なサイズであること)
STEP1からSTEP3までの使用方法の違いをまとめると次のようになります。
STEPごとのマーカー使用方法の違い
【STEP1】 狭い室内空間での飛行
- 検証目的:マーカーだけで自律飛行は可能か?
- 使用可能マーカー:動作指定マーカーのみ
- マーカーサイズ:12.5cmサイズのみ
【STEP2】 異なる部屋への移動(ドアの通り抜け、通路の移動)
- 検証目的:機能別マーカーを組み合わせ、複雑な飛行に挑戦
- 使用可能マーカー:順序指定マーカー、距離指定マーカー、動作指定マーカー、回避用マーカー
- マーカーサイズ:12.5cm、25cmサイズの2種類
【STEP3】 異なるフロアーへの移動(階段の上下移動)
- 検証目的:マーカー設置をどこまでシンプルにできるのか?
- 使用可能マーカー:順序指定マーカー、回避用マーカー
- マーカーサイズ:飛行中のドローンから認識可能な任意のサイズが使用可
飛行プログラムについて
再検討したマーカー設置ルールに合わせ、飛行プログラムを以下の内容で変更しました。
方向転換の認識方法(STEP2からの変更点)
-
方向転換ポイントの順序
順序指定マーカーのIDは、指定範囲の先頭から連番で使用する方法をやめ、プログラム内の変数定義領域に、順序指定マーカーのIDをルート順に登録されたものを使用するように変更
-
方向転換の位置
壁に設置された距離指定マーカーからの取得をやめ、プログラム内の変数定義領域に、順序指定マーカーのIDに紐づけて登録された距離を使用するように変更
-
方向転換の種類
壁に設置された動作指定マーカーからの取得をやめ、プログラム内の変数定義領域に、順序指定マーカーのIDに紐づけて登録された動作を実行するように変更
-
マーカーまでの距離
事前に決められたマーカーサイズから計算する方法をやめ、プログラム内の変数定義領域に、順序指定マーカーのIDに紐づけて登録されたマーカーサイズから計算するように変更
距離・動作指定マーカーIDの認識とリセットのタイミング
-
認識のタイミング
距離・動作指定マーカー自体が存在していないため、順序指定マーカーの認識のタイミングを代用
-
リセットのタイミング
マーカーをトリガーにしたリセットは距離・動作指定マーカー自体が存在していないため廃止、結果的に認識のタイミングがそのままリセットのタイミングとなる
STEP2に引き続き、今回も順序指定マーカーへの接近時に起きやすい壁への衝突を低減するため、STEP1と同様の飛行中の安全策を継続して組み込んでいます。
飛行ルート設定とマーカー設置について
今回は、比較的形状が複雑で途中で方向転換が必要な折返し階段を使用することにしました。
飛行ルート
検証項目
- 天井やステップに衝突することなく、高低差があるポイントへの移動が可能であること
- 方向転換が伴う、折返しのある階段の移動が可能であること
- 上り、下りの動作が可能であること
ルート順に紐付けた順序指定マーカーIDとサイズ、役割(距離・動作の指定)は以下の通りです。
順序指定マーカーのIDとサイズ、役割
現在の飛行環境での下限サイズと思われる5cmを基本としつつ、マーカーまでの距離を考慮し、限定的に8cmと25cmサイズのマーカーを追加使用することにしました。
※現在の飛行環境:ドローン搭載カメラの動画での解像度、室内の明るさ、マーカーまでの距離など
実際に設置したマーカーの様子は次の通りです。
マーカー設置
往路(上り:1階→2階)
- 1階踊り場の壁に順序指定マーカー(第1ターン:②へ誘導)
- 1階踊り場の壁に順序指定マーカー(第2ターン:③へ誘導)
- 階段の折返し場所(正面)の壁に8cmサイズの順序指定マーカー(第3ターン:④へ誘導)
- 階段の折返し場所(正面)の壁に順序指定マーカー(第4ターン:⑤へ誘導)
- 階段の折返し場所(側面)の壁に順序指定マーカー(第5ターン:⑥へ誘導)
- 2階廊下突き当りの扉に25cmサイズの順序指定マーカー(第6ターン:⑦へ誘導)
復路(下り:2階→1階)
- 階段の折返し場所(正面)の壁に順序指定マーカー(第7ターン:⑧へ誘導)
- 階段の折返し場所(側面)の壁に順序指定マーカー(第8ターン:⑨へ誘導)
- 1階踊り場の壁に順序指定マーカー(第9ターン:⑩へ誘導)
- 1階踊り場の壁に順序指定マーカー(着陸地点へ誘導)
変数定義を利用した飛行ルール設定例(Pytho、多次元リスト使用した場合)
参考までに、各種飛行ルールをルートに紐付けるために使用した設定例を紹介いいたします。
# [arUcoID, distance(m), actionName, markerSize(cm), leaveMode(bool)]
flight_rules = [
[10, 0.8, 'U-Move', 5.0, False],
[11, 0.8, 'R-Turn', 5.0, False],
[12, 0.7, 'U-Move', 8.0, False],
[13, 0.7, 'R-Turn', 5.0, False],
[14, 0.4, 'R-Turn', 5.0, False],
[44, 5.0, 'R-Turn', 25.0, False],
[16, 0.5, 'L-Turn', 5.0, False],
[17, 0.4, 'L-Turn', 5.0, False],
[18, 0.5, 'D-Move', 5.0, False],
[19, 0.5, 'Land', 5.0, False]
]
# arUcoID:順序指定マーカーID
# distance:方向転換の位置(m)
# actionName:方向転換の種類 ※画面表示と兼用させるため、文字列を使用
# markerSize:マーカーサイズ(cm)
# leaveMode:回避モード設定
補足
今回は、回避用マーカーの使用を前提にしたルールをもとにプログラムを準備しましたが、限られたスペースへの設置方法の難しさから、実際はプログラム内の設定で全て無効にし、回避モードを利用せずに飛行させました。
検証結果
今回の検証では残念ながら第6ターンで失敗してしまいました。こちらにテスト飛行中の飛行データを記録した動画を掲載いたします。
※START(1階踊り場)~第6ターン(2階廊下での折返し)までの映像です。
補足
解析中画面が時折モノクロ画像に替わるのは、マーカーの検出精度を上げるため一時的に2値化処理に切り替えた際の現象で、画像の転送エラーなどではありません。
マーカーの有効性について
ご期待に添えず 、復路への折返しのために行った第6ターンでの180°回転の途中で壁に接触してしまい、飛行は中断となりました。ですが、往路の成功でSTEP3での重要検証テーマである、異なるフロアーへの移動についても、マーカーによる誘導で十分対応出来る可能性があると言えるのではないでしょうか。
ここで、これまで実施してきたSTEP1~STEP3の検証の蓄積から分かった、マーカーを使用する上で参考となる内容をネガティブな点も含めまとめてみました。もし上手くマーカーがー認識されない場合があった場合などに参考にしてください。
マーカーサイズと有効距離について
※本検証での機材・環境で、かつ画像の品質が良い場合
- 5cmサイズのArUcoマーカーの限界距離はおおよそ2m程度
- 12.5cmサイズのArUcoマーカーの限界距離はおおよそ5m程度
- 25cmサイズのArUcoマーカーの限界距離はおおよそ8m程度
マーカーの認識に不利となる条件について
- マーカーに当たる光が弱く(画像のコントラストが低く)なるに連れ、認識精度が悪化する
- 回転時など画面変化が特に大きな動作の場合、速度に応じて画質が劣化し、認識精度が悪化する
- マーカーのサイズが小さいほど、マーカー形状の歪みから取得可能な壁(マーカー)との3次元的位置関係の精度が落ちるため、飛行ルートから外れやすくなる
今後の計画について
本検証の主目的がマーカーの有効性の検証であることから、2階廊下での(復路への)折返しが成功するまでチャレンジし続けることは見送りました。ここから先は、ドローンの(個体ごとの飛行特性を考慮した)飛行制御の領域に大きく踏み込むことになりそうなので、そちらの専門の方々にお任せしたいと思います。以下に、その点を踏まえた注意点を列挙します。機会があれば、これらの対策についても挑戦できればと思います。
非GPS環境下での飛行で注意する点
- 市販のドローンに標準的に搭載されているビジョンポジショニングシステムによる影響を強く受ける
- 飛行ごとに、同じ出力のパワー指示を送っても、各モーター出力の微妙な違いやバッテリーの劣化具合、残量などによる影響で全く同じ飛行が再現できるわけではない
- ターゲットのマーカーを切り替える際、一時的にマーカー喪失状態となるため、この間の飛行が特に不安定になる。できるだけ連続してマーカーを補足し続けられるような工夫が大切である
- 引力の影響を受ける(と思われる)ため、上下方向の大きな移動の後に、機体を安定停止させる際の上下方向のパワー調整が難しい
今回は最初ということもあり、方向転換ポイントごとにマーカーを設置し、ポイントからポイントに移動していくという単純な方法を検証しました。次は現実空間には存在しないバーチャルレールを画面内に仮想的に出現させ、そのレールをたどって飛行できる仕組みにチャレンジしたいと思います。