目的
QGCとPixhawkを接続する場合、無線接続は事例が多いのですが有線接続は情報がなく、またCompanion Computerと呼ばれているラズパイなどの機体上のサブPCを経由する場合は更にまとまった情報が無いので、自分用のメモとして書いておきます。
使用した構成部品
- Macbook Pro M2
- LANポート付きUSB-Cハブ
- QGround Control
- Raspberry Pi 2B
- mavlink-router
- Pixhawk4 V2.4.8
<備考>
- QGCが動けばMacはなんでもいいと思います(多分M2の実力の数%くらいしか使わない)。
- ラズパイは手元に余っていた2Bを使いましたが、3Bでも4Bでも同じです。ドローンに載せる前提なので、無線LANやBluetoothが無い2Bの方が消費電力的に有利かな、というだけです。
- Pixhawkはデバッグ用にAmazonで安く手に入るやつを選びました。外観からの判断ですがあまり質が良くない?飛行させるときはもうちょっとちゃんとしたものを購入します。
システム構成図
- ラズパイにMAVLink-routerというMAVLinkコマンドを任意のポートにバイパスしてくれるツールがあり、それを使ってQGCとPixhawk間のMAVLink通信を確立します。
- ラズパイ-Pixhawk間のケーブルは自作する必要あり。TELEM2とラズパイのUARTをつなぐ。
- Pixhawkの通信ボーレートは115200に設定。ボーレートは任意の値でよいが、Pixhawk上の設定とMAVLink-router実行時のシリアルポートのボーレートが揃っている必要がある。
設定
1)Mac上のLAN設定
Macに接続されている有線LANポートを以下のように設定
IPアドレス:192.168.100.5
サブネットマスク:255.255.255.0
2)QGC設定(通信リンク)
Ethという名前のTCPのポート5760への接続を作る。サーバーアドレスはラズパイのIPアドレス[192.168.100.2]を入れる。
3)Pixhawkの設定
PixhawkをUSBでMacと接続して、QGCの設定画面からTelemetry2(SERIAL2)のシリアルボーレートを設定する。
4)ラズパイ上のIPアドレス設定
interface eth0
static ip_address=192.168.100.2/24
static routers=192.168.100.1
noipv6
5)ラズパイ上のシリアルポート設定
[all]
enable_uart=1
dtoverlay=disable-bt
- シリアルポート有効
- PL011をプライマリに変更(/dev/ttyAMA0、GPIO14/15)
- Bluetooth無効
6)ラズパイ上でMAVLink-routerインストール
- MAVLink-rounterのリポジトリをgit cloneする
- リポジトリ READMEの「Debian/Ubuntu」のインストール方法を実行
注)ラズパイにgitをインストールしたあとに以下「Fetch dependencies」のコマンドを実行する必要があるので注意が必要
git submodule update --init --recursive
7)ラズパイ-Pixhawk間のケーブル接続
- MAVLink通信(UART)用ケーブルを作成しPixhawkのTELEM2に接続
- 機体が無い場合はPixhawkの電源をUSBポートから入れる。パソコンから給電するとPixhawkが通信してしまうので、モバイルバッテリーなどで電源のみ供給したほうがよい
- TELEM2のTxをラズパイのRxに、TELEM2のRxをラズパイのTxに接続する
参照1:Pixhawkピン配置
参照2:ラズパイピン配置
8)Mac-ラズパイ LAN接続
LANケーブルで両者を接続
そしてとうとう通信開始!
1)ラズパイ上でMAVLink-routerを起動
以下コマンド実行してLANとMAVLinkをルーティングする。
mavlink-routerd -e 192.168.100.2:14550 /dev/ttyAMA0:115200
2)QGCでMAVLink-routerに接続
通信リンクで先程設定したEthという項目があるので、それをクリックして下側の「接続」を押す
QGCがしゃべりはじめて通信が開始されたら成功!
備考
今回のやり方だとUDPのポート14550ではなくTCPのポート5760にMacから接続している(上記MAVLink-routerのコマンドを実行すると、自動的にTCPポート5760のサーバーが起動する)。UDPではなぜかうまくいかなかった。
思い返すと結構いろんな手順を踏む必要がありました。成功してよかった。。。