ハンガリー生まれのドローンショーOSS Skybrushセットアップ手順

# Skybrushとは
SkybrushはCrazyfile, ArduCopterベースで動く複数のドローンを制御してドローンショーを行うことができるOSS(GPL-3.0 license)です。
主な特徴は以下の通りです。
* Windows, Linux, MacOSに対応
* Discordにて無料で技術サポートが得られるほか、ビジネス用途向けに有償サポートあり
* 実機での動作～Blender上でのシュミレーション、ショーの設計が可能
* 部分的な日本語対応(ドローンショーを管理するソフトの一部分)

▼画像はSkybrush Liveのもの
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2584877/c4de42bd-8e7f-eeb5-ab91-be3148500472.png)

# Skybrushを構成するアプリケーション
Skybrushは複数のアプリケーションで構成されており、それぞれの名前と説明は以下の通りとなります。
* Skybrush Server
    * 異なる種類のドローンを同時に通信をする際のプロトコルの差異を吸収してくれるミドルウェアアプリケーション。下記に述べるアプリはSkybrush Serverを経由しており、ドローン側のシステムを意識せずに済んでいる
* Skybrush Live
    * ドローンを管理するためのフリートマネージャー。ドローンの制御や状態監視等を行うことができる
* Skybrush Studio
    * ドローンショーを設計する際に利用するソフト。Blenderのプラグインのためアニメーションを作る要領でドローンショーを設計できる
* Skybrush Viewer
    * Skybrush Studioで設計したショーをシュミレーションするためのソフト。
* Skybrush Sidekick
    * ドローンショー中にSkybursh Liveがドローンと接続できなくなった際に利用する予備のチャネル用のアプリ
* Skybrush firmware
    * 主に自作ドローンを使用してショーを行う際に

# 実際に動かしてみよう
### 動作環境
* Ubuntu22.04
* Python3が動く
* npmが動く

### セットアップ
１. poetryのインストール
```
sudo apt install python3-pip
pip3 install poetry
```
２. Skybrush Serverのインストールと起動
```
git clone https://github.com/skybrush-io/skybrush-server.git
cd ~/skybrush-server/
python3 -m poetry install
python3 -m poetry run skybrushd -c etc/conf/skybrush-outdoor.jsonc
```
▼正常に動作できた場合
```
skybrush@MyComputer:~/skybrush-server$ python3 -m poetry run skybrushd -c etc/conf/skybrush-outdoor.jsonc
[13:32:13]   server                 Starting Skybrush server 2.15.0
           ✔ skybrush               Loaded configuration from '/home/skybrush/skybrush-server/etc/conf/skybrush-outdoor.jsonc'
             logging                Storing logs in '/home/skybrush/.cache/Skybrush Server/log'
             logging                Logging started
             http_server            Starting HTTP server on :5000
           ▲ insomnia               Cannot prevent sleep mode on this platform
             mavlink     mav        Routing primary traffic to mav
             mavlink     mav        Routing RTK corrections to mav
             mavlink     mav        Routing RC overrides to mav
             mavlink     mav        Connection at :14550 up and running
```
３．SITL(仮想ドローン)のセットアップ
**※別コンソールで実行して下さい**
```
git clone https://github.com/skybrush-io/ardupilot.git
cd ardupilot/
git checkout CMCopter-4.2
git submodule update --init --recursive
sudo apt install python3.10-venv
python3 -m venv .venv
source .venv/bin/activate
pip install -U pip wheel
pip install future empy intelhex pexpect
./waf configure --debug --board sitl
./waf copter
```
▼正常にセットアップできた場合
```
skybrush@MyComputer:~/ardupilot$ build/sitl/bin/arducopter
You must specify a vehicle model.  Options are:
  quadplane
  xplane
  <中略>
  JSON
  blimp
You must specify a vehicle model.
```
４．複数SITLの起動
```
cd ~
git clone https://github.com/skybrush-io/ap-swarm-launcher
cd ap-swarm-launcher
python3 -m poetry install
python3 -m poetry run ap-sitl-swarm -n 20 --num-drones-per-row 5 --spacing 5 --pos-noise 0.5 --yaw-noise 10 ../ardupilot/build/sitl/bin/arducopter
```
▼正常に起動できた場合
```
skybrush@MyComputer:~/ap-swarm-launcher$ python3 -m poetry run ap-sitl-swarm -n 20 --num-drones-per-row 5 --spacing 5 --pos-noise 0.5 --yaw-noise 10 ../ardupilot/build/sitl/bin/arducopter
    1 | Setting SIM_SPEEDUP=1.000000
    1 | Suggested EK3_BCOEF_* = 16.288, EK3_MCOEF = 0.209
    1 | Home: -35.363254 149.165234 alt=584.000000m hdg=345.000000
    1 | Starting sketch 'ArduCopter'
    1 | Starting SITL input
    1 | Using Irlock at port : 9005
    1 | UDP connection 127.0.0.1:14550
    1 | Loaded defaults from /tmp/sitl-swarm-kkeeabzu/drones/001/default.param
    <中略>
kkeeabzu/drones/019/default.param
   20 | validate_structures:476: Validating structures
   20 | Loaded defaults from /tmp/sitl-swarm-kkeeabzu/drones/020/default.param
```

５．Skybrush Liveのインストールと起動
* 公式サイトから[インストーラー](https://skybrush.io/modules/live/)をダウンロードしてインストール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2584877/5ce8b1f8-efd6-cc8e-2f73-4b510958ffd8.png)

### 動作確認
１．Skybrush Liveを起動する
* 以下の画面のように地図上にドローンが表示されていれば成功です！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2584877/310a2e54-76ce-70c3-5431-5fe6ba1de5a6.png)


* ここからSkybrush Liveをごにょごにょいじっていくと以下の動画のようになります。
<iframe width="560" height="315" src="https://www.youtube.com/embed/qHpHCIKunfQ?si=kmWlg4SlgGuuE7D6" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

# 注意点
* Skybrush Serverはソースコードからビルドしたものを利用してください。公式のインストーラーでは一度に制御できるドローンの数に制限をかけています。
* ドローンのファームウェアは純正のCrazyfile, ArduCopterでは動きません。そのためSkybrushに対応したものを[Skybrush用ArduCopterリポジトリ](https://github.com/skybrush-io/ardupilot)もしくは[Skybrush用Crazyfileリポジトリ](https://github.com/skybrush-io/crazyflie-firmware)からダウンロードして利用するか、Skybrush対応のドローンを購入する必要があります(売っているかどうかは不明)。

# リンク
* [公式リンク](https://skybrush.io/)
* [Skybrush Live公式ドキュメント](https://doc.collmot.com/public/skybrush-live-doc/latest/index.html)
* [Discordチャネル(「Get support」のリンクより)](https://skybrush.io/diy/)
* [公式リポジトリ](https://github.com/skybrush-io)