ドローン操作システムを作ろう（目次）

# はじめに

このページは，
**<font color="blue">Ardupilot系ドローンを，インターネット越しに遠隔操縦するシステムを作ろう！</font>**
という企画です．

(追記)
2020年中頃には，携帯電話回線のドローンへの解禁が噂されています．
いよいよ，ネット越し操縦の時代になってきました！

「5G回線でリアルタイム映像を見ながら操縦すること（１人１台操縦ルール）」などという変な方向へルール化されないことを祈ります．．．
１人で何機も操作しなければ，人材不足の解消にはなりませんよ！

# 概要

「ドローンてのは空飛ぶ自律移動ロボットだ！」
「目視内なんてただのラジコンで十分だ！目視外飛行こそロボットの活躍の場だ！」
「ラジコンなんかDJIに任せるわ！Ardupilotはロボットのためにあるんや！」
「(DJIの)Manualを飛ばせない？　へっ，それじゃ(Ardupilotの)Stabilizeは到底無理だな！！」

というArdupilot愛の溢れる方向けの企画です（違

当面は「**<font color="blue">ドローン操作システムを作ろう</font>**」というタイトルですが，
ゆくゆくは**<font color="blue">操作システム</font>**じゃなくて**<font color="red">管制システム</font>**に，変わると良いな（希望的観測

段階的にページを作っていきますので，ゆっくりお待ち下さい．


# 準備するもの

各章によって必要な機材は異なりますが．
全体として以下が必要です．

・Ubuntu Linuxの入ったＰＣ(インテル系CPU必須，屋外でも試すのでノートＰＣを推奨)
・コンパニオンＰＣを搭載したArdupilot系ドローン(コンパニオンはRaspberry Piを推奨)
・無線LAN，RoLa，LTEなどの無線通信装置と，インターネット接続手段
・インターネットに直結されたLinuxサーバ(できればVPS．クラウドや自宅サーバでも可能)
・Webブラウザ(PC，スマホ，タブレット)

# 最終的なシステム構成

本企画で作る最終的なシステム構成は，次の図の様になります．
![final_system.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256470/f51f0b3b-eb72-1b0e-9b8f-a2a9e62ed617.png)

したがって，

- ドローン(Ardupilot系マルチコプター)
- Linux
- Raspberry Pi
- Python
- dronekit, dronekit-sitl
- paho-mqtt, MQTT over WebSocket
- Leaflet 
- HTML, スタイルシート, JavaScript

などの知識が必要になります．
本企画では，それぞれの技術を一応，入門形式で紹介していきますが，
より詳しく学ぶためには，ネット上の様々な記事を読まれる方が良いでしょう．

プログラムに関しては，
・サンプルソースの多少の改変
・ヘタに関数やクラスを多用せず，いわゆる「ベタ書き」
を心がけました．なるべく理解しやすいように．
玄人Pythonistaや玄人JavaScripterの方は，適宜修正して使ってくださいね(^^ゞ


# 目次

現時点での目次です．たぶんコロコロ変わります．．．

1. [dronekit-python を使ってみる SITL編](https://qiita.com/hsgucci/items/27fa33d7c7de505839da)
1. 　補足：[dronekitのサンプルプログラム](https://qiita.com/hsgucci/items/5f16bd161d1fb9c5683f)
1. [dronekit-python を使ってみる 実機編](https://qiita.com/hsgucci/items/e72ef6c172b9d2e62d72)
1. [ドローンを動かす SITL編](https://qiita.com/hsgucci/items/c795cb1e66879ccfe755)
1. [ドローン操作システムの概要](https://qiita.com/hsgucci/items/ef6c6adc87f9c7b4443c)
1. [ドローンを動かす 実機・Raspberry Pi編](https://qiita.com/hsgucci/items/7af8da302f80bf38de68)
1. [MQTTブローカーのセットアップ](https://qiita.com/hsgucci/items/be9665bafe6e449377c9)
1. [pythonでMQTT送受信](https://qiita.com/hsgucci/items/6461d8555ea1245ef6c2)
1. [dronekitの情報をMQTTで送信してみる](https://qiita.com/hsgucci/items/ec3df139cfa23da4ea0a)
1. [MQTTをWebブラウザで受信してみる](https://qiita.com/hsgucci/items/3d07e36320115c29cc9c)
1. [地図上にドローンの位置を表示してみる](https://qiita.com/hsgucci/items/b93532a0aee0e5dabd0c)
1. [Leafletのマーカーを変更する](https://qiita.com/hsgucci/items/c47057268af1416a18c2)
1. [MQTTでドローンにコマンドを送る](https://qiita.com/hsgucci/items/9633099281506e8ae45b)
1. [Webブラウザからドローンにコマンドを送る](https://qiita.com/hsgucci/items/7d9e0bd64475c15fb03b)
1. [地図上のクリックした場所を目標地点にする](https://qiita.com/hsgucci/items/00d682b2eb49c5a411f4)
1. [VPSで環境構築する](https://qiita.com/hsgucci/items/a7abcceb2b6d89fd85da)
1. インターネット経由で実機ドローンを動かす 

###ArduPilot SITL
1. [ArduPilotのSITLを動かす](https://qiita.com/hsgucci/items/9037835f9c25ce04c38d)
1. 　補足：[ArduPilot SITLをラズパイ4で動かそう](https://qiita.com/hsgucci/items/2b65b205b0834089a54e)
1. ArduPilot-SITLをdronekitで動かす
1. ArduPilot-SITLをドローン操作システムで動かす
1. ArduPilot-SITLで固定翼機を飛ばす

# 追加して書きたい

### 複数ドローンのオペレート(管制)
Appendix A

1. 複数のドローンを操作できるようにする
1. 集団行動(swarm)をする
1. 衝突回避アルゴリズムでドローン同士で回避する
1. 衝突回避アルゴリズムで有人機を回避する
1. フライトプラン(ウェイポイントパス)の表示

### 画面表示の向上
Appendix B

1. Leafletに様々な地図を追加する
1. 人口密集地域や空港制限表面を表示する(要Leafletのバージョンダウン)
1. ドローンの進行方向，速度，目標地点を線で表す

### 表示するマーカーの種類を増やす
Appendix C

1. シミュレータと実機をアイコンで分ける
1. ローバーを走らせる
1. ADS-Bを受信して，有人機を地図に表示する
1. 気象観測装置を作り，地図に表示する
1. IoTデバイスも表示する
1. DJI A3/N3のドローンも操作する
1. 超小型スマホを積んだDJI完成機を表示する 

### 国土交通省の仕様に合わせる
Appendix D

1. 情報提供機能(SDSP)の地図で表示する
1. 運航統合管理機能(FIMS-UASSP)に情報を投げる