RPiとPixhawkのシリアル通信接続

ペリフェラル
image_print

MAVLinkを介してRaspberry Piとのコミュニケーション

このページでは、Raspberry Pi (RPi) を接続して、RPiのwifiを利用し、フライト コントローラーと通信できるようにする方法について説明します。 通信方法はシリアル接続で MAVLink プロトコルを使用します。これを使用して、画像を保存するためのメモリ要件のためにフライトコントローラーでは実行できない画像認識などの追加タスクを実行できます。

フライトコントローラーとRPiの接続

../_images/RaspberryPi_Pixhawk_wiring1.jpg

Pixhawkの場合、

Cube Orange・Pixhawk 6Xの場合。

各ピンの割当は

  1. VCC_5V 出力
  2. MCU_TX 出力
  3. MCU_RX 入力
  4. MCU_CTS 出力
  5. MCU_RTS 入力
  6. GND

太字の4本を使います。Raspi側は上に書いたので省略。

画像に示すように、フライト コントローラの TELEM2 ポートを RPi のグラウンド、TX、および RX ピンに接続します。 個々の RPi のピン機能の詳細については、こちらを参照してください。

TIPS:
使用する RPi のモデルと使用する内部/外部周辺機器に応じて、+5V の電力要件は 80mA から 2.5A 近くまでさまざまです。 +5V 供給電流の要件を決定するには、特定のシステム構成の電力供給力を評価する必要があります。 通常、フライト コントローラの TELEM ポート コネクタ経由で RPiに+5v を供給することはお勧めしません。
(Raspberry Pi 4Bだと2.5Aは必須です。パワーディストリビューションボードにType-C USBケーブルをはんだづけして電力を取り出すことを検討しましょう。)

フライトコントローラーのセッティング

フライトコントローラーとグランドステーション(Mission Planner)を接続します。
次のパラメーターをセットします。テレメトリー2のポートを使う前提です。

    • SERIAL2_PROTOCOL = 2 MAVLINK2を選択
    • SERIAL2_BAUD = 57 57600ボーレート

パラメーター保管を忘れずに。

シリアルポート(UART)の設定

RPIの設定をしていなかったら
raspi-configからinterface option Serial でシリアル通信を可能とします。
Would you like a login shell to be accesible over serial ? はNO
Would you like the serial port hardware to be enabled ?はyes
reboot

さて、RaspiとフライトコントローラーをつないだシリアルはGPIO上にあります。
これはRaspi内ではttyAMA0 というデバイスとなっています。
つまり、MAVProxyはttyAMA0と繋ぐことを目指さねばなりません。

ところで、このttyAMA0とBluetoothは配線を共有しているそうです。
そこでBluetoothをオフにする必要があります。それは/boot/config.txtを編集することで行います。

sudo nano /boot/firmware/config.txtで編集します。(Bookwormで変わった)

enable_uart=1
dtoverlay=disable-bt
arm_boost=1

以上の値に変更、もしくは追記し保管します。

さらにBluetoothのモデムの初期化システム・サービスを斬り殺す

sudo systemctl disable hciuart

リブート。

これがうまくいっていると、/dev/serial0は、/dev/ttyAMA0)のシンボリックリンクとなります。
ならない場合はどこか設定をミスしています。再確認、再起動してください。

RPIソフトウェアのセットアップ

2022年末、最新RaspianOSはPython3が標準で導入されているので、Pythonのインストールは不要です。

ただし、pipは導入の必要があります。

sudo apt install python3-pip

これはerror: externally-managed-environmentとか言われて失敗するはず。
~/.pip/pip.confを作り

[global]
break-system-packages = true

と書く。

pipはインストールしたものは以下のコマンドで確認できる。

pip list

RaspiとPixhawkを接続し、Drone Kitなどでつなぐ場合はここまで。
シリアル通信なので共用はできません。

なお、Pythonでのシリアルはほとんどのパッケージがpyserialを使用しています。たとえばserial.Serialなどはpyserialを想定しています。serialはほとんど使われていません。なので

pip install pyserial

でインストールしておきます。

MAVProxyのインストールと設定

pipを使ってMAVproxyのインストール (pipはpip3を指しているはず)

pip install PyYAML mavproxy --user

ユーザーのディレクトリー(~)にある.bashrcの最後の行に以下を記述

export PATH="$PATH:$HOME/.local/bin"

一応、最新にする

pip install mavproxy pymavlink --user --upgrade

MAVProxyはCUIのグランドコントロールステーションです。
さらにMAVLinkをルーティングする機能をもっています。(<- ここ重要。MAVLink-Routerを使う人がほとんどいない理由)

PIとSSHで接続していることを前提とします。
RPIとフライトコントローラーのテストは両方の電源をつけて、RPIから次をタイプします。

Mission Plannerへの接続

フライト コントローラーは、Telemetry 1 および Telemetry 2 ポート (このページの上部の画像を参照) を介して受信した MAVLink コマンドに応答します。つまり、RPi と通常の地上局 (つまり、ミッション プランナーなど) の両方を接続できます。 さらに、SITL の場合と同様に、Mission Planner を RPi で実行されている MAVProxy アプリケーションに接続することができます。

これは主に –out <ipaddress>:14550 で MAVProxy 起動コマンドに追加することで、ミッション プランナーを実行しているPC のアドレスを追加することができます。 Windows では、ipconfig を使用してその IP アドレスを判別できます。

mavproxy.py --master=/dev/ttyAMA0 --baudrate 57600 --out 192.168.1.41:14550 --aircraft MyCopter
Warningでmodemmanagerと矛盾していると出ても無視しています。(正しいかどうかわかりません)

Raspberry Piに繋いだフライトコントローラーとmission plannerをつなぐスクリプトです。(./connect)
outにターゲットのipアドレスを指定します。
(言い換えるとRapberry Piはテレメトリーの役になっている。)
mavproxy.py --master/dev/ttyAMA0 --baudrate 57600 --out 0.0.0.0:5760 --daemon

最後にdaemonパラメーターを入れておくと、sshを切っても動き続けます。

chmod +x connect

で実行権を与えておきます。

次はRaspberry piに繋いだLTE経由でMission Plannerと接続します。

タイトルとURLをコピーしました