2020年2月15日(土)、クリーク・アンド・リバー社は「ArduPilot 無人機開発エンジニア育成講座 基礎編」を開催した。遠方からの参加も含む受講者は、企業・学生・個人など様々な層で構成されており満席。終始活発な質疑応答が続き、ArduPilotへの高い関心を感じさせた。
 講師はTeam ArduPilot Japan(TAP-J)所属かつ国内トップのArduPilotエンジニアである北岡弘氏(ドローンビリティーCEO)、川村剛氏(TAJISOFT代表)の両氏が務めた。

北岡弘氏(ドローンビリティーCEO)
川村剛氏(TAJISOFT代表)

 本講座のゴールは、「ArduPilotを活用した開発を始められる」ことだという。「ソフトウェアエンジニアであれば、講座受講後にArduPilotを始められるのか?」ということに着目して、下記の切り口でレポートする。

• なぜArduPilotが重要なのか
• どうやって機体を飛ばすのか
• どうやってプログラム制御するのか
• 受講後は何をやっていけばよいか

なぜArduPilotが重要なのか

 はじめに北岡氏よりドローン業界の展望およびドローン活用における課題について解説された。空撮・建設・災害の分野では、既にドローンの活用が進んでいるが、輸送・物流・農業・点検・警備・観測の分野では、活用が期待されているものの十分に進んでいない状況にある。

 この要因として北岡氏は、「ドローン活用は市場に流通している機体に大きく依存しており、流通している機体がDJI社製の空撮機が主流であること」を挙げた。より広範囲に活用されるためには空撮だけではない、各用途に応じて機体を構成できる「柔軟性」が求められる。

 そのような中、オープンソースのソフトウェアArduPilotでは、フライトコードのカスタマイズ、センサーやカメラなど様々な機器の接続、コンパニオンコンピュータを搭載した高度なAI処理の実装が可能である。さらに、いわゆるドローンに限らず、陸海空の多様な形状の機体に搭載することができる。

 ArduPilotの柔軟性・拡張性によって、ドローン活用のフィールドは拡大すると期待されているのだ。

 講座の会場には、VTOL、マルチコプター、ローバー、ボート等、様々なArduPilot機体が展示されていた。実際に自衛隊演習で使用されたというサイトテック社製の大型ArduPilot機体もあった。

陸・海・空 様々な形態のArduPilot機体
トイドローンの中身を入れ替えて組まれたArduPilot機体

どうやって飛ばすのか

 それではArduPilotでは機体の準備・セットアップ・飛行はどのように行うのか、こちらも北岡氏から順を追って解説された。

(1)ArduPilot機体の準備

 機体の準備には完成機を入手するか、部品を個別入手して機体を組み立てる二つの方法がある。完成機(ArduPilotがインストール可能なフライトコントローラーが搭載されている)として3D Robotics社のSOLO、Parrot社のBebop2等の機体が紹介された。

 組み立て機では、フライトコントローラーも自分で選んだものを搭載できる。(Pixhawk、Pixracer、Navio2など。)センサー等の各部品についても紹介された。これらの部品はほぼ海外製となる。

ArduPilotが動作する機体・フライトコントローラー

(2)ArduPilot機体のセットアップ

 機体のセットアップにはArduPilotの地上局ソフトウェアであるMission Plannerを使用する。

 まず機体をUSBケーブルでPCに接続してMission Plannerからファームウェアのインストール、加速度・ジャイロ・コンパス・ラジオ・ESCのキャリブレーション、プロポ(送信機)のスイッチの割り当て、PIDチューニングを行う手順が解説された。

 これはレーシングドローンやマイクロドローンにおけるBetaflight Configuratorを使った機体セットアップに相当する工程である。

(3)ArduPilot機体の飛行

 セットアップが完了するといよいよ飛行である。ArduPilot機体は飛行中に機体情報をテレメトリログとして送信する。講義では、このログをPCで受信してMission Planner上で姿勢、高度、フライトモード、RC信号、位置といった機体情報を確認する方法が解説された。

 またこのほかフライトモード変更や機体操作、自動航行ミッションの作成・実行もMission Plannerから行えることを紹介された。
これらはDJI機体におけるDJI Go4(機体状態確認・操作)やGS PRO(自動航行)の提供機能に相当する。

Mission Planner

どうやってプログラム制御するのか

 ArduPilotの大きな特徴であるプログラムでドローンを制御する方法については、川村氏から解説された。フライトコントローラーの外部から制御する方法(主にPythonを使用)、内部から制御する方法(主にC++を使用)があるが、本講義では外部から制御する方法として下記2つのデモが実演された。

デモ1: MAVProxyを使った地上局と機体のルーティング
CLIの地上局ソフトウェアであるMAVProxyを使って複数地上局(Mission Planner、QGroundControl、MAVProxy)から一つの機体に接続する様子が実演された。これによって複数人(例:機体操縦担当、カメラ撮影担当)による運用が可能となる。またこのMAVProxyを使うことで複数機体に接続することもできるので、ドローンショーのような群制御にも活用できる。

デモ2: DroneKit-Pythonを使ったPythonプログラムによる機体制御
 機体への接続、アーミング、フライトモード変更、離陸、上昇といった基本操作についてライブコーディングを交えて実演された。

 ドローンプログラミングの特徴として、機体の状態によってはコマンドが一回では完了しない場合があるので、適切なハンドリング処理(例:コマンド実行後、機体状態を確認して完了していなければコマンド再実行する、など)を行う必要があることが紹介された。これはDJI SDKを使用したプログラミングにも当てはまる事項である。

Pythonプログラムによる機体制御

受講後は何をやっていけばよいか

ArduPilotは機能豊富であるが故に、プロジェクト・ハードウェア共に多岐にわたり複雑なので、どこから始めればよいか分かりにくい状況にある。

本講座の講師陣は、「ArduPilotはオープンなコミュニティで開発が進められているので、まずはそこに参加し、情報収集してみては」とアドバイスした。具体的にはWiki、Forum、Gitter、Facebookグループといった、様々なArduPilot関連チャネルがあることが紹介された。

これによりArduPilotの構成や直近の問題や議論を理解できたら、その後のステップとしてGithubにてソースコードをForkして、ソースコードの修正・プルリクエストに進むとよいだろう。

まとめ

本講座ではArduPilotが求められる背景、機体の準備・運用方法、プログラム制御方法について具体的なイメージやデモを交えて丁寧に解説され、受講後のネクストアクションについてもアドバイスがあった。ArduPilotという大きなテーマに対しては一日という短い時間のカリキュラムだったが、ArduPilot開発を始めるために必要な知識をコンパクトに得られる講座であった。