ドローンを0から作る完全技術ガイド
既製SDKゼロ・飛行機を無人で動かす技術を数学・物理・実装レベルで完全解説
著者プロフィール
🛸 Section 1: ドローンとは何か(分類・種類を徹底解説)
ドローン(UAV: Unmanned Aerial Vehicle)とは、搭乗者なしで飛行する航空機の総称。飛行方式・用途・重量によって分類され、それぞれ物理特性・制御難易度・法規制が大きく異なる。自分で作る前に、まず「何を飛ばすのか」を正確に理解することが出発点。
飛行方式による分類(最重要)
固定翼(Fixed Wing)
揚力は翼で発生。推進力はプロペラまたはジェットエンジン。長距離・高速・省電力が特長。離着陸には滑走路またはカタパルトが必要で、ホバリング不可。軍事偵察・農業広域監視に多用。
代表: MQ-9 Reaper(米軍)、RQ-4 Global Hawk(米軍)、農業用固定翼測量機
マルチコプター(Multi-Rotor)
複数のロータで揚力と推力を同時発生。垂直離着陸(VTOL)可能・ホバリング可能。操縦しやすい反面、飛行時間が短い(民間機で20〜40分が限界)。民間で最も普及。
4ローター。X型・H型・+型。最もシンプルで作りやすい。
6ローター。冗長性が高く、1基停止でも飛行継続可能。
8ローター。重積載(10kg以上)・産業用途に特化。
VTOL(垂直離着陸固定翼)
固定翼+マルチコプターのハイブリッド。離着陸はロータ(マルチコプター方式)、巡航は翼(固定翼方式)で行う。長距離飛行+狭い場所での離着陸が両立できる。軍事・物流の両方で急速に普及中。
日本国内: エアロセンス社「エアロボウイング」が2024年6月に国内初のVTOL第二種型式認証取得
ヘリコプター型(シングルロータ)
メインロータ+テールロータ。大型ペイロードに有利だが制御が最も複雑。農薬散布ヘリが代表例。
ティルトロータ
ロータの角度を変えてVTOL+固定翼飛行を実現。V-22 Osprey(軍用)が代表。制御が最も高度で、ロータ傾斜角も制御変数に加わる。
重量・サイズによる分類(日本の航空法と直結)
| クラス | 重量 | 用途例 | 規制 |
|---|---|---|---|
| Nano | <100g | 偵察・屋内スパイ | 航空法適用外(条件付) |
| Micro | 100g〜250g | コンシューマ空撮 | 機体登録必須 |
| Mini | 250g〜25kg | 産業・測量・農業 | 機体登録+飛行許可 |
| Large | 25kg以上 | 物流・軍事・重積載 | 型式証明が必要 |
✈️ Section 2: 飛行機を無人で動かす技術(自律飛行の全体像)
自律飛行の本質は、人間のパイロットが行う「感覚・判断・操作」を全てシステムに置き換える技術だ。三半規管・目・脳・手足を、センサー・アルゴリズム・アクチュエータに対応させる。
パイロットの行動 → 自律システムへの置き換え
| パイロットの行動 | センサー | アルゴリズム |
|---|---|---|
| 姿勢を感じる(三半規管) | IMU(6軸・9軸) | 相補フィルター / カルマンフィルター |
| 高度を感じる(耳) | 気圧計・超音波・LiDAR | 高度推定アルゴリズム |
| 位置を知る(目・地図) | GPS・光学フロー | 位置推定・SLAM |
| 操縦する(手・足) | ESC・サーボ | PIDコントローラー |
| 経路を考える(脳) | — | ウェイポイント・経路計画 |
| 障害物を避ける(目) | カメラ・LiDAR・超音波 | 衝突回避アルゴリズム |
自律飛行レベル分類
人間が全ての操作をRCコントローラーで行う
IMUでロール・ピッチを自動補正。手を離すと水平に戻る
気圧計で高度を固定。スロットルを離しても高度維持
GPS/光学フローで水平位置も固定。完全ホバリング
事前設定した経路を自動飛行。農業・測量で実用化済み
環境認識・障害物回避・意思決定を完全自動化。軍事AIドローンが最先端
⚙️ Section 3: ドローンの物理学・航空力学(0から理解する)
マルチコプターの飛行原理
プロペラが空気を下方向に押し出す → 反作用(ニュートン第3法則)で機体が浮く。揚力の大きさは以下の式で決まる:
クアッドコプターはモーターを交互に正転・逆転させることで、各モーターのトルクを相殺してヨー方向の回転を制御する。
6自由度の制御(Roll・Pitch・Yaw + X・Y・Z)
左右のモーター回転数差で制御。右モーター増速 → 右へ傾く → 右へ移動
前後のモーター回転数差で制御。前モーター増速 → 前へ傾く → 前進
対角線ペアの反トルク差で制御。CW組を増速 → 機体がCCW方向に回転
全モーターの回転数を同時増減。総揚力が機体重量を超えると上昇
固定翼の飛行原理
ベルヌーイの定理: 翼の上側(曲面が長い)を通る空気は加速する → 圧力が下がる → 下側との圧力差 = 揚力
固定翼は速度が揚力の源。速度が落ちると失速する。この根本的な違いが、制御アルゴリズムの設計に大きく影響する。
🔧 Section 4: フライトコントローラーを0から作る
ハードウェア構成(自作FCボード)
マイコン選定
Cortex-M4・168MHz・FPU搭載。Betaflightも採用。
DualCore・133MHz・安価(600円〜)。学習用に最適。
センサー構成
| センサー種別 | 推奨チップ | 接続 | 用途 |
|---|---|---|---|
| IMU(高精度) | ICM-42688-P | SPI | 姿勢推定(DJI等が採用) |
| IMU(学習用) | MPU-6050 | I2C | 安価・情報豊富 |
| 気圧計 | MS5611 | SPI/I2C | 高度推定(10cm精度) |
| 磁気コンパス | QMC5883L | I2C | 絶対方位(Yaw補正) |
| GPS | u-blox NEO-M8N | UART | 位置・速度(2.5m精度) |
PCB設計の流れ
ファームウェア開発(C言語で0から)
STM32はHAL(Hardware Abstraction Layer)経由でSPI/I2Cドライバーを実装する。最終的には1kHz制御ループ(1ms間隔でセンサー読み取り→PID演算→モーター出力)を目指す。
/* メインループの骨格 */
while (1) {
IMU_Read(&gyro, &accel); /* ~0.1ms */
Attitude_Estimate(&roll, &pitch, &yaw); /* EKF/相補 */
PID_Update(&pid_roll, roll_setpoint, roll); /* PID演算 */
Motor_SetOutput(m1, m2, m3, m4); /* ESCへPWM出力 */
WaitForNextCycle(1000); /* 1kHz = 1ms待機 */
}📐 Section 5: PIDコントローラーを0から実装する
PIDコントローラーはフライトコントローラーの心臓部。「目標値(設定値)と現在値の誤差をゼロにする」制御系の中で最も実用的な手法。
PIDの基本式
現在の誤差に比例した制御量。Kpが大きすぎると振動(オーバーシュート)が発生する。
過去の累積誤差を補正。定常偏差(風外乱など)をゼロに収束させる。大きすぎるとゆっくり発散。
誤差の変化率から将来を予測。振動を抑制。センサーノイズを増幅しやすいので注意が必要。
カスケードPID(ドローンの実装構造)
ドローンは単純な1ループPIDではなく、3段階のカスケード構造にする:
PID実装コード(C言語)
typedef struct {
float Kp, Ki, Kd;
float integral;
float prev_error;
float output_min, output_max;
} PID_t;
float PID_Update(PID_t *pid, float setpoint,
float measurement, float dt) {
float error = setpoint - measurement;
/* 積分項(Anti-windup: 飽和防止) */
pid->integral += error * dt;
if (pid->integral > pid->output_max / pid->Ki)
pid->integral = pid->output_max / pid->Ki;
if (pid->integral < pid->output_min / pid->Ki)
pid->integral = pid->output_min / pid->Ki;
/* 微分項 */
float derivative = (error - pid->prev_error) / dt;
pid->prev_error = error;
/* 出力 = P + I + D */
float output = pid->Kp * error
+ pid->Ki * pid->integral
+ pid->Kd * derivative;
/* クランプ(出力飽和) */
if (output > pid->output_max) output = pid->output_max;
if (output < pid->output_min) output = pid->output_min;
return output;
}チューニング手法
Ziegler–Nichols法(古典的): Ki=0・Kd=0の状態からKpだけを上げていき、機体が一定振動(限界感度Ku)を始めたらKp=0.6Ku・Ki=1.2Ku/Tu・Kd=0.075Ku×Tuを設定。
推奨手順: まずPython物理シミュレーターでGain調整 → Gazebo等3Dシミュレーターで検証 → 実機では P のみ → PD → PID の順で段階的に調整。
🧮 Section 6: センサーフュージョン(カルマンフィルター / 相補フィルター)
IMU単体では誤差が積み重なって発散する(ドリフト)。ジャイロスコープは短期精度が高いが積分誤差が累積し、加速度計は長期的に正確だが振動ノイズに弱い。複数センサーを数学的に融合して精度を高める。
相補フィルター(シンプル・リアルタイム向き)
高周波成分はジャイロを信頼、低周波成分は加速度計を信頼して混合する:
/* alpha = 0.98 (高速変化はジャイロ、定常値は加速度計) */
angle = alpha * (angle + gyro_rate * dt)
+ (1.0f - alpha) * accel_angle; 実装が簡単でマイコンへの負荷が軽い。ただしノイズ特性の仮定が単純なため、高精度用途には限界がある。
拡張カルマンフィルター(EKF)
非線形システム(ドローンの3D回転)へのカルマンフィルター拡張。2ステップで動作:
予測ステップ(Predict)
更新ステップ(Update)
クォータニオン4成分 + ジャイロバイアス3成分 = 7次元状態
なぜクォータニオンを使うのか
オイラー角の問題点
Roll / Pitch / Yaw の3角で表現すると、特定の姿勢でジンバルロック(特異点)が発生。Pitch = ±90°でRollとYawが区別できなくなる。
クォータニオンの利点
q = w + xi + yj + zk の4成分で3D回転を特異点なく表現。計算が高速・数値安定性も高い。EKFの状態変数として使われる業界標準。
Mahony / Madgwickフィルター: クォータニオンベースの軽量姿勢推定フィルター。EKFより計算量が少なく、マイコンへの実装に適している。精度はEKFに迫る。
🔌 Section 7: BLDCモーター & ESCを理解する
BLDCモーター(ブラシレスDCモーター)の原理
従来のブラシ付きモーターは「ブラシ(炭素片)でコイルへの通電経路を機械的に切り替える」が、BLDCはこれを電子制御(半導体スイッチング)で行う。
U/V/W端子に順番に電流を流すことで回転磁界を作り、永久磁石のローターが追いかけて回転する
1Vあたりの無負荷回転数。例: 2300KV × 11.1V(3S LiPo)= 25,530 RPM が理論値
極数多い = 低回転高トルク(農業散布)。極数少ない = 高回転低トルク(レースドローン)
ESC(Electronic Speed Controller)
FCからのPWM信号(1000〜2000μs幅)を受け取り、BLDCモーターの3相電流切り替えタイミングを制御する電子回路。
📡 Section 8: 通信システムを0から設計する
RC(Radio Control)プロトコル
テレメトリ通信(地上局↔機体)
映像伝送(FPV Video Link)
群制御(スウォーム)通信
🪖 Section 9: 軍事用ドローン vs 民間用ドローン(徹底比較)
代表的な軍事用機体(スペック比較)
| 機体 | 国 | 最大速度 | 最大高度 | 飛行時間 | ペイロード | コスト |
|---|---|---|---|---|---|---|
| MQ-9 Reaper | 米国 | 300 km/h | 15,000 m | 27時間 | 1,701 kg | 約3,000万$ |
| Bayraktar TB2 | トルコ | 222 km/h | 8,239 m | 27時間 | 150 kg | 約500万$ |
| RQ-4 Global Hawk | 米国 | 629 km/h | 18,000 m | 32時間 | 900 kg | 約1.2億$ |
TB2はウクライナ紛争で実証済み。MQ-9の1/6のコストで同等の飛行時間を実現した点が世界的に注目された。
軍民の技術的差異(自分で実装する視点で)
| 技術要素 | 軍事用 | 民間用 |
|---|---|---|
| 通信暗号化 | AES-256 + 独自プロトコル・周波数跳躍 | 省略または弱い暗号化 |
| 抗妨害性 | FHSS(周波数ホッピング)・Anti-jam GPS | なし |
| GPS代替 | INS(慣性航法)・地形照合・スター追跡 | GPSのみ(失うと位置喪失) |
| 耐環境性 | -40℃〜+70℃・防水・防塵(MIL-STD) | 0〜40℃程度・民生グレード |
| 自律度 | 無通信でもAI自律判断・ターゲット選定 | 通信断=フェイルセーフ帰還 |
| ステルス性 | 低RCS設計・吸音塗料・赤外線低減 | なし |
日本の防衛省・ATLA(防衛装備庁)のUAV政策
2024年に防衛費がGDP比2%に増額されて以降、UAV(無人機)予算が急拡大。ATLAは国産UAVの研究開発を推進中。
国産ドローンメーカーACSL(エーシーエスエル)は2024年3月に航空自衛隊の空撮用ドローンとして採用され、第一種型式認証機体も保有。防衛省との接点が増加中。
民間ドローンメーカーが防衛省・自治体との契約を目指すには、型式認証の取得が現実的な第一歩。自社開発システムをExitに持っていく戦略と親和性が高い。
🛩️ Section 10: 自律飛行アルゴリズム(0から実装)
経路計画アルゴリズム
A* アルゴリズム(グリッドマップ向け)
コスト関数 f(n) = g(n) + h(n) で最短経路を保証する探索。
h(n): ノードnからゴールまでのヒューリスティック(例: ユークリッド距離)
障害物マップ上で全ノードを評価して最短経路を探索
RRT / RRT*(連続空間向け・3D経路計画)
ランダムにノードを空間内に生成して木を伸ばし経路を構築。1999年に提案され、ロボット工学で最も普及したアルゴリズム。RRT*は最適性収束を保証。
2. 木の中で最近傍ノード q_near を探索
3. q_near から q_rand の方向にステップ幅だけ伸ばして q_new を生成
4. 障害物と干渉しなければ木に追加
5. ゴールに到達するまで繰り返す
3D空間への拡張(ドローン向け)
高度方向も含めた3Dグリッドマップ(OctoMap: 八分木構造)で占有マップを表現。メモリ効率が高く、LiDAR点群データとの相性が良い。
状態機械(State Machine)による自律制御フロー
各状態で遷移条件とセンサー健全性チェックを行う。異常検知時はFAILSAFE状態に即時移行。
フェイルセーフ設計(安全機構は必須)
📍 Section 11: 位置推定・SLAM(GPSなしで飛ぶ)
軍事用途・屋内用途ではGPSが使えない。センサーのみで位置を自己推定する技術群を理解する。
光学フローセンサー
カメラで地面テクスチャの変化を追跡。マウスセンサー転用チップ(PMW3901・PAW3902)を使えば安価に実装可能。相対的な移動量を速度に変換。
VIO(Visual Inertial Odometry)
カメラ + IMUで位置・姿勢を同時推定。ORB-SLAM3・VINS-Monoが代表アルゴリズム。0から実装するなら論文(ICCV・CVPR掲載)を読んで数式から実装する。屋内・GPS不可環境で最有力。
LiDAR-SLAM
3Dレーザースキャナーで点群データを取得。Cartographerアルゴリズムで地図を同時構築しながら位置推定。高精度だが高コスト(Velodyne VLP-16 ≈ 100万円)。
RTK-GPS(高精度GPS)
基準局との差分補正で水平2〜3cm精度。u-blox ZED-F9P(約4万円)で自作可能。農業・測量ドローンに必須。GPS環境があるなら最もコスパが良い。
🔒 Section 12: サイバーセキュリティ & スプーフィング対策
ドローンへの主なサイバー攻撃手法
0から実装するセキュリティ対策
💻 Section 13: 0から作るドローンシミュレーター(開発環境)
実機を壊さないためにシミュレーション環境は必須。まずPythonで物理モデルを作り、アルゴリズムを検証してから実機に載せる。
Pythonで物理シミュレーター自作(最初のステップ)
Newton-Eulerの運動方程式を数値積分(RK4法)で解く。力・トルク→加速度→速度→位置の順に積分。
import numpy as np
def quadrotor_dynamics(state, u, params):
"""
state: [x, y, z, vx, vy, vz, roll, pitch, yaw, p, q, r]
u: [F1, F2, F3, F4] 各モーターの推力
"""
m = params['mass']
g = 9.81
# 合計推力
F_total = sum(u)
# 姿勢角取得
roll = state[6]
pitch = state[7]
yaw = state[8]
# ワールド座標系の加速度(簡略版)
ax = (F_total / m) * (
np.cos(yaw) * np.sin(pitch) * np.cos(roll)
+ np.sin(yaw) * np.sin(roll)
)
ay = (F_total / m) * (
np.sin(yaw) * np.sin(pitch) * np.cos(roll)
- np.cos(yaw) * np.sin(roll)
)
az = (F_total / m) * np.cos(pitch) * np.cos(roll) - g
return np.array([ax, ay, az])Pythonシミュレーター
最初はmatplotlibで3D可視化。pygame使えばリアルタイム描画も可能。PIDゲイン調整・経路計画アルゴリズムの検証に使う。
ゲームエンジン活用
Unreal Engine 5 + AirSim(内部実装を読んで理解する)。視覚的に高品質な環境でVIOアルゴリズムの検証が可能。
HILシミュレーション
実際のFCボードをPCに接続。センサーデータをPCで生成してFCに入力し、FCの出力をPCが受け取って物理演算。実機と同一ファームウェアで検証可能。
🗺️ Section 14: 0からドローンを作るまでの学習ロードマップ
Exitに向けた差別化ポイント
市場に出回るドローン管理ソフト(GCS)のほとんどはMAVLink依存・DJI SDK依存。自社で全スタックを所有していれば、特定プロトコルへの縛りがなく、軍・防衛・インフラ向けの高セキュリティ要件にも対応できる。
「全部自分で作る」という制約は、短期的にはコストだが、長期的には技術的な参入障壁になる。既製SDKに乗っかったシステムは後発に追いつかれるが、独自スタックは模倣が困難。
防衛省・ACSL・自治体との接点は、型式認証取得→実証実験参加→随意契約という段階的なルートが現実的。まずフライトできるシステムを作ることが全ての出発点。