********************************************************************** セッションs2b チュートリアル テーマ:オープンソースを使ったドローンの自律制御ソフトウェア技術 講師:磯部 正幸(ファイブソリューションズ) 日時:2016/8/26 9:00〜10:20 参加人数:48名(終了時) ********************************************************************** ・アジェンダ ○ドローン関連ソフトウェアの種類 ○ROSを始めとするOSS、およびドローンへの応用 ○開発している基盤ソフトのアーキテクチャ ・最近のドローンの傾向 昔と比べて、法律の規制が入りドローンへの参入の敷居が高くなっている。 しかし、業務用向けでは確実に利用が広がってきている。 ・ドローンとソフトウェアの分類 ドローンのソフトウェアを分類すると以下の大きな4つに分類することができると考えている。 ○飛行制御 ○知能制御 ○データ解析クラウド ○管制/モニタリング Dronecodeと呼ばれるドローン向けのソフトウェアスタックが存在し、上記の4つをカバーしている。 ROSとの連携もできており、知能制御との連携が特に便利。 Mavlinkを介してROSなどのソフトウェアと連携することができる。 ・飛行制御 飛行制御のハードウェアには下記の3つある。 ○Dronecodeを組込んだ単体の完成品FC ・GPS, 加速度 ,ジャイロといった制御に必要なが内蔵されている ・制御ソフトがインストールされている ○Dronecodeを組み込んだFC拡張ボード ・拡張ボードは制御必要なセンサ類が搭載され ており、マザーボードと機体それぞれにI/Oピンで接続 ・制御ソフトはマザーボードにインストール ○ドローンメカ製の(クローズドソース)FC ・制御に必要なセンサ・ソフトが全て組み込まれたモジュール ・知能制御 大きく6つの知能制御のプレイヤーがいる。 ○Dronecodeもミュニティによるアドバンスコントロールソフト ・Dronecodeのコミュニティが知能制御の部分も開発し始めている。理由として、スポンサーが多くの投資をしているため、資金を知能制御の方まで使えるようになった。 ・クアルコムやインテルはドローン向けのプラットフォームを提供し始めている。 ・スポンサーもついて開発中のようだがまだ使えるものは出てきてない状況。 ○Dronecode+ROS ・DronecodeとROSをMAVLinkを利用して連携し知能制御を行う。 ・MAVLinkというプロトコルが実装されており、FC、ROS、リモコン側とデータや制御コマンドをやり取りできる。 ・ROS側はMAVLink用のパッケージがOSSであり、ROSでドローンのロボティクスパッケージを用意すれば知能制御が可能。 ○メーカー製のSDK ・メーカーが提供しているSDKがある。特に欧米メーカーが多い ・最新のPhantom4では衝突回避機能、人の自動追跡機能などを内蔵。 リモコン側からSDK越しにも利用可能。 ○クラウドロボティクス ○単体機能ソフトウェア部品 ○業務用プラットフォーム(Airwareなど) ・データ解析クラウド 大きく4つに分類することができる。 ○3Dモデル生成、分析、測量、検索と共有 ・災害が起きた時などに、災害前の情報を検索するときなどに便利。DroneDeployなどが開発している。 ・航空写真のような連結画像、正確性重視の3D地形再現、テクスチャ込みの3D再現、農業用解析(穀物の生育状況の分析)、土砂や構造物の体積の計算、既存のCADデータとの照合、 Webの共有リンク生成 ○ドローンのデータ解析用クラウドインフラサービス ・写真の管理、画像認識用のGPUサーバ、 画像ピクセル処理用のサーバとSDK、 クラウド上のデータに簡単にアクセスするためのモバイルGUI さらに機能単位でソフトを売り買いできるマーケットプレイスを提供 ・DRONEDATAなどがある ○飛行制御とクラウドデータ解析が一体となったプラットフォーム ・AWS、GCP、Azure 等が提供するIoT向け機能を組合せることでドローン向けサービスを構築可能 ○大手のパブリッククラウドプラットフォームでカスタム開発 まだまだ、始まったばかりの領域で今後普及していくと分野。 データ解析クラウドについては、有力なオープンソースがあまり無く、商用のサービスが乱立しつつある。 ・管制/モニタリング 大きく3つに分類することができる。 ○パブリックな飛行管制・交通整理 ・NASAが飛行観戦のソフトなどを作っている ・農業、消防、インフラ点検など公共空域の飛行管制 ・策定した飛行ガイドラインに沿って自律ドローンと通信しルールを施行 ・商用というより行政支援アプリケーション(NASA)  ○ローカルなドローン複数台のモニタリグと制御 ・民間のドローンを監視する ・複数台の協調制御、ミッション管理、ジオフェンス機能、バッテリーモニタ等 ・主にドローンのハードを含む統合プラットフォームベンダが提供  ○機体の登録管理・行政へ許認可申請代 ・飛んでいい場所かどうかの登録管理を行う ・国内ではブルーイノベーション社のSoraPass、CLUE社のDroneCloudなど MAVLinkをサポートした遠隔管理ソフトを独自に作ることにより、Dronecodeベースの機体の管制/モニタリング機能を実装できる。 OSS(Dronecode)では飛行計画やミッション管理の機能を搭載した管制ソフトが幾つか提供されており、それらは機体とMAVLinkプロトコルを介して通信する(コンパチブルGCS : Compatible Ground Control Stations)。 ・ROSの概要 ROSではソフトウェアの実行単位をノードといいトピック・サービスを介してメッセージのやり取りを行う。 情報加工、状態認識判断・意思決定行動計画アクチュエーション等を行うことが出来る。 立ち上げるノードの構成をローンチファイルとして記述効率よく操作ですることも可能。 ROSの便利な機能としてrosbagと呼ばれるデータ再生ソフトや、Rvizと呼ばれる可視化ツールが有る。その他にgazeboというシミュレータがある。 特にrosbagは有用で、Droneは実機検証をするのが非常に難しいため、一度データを記録することで楽に開発ができる。 ・ドローンに有用なROSパッケージ ○ardron_autonomy Parrot ARDroneをROSからコントロールするパッケージ ○bebop_autonomy Parrot BebopDroneをROSからコントロールするパッケージ ○tum_simulator マルチコプターを想定したGazebo上のモデルプラグイン ・ドローン+ROSで有用なOSSライブラリ ○OpenCV cv_bridgeというのがありシームレスに連携可能 ○PCL ○OMPL 動作計画 ○Octomap コンパクトな3次元格子表現 ○FCL 柔軟な障害物回避ライブラリ ・ROSとWebの接続 ○rosbridge ・ROSとWebをつなげるためのWebソケットのブリッジがある。国内では使っている人は少ないが非常に便利。 ・ROSメッセージをJSONにしてJavascriptとやりとり できるようにするサーバ。Websocketでブラウザ上のJavascriptと連携したり、TCPソケットで別ホストの Node.jsプロセスと連携したりできる。 ・画像/映像データについてはmjpeg_serverで配信可能。(ただしそれなりにサーバ負荷が掛かる)   ○roslib ・rosbridgeサーバに接続するクライアント側のJSライブラリ。ブラウザ上のJS用のものとNode.js用ものとがある。 ・roslibとHTML5 CanvasやWebGLを組み合わせ 2dや3dの位置情報をブラウザ上で可視化するライブラリがある。 ROSベースのシステムにWebインタフェースを備えることも比較的容易である。 ・自律制御ソフトを作る上での課題   ・2次元平面上のロボットに存在するROSのナビゲーションスタックのようなパッケージ群が3次元のUAV向けには存在せず、作り込みがどうしても必要   ・オンボードでROSを動かすのが難しい。   ・DronecodeとROSで開発コミュニティが割と独立していて連携が通信プロトコルくらいしかなく、オンボードとリモートで透過的に機能実装することが困難・   ・ドローンのメーカごとにSDKやAPIが異なっており高レイヤのロジックを共通化しようしても低レイヤの統一が難しい。   ・ROSメッセージのデータフォーマットがJSONや既存のDBなどと互換性がなく、閉じたシステムになりがち。 ・製品コンセプト 自律制御ソフトを作る上での課題を解決したらビジネスになるのではないかと考え、製品を作成中。 秋ごろから着手している。   ○製品メリット ・複雑なドローンの操縦に掛かるオペレータの負担を軽減(コスト削減メリット) ・より大きなIoT統合システムに拡張可能で投資効率が良い(戦略投資メリット)   ○方針 ・FCは自作しない(市販ドローンの機体 or Dronecodeベースのカスタム機体) ・知能制御と管制/モニタリングに特化し、クラウド側のデータ解析は後回し(ただしクラウド上のデータ解析が容易に行える拡張性を意識して作る) ・まずはゲートウェイからリモートでの知能制御を行い、オンボード処理は後回し(ただしオンボードとゲートウェイの間でなるべく移植しやすいように作る) ・ドローンだけでなくIoTデバイスも含めてシステム統合可能な設計にする ・手性の高いParrot社のドローン(ARDRone)でまず実装。 ・システム構成及びソフトウェアアーキテクチャ   ○ホストマシンにてROSが稼働   ○既存及び独自開発のROSノードを組合せて知能制御及び管制/モニタリング機能を実現   ○実機(異なる機種)/Gazeboシミュレータで 機種依存性を吸収するドライバを作成   ○Gazeboシミュレータではセンサアクチュエータ、環境オブジェクト等のプラグインを作り本体 の機能検証を効率化   ○ROSに接続するWeb管理コンソールを提供 名古屋大学発のAutowareというのがあったが、同じようなソフトウェアアーキテクチャだった。 ・サブシステム一覧   ○スーパバイザ ・ROSではドローンの機体という概念がないため、機体に命名の一貫性を持たせるためにスーパバイザを作成した。 ・本基盤ソフトのメインノード。  機体情報をDBで管理し、ドローンに名前をつけてROS上の名前空間上で機体やデバイスの個体名の一位性を保証する。  複数台の協調タスク(ミッション)を担い、内部的にミッション管理とリソーススケジューリングの機能を持つ。  またWeb管理コンソールへのファサードとなる。   ○タスクマネージャ ・SVが管理するミッションの中で、ドローン1台ごとのタスクを管理する。  ローカライ ゼーション、ナビゲーション、マップサーバ、ドライバなどと通信しイベント処理やタイミングの制御を行ってタスクを遂行することに責任を持つ。   ○ローカライゼーション ・ドライバに接続し、センサー情報を統合して当該ドローンの自己位置と姿勢を推定する。  SLAMモードではGPSがない状態で環境上の画像特徴点から自己位置推定を行う。   ○ナビゲーション ・マップサーバから環境情報をもらいタスクマネージャが指定する目標地点までの飛行計画を行い、ローカライゼーションから現在位置情報を受け取りながらドライバにコマンドを送り目的地までの飛行に責任を持つ。   ○マップサーバ ・Octomapによる3次元マップと、その上のランドマーク情報(SLAMの特徴点やマーカー)を管理する。これにより作成済みのマップを読み込んだり、獲得した環境情報をドローン複数台で共有したりといったことが可能になる。   ○論理ドライバ ・画像のフィルタなどセンサーデータの前処理やデバイスとのコネクションのハートビートなど、より上位層で共通となる処理でデバイスに近い部分を行う。   ○物理ドライバ ・ドローンの異なるメーカや異機種の間の差異を吸収し、上位層で共通のメッセージでのやりとりを可能にする。  またドローン以外のデバイスもここで扱えるようにする。   ○Web管理コンソール ・ROS側にroslibで接続し、Webブラウザ上から簡単に基盤ソフトの機能を利用できるようにする。   ○Gazeboシミュレータ ・ドローンのセンサーやアクチュエータの構成を模したプラグインをいくつか用意し、基盤ソフトの実装を変えずに異なる機体ハードのロジック検証を可能にしている。 ※以降は資料はあるが説明なし。 ・デモンストレーション   ○gazeboシミュレータによるマルチコプター制御   ○実機による動作 ・バッテリー不足により失敗 ○質疑応答 <質問者1> 日本では個人で飛ばせないと思うが、ドローンレースは大丈夫なのか? <回答> 屋内とか私有地は大丈夫 なかなか簡単には飛ばせなくなってきている。 <質問者2> デモはどういう感じになる予定でしたか? <回答> gazeboでの操作と同じインターフェースで実機ドローンを操作させる予定だった。 <質問者3> ビジネスの観点からフライトコントローラを自作する必要性はあるのか? <回答> フライトコントローラ自体は既存製品があるので余り意味は無い。 ■まとめ 近年のドローンの状況とそれらに関わるハードウェア・ソフトウェアを中心に紹介をした。 ドローン関連ソフトウェアの種類として「飛行制御」「知能制御」「データ解析クラウド」「管制/モニタリング」がある。 また、ドローンとROSを始めとするOSSの連携が重要であり、それらを組み合わせることである程度の自律制御を行うことができる。 しかし、3次元SLAMなどのソフトウェアスタックが整っていないなど、多くの課題も残されている。