(2024年1月18日追記)
64bit版Raspberry Pi OSは Bullseye版を使ってください。
最新のBookwarm版は初回起動直後の状態では、ardupilotのインストールシェルファイルでのインストールに失敗します。
これは最新のPython3が、PEP668に従ってvenv環境を作っていない状態でのpipのインストールを拒否するようになったためです。
Legacyの方に残っているBullseye版であれば、このルールが無いのでインストールに成功します。
そりゃライブラリのバージョンに厳密な機械学習(AI)はvenvの切り替えも必要になるけど、それはGPU挿したガチのPCの話だよなあ。
Raspberry Piって1つの機能で1台って使い方が多いから、venvなんか使わなくても良いんだけどなあ。。。
(2023年7月29日追記)
Ubuntu Serverでなくても、64bit版Raspberry Pi OS Bullseyeでも問題なくArduPilot SITLがインストールできました。
その場合、Ubuntu関連の話は飛ばして、aptの更新 から進めてもらえば大丈夫です。
はじめに
オープンソースのフライトコントローラ「ArduPilot」には,シミュレーション環境としてSITL(Software in the Loop)があります.
本ページでは,これを「Ardupilot-SITL」と呼んで記事を書いていこうと思います.
以前,
で,SITLのインストール方法を説明しました.
このシミュレーション機能を使えば,
・Pixhawk系フライトコントローラに自作で追加した機能をテストする.(ファームウェアの改造)
・ドローン輸送などのプログラムの動作テストをする.(コンパニオンPCのプログラム)
・群飛行などの複数同時飛行のテストをする.(地上の管制プログラム)
など,実機で試す前に様々な仮想実験が行えます.
ところが,Ardupilot-SITLは,インテル系のCPUを持ち,64bitのOSが入ったPCでしか動作できませんでした.
実質「Linux用のデスクトップPCを別途1台準備しろ」と言われている様なものです.
余ったPCがある人でないといけない,というのが辛いところでした(泣)
しかし,最近Raspberry Pi用のOSが64bitに対応しました.
ということは「Ardupilot-SITLがラズパイで動くのでは?」と期待してしまいますよね.
ところが,公式ページそのままの手順ではインストールできませんでした...
本ページでは,ラズパイ4にArdupilot-SITLをインストールする手順を解説します.
概要
公式ページ SITL Simulator (Software in the Loop)
にインストールの方法が記載されているので,基本的にはこの手順で行いますが,
2020年7月の現時点では依存しているライブラリ"pygame"のインストールでトラブること確認しています.
というわけで,以前のページ にラズパイ対策として必要な部分を記載します.
準備するもの
・Raspberry Pi 4 (メモリ4GB版)
dronekit-sitlは「x86系のみ,ARM系非サポート」と明記されていましたが,
Ardupilot-SITLはARM系でも大丈夫!
・動作確認済みOS: Ubuntu Server 18.04.4 arm64版
このページ で「Download 64bit」をクリック
・有線LAN
Ubuntu ServerはGUIの無いコマンドライン版なので,WiFi設定などが大変.
なので最初は有線LANでアップデートやソフトウェアインストールをします.
初期設定の参考ページ
・[Raspberry Pi 4にUbuntu Serverを入れて初期設定をするまで]
(https://qiita.com/quailDegu/items/63114ba1e14416df8040)
イメージのダウンロード,SDカードへの書き込み,WiFi設定,初回ログインあたりまでが参考になります.
・Raspberry Pi 4とUbuntu Server+デスクトップのインストール
・Raspberry Pi 4にUbuntu MATEをインストールしてみた
コマンドラインしかないUbuntu Serverにデスクトップ環境をインストールする方法です.
xfce,lxde,KDE,MATEのお好きなものをどうぞ.
「シミュレーション環境にはデスクトップなぞいらん!」という猛者には必要ない作業です.
WiFiの設定はデスクトップ環境が入ってからでも良いよね~という弱者の筆者(^^;;
初回起動時
初回起動時は,
Ubuntu 18.04.4 LTS ubuntu tty1
ubuntu login:
この様に表示されるので,
ユーザ名:ubuntu
パスワード:ubuntu
でログインしてください.
※cloud-initの出力メッセージがloginに被ってきて非常に邪魔(怒)ですが,どうしようもないので,「いないもの」と見なしてIDとパスを打ち込みましょう.
ログインすると,
「パスワードを変更しろ」と言ってくるので,
まずは現在(current)のパスワードubuntuを入力し,
You are required to change your password immediately (root enforced)
Changing password for ubuntu.
(current) UNIX password:
続いて新しいパスワードを2回打ち込みます.
Enter new UNIX password:
Retype new UNIX password:
すると,色々メッセージが出た後にプロンプト($)が出ます.
ubuntu@ubuntu:~$
これでログイン完了です.
以降の作業のために,ラズパイが有線LANでインターネット接続できるようになっていることを確認しておきましょう.
また,コンソールで手打ちでコマンドを打ち込むのが嫌な場合,
この時点でデスクトップ環境をインストールしておくことをオススメします.
Webブラウザをインストールすれば,本ページを見ながらコピー&ペーストで作業ができますね(^^
aptの更新
まずはaptのリポジトリのリストを最新のものに更新(update)し,
更新のあるものをupgradeします.
sudo apt update
sudo apt upgrade -y
初回なので,100個以上のアップデートがあります.
コーヒーでも飲んでゆっくり待ちましょう(^^
gitのインストール
もし,gitがインストールされていなかったら,インストールします.
(確か既にインストールされていたはず)
sudo apt install git
Ardupilotのクローン
ホームフォルダにArdupilot本体をクローン(コピーダウンロード)します.
また,必要なサブモジュール(mavlinkやChibiOS,wafなど)もダウンロードしておきます.
cd ~
git clone https://github.com/ArduPilot/ardupilot
cd ardupilot
git submodule update --init --recursive
必要なパッケージのインストール
インテルPCだと,ここでインストール用のシェルファイルinstall-prereqs-ubuntu.sh
を実行するのですが,"pygame"のインストール中にエラーで落ちます.
なので,予め手作業でpygameをインストールしておきます.
pygameのインストール
pygameのインストールに必要なパッケージを手入力でインストールします.
sudo apt install python-dev libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev libsdl1.2-dev libsmpeg-dev libportmidi-dev ffmpeg libswscale-dev libavformat-dev libavcodec-dev libfreetype6-dev
たくさんあるので,手打ちすると大変ですね.
冗長なパッケージもあるかもしれませんが,これだけ入れておけばエラーは発生しません.
インストールシェルを実行
gitでcloneしたフォルダの中に,ビルドに必要な依存パッケージをインストールしてくれるシェルファイルがあるので,実行します.
(sudoを使うので,途中でパスワードを聞かれることがあります.)
~/ardupilot/Tools/environment_install/install-prereqs-ubuntu.sh -y
プロンプトに戻って来たら,インストール完了です.
一応ですが,ラズパイを再起動しておきましょう.
色々インストールしてゴチャゴチャなので.
reboot
SITLのビルド&簡易実行
これ以降の作業は,以前のページと同様なので,
SITL Simulatorのビルド&簡易実行
へ移動してください.
wafのビルドは,ラズパイ4の冷却が適切でないと温度警告がでますよ~(-_-;
おわりに
Arupilot-SITLをラズパイ4で走らせる方法を解説しました.
この環境でdronekit-pythonもテストしたくなってしまいますが、
筆者がよく使うパターンでは、ラズパイを2台用意して、以下のように接続しています
SITLラズパイ(ドローン本体)<-- 有線LANで接続 --> コンパニオンのラズパイ(dronekit-python環境)
としています。
こうすれば、コンパニオンのラズパイは、シミュレーターであるSITLへの接続から、実機のArdupilot系フライトコントローラへの接続に切り替えるだけでどちらも動かせるので、便利です。
Cube RedやCUAV 7 nano、Holybro Pixhawk 6XなどはEthernetのポートも備えているので、コンパニオンとの接続もほぼ同じになりますね。