ドローンプログラミング

ドローンをプログラミング言語「Python」で開発:自律飛行・画像認識

2020年3月17日

こんにちはー!ドローン&ガジェット好きのK-ki(K-ki@Ailerocket)です。

ドローンの実用化も徐々に進み、今では農業空撮測量点検といった分野を中心に、ドローンを使って仕事が行われることも少なくありません。

普及が進み始めたドローンの次の課題は、自動化・自律化を進め、より高度な作業ができるようになることです。そのためには、人工知能など最新の技術を活用していく必要があります。

人工知能やディープラーニング等の分野と相性のよいプログラミング言語として「Python(パイソン)」が知られており、ドローン分野でも今後さらに利用が広がっていくと考えられます。そこで今回は、Pythonについてドローン開発のどんな分野で必要になるのか、具体例を交えて解説していきます。

なお、他のプログラミング言語にも興味がある方は、こちらのページも参考にしてください。

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

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

Python(パイソン)とは

Pythonはコードの読みやすさ・書きやすさを重視して開発されたプログラミング言語です。書きやすさ、読みやすさは主観によるところも多分にありますが、Pythonでは以下のような特徴が書きやすさ・読みやすさを実現している、とされています。

ポイント

Pythonが書きやすい、読みやすいといわれる代表的な理由は以下のとおり。

  • 動的型付け言語であり、変数の型宣言が不要である。
  • インデントに構文としての意味をもたせることで、括弧を減らしている。

動的型付け言語はPythonだけではありませんし、動的型付け言語だからといって型のことを何も考えずにコーディングすればすぐに読みづらいコードになります。また、インデントを揃えるのはPythonに限らずコーディングの基本でもあるので、他の言語よりも圧倒的に読みやすい・書きやすいというほどではありません。それでも、初心者でもとっつきやすく、シンプル・簡潔な記述が可能なのがPythonの良いところです。

また、Pythonはインタプリタ言語なので、動かすためにいちいちコンパイルしなくてよいのも扱いやすい特徴と言えるでしょう。一方、当然ながらコンパイラ言語と比べると処理速度の面では劣ります。

補足説明

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

Pythonの特筆すべきところは、ライブラリが非常に豊富であることです。機械学習や人工知能関連の分野でPythonが幅広く用いられているのも、このライブラリの豊富さによるところが大きいと言えます。言い換えれば、Pythonを利用する場面は、適用できる便利なライブラリが存在するか否か、という点に依存する傾向があります。

ドローンに関して言えば、飛行制御などのドローンが飛ぶための根幹になるようなシステムよりも、ドローンがどう飛ぶべきか、ドローンをどう飛ばせば目的が達成できるかを解析させる、という分野で使用されることが多いです。いわゆるミッション系と呼ばれる分野になります。

あるいは、取得したデータから有用な情報を引き出す「データ解析」の目的でPythonを使うことも多いです。こういった、大規模なデータから傾向を読み取るような作業は機械学習と相性がよく、Pythonが活躍することが多いです。

Pythonと相性の良いドローンソフトウェアの分野

ドローン開発においてPythonが使用される分野はミッション系が主になると書きました。ここではもう少し具体的な例を挙げつつ、どんな場面でPythonが活躍するか解説していきます。

障害物回避・画像認識飛行

一つの適用例としては、飛行中の障害物回避機能の実装にPythonを使用する、というものがあります。Pythonは機械学習や人工知能関連の分野に強いことは上でも紹介しましたが、これと関連の深い分野に「画像認識」があります。方法は色々ありますが、例えば大量の画像を元に学習し、画像に何が写っているかを検出するようなことが可能です。

これを応用し、機体の進行方向に何か邪魔になるものがあれが検出し、それを避ける方法をフライトコントローラに指示する、という機能を持ったソフトウェアは既に実用化されています。DJI製の機体はもちろん、オープンソースの飛行制御ソフトウェアでも搭載されている機能です。

また、似たようなソフトウェアとして、画像から文字や記号などの情報を読み取り、機体の進行方向に反映させる、というようなものもあります。

参考ARマーカーや開発環境に関して/屋内でのドローン自律飛行テスト

他にも、DJI製の機体に搭載されているビジョンポジショニングみたいなこともPythonを使えばできるでしょう。このような画像から情報を取得する技術についてはPythonの得意分野であり、ドローンへの応用方法も色々とあります。

取得画像からのデータ解析

障害物回避以外の活用例にもかんたんに触れておきましょう。例えば、農業分野でのドローン活用事例として、作物の生育状況をモニタリングする、という取り組みが行われています。これは画像を解析し、主として葉の色から作物の生育状況の良否を判定するというものです。

ドローンが活躍するスマート農業と農薬散布の資格・手続き
2020年最新・ドローンが要の「スマート農業」と農薬散布の資格解説

近年は「スマート農業」という言葉が広がり、ロボットやICTを利用した農業の効率化が推奨され、ドローンも農薬散布等で実用されています。農業におけるドローンの活動や、ドローンを農業で使うための手続き、資格、法律等を解説します。

この取り組みはまだ実験段階であり、具体的にどんな手法を取り入れているのかはK-kiには分かりませんが、画像からの生育状況解析にはPythonが活躍しそうです。また、このシステムが発展していけば、ドローンで空撮した画像を機上又はネットワークでつながった端末上で解析し、肥料が不足している箇所にドローンから肥料を空中散布する、みたいなことも可能になるかもしれません。

Pythonで開発されているドローン関連ソフトウェア

プログラミング言語としてのPythonの概要と、ドローン関連で活躍する分野は概ね理解してもらえたでしょうか。次に、ドローンに関連するソフトウェア開発で、実際にPythonが使用されている開発プロジェクトを紹介しておきます。

MAVSDK-Python

オープンソースの無人機用ソフトウェア開発用プロジェクト群である「Dronecode」内で、機体に搭載するフライトコントローラ等を制御したり、これらのコントローラと通信したりするソフトウェアを開発するためのSDK(Software Development Kit:ソフトウェア開発キット)であるMAVSDKに、Python用のプロジェクト「MAVSDK-Python」が存在しています。

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

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

MAVSDKは、機体に搭載するコンパニオンコンピュータ上や機体と通信が確立された地上の端末で動作するソフトウェアを開発するために使用するSDKで、テレメトリの取得、機体の指定地変への誘導などが可能なソフトウェアを開発することが可能です。

MAVSDK-Pythonを使用すれば、機体の情報をテレメトリで受信し、地上の処理能力が高い端末で機械学習などの重い処理を走らせ、その計算結果を元に誘導点を決めてドローンをそのポイントまで飛行させる、というソフトウェアを作ることも可能です。ドローンを使ったサービスを構築するためには、かなり重要なソフトウェアと言えます。

参考GitHub – mavlink/MAVSDK-Python: MAVSDK client for Python.

GAAS(Generalized Autonomy Aviation System)

GAAS(Generalized Autonomy Aviation System)は、コンピュータビジョンをベースにしたドローンの自律飛行を目指すプロジェクトです。最終的には自律飛行する無人機での乗客輸送を目指しているらしい、中国系の壮大なプロジェクトです。

完全にPythonのみで構成されるプロジェクトではありませんが、要所要所でPythonが使われています。Pythonを使った飛行経路の最適化などをやっているようです。

参考GitHub - generalized-intelligence/GAAS: Generalized Aviation: Open source autonomous aviation software platform

Pythonでプログラミングし飛ばせる「Tello EDU」

Pythonを利用してドローン関連のソフトウェア開発を行う場合は、上で紹介した開発プロジェクトなどを利用しながら、対応するハードウェアを用意し実装・検証を行うのが正攻法ですが、個人開発の場合などは特に、最初はちょっとハードルが高いかもしれません。そこで、Pythonで書いたコードを実行できる市販のドローンを使って試してみる、というのが一歩目としては踏み出しやすいでしょう。

created by Rinker
¥22,097 (2020/04/05 06:38:22時点 楽天市場調べ-詳細)

Pythonでプログラミングできるドローンとして有名なのが、Ryze Technologyの「Tello EDU」という機体です。EDUはおそらくeducationの略であり、教育用という面が強いですが、その分マニュアルなども比較的丁寧でとっつきやすく、気軽に試してみることができます。

Tello EDUはドローンメーカー世界最大手のDJI製フライトコントロールシステムを搭載しているため、飛行制御は十分安定した出来になっています。元々は、「Tello」という、Scratchというプログラミング言語で操作できる機体が販売されており、それの上位版がこのTello EDUという位置づけです。ScratchとPythonだけでなく、Swiftでのプログラミングにも対応しています。

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

ドローン開発におけるPythonの活躍について、得意分野や実際の開発プロジェクトの解説を交えながら紹介してきました。Pythonとドローンは比較的相性がよく、特にドローンを活用して高度なシステムを構築する場合には、Pythonをどこかで使う必要が出てくると思います。

従って、ドローン開発を行うエンジニア、特に機体周りよりもややサービス寄りの分野を担当するエンジニアになるためには、Pythonの知識・技術はかなり重要と言えます。こういった技術を効率よく身につけるためには、プログラミングスクールやオンライン教材がうってつけです。

もちろん、プログラミングは独学することも可能ですが、どうしてもハマりやすく、K-kiの経験上も悩みを解決するのに時間がかかることが多いです。日進月歩で技術が成長しているドローン関連分野においては、トレンドに置いていかれないようできるだけ時間をかけずに能力を身につけることが重要であり、その面でプログラミングスクールやオンライン教材には強みがあります。

プログラミング経験があるならUdemyのオンライン教材

プログラミングスクールでは効率的に学習が可能ですが、どうしても価格が高くなります。特に、ある程度プログラミング経験のある人がドローン向けの知識・技術を習得したいような場合には、基礎的な部分が多すぎて面倒に感じてしまうでしょう。

ある程度プログラミング経験があり、問題が発生しても自分で解決できるような人は、「Udemy」のようなオンライン教材を販売しているサイトを利用すると、コストを抑えつつ効率的な学習が可能です。例えば以下の講座では、Pythonを使ってドローンを遠隔自動操作する方法や、ドローンに搭載したカメラで顔認識を行う方法を学べます。現役シリコンバレーエンジニアによる動画教材で、1000人以上の人が受講している超人気の教育プログラムです。

かなり実践的な内容でありながら、1万円程度で購入できる非常におすすめの教材です。

Pythonを使用してドローン開発をするならTECH ACADEMY

Python初心者、あるいはプログラミング初心者の場合は、プログラミングスクールで基礎から丁寧に学ぶのが良いでしょう。プログラミングスクールは数多いですが、初心者の場合は「TECH ACADEMY(テックアカデミー)」がおすすめです。Pythonの習得を機械学習関連のカリキュラムに沿って学べるため、Pythonの技術だけでなく、Pythonを使用する際に併せて求められることの多い機械学習関連の知識も身につけることが可能です。

TECH ACADEMYはオンラインスクールのため、全国各地どこに住んでいてもすぐにプログラミング学習を始められます。また、専属で指導してくれるパーソナルメンターがつくので、オンラインでも質問しやすく、効率よい学習が可能です。

機械学習に強いエンジニアになるならDIVE INTO CODE

Pythonを使って、もっと本格的に機械学習を活用するソフトウェア開発に携わりたい場合は「DIVE INTO CODE」というプログラミングスクールがおすすめです。このスクールでは「機械学習エンジニアコース」というカリキュラムが設けられており、機械学習エンジニアになることを最終目標にして4ヶ月間かけて徹底的に技術を身につけます。

とにかく本気でPython・機械学習を勉強する人におすすめです。カリキュラムも厳しめなので、機械学習エンジニアになるという強い気持ちがないと続かないと思いますが、これをクリアできればかなり実力がつくはずです。

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

K-ki

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

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

Copyright© Ailerocket/エルロケット , 2020 All Rights Reserved.