マイクロドローンcrazyflieを用いた飛行データ取得

# 概要
以下の方向けの記事です。
 - crazyradioを購入していてLinux環境でセットアップをしたい方
 - Crazyflie 2.X（以下crazyflie）の飛行データを取得したい方
 - crazyflieとコンピュータを接続した際の通信の可視化を行いたい方


　Bitcrazy社が開発したcrazyflieはオープンソース化されており、近年ドローン関連の研究で多く用いられています。また、同社が開発したCrazy Client（以下cfclient）GUIアプリを容易に連帯することも可能です。ファームウェアアップデートに使用する以外にも、飛行に関する様々なデータを取得したり、そのデータをcsvで保存したりなど様々な機能が実装されています。この記事ではcfclientのインストールから、飛行データの可視化とデータのcsvファイルへの保存方法について説明します。（crazyflieの組み立て方法は[こちら](https://qiita.com/tanakaharuki0/items/19d2ae02c96cbde48a3e)）



# 目次
- [技適に関して](#技適に関して)
- [購入](#購入)
- [開封](#開封)
- [開発環境](#開発環境)
- [Crazyradio2.0の初期設定](#crazyradioの初期設定)
- [cfclientインストール](#cfclientインストール)
- [ファームウェアアップデート](#ファームウェアアップデート)
- [飛行データのcsvファイル出力](#飛行データのcsvファイル出力)

<br>

# 技適に関して
- crazyradio 2.0は技適がないため電波暗室やシールドテント等で電波を遮断して利用する必要があります。[技適未取得機器を用いた実験等の特例制度](https://www.tele.soumu.go.jp/j/sys/others/exp-sp/)による認証を受けた場合は、その規則に従って利用することも可能です。こちらの認証に関しては後日記事にしたいと思います。

# 購入

Crazyradio 2.0の購入が必要です。UNIPOSの未掲載品だったため、私は[こちら](https://www.unipos.net/unlisted/)から問い合わせを行って購入しました。[公式サイト](https://store.bitcraze.io/products/crazyradio-2-0)からも購入できます。

crazyflie（ドローン本体）を未購入の場合は[こちら](https://www.unipos.net/find/product_item.php?id=2760)から購入できます。[こちら](https://qiita.com/tanakaharuki0/items/19d2ae02c96cbde48a3e)の記事も参考にしてください。

# 開封
入っているもの
 - Crazyradio 2.0 x 1
 - アンテナ x 1

# 開発環境
- Ubuntu 22.04.5 LTS
    - ubuntuのインストールは[この記事](https://www.linux.digibeatrix.com/ubuntu-basics/install-ubuntu-from-usb/)を参考にしました。
    - WindowsやMacの場合は公式サイトを参照してください。
    - WSL2などでLinuxの仮想環境上でセットアップする場合は、USBポートへアクセスするための設定が別途必要になります。
- python 3.10.12
<br>

# crazyradioの初期設定
このセクションではcrazyflieとPCの通信に使用するcrazyradioを使用できるようにするための手順を記載しています。


1. cradyradioのコネクタにアンテナを回して接続します。
   <br>
2. ブートローダーモードにするため、組み立てたcrazyradioをボタンを押しながらUSBポートに挿入します。このときLEDが赤く光っていることを確認してください。  
    <br>
3.  [githubリリースページ](https://github.com/bitcraze/crazyradio2-firmware/releases/)で"crazyradio2 -CRPA-emulation-[version].uf2"というファイルをクリックしてダウンロードします。私は[こちら](https://github.com/bitcraze/crazyradio2-firmware/releases/tag/1.1)のversion1.1をダウンロードしました。
    <br>
4. ダウンロードしたファイルをファイルブラウザでcrazyradioドライブに drag & dropします。
　　　<br>ドライブへのインストールが完了すると（1秒足らずで）、ブートローダーモードではなくなり、ドライブは使用できなくなります。このときLEDが白く点灯していたら成功です。
   <br>
5. root権限なしでCrazyradio2.0をUSB経由で使用できるように設定します。コピー&ペーストで大丈夫です。
    - plugdevというグループを作成し、ユーザを追加
        ```
        sudo groupadd plugdev
        sudo usermod -a -G plugdev $USER
        ```
        <br>
    - udevのルール設定
        ```
        cat <<EOF | sudo tee /etc/udev/rules.d/99-bitcraze.rules > /dev/null
        # Crazyradio (normal operation)
        SUBSYSTEM=="usb", ATTRS{idVendor}=="1915", ATTRS{idProduct}=="7777", MODE="0664", GROUP="plugdev"
        # Bootloader
        SUBSYSTEM=="usb", ATTRS{idVendor}=="1915", ATTRS{idProduct}=="0101", MODE="0664", GROUP="plugdev"
        # Crazyflie (over USB)
        SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", MODE="0664", GROUP="plugdev"
        EOF
        ```
        <br>
    - 設定ルールを再読み込みして適応させる
        ```
        sudo udevadm control --reload-rules
        sudo udevadm trigger
        ```
        <br>

# cfclientインストール


続いてcfclientのインストールを行います。


1. git、pip、Qu GUIのライブラリをインストール
    ```
    sudo apt install git python3-pip libxcb-xinerama0 libxcb-cursor0
    pip3 install --upgrade pip
    ```
    ※Ubuntu20.04の一部のバージョンでは"libxcb-cursor0"などのパッケージをさらにインストールする必要があるので[QT6パッケージ依存関係リスト](https://doc.qt.io/qt-6/linux-requirements.html)を要確認
    <br><br>
    
    

2. cfclientをインストール
    ```
    pip3 install cfclient
    ```
    ※cfclientのソースコードを変更して開発を行いたい場合は[こちら](https://www.bitcraze.io/documentation/repository/crazyflie-clients-python/master/installation/install/#installing-from-source)
    <br><br>
    
3.  crazyradioを挿入し、clientのGUIを立ち上げます。
    ```
    cfclient
    ```
    <br>

# ファームウェアアップデート
crazyflieをPCと接続して、crazyflieのファームウェアアップデートを行います。一連の手順の動画（2倍速）を載せています。<br>

1. crazyflieの電源を入れ、Connectを押して接続します。接続できない場合は、crazyflieやcfclientを再起動したり、scanを押すと正常に動作することが多いです。
   <br>
   
2. 画面上部のConnectのBootloaderをクリックします。
   <br>
   
3. Firmware sourceのPlatform filterでcf2を選択し、Available downloadsで最新のものを選択します。
   <br>

4. Programボタンを押してしばらく待機します。この間にcrazyflieが何度か自動で再起動します。
   <br>

5. StatusがIDLEになるとファームウェアアップデート完了です。
<div style="text-align: center;">
          <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3892591/2004f834-8016-4ecf-aec8-69ce86834d37.gif" width=70%">
          </div>
    <br>


# 飛行データのcsvファイル出力
crazyflieをPCと接続して、ログを取ります。一連の手順の動画を載せています。<br>

1. Connectを押して接続します。接続できない場合は、crazyflieやcfclientを再起動したり、scanを押すと正常に動作することが多いです。
   <br>
   
2. 画面上部のViewのTabsからLog Blocksにチェックを入れます。
   <br>
   
3. Log Blocksタブに移動します。ここで取得可能なログの一覧を見ることができます。追加のデッキなどを購入するとさらに多くの飛行データの取得が可能です。
    <br>
    
4. Write to fileのところにチェックを入れるとログの記録が開始され、チェックを外すと記録が終了します。デフォルトでは100ms毎にログが保存されます。
    <div style="text-align: center;">
          <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3892591/f1a611b0-a356-465c-877f-b2f564b26d17.gif" width=95%">
          </div>
    <br>
          
5. ファイルシステムの、"~/.config/cfclient/logdata/" にcsvが保存されます。

<br><br><br>
今回は以上となります。他にも機能がたくさんあるのでぜひ試してみてください。お読みいただきありがとうございました。