ドローンのソフトウェアがどのように動いているのか気になったので、
ドローンとは何ぞやってレベルから調べていました。
何かしらの通信で動いているんだろうなとイメージはできていましたが、いざ調べると様々な単語が出てきました。
一つ一つ理解していくには実際に環境構築したりソースコード見たり触ったりしないといけないので、まずは全体像がどんなものかをここで整理したいと思います。
ドローンの通信フロー: 3層構造
ドローンの通信は現状、3層構造が主流と言っていいと思います。
その理由は一言で端的にまとめてしまうと、3層構造というのが、
「ドローン開発する上で合理的であり、自然に至る最適解だから」
です。
3層とは、
・高レイヤ(操縦者のPC側)
・中レイヤ(通信ブリッジ)
・低レイヤ(ドローン側)
3層の役割と使われるソフトの一例を簡単な図と表にしてみました。

| レイヤ | ソフト・ミドルウェア | 役割 |
|---|---|---|
| ① 高レイヤ(アプリ層 / PC側) | ROS2 | AI・SLAM・経路計画・自律飛行ロジック |
| ② 中レイヤ(通信層 / ブリッジ) | MAVLink(プロトコル) / DDS | PC ↔ ドローン間の通信方式 |
| ③ 低レイヤ(制御層 / ドローン側) | PX4 | 姿勢制御・位置制御・モーター制御・センサー統合 |
なお、3層構造は、国際規格などで定義されているわけではありません。
研究者・メーカーがドローンを開発する上で同じ問題に直面した結果自然に至ったアーキテクチャとのことです。
3層構造が最適解である具体的な理由を3つに分けて後述します。
理由1: 低レイヤと高レイヤは同じデバイスで動かせない
PX4(姿勢制御)は 周期が250Hz〜1kHz のリアルタイム処理
ROS2(SLAM・AI)は CPU/GPU負荷が重い
同じプロセスで動かすと 制御が遅れて墜落します。
→ リアルタイム制御(PX4)と高レイヤ処理(ROS2)は分離必須
理由2: ドローンは無線通信が前提
ドローンは大半の人が
・機体は空中にある
・操縦者と操縦者が持つPCは地上
と考えるはずです。
つまり、物理的に距離があるわけですから別デバイスになるのが必然なんですよね。
ということは、通信(MAVLink / DDS)が中レイヤとして必須になるということですね。
理由3: 安全性のために制御系は独立していなければならない
どれかのレイヤに異常が見られた(PCがフリーズ, 操縦者側のソフトが落ちる、AIが暴走等)場合でも、ドローン本体が単独で安全に着陸できる必要があります。
そうでないと、危ないですもんね。
3層で言うなら、高レイヤと低レイヤ は独立した制御アプリとして分離する必要があるということになります。
中レイヤはMAVLinkプロトコルかDDSを使う理由
MAVLinkの場合: 実機ドローンの通信は MAVLink が標準だから
・世界中のドローンが採用
・軽量で無線に強い
・QGroundControl (※)など地上局が対応
・PX4 が標準でサポート
(※)PX4またはArduPilotファームウェアを使用するドローン向けのソフトウェア。
DDSの場合: ROS2との親和性が強いから。
・ROS2 の標準通信方式
・高速で QoS が強力
・ネットワーク越しでも安定
・PX4 が microDDS を内蔵し始めた
高レイヤ(=操縦者側)でROS2の使用は常識?
結論: Yes。
研究・産業ロボット分野では ROS2 が常識。
ドローン分野でも急速に ROS2 が標準化しつつある。
ドローンはロボットの一種なので、
ROS2 がそのまま使えるのが大きいそうな。
まとめ
全体的なソフトウェア設計についてイメージできたので、
次はSITLを動かしてみてわかったことなど書きたいと思います。

コメント