MAVLink-rounterを使ってラズパイ経由でQGCとPixhawkを有線接続する

# 目的
QGCとPixhawkを接続する場合、無線接続は事例が多いのですが有線接続は情報がなく、またCompanion Computerと呼ばれているラズパイなどの機体上のサブPCを経由する場合は更にまとまった情報が無いので、自分用のメモとして書いておきます。

# 使用した構成部品
- Macbook Pro M2
- [LANポート付きUSB-Cハブ](https://www.amazon.co.jp/gp/product/B07X7VQ9HN/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1)
- [QGround Control](https://docs.qgroundcontrol.com/master/en/getting_started/download_and_install.html)
- Raspberry Pi 2B
- [mavlink-router](https://github.com/mavlink-router/mavlink-router)
- [Pixhawk4 V2.4.8](https://www.amazon.co.jp/gp/product/B01FNNNAK0/ref=ppx_yo_dt_b_asin_title_o04_s00?ie=UTF8&psc=1)

＜備考＞
- QGCが動けばMacはなんでもいいと思います（多分M2の実力の数%くらいしか使わない）。
- ラズパイは手元に余っていた2Bを使いましたが、3Bでも4Bでも同じです。ドローンに載せる前提なので、無線LANやBluetoothが無い2Bの方が消費電力的に有利かな、というだけです。
- Pixhawkはデバッグ用にAmazonで安く手に入るやつを選びました。外観からの判断ですがあまり質が良くない？飛行させるときはもうちょっとちゃんとしたものを購入します。

# システム構成図
![スクリーンショット 2023-01-11 16.38.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/512829/6a84c8ea-5182-8cc0-3e3d-9b59f7797075.png)
- ラズパイにMAVLink-routerというMAVLinkコマンドを任意のポートにバイパスしてくれるツールがあり、それを使ってQGCとPixhawk間のMAVLink通信を確立します。
- ラズパイ-Pixhawk間のケーブルは自作する必要あり。TELEM2とラズパイのUARTをつなぐ。
- Pixhawkの通信ボーレートは115200に設定。ボーレートは任意の値でよいが、Pixhawk上の設定とMAVLink-router実行時のシリアルポートのボーレートが揃っている必要がある。

# 設定
## １）Mac上のLAN設定
Macに接続されている有線LANポートを以下のように設定
IPアドレス：192.168.100.5
サブネットマスク：255.255.255.0

## ２）QGC設定（通信リンク）
Ethという名前のTCPのポート5760への接続を作る。サーバーアドレスはラズパイのIPアドレス[192.168.100.2]を入れる。
![スクリーンショット 2023-01-11 16.36.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/512829/f5736711-cd1c-9180-46bd-e5b5e2843ad2.png)

## ３）Pixhawkの設定
PixhawkをUSBでMacと接続して、QGCの設定画面からTelemetry2（SERIAL2）のシリアルボーレートを設定する。
![スクリーンショット 2023-01-13 8.38.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/512829/b3f5c05d-615d-bdd8-e7bb-5c4191db1c8b.png)

## ４）ラズパイ上のIPアドレス設定
``` /etc/dhcpcd.conf
interface eth0
static ip_address=192.168.100.2/24
static routers=192.168.100.1
noipv6
```

## ５）ラズパイ上のシリアルポート設定
``` /boot/config.txt
[all]
enable_uart=1
dtoverlay=disable-bt
```
- シリアルポート有効
- PL011をプライマリに変更（/dev/ttyAMA0、GPIO14/15）
- Bluetooth無効

参照：[ラズパイのシリアルポート設定](https://toki-blog.com/pi-serial/)

## ６）ラズパイ上でMAVLink-routerインストール
- [MAVLink-rounter]((https://github.com/mavlink-router/mavlink-router))のリポジトリをgit cloneする
- リポジトリ READMEの「Debian/Ubuntu」のインストール方法を実行
**注）ラズパイにgitをインストールしたあとに以下「Fetch dependencies」のコマンドを実行する必要があるので注意が必要**
```
git submodule update --init --recursive
```

## ７）ラズパイ-Pixhawk間のケーブル接続
- MAVLink通信（UART）用ケーブルを作成しPixhawkのTELEM2に接続
- 機体が無い場合はPixhawkの電源をUSBポートから入れる。**パソコンから給電するとPixhawkが通信してしまう**ので、モバイルバッテリーなどで電源のみ供給したほうがよい
- TELEM2のTxをラズパイのRxに、TELEM2のRxをラズパイのTxに接続する
![スクリーンショット 2023-01-13 8.31.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/512829/3d7ba720-2f56-8676-59fd-82beab336c65.png)
![スクリーンショット 2023-01-13 8.31.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/512829/8394c089-d434-02ff-5f9c-9b3db9335215.png)
![スクリーンショット 2023-01-13 8.54.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/512829/52601a66-8884-3ced-0e69-8d17c236d5fc.png)

参照１：[Pixhawkピン配置](http://www.holybro.com/manual/Pixhawk4-Pinouts.pdf)
参照２：[ラズパイピン配置](https://techhobby.net/2020/04/13/raspberry-pi%E3%81%AEgpio%E3%83%94%E3%83%B3%E9%85%8D%E7%BD%AE/)

## ８）Mac-ラズパイ LAN接続
LANケーブルで両者を接続

# そしてとうとう通信開始！
## １）ラズパイ上でMAVLink-routerを起動
以下コマンド実行してLANとMAVLinkをルーティングする。

```
mavlink-routerd -e 192.168.100.2:14550 /dev/ttyAMA0:115200
```
## ２）QGCでMAVLink-routerに接続
通信リンクで先程設定したEthという項目があるので、それをクリックして下側の「接続」を押す
![スクリーンショット 2023-01-13 8.45.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/512829/8dbb3299-4de9-746c-8aa7-f24ece26ee26.png)

**QGCがしゃべりはじめて通信が開始されたら成功！**

# 備考
今回のやり方だとUDPのポート14550ではなくTCPのポート5760にMacから接続している（上記MAVLink-routerのコマンドを実行すると、自動的にTCPポート5760のサーバーが起動する）。UDPではなぜかうまくいかなかった。

思い返すと結構いろんな手順を踏む必要がありました。成功してよかった。。。