目次
Section 1
Ardupilot Roverの自動走行
Ardupilot Roverシリーズも今回でついに18回目、そして今回がついに最終回となります。
これまでの記事では、Ardupilotを用いた機体製作から基本設定、テレメトリーやフェイルセーフ、OSD設定などを一通り扱ってきました。
Roverタイプの機体設定は、Ardupilotの他のモデルタイプ(PlaneやCopterなど)にも共通する要素が多く、Ardupilotの全体構造を理解するうえでとても良い題材と考える事もできます。
設定可能なパラメータの数は多く、ひとつひとつの意味を追っていくとそれだけで長くなってしまうのですが、全体の流れをつかんでおくことで、作業の見通しがぐっとよくなります。
今回はいよいよシリーズの集大成として、ミッションを用いた自動走行([AUTO]モード)を実施します。
さらに、実際の走行中にウェイポイントを追加保存する方法や、ナビゲーションのパラメータの調整についても簡単に紹介します。
Section 2
簡単なミッションの作成
まずはMission Plannerを使って、テスト用の簡単なミッションを作成します。

Mission Plannerの[フライトプラン]ページを開きます。
このページはミッションの作成や編集作業で主に使用するページで、これまでの設定では一切開くことがありませんでした。
しかし機体の設定が終わり、運用するステップに入るとむしろこちらの方が頻繁にアクセスすることになるページです。
今回は最も基本的な、マップ上をクリックして任意のウェイポイントを順に追加する方法でミッションを作成しました。
作り方は簡単で、マップ上の好きなところで左クリックするとウェイポイントが追加されます。
作成したウェイポイントは画面下部にリストとして詳細が表示され、ウェイポイントは追加した順番で番号が振られていますが、機体はその番号の順番にポイントを目指すことになります。
順番の変更やポイント毎の指示、ポイントの削除など、ポイント上で右クリックするか、下の一覧から様々な操作が可能です。
また、作ったウェイポイントはマップ上の印をドラッグすると位置を調整できますので、変な位置にポイントを作ってしまった後でも変更できます。
最初のテストでは、四角形コースを作成し、Waypointを4つ程度配置することにしました。
このままでも良いのですが、このミッションでは4つ目のWaypointに到達した段階で停止してミッションが終わってしまいます。
せっかくなので、最後にホームポイントに戻ってくるように一工夫しましょう。

4つ目のウェイポイントの上で右クリックし、[RTL]を選択します。

マップ上には何も追加されていないですが、下のリストを見ると5番目の指示として[RETURN_TO_LAUNCH]が追加されました。
マルチコプターなど飛行する機体の場合ここまでシンプルではなく、離陸や着陸、さらに各ポイントの高度も慎重に設定しなければならないですし、必要に応じでジオフェンスなども設定する必要があります。
今回はローバーである上に、安全が確保された領域を小さく走るだけなので、まずはシンプルなミッションを試してみましょう。
Section 3
ミッションのアップロード
さて、簡単なミッションを作成しました。
このミッションのデータはPC内のファイルに保存して誰かに共有したり、他のアプリケーションで部分的に読み込んだりする事もできますし、逆に事前に作成しておいたミッションのデータを読み込む事もできます。
これらの機能は右側の緑のボタンにまとまっているのですが、いずれにしても現在Mission Plannerに表示されているミッションはPCのアプリケーション内にあるだけです。
これをフライトコントローラーのメモリにコピーして、実行できる形にしなければなりません。
そのためには[WPの書き込み]をクリックします。
これでフライトコントローラーのメモリにミッションがコピーされ、[AUTO]モードの実行でこのミッションが実施される形になりました。
1点注意したいのは、フライトコントローラーのメモリにコピーされたミッションは実行しても自動で消えることはない、という点です。
飛行する機体で間違って古いミッションを実行してしまうと、前回飛ばしていた遥か遠くを目指して飛び去ってしまいますので、現在どんなミッションがメモリに入っているか、よく確認してからミッションを実施しましょう。
今FCが持っているミッションを確認するには、[WPを読み込む]をクリックすると、FCが持っているミッションがMission Plannerに読み込まれます。
しっかりミッションがアップロードされFCのメモリに保存されたか確認する場合でも、この[WPを読み込む]を利用して、Mission Plannerに表示すれば視覚的にわかりやすく表示できます。
機体にミッションがアップロードされたことを確認できたら、自動走行の準備は完了です。
Section 4
自動走行
ミッションを実行する方法はいくつかありますが、今回はスイッチに[Auto]モードを割り当てていますので、機体を[ARM]し、[Auto]モードを開始すると、Roverは指定したウェイポイントを順にたどりながら走行を始めます。
テレメトリー接続を有効にしておけば、Mission Planner上で現在位置や進行方向をリアルタイムに確認できます。

初回の自動走行では、以下の点を意識して観察してみてください。
- 機体がウェイポイントに正確に向かっているか
- 旋回時に大きくオーバーシュートしていないか
- 減速がスムーズに行われているか
これらの挙動は、後ほど少し触れるナビゲーションチューニングで改善できる可能性があります。
今回の場合は特に問題はなく、無事にミッションによる自動走行を達成することができました。
自動走行の様子などは動画でもみられた方が良いと思いますので、追って動画資料の方も作成し共有できる形にできたらと考えています。
Section 5
走行しながらのウェイポイント保存
地図上には表示されない、新しく設置した障害物の位置をミッションに反映したい場合、Mission Planner上で細かいルートを設定するのは難しいものです。
ウェイポイントの近くに機体を持っていき、GPS情報でMission Planner上に位置を表示させながらウェイポイントを打っていく方法もあると思うのですが、実際のルートを走行しながら、任意の地点をウェイポイントとして保存する、という便利な機能も設定可能なようです。
何かを探しながら機体を動かし、任意のポイントで機体位置を記録する使い方や、1周目は手動運転でルートを見つけ、2周目以降から自動化にするなど、色々な使い方が考えられますね。
この機能については下記のArdupilot のドキュメントAuxiliary Functionsで紹介されています。
Auxiliary Functions
https://ardupilot.org/rover/docs/common-auxiliary-functions.html#common-auxiliary-functions
この機能は、Copterなどのモデルタイプでも使用可能のようです。
[フルパラメータリスト]で [RCx_OPTION = 7 ]に設定することで追加できます。
これまでも何度も出てきましたが、RCx_OPTIONの「x」の部分は設定したいチャンネル番号を入れます。
[フルパラメータリスト]以外に、[設定/調整]タブ、[ベーシックチューニング]のページや[User Params]ページで設定する事も可能です。
今回は[フルパラメータリスト]から、RC13にこの機能を割り当てたいと思います。

これにより、指定したRCチャンネル(スイッチ操作)で現在位置を新しいウェイポイントとして保存できるようになります。

スイッチでウェイポイントを追加すると、まずウェイポイントはFCのメモリ内に保存されるようで、すぐにMission Planner上でウェイポイントが追加される様子がみられる訳ではないようです。
保存されたウェイポイントは、Section 3でも触れた[WPを読み込む]を実行する事でMission Plannerのマップ上で確認できます。
このウェイポイントの追加機能を使う際に注意したいのが、メモリに既にミッションが保存されている場合、その続きからウェイポイントを追加していく仕組みとなっていることです。
スイッチで1からミッションを作りたい場合はまずからのミッションを上書きしてから始める必要があります。
Section 6
ナビゲーションの調整
Roverがウェイポイントを通過するときの旋回挙動や、直進中の安定性はナビゲーション・チューニングによって大きく改善、調整できるようです。
今回は走行速度のみ気になったので、その部分の調整方法だけを簡単に説明します。
詳細なチューニングに関しましては、下記の公式ドキュメントに多くのヒントが記載されていますので、何か課題を抱える場合は参考になるものと思います。
Tuning Navigation
Ardupilot Rover Navigation Tuning
今回気になったのはミッション時の走行速度で、その変更は[WP_SPEED]というパラメーターで変更できるとのこと。

[フルパラメータリスト]で値をみてみると、2.981788となっています。

実はこの値、[設定/調整]タブ ベーシックチューニングのページで[FS値]とされている項目と同じ数字になっており、この値を変更する方法でも調整が可能なのではないかと思いましたので、試してみました。

[FS値]を変更する前の2.981788のままでミッションを実行すると、どうやら設定されている速度を目標として自動走行が行われるようです。
直線が比較的長く、速度を出せる部分で[GroundSpeed(m/s)]が、2.9付近まで高まる事で、数値としても確認出来ます。

次に[FS値]を2に変更し、同じミッションを実行しました。
すると、やはり目標速度が変更されるようで、同じ部分で明らかに速度が下がっていることを確認できました。
これでミッションを好きな目標速度で実行できそうです。
Section 7
今回のまとめ
ローバーに限らず、Ardupilotで[Auto]モードを実行する場合注意したいのが、FCメモリ内のミッションの管理です。
ミッションは実行後も基本的に自動で削除されず、かつ、Mission Planner上でも[WPを読み込む]を実行しないと視覚的にメモリに残ったミッションを確認できないので、使い終わったミッションは空のミッションを上書きする等の方法で削除しておくと良いと思います。
また、スイッチ操作などでミッションの途中で中断した場合、中断されたミッションの続きからスタートするので、予期せぬ動きをしたように感じる場合があります。
ミッションに変更がない場合でも始めからミッションを実行したい場合は、実行する前に、もう一度同じミッションを上書きしてから始めるなど、常に現在どのようなミッションがメモリに保存されているか、そのミッションがどういう状態のものなのかを意識しておくと良いと感じました。
単純なラジコン走行から、ミッションによる完全自動走行までを通して、Ardupilotの全体的な仕組みを俯瞰できたのではないかと思います。
このRoverの経験は、CopterやPlaneなど他のモデルにも多くの部分で応用可能です。
Ardupilotの理解を深めるうえで、Roverはまさに理想的な入門モデルでした。
進捗が遅い中、始めから読んでくださっている方々、応援してくださっている方々、本当にありがとうございます。
非常に面白い機体となったので、このRoverをもう少し改造して試してみたい事も出てきており、続きの記事を書くかもしれませんが、これでArdupilot Roverシリーズは一旦完結となります。



