ArduPilot SITLをラズパイ4で動かそう


はじめに

オープンソースのフライトコントローラ「ArduPilot」には,シミュレーション環境としてSITL(Software in the Loop)があります.
本ページでは,これを「Ardupilot-SITL」と呼んで記事を書いていこうと思います.

以前,

 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を入れて初期設定をするまで
  イメージのダウンロード,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回打ち込みます.

新しいパスワードの入力を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がインストールされていなかったら,インストールします.
(確か既にインストールされていたはず)

gitのインストール
$ sudo apt install git

Ardupilotのクローン

ホームフォルダにArdupilot本体をクローン(コピーダウンロード)します.
また,必要なサブモジュール(mavlinkやChibiOS,wafなど)もダウンロードしておきます.

Ardupilotのクローン
$ cd ~
$ git clone https://github.com/ArduPilot/ardupilot
$ cd ardupilot
$ git submodule update --init --recursive

必要なパッケージのインストール

インテルPCだと,ここでインストール用のシェルファイルinstall-prereqs-ubuntu.shを実行するのですが,"pygame"のインストール中にエラーで落ちます.

なので,予め手作業で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

※インストール途中で,STM32マイコンのビルド環境をインストールするかどうか聞かれます.

STMマイコンのビルド環境をインストールするか?
Install ArduPilot STM32 toolchain [N/y]?

STM32はPixhawk系やbetaflight系のフライトコントローラに使われているARMマイコン(Cortex-M)です.
(F1,F3,F4,F7コントローラなどと呼んでいるのは,STM32F103,STM32F303,STM32F427などの型番です)
つまりPixhawkのファームウェアをビルドできるように環境を作るかどうか?と聞いています.
ラズパイでファームウェアがビルドできると嬉しいですね.
なので,推奨はNですがyにしてEnterしました.
しかし現時点では,STM32系のファームのビルドは失敗しています...
今後,これ以降の選択肢は全部デフォルトのNに変更するかもしれません.

その後,同じ様に質問が来ます.

パスに追加するか?
Add /opt/gcc-arm-none-eabi-6-2017-q2-update/bin to your PATH [N/y]?

先程インストールしたSTM32(arm)のコンパイラをパスに通すか聞いています.
これも推奨Nですが,yにしました.

autotestをパスに追加する?
Add /home/ubuntu/ardupilot/Tools/autotest to your PATH [N/y]?

ardupilotのツール関連フォルダにあるautotestをパスに通すか聞いています.
これも推奨Nですが,yにしました.

ArduPilotの入力補完機能を追加する?
Add ArduPilot Bash Completion to your bash shell [N/y]?

Bash(コンソール)にArduPilot関連の入力補完を追加するかどうか聞いてきています.
これも推奨Nですが,yにしました.

CCacheをパスに追加する?
Append CCache to your PATH [N/y}?

パスにccacheを追加するか聞いています.
これも推奨Nですが,yにしました.

プロンプトに戻って来たら,インストール完了です.
一応ですが,ラズパイを再起動しておきましょう.
色々インストールしてゴチャゴチャなので.

$ reboot

SITLのビルド&簡易実行

これ以降の作業は,以前のページと同様なので,
  SITL Simulatorのビルド&簡易実行
へ移動してください.

wafのビルドは,ラズパイ4の冷却が適切でないと温度警告がでますよ~(-_-;

おわりに

Arupilot-SITLをラズパイ4で走らせる方法を解説しました.

ついでに,STM32のビルド環境もインストールしましたが,
現時点では,STM32マイコン系のファームウェアのビルドには成功していません.(T_T)

wafのconfigureのエラーメッセージ
Checking for 'g++' (C++ compiler)       : not found
Checking for 'clang++' (C++ compiler)   : Command ['/usr/lib/ccache/arm-none-eabi-gcc', '--print-sysroot'] returned 1

追跡調査していきます.