ドローン プログラミング

ドローン プログラミングとは?

ドローンプログラミングとは、ドローンを安定に飛行させるための制御系開発や機体に搭載された慣性装置(IMU)・カメラ・LiDARなどの各種センサーからリアルタイムに得られる情報に基づいて、機体の現在位置や姿勢ならびに周囲の環境情報を正しく推定・認識し、機体が自動的に飛行することを可能とする飛行プログラムを開発することです。

自律飛行ドローンの設計、シミュレーション、展開

ドローンプログラミングの目的として、主に以下の3つの用途に分ける事ができます。

  • 飛行制御系開発

機体が与えられる飛行使命に基づき、それを実現するための航法・誘導・制御のシステムを開発することを指します。ここで、航法とは機体の現在位置や速度、方角を認識することを指し、誘導とは与えられる飛行使命を実現するための飛行軌道(フライトパス)の生成、制御はアクチュエータやモーターといった入力デバイスを適切に操作して生成されたパスへの正確な追従を実現するための姿勢制御や機体の安定化を行います。

  • 自律システムのためのアプリケーション開発

AI (人工知能)によるカメラ画像からの物体検出LiDARによる点群情報を元にした周囲環境の認識の他、自律的な飛行を実現するための障害物回避、機体を安全に管理し運航するための運航管理システム等、特定の用途に向けた機能開発を行います。

  • データ解析

飛行によって得られる各種ログデータを解析し、飛行プログラムの欠陥やパフォーマンス改善、機器の故障予知など、データから結び付く新たな価値の創造・優位性を見出し、データサイエンスに基づく開発を行います。

以上に記したようにドローンのプログラミング開発には様々な目的と用途があり、それに応じてMATLAB®、Python、C/C++といった各種プログラミング言語が採用されています。また近年のドローン需要の高まりを受け、こうしたプログラミング開発に関する高度なスキルを持つ人材が不足しており、ドローンの社会実装に向けた更なる人材獲得や育成が強く求められています。

ドローン開発が生かせる分野

近年ドローンの規制改革が進み、様々な用途においてドローンを活用したビジネスの創出やソリューション提供を行う事業者、団体が増えてきています。以下はドローンを活用が期待される代表的な領域とその用途例です。

  • 趣味

おもちゃ、空撮

  • 農業

農薬散布、土壌調査、作物の発育状況の監視

  • 土木・建築・インフラ

発電所や橋梁といったインフラ設備の点検

  • 運送サービス

デリバリービジネス

  • エンタメ

空撮、ドローンショー

  • 救助、災害

災害現場における状況把握や危険地帯での人命救助活動

  • 防衛

敵地偵察、戦闘支援

  • 学術研究

新たな機体開発、飛行制御手法の研究

ドローンエンジニアの業務内容例

先述の通り、近年のドローン需要の高まりを受け、民生~商業~軍事用途と様々な活用シーンが期待されており、それに伴って機体のカスタマイズや要素技術の新規開発を行うことがあります。特にバッテリーといった電力システム関連の研究開発やガソリンエンジンを併用したハイブリッドによる大型機の開発などさまざまな取り組みがされています。

ドローンエンジニアになると、こうした各種要求に沿った機体開発や自社製品の研究開発を担うようになります。

開発においては、企画、要件定義、基本設計、詳細設計、実装、検証、適合と開発フェーズに応じた様々な業務に携わる機会があります。特に基本、詳細設計のフェーズにおいて、ハードウェアエンジニアは求められる要件を実現するための機器の設計開発を担い、ソフトウェアエンジニアは機体が安定に飛行することに加え、要求される飛行使命を実現するための高度な制御アルゴリズム開発やそれに伴うアプリケーション開発を担うことでしょう。

また設計した機体のハードウェアとそれを制御するソフトウェアが欠陥なく、期待通り正しく動作するかを試験するためのテストエンジニア、実際の機体を操縦し問題がないことをテストするテストパイロット等、さまざまな職種内容があります。

ドローンプエンジニアの業務例

ドローンプエンジニアの業務例

ドローンプログラミングに使用される主な開発言語

  • MATLAB

MATLABは、数百万人ものエンジニアや科学者がデータ解析やアルゴリズム開発、モデル作成に使用しているプログラミングおよび数値計算プラットフォームであり、Simulink®と併用して使用することでブロック線図環境下での制御系開発や動的なシミュレーションによる解析評価を効率よく行うことができるようになります。

またアドオンのツールボックスとして、UAVのシステム開発やシナリオシミュレーション機能に特化したライブラリを提供するUAV Toolbox、航空宇宙機のプラントモデリングや誘導制御系の設計を支援するAerospace Toolbox及びAerospace Blockset™、非因果的な物理モデリングを行うことが可能なSimscape™を活用することで、各種詳細度や用途に応じたプラントモデリングならびに飛行制御系開発を一貫して取り組むことが可能です。また深層学習や機械学習によるアプリケーション開発においては、Deep Learning Toolbox™, Statistics and Machine Learning Toolbox™を使うことで効率良く開発を行うことが出来ます。さらに開発したMATLABのコードやSimulinkのモデルからC/C++で記述された等価な実装コードをEmbedded Coder®を使用することで自動生成することが可能なため、フライトコントローラーなどの搭載ハードウェアへのビルド、移植作業もスムーズに行うことができます。

自律無人航空機の開発ワークフローについてご紹介します。自律無人航空機(UAV)の開発には認知、計画、制御などの複合領域の技術が不可欠です。さらに、リスクやコスト、反復作業の低減のためにシミュレーションを活用することが必要とされています。
  • Python

フリーの高水準汎用プログラミング言語であり、主に機械学習やデータ解析等の用途でポピュラーな言語です。ドローンの飛行プログラミングにおいては、高速に実行されるローレベル制御を担うというよりもドローンと接続されたコンパニオンコンピューター上で画像処理やフライトパスの計算を行う用途で利用されることが多い傾向です。

  • C 言語

1972年に開発された汎用プログラミング言語であり、ドローンをはじめ、家電や自動車、ロケットといった高速で動作、処理することが求められる組込みシステム用で採用されることが多い言語です。

  • C++

C言語から発展した汎用プログラミング言語であり、C言語の特性を継承しつつ、オブジェクト指向型のプログラミング機能などを提供しています。C言語同様に組込みシステムの開発に用いられることが多いです。

  • Java

1995年に開発された汎用プログラミング言語であり、オブジェクト指向開発の他、メモリ管理、処理速度、OS依存のない言語として、主にWebアプリ開発などでポピュラーな言語です。

  • Swift

Apple社が2014年に開発したオープンソースのプログラミング言語であり、iOS、MacといったApple社製のシステムアプリ開発として用いられることが多いですが、Swift Playgroundsの登場によってドローンプログラミングの用途にも用いられています。

ドローンのプログラミング学習におすすめのハードウェア

これからドローン開発を行う方やプログラミング学習を行う方に向けては、MATLAB及びSimulinkをベースに開発が行える以下のハードウェアがおすすめです。

特にPX4 AutopilotではPixhawk®シリーズに対するペリフェラル接続や飛行制御系開発をMATLAB、Simulink、UAV Toolboxで行える他、Embedded CoderとPX4ツールチェーンを活用することでモデルからの自動コード生成、ビルド、実装まで一貫して取り組むことが可能になります。またPX4に対するSoftware-in-the-loop simulation (SITL)Hardware-in-the-loop simulation (HITL)による検証システムの構築にも取り組むことが可能です。

UAV Toolbox Support Package for PX4 Autopilots

ドローンプログラミングの学習方法

ドローンプログラミングには、通常、アルゴリズム開発およびプロトタイピング、ソフトウェアのシミュレーション、ハードウェアの実装およびテストなどが含まれます。MATLAB および Simulink には、先述の通りドローンプログラミングのさまざまな側面をサポートするツールやリファレンス アプリケーションならびに動画といった学習教材が用意されているため、入門者にとっておすすめの開発環境を提供しています。

ドローンプログラミングのワークフロー。

ドローンプログラミングのワークフロー。

ドローンプログラミングの最初のステップは、プロトタイピングとアルゴリズム開発です。このプログラムは、以下の主要なソフトウェア コンポーネントに構造化できます。

  • ドローンの動的モデル (プラントモデル): 機体の位置、速度、姿勢、角速度を表現する運動方程式の他、重力や風外乱といった環境要因を考慮しモデル化します。
  • 航法・認識:

制御や自律飛行のためのセンサーデータをモデル化し処理します。センサーとしては、 制御のためのIMU や気圧計、GPS、自律機能のためのカメラやLiDAR、超音波センサーなどが考えられます。

  • プランニングと決定

定められた飛行使命を実現するための軌道(フライトパス)の設計や環境から検出された障害物に基づいて回避するパスを生成する等、飛行の自律化に必要な誘導のモデル化を行います。

  • 制御

プランニングによって生成されたパスに沿って飛行するための機体の姿勢制御をPID制御といった制御工学の手法を使って設計しモデル化します。

ドローンプログラミングの次のステップである、ソフトウェアシミュレーションは、バグの特定や複雑な自律飛行アルゴリズムの検証に役立ちます。Gazebo® や Cuboid WorldUnreal Engine® などのシミュレーション環境を使用して、テストケースに合わせて仮想環境でドローンのソフトウェアをテストします。

最後に、ハードウェアの実装とテストのフェーズでは、開発したモデルから実装のためのC/C++コードを自動生成することによって、PX4® Autopilots などのフライトコントローラーや、NVIDIA Jetson® CPU といったオンボード コンピューターに展開することが可能です。

またミッションの計画、制御パラメーターの調整、ドローンの運航管理には、QGroundControlMission Planner などのミッション計画ソフトウェアを使用します。

フライトコントローラーやオンボード コンピューターとの通信には、Micro Air Vehicle Link (MAVLink) 通信プロトコルやロボット オペレーティング システム (ROS) が使用されます。フライトログ解析ツールは、フライトログを解析してドローンの動作を把握するのに役立ちます。

詳細については、ドローンプログラミングを開始するためのUAV Toolboxをご覧ください。

また学習教材としてドローンの飛行原理や制御系設計、シミュレーションについて解説した以下のシリーズ動画も合わせてご覧ください。

多くのクアッドコプターは、高度にプログラムされた制御システムにより、人間の介入をほとんど必要とせず、安定した自律飛行を可能にしています。この動画では、クアッドコプターの制御に使用されるセンサーとアクチュエーターをご紹介します。

参考: UAV Toolbox, ドローンプログラミングに関するビデオ, Computer Vision Toolbox, Lidar Toolbox, ROS Toolbox, Navigation Toolbox, ロボティクス向け MATLAB および Simulink, ロボット プログラミング, SLAM とは, MBD (モデルベース開発)