株式会社センシンロボティクス(以下、長いのでSRと記載します)でエンジニアをしております、andy william です。本記事は、SRの2025年アドベントカレンダー11日目の記事です。
当社について興味をいただけた方は、テックブログもございますので、他の記事もお読みいただけると幸いです。
はじめに
本記事では DJI Dock と DJI Cloud API を使用して、クラウド経由で飛行中のドローンをリアルタイム制御する方法 を紹介します。
特に、
- MQTT を使った操作権限の取得(Grab)
- DRC(Direct Remote Control)モードへの移行
- クラウドからのスティック操作(Roll/Pitch/Yaw/Throttle)
という「実際に飛行を動かすために最低限必要な技術ポイント」に焦点を当てています。
DJI Dock や DJI Cloud API の概要をつかみつつ、Web アプリや自社システムからドローンを自動運用したい開発者向けの内容です。
DJI DOCK とは
DJI Dock は、DJI が提供する 全自動運用ドローンステーションです。
ドローンの離着陸、バッテリー充電、データアップロード、健康チェック、遠隔制御をすべて自動化するためのハードウェアで、無人運用(BVLOS: Beyond Visual Line Of Sight)を前提としたシステムとして設計されています。
MQTT とは
MQTT(Message Queuing Telemetry Transport) は、IoT デバイス向けに設計された 軽量・低遅延のメッセージングプロトコルです。
Publish/Subscribe 方式を採用しており、サーバ(Broker)を介して双方向通信を行うのが特徴です。
クラウドとデバイスの間で 高速・低帯域でリアルタイム通信を行えるため、ドローン、センサー、ロボット、スマートホームなど幅広い分野で利用されています。
Python での MQTT 利用例(paho-mqtt)
MQTT は Python から簡単に扱うことができ、実際の IoT デバイスやドローン制御の前に試す用途としても便利です。
以下は代表的な MQTT クライアントライブラリ paho-mqtt を使ったサンプルです。
インストール
pip install paho-mqtt
① MQTT Subscribe(購読:メッセージを受け取る側)
import paho.mqtt.client as mqtt
BROKER = "test.mosquitto.org"
TOPIC = "sample/test"
def on_connect(client, userdata, flags, rc):
print("Connected with result code " + str(rc))
client.subscribe(TOPIC)
def on_message(client, userdata, msg):
print(f"Received message: {msg.payload.decode()} from topic: {msg.topic}")
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect(BROKER, 1883, 60)
client.loop_forever()
② MQTT Publish(配信:メッセージを送る側)
import paho.mqtt.client as mqtt
import time
BROKER = "example.com"
TOPIC = "sample/test"
client = mqtt.Client()
client.connect(BROKER, 1883, 60)
for i in range(5):
message = f"Hello MQTT {i}"
client.publish(TOPIC, message)
print("Sent:", message)
time.sleep(1)
client.disconnect()
③ ポイント解説
| 用語 | 意味 |
|---|---|
| Broker | MQTT のメッセージ中継サーバ。Publish を受け取り、Subscribe に送る |
| Topic | メッセージのカテゴリ。例:drone/telemetry, dock/status
|
| Publish | Broker に対してメッセージを送信 |
| Subscribe | 特定の Topic のメッセージを購読 |
ドローンの「スティック操作」
ドローンを操縦する際は、
- 通常の送信機(RCコントローラー)
- DJI Cloud API(DRCモード)
どちらを使用しても、操作の基本は同じで 4つの軸(Roll / Pitch / Yaw / Throttle) を組み合わせて飛行します。
これら 4 つの操作軸により、ドローンは 3 次元空間で自由に移動・旋回できます。

4つの軸(Roll / Pitch / Yaw / Throttle) を使って機体を操作します。
これら4軸でドローンは3次元空間を自由に動くことができます。
物理コントローラー(RC)のスティック配置について
本記事で説明しているスティック操作は、
一般的に最も広く利用されている「モード2」 の配置を前提としています。
(DJI 送信機もデフォルトはモード2)
左スティック:Yaw(旋回)+ Throttle(上昇/下降)
右スティック:Roll(左右移動)+ Pitch(前後移動)
| 軸 | 動き | 物理コントローラーのスティック(RC) | API フィールド | 補足:RC 数値と API の関係 |
|---|---|---|---|---|
| Roll(ロール) | 左右移動 | 右スティック 左右 | roll |
RCの中央 = 1024(中立)、最大 ±660(364〜1684) |
| Pitch(ピッチ) | 前後移動 | 右スティック 上下 | pitch |
1024 が中立 / –660 で後退 / +660 で前進 |
| Yaw(ヨー) | 左右旋回 | 左スティック 左右 | yaw |
1024 が中立 / –660 で左旋回 / +660 で右旋回 |
| Throttle(スロットル) | 上昇・下降 | 左スティック 上下 | throttle |
1024 が中立 / –660 で下降 / +660 で上昇 |
リアルタイム飛行制御の操作フロー(シーケンス図)
クラウドから操作権限を奪取(Grab)してドローンを制御する手順
DJI Cloud API および DJI Dock を使用して
Webアプリからリアルタイムでドローンを制御するためには、
Authority(操作権限)を取得する必要があります。
Authority は以下の用途に必須です:
- Live Flight Controls(スティック操作)
- ジンバル操作
- 機体ライト・スピーカー制御
- 緊急停止コマンド
この権限は複数クライアントで共有できず、
最初に権限を取得したクライアントが優先されます。
MQTTで操作権限を取得する:payload_authority_grab
Topic : thing/product/{gateway_sn}/services
Method: payload_authority_grab
Payload :
{
"bid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx",
"data": {
"payload_index": "39-0-7"
},
"tid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx",
"timestamp": 1654070968655,
"method": "payload_authority_grab"
}
payload_indexには、機械の情報です。下のリンクで取得できます。
https://developer.dji.com/doc/cloud-api-tutorial/en/overview/product-support.html#enumeration-values-of-aircraft-rc-and-dock
DRC モードへ入る(drc_mode_enter)
DRC(Direct Remote Control)モードは、
クラウド経由でドローンへリアルタイム指令(スティック操作など)を送るために必要な状態です。
通常の流れは以下:
- payload_authority_grab で操作権限を取得
- drc_mode_enter で DRC モードに入る
- Live Flight Controls / Gimbal Controls / Payload Controls 実行
MQTT で DRC モードに入る:drc_mode_enter
Topic : thing/product/{gateway_sn}/services
Method: drc_mode_enter
Payload :
{
"bid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx",
"data": {
"hsi_frequency": 1,
"mqtt_broker": {
"address": "mqtt.dji.com:8883",
"client_id": "sn_a",
"enable_tls": true,
"expire_time": 1672744922,
"password": "jwt_token",
"username": "sn_a_username"
},
"osd_frequency": 10
},
"tid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx",
"timestamp": 1654070968655,
"method": "drc_mode_enter"
}
MQTT でスティック制御を送信:drc_control
Topic : thing/product/{gateway_sn}/drc/down
Method: stick_control
Payload :
{
"seq": 1,
"method": "stick_control",
"data": {
"roll": 1024,
"pitch": 1024,
"throttle": 1024,
"yaw": 1024,
"gimbal_pitch": 1024
}
}
まとめ
本記事では、DJI Dock と DJI Cloud API を用いて、
クラウド経由でドローンをリアルタイム制御するための基本フローを紹介しました。
操作権限の取得、DRC モードへの移行、そしてスティック操作という
「飛行をクラウドから動かすために欠かせない要素」を理解することで、
自社システムや Web アプリケーションへのドローン統合が一気に実現しやすくなります。
これらの技術が、皆さまのドローン自動運用や遠隔監視システムの開発に
少しでも役立てば幸いです。
