コードを編集してRaspberry Piでデバッグ・実行するワークフロー。使用するとき: コードに変更を加えた後にRaspberry Pi ([email protected]) へデプロイして実行・検証したいとき。gh cli でプッシュ → SSH で git pull → 仮想環境(.venv)で実行 → 結果を検証 → エラーがあれば再編集してループというサイクルを自動化する。'デプロイ', 'ラズパイで実行', 'Raspberry Piでテスト', 'raspi deploy', 'deploy and test', 'mavlink-routerを起動' などのフレーズで呼び出される。
Raspberry Pi 5 ([email protected]) へのデプロイ・実行・検証サイクルを自動化するスキルです。
| 項目 | 値 |
|---|---|
| Raspberry Pi ホスト | [email protected] |
| リポジトリパス (raspi) | ~/GCS-UmemotoLab |
| 仮想環境 | ~/GCS-UmemotoLab/.venv |
| アプリディレクトリ | ~/GCS-UmemotoLab/app/ |
| ローカルリポジトリ | c:\Users\taki\Local\local\GCS-UmemotoLab |
現状: ラズパイへの SSH 自動認証(パスワードなしログイン)は未設定。 以下の手順を一度実行しておくと、以降のデプロイが大幅に楽になる。
PowerShell で実行:
# 既存の鍵を確認
Test-Path "$env:USERPROFILE\.ssh\id_ed25519"
True が返れば鍵は既にある。False の場合は以下で生成:
ssh-keygen -t ed25519 -C "taki-gcs" -f "$env:USERPROFILE\.ssh\id_ed25519"
# パスフレーズは Enter×2 で空にするとパスワードなしログインが可能
# 方法A: ssh-copy-id が使える場合(Git Bash / WSL)
ssh-copy-id [email protected]
# 方法B: PowerShell ネイティブ(ssh-copy-id がない場合)
$pubkey = Get-Content "$env:USERPROFILE\.ssh\id_ed25519.pub"
ssh [email protected] "mkdir -p ~/.ssh && chmod 700 ~/.ssh && echo '$pubkey' >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
# ← ここだけパスワード入力が必要
ssh [email protected] "echo 'SSH auth OK'"
# パスワードなしで "SSH auth OK" が表示されれば成功
# ラズパイ側の SSH 設定確認
ssh [email protected] "sudo grep -E 'PubkeyAuthentication|AuthorizedKeysFile' /etc/ssh/sshd_config"
# → PubkeyAuthentication yes になっていること
# ラズパイ側のパーミッション確認・修正
ssh [email protected] "ls -la ~/.ssh/"
ssh [email protected] "chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"
# ラズパイ側 SSH デーモンを再起動
ssh [email protected] "sudo systemctl restart ssh"
# Windows 側 known_hosts をリセット(IP 変更後などに必要)
ssh-keygen -R 192.168.11.19
ssh [email protected] "git clone https://github.com/KeitaTK/GCS-UmemotoLab.git ~/GCS-UmemotoLab"
ssh [email protected] "cd ~/GCS-UmemotoLab && python3 -m venv .venv && .venv/bin/pip install -r requirements.txt"
注意: PySide6 は Raspberry Pi OS (arm64) 向けビルドが必要な場合がある。 失敗する場合は
pyside6を除いたrequirements_raspi.txtを用意することを検討。
ssh [email protected] "sudo apt update && sudo apt install -y mavlink-router"
インストール後の動作確認:
ssh [email protected] "mavlink-routerd --version"
# 変更をステージング
git add .
# コミット
git commit -m "<変更内容を簡潔に記述>"
# GitHub CLIでリポジトリをセット
gh repo set-default KeitaTK/GCS-UmemotoLab
# プッシュ
git push origin main
ssh [email protected] "cd ~/GCS-UmemotoLab && git pull"
出力に Already up to date. または変更ファイルのリストが表示されることを確認。
ヘッドレス環境(Raspberry Pi に画面なし)では GCS の Qt UI は動かないため、 バックグラウンドサービス部分のみ起動する場合:
ssh [email protected] "cd ~/GCS-UmemotoLab && source .venv/bin/activate && timeout 30 python3 app/main.py 2>&1"
ssh [email protected] "cd ~/GCS-UmemotoLab && source .venv/bin/activate && python3 -m pytest tests/ -v 2>&1"
シリアル接続のドローン(Pixhawk)から UDP で GCS へ中継する場合:
ssh [email protected] "mavlink-routerd -e 192.168.11.19:14550 /dev/ttyAMA0:57600 &"
| 引数 | 内容 |
|---|---|
-e 192.168.11.19:14550 | GCS(このラズパイ)へ UDP 転送 |
/dev/ttyAMA0:57600 | Pixhawk シリアル接続 (ボーレート要確認) |
mavlink-router の設定ファイルを使う場合:
ssh [email protected] "cat /etc/mavlink-router/main.conf"
出力を解析して以下を確認:
Traceback, Error:, Exception) → エラー箇所を特定Connection refused, timeout, No route to host) → IP・ポート設定を確認Bad CRC, unknown message) → pymavlink バージョンを確認より手軽に実行する場合は deploy_and_run.ps1 を使用:
.\scripts\deploy_and_run.ps1 -CommitMessage "fix: バグ修正" -TimeoutSec 30
| エラー | 原因 | 対処 |
|---|---|---|
Permission denied (publickey) | SSH鍵未設定 | STEP 0 の手順を実施 |
Password: プロンプトが毎回出る | SSH鍵未設定 | STEP 0 の手順を実施 |
ssh-copy-id: command not found | Git Bash/WSL なし | 方法Bの PowerShell コマンドを使う |
Host key verification failed | known_hosts の古いエントリ | ssh-keygen -R 192.168.11.19 を実行 |
ModuleNotFoundError | パッケージ未インストール | ssh [email protected] "cd ~/GCS-UmemotoLab && .venv/bin/pip install <pkg>" |
PySide6 install failed | arm64 ビルド問題 | pip install PySide6 の代わりに apt install python3-pyside6 を試す |
connection refused: 14550 | mavlink-router 未起動 | ステップ 3-C を実行 |
git pull で競合 | ラズパイ側に変更あり | ssh [email protected] "cd ~/GCS-UmemotoLab && git stash && git pull" |
.venv が存在しない | 初回セットアップ未実施 | STEP 1-2 のコマンドを実行 |
serial.SerialException | Pixhawk 未接続 | USB/UART 接続を確認、ls /dev/ttyAMA* で存在確認 |
エラーが3回以上連続する場合:
ssh [email protected] "journalctl -n 50"ssh [email protected] "cd ~/GCS-UmemotoLab && rm -rf .venv && python3 -m venv .venv && .venv/bin/pip install -r requirements.txt"