ドローンプログラミング

ドローンをプログラミング言語「C/C++」で開発:制御・自動操縦向け

ドローンをC言語/C++で開発 ー自動操縦向けー

こんにちはー!ドローンとアクアリウムが好きなK-ki(K-ki@Ailerocket)です。

ドローンの普及に伴い、今後はドローンを開発するエンジニアが大量に求められていくと考えられています。その主役はソフトウェアになることは明らかであり、様々なバックグラウンドを持ったソフトウェアエンジニアが必要とされるでしょう。

ソフトウェアを記述するプログラミング言語には多くの種類が存在しますが、それぞれに長所・短所があり使用される場面も異なります。今回は、C言語及びC++言語に注目し、ドローン開発のどんな分野で必要になるのかを解説していきます。

ドローン開発で使用されるプログラミング言語まとめ
ドローン開発で使用されるプログラミング言語の適用分野別まとめ

ドローンの運用に際しては、機体を制御や取得したデータの解析など、様々な場面でソフトウェアを利用します。これらのソフトは目的によって記述するプログラミング言語が違います。ドローンのソフトウェア開発を言語を中心に説明します。

なお、他の言語でのドローン開発に興味がある場合は、こちらのページを参考にしてください。

C言語とは

プログラミングに疎い人でも「C言語」という名称くらいは聞いたことがあるのではないでしょうか。C言語は、数あるプログラミング言語の中でも特に知名度の高いものの一つです。

1972年に開発されたC言語は、コンパイラ言語の一種で、人間にとって記述内容の解釈が容易ないわゆる高級言語に分類されます。一方で、他の高級言語に比べるとハードウェアを意図的に操作するような記述も可能であることから、目的に応じて処理を最適化しやすく、動作環境の処理能力が低い、または実行速度が要求されるソフトウェアの開発で利用されることが多い言語です。

補足説明

プログラムは人間が理解できるように書きますが、そのプログラムを実行するためには一度機械が理解できる「機械語」に変換する必要があります。全てのソースコードをあらかじめ機械語に変換しておくプログラミング言語を「コンパイラ言語」、コードを実行する際に逐次機械語に変換していくプログラミング言語を「インタプリタ言語」と呼びます。


補足説明

高級言語は、ハードウェアやOSに依存することなく記述できるように作られたプログラミング言語を指します。自然言語の語彙や構文を利用したり、数式に似た記号・記法などを取り入れることで、人間が記述・読解しやすい構造になっています。対義語である「低級言語」は、コンピュータが直接解釈して実行できる機械語やそれに近い言語のことを表し、言語の性能的な優劣とは関係ありません。

ハードウェア寄りの記述が可能なC言語は、無駄の少ない軽量で高速なプログラムを書きたい場合に優秀です。従って、ハードウェアの性能に制約がある場合が多い「組み込みシステム」向けのソフトウェア開発では、特によく採用される言語です。

補足説明

組み込みシステムとは、特定の機能を果たすために機械や家電等に組み込まれるコンピュータシステムのことを指します。PCのように汎用的なシステムにする必要がないため、ハードウェアの性能を必要最小限にしてコストを抑えることも多いです。

ドローンも、こういった組み込みシステムの一種と言えるため、C言語の活躍する場面は少なくありません。

  • ドローン操縦士

C++とは

C言語に対し、オブジェクト指向プログラミングをはじめとする様々なプログラミングパラダイム(プログラミングの考え方・記述方法)に対応できるよう機能追加して派生させたプログラミング言語がC++言語です。C言語の仕様を引き継いでいるため、ほとんどのCプログラムをC++でも流用することができる上、Cプログラムと混在させて使用することも可能です。

C言語との違いとしてわかりやすいのは、クラスを利用できることです。この特徴によりオブジェクト指向プログラミングが可能になっていますが、一方で言語の仕様が複雑であり、ただでさえ難解なC言語よりもさらに難しくなっています。

補足説明

オブジェクト指向では、データとデータを操作するメソッドを一つの「オブジェクト」と呼ばれる単位にまとめて取り扱います。オブジェクトを構成するデータとメソッドを定義した雛形に相当するものがクラスです。

C++は基本的にC言語の特徴をそのまま引き継いだプログラミング言語であるため、組み込みシステム向けのソフトウェア開発で広く活用されています。オブジェクト指向プログラミングが可能なことから、C言語よりも大規模なシステム開発に向いています。

C言語/C++と相性の良いドローンソフトウェアの分野

ここまでに述べたとおり、C言語及びC++は、以下の面で他のプログラミング言語に対し優位性を持っています。

ポイント

C言語/C++の持つプログラミング言語としての強みは以下のとおり。

  • ハードウェア寄りの記述が可能で無駄の少ない軽量で高速なプログラムを書きやすい。
  • 言語としての歴史が長くC言語向けのライブラリや開発環境など多様な資産がある。

こういった長所と相性が良いのが、機体の制御を行う「飛行制御ソフトウェア」です。飛行制御を担当するフライトコントローラ周りの処理は、風に煽られて機体のバランスが崩れた際など、安定性を保つために素早い制御が求められる場面も多いです。また、フライトコントローラは機体に搭載する部品であり、重量は軽く、限られた電力で動作する必要があるため、ハードウェアの性能は必要最小限に設計されます。

このように飛行制御システムは、ハードウェアの性能に制約があり、処理速度が求められるまさに組み込みシステムの特徴が露骨に現れるシステムであるため、C言語やC++と相性がよく、これらの言語が採用されることが多いです。

C言語/C++で開発されているドローン関連ソフトウェア

C言語及びC++言語について、ドローン向けソフトウェアとの関係性にも注目しながら紹介してきました。次は具体的に、C言語/C++を利用してドローン向けソフトウェアを開発しているプロジェクトを紹介します。上にも書いたとおり、C言語やC++を使用しているプロジェクトは、飛行制御系プロジェクトが多いです。

PX4 Autopilot

オープンソースのドローン開発プロジェクトである「Dronecode」の中で、オートパイロット(自動操縦)を担うのが「PX4 Autopilot」です。Dronecodeについてはこちらを参考にしてください。

Dronecodeプロジェクト
Dronecodeとは何か―オープンソースドローン開発プラットフォーム

ドローンの統合的な開発プラットフォームとしてDronecodeが注目されています。日本語での情報が少ないDronecodeの背景とプロジェクト構成を紹介します。フライトコントローラ・シミュレータ・アプリ用APIなどハード・ソフト両面にまたがるプロジェクトです。

PX4では固定翼の飛行機、回転翼のマルチコプター、VTOL機等を制御することが可能です。マルチコプターの飛行方法(モード)としては、姿勢保持(Stabilized)、位置保持(Position)、高度保持(Altitude)、ウェイポイント飛行(Mission)などに対応しており、DJI製品などの既製品ドローンで用意されているモードは一通り用意されています。

Dronecodeの主要プロジェクトであり、シミュレータや地上管制ソフトウェアなど、さまざまなソフトウェアを含めたエコシステムが既に出来上がっています。今からドローンを本格的に開発するなら、このプロジェクトを上手く活用するべきでしょう。

参考GitHub – PX4/Firmware: PX4 Autopilot Software

ArduPilot

ArduPilotでは、回転翼機、固定翼、車両等の制御、そしてこれらと通信するためのアンテナの方向制御などをサポートしています。かつてはDronecodeのメインの自動操縦プロジェクトでしたが、著作権やバージョン管理についてDronecodeの主要なファウンダーと折り合いがつかなくなり、Dronecodeを離脱しました。

APM:ArduPilot Mega
APM:ArduPilot Mega-ドローン・RC飛行機用オートパイロット [Drondecode]

高度なオートパイロット(自動操縦)システムを実現する、オープンソースのプラットフォーム「APM:ArduPilot Mega」を解説します。ドローンコードプロジェクトの一部でもあるAPMは、ドローン・マルチコプター等に搭載するファームウェア、GCSソフトウェア等から構成されます。

Dronecodeを離脱後も新たな出資者を獲得し、開発が継続されています。K-kiはこのフライトコードを利用した機体を自作して飛ばした経験があり思い入れもあるのですが、現状だとやっぱりPX4のほうが優位でしょう。PX4を使う機体を作ったことがないので正確な比較はできませんが、ドキュメントをざっと読んだ感じでは両者にそこまで大きな差はないと思います。

参考GitHub – ArduPilot/ardupilot: ArduPlane, ArduCopter, ArduRover source

C言語でプログラミングし飛ばせる「CoDrone Pro」

C言語を利用したドローン開発を行う場合、上で紹介したPX4やArdupilotなどのオープンソースの飛行制御ソフトウェアをベースにソフトウェアを開発し、Pixhawkなどの対応するフライトコントローラへローディングした上で、機体のフレームやモーター、ローターやバッテリーなどを選定して自作ドローンを組み上げるのが基本的な流れです。これらのオープンソース開発プロジェクトはシミュレータを含むか何らかのシミュレータソフトに対応しているため、ある程度はパソコンの中だけで開発を進めることも可能ですが、やはり最終的には実機で機能確認を行う必要があるため機体の製作は避けられないでしょう。

この手法だと本格的な開発が可能ですが、コストもそれなりに掛かりますし、「ドローン開発をやってみたい」という段階ではハードルがやや高いです。そこで、初学者は市販されているプログラミング可能なドローンを使用して、まずは自分で組んだプログラムで機体を動かしてみる、というところからスタートすると良いと思います。

そういった目的にぴったりな機体として、「CoDrone Pro」が挙げられます。

created by Rinker
Robolink Inc.
¥49,800 (2020/12/03 07:07:51時点 Amazon調べ-詳細)

Robolink社が販売しているCoDrone Proは、海外のクラウドファンディングサイト「kickstarter」発のプログラミング可能なトイドローンです。電子工作でよく利用されるArduino(アルドゥイーノ)というマイコンボードと開発環境がセットになったシステムを採用しているため、これを利用したプログラミングが可能になっています。

Arduinoの開発言語は「Arduino言語」であり厳密にはC言語とは違うのですが、「C言語のすべての構造と、いくつかのC++の機能をサポートしている」ことが明言されており、C言語と同じように記述することが可能になっています。

C言語を習得しドローンエンジニアになるには

C言語は歴史が古く、プログラミングを始めるならまずC言語から、という時代もかつてはありましたが、現代の他の高級言語と比べるとハードウェア寄りの記述が可能な分難易度が高く、あまり初心者向けの言語ではありません。もちろん、独学で身につけることも可能ですが、どうやったら問題を解決できるかわからず長時間悩んでしまう「ハマる」という状態になることも多くどうしても時間がかかってしまいます。当然、時間がかかる分挫折する人も多いです。

最近はプログラミングを学べるプログラミングスクールが増えており、オンラインで完結しているスクールもあるため全国どこでもプログラミングが学べます。効率的にC言語を学びたい、プログラミングはさっさとマスターして機体の開発に時間を割きたい、という場合はプログラムスクールを利用するのも良い方法と言えるでしょう。

ただし、プログラミングスクールではウェブやスマートフォンアプリなどの分野を中心に学習することが多く、ドローンの機体制御のような、C言語での組み込みシステムに活かせるプログラミングが学べるスクールは少ないです。その数少ないスクールの一つが「KENスクール」で、C言語を使った組込みシステム開発が学べるカリキュラムが用意されています。

東京、横浜、名古屋、大阪、札幌、福岡などに校舎があるため、主要な都市圏に住んでいる人であればKENスクールで講習を受けることが可能です。また、一対一の個別指導に力を入れているため、わからないところがあってもすぐに解決できる学習効率の高さが魅力です。

飛行制御エンジニアになるには制御工学の知識も必要

このページでは、ドローン開発におけるC言語/C++でのプログラミングに焦点を当ててきました。これらのプログラミング言語は、飛行制御ソフトウェアとの相性が良いのは既に述べたとおりですが、プログラミングを学ぶだけでは飛行制御エンジニアにはなれません。C言語でプログラミングができたとしても、どんなプログラムを作るべきかわからないからです。

機体を制御するためのプログラムの仕様を決めるためには、制御工学の知識が必要です。制御工学の知識は一朝一夕で身につくものではありませんが、この知識なしでまともに飛ぶ機体は作れないので、必要ならば勉強しましょう。ここでは、ドローンの飛行制御ソフトの開発に当たり、最低限必要と思われるレベルの知識を習得できる教科書を簡単に紹介しておきます。

フィードバック制御入門

制御工学の有名な書籍で、大学などで教科書に指定されていることも多い本です。私も制御工学を学んだ時はこの教科書を使用しました。プログラミングからは少し遠いですが、制御工学についてわかりやすくまとまっている良書です。

Pythonによる制御工学入門

もう少しプログラマ向けの教科書がこちらです。C言語ではないですが、Pythonを使って制御工学を体感しながら学ぶことができます。

航空機力学入門

制御工学では、制御則を適用する対象のモデルが理解できなければ、どれだけ制御の知識があってもまともなコントローラは作れません。従って、実は航空機の力学についての知識も必要です。

この手の分野の本では、こちらの「航空機力学入門」がおすすめです。私も持っていますが、航空機の設計者のバイブル的存在であり、一冊持っておいて損はありません。

  • この記事を書いた人
  • 最新記事

K-ki

著者:K-ki 子供のころに作った模型飛行機がきっかけで航空宇宙の世界に足を踏み入れたエンジニア。HNは「けーき」と読みます。 好きなものは航空機(固定翼・回転翼・ドローンなど全般)と生き物・アクアリウム。

-ドローンプログラミング

© 2020 Ailerocket/エルロケット