いろいろやっていると経験的にRaspberry PIがもっとも不安定です。
そしてトラブルがおきた時に対処が難しいです。最大の理由はやはりディスプレイを本番では繋がないためだと思います。
ラズパイの安定化では電源の確保は大事なことですが、ドローンの場合、電源をドローンの分電盤、もしくは電源に繋いだDC-DCコンバーターから5Vを取り出して使います。この電源が落ちた時はおそらくドローンもストップしているはずです。したがって電源の安定化の議論は行いません。
またRaspi Zeroはコネクタがプアなので議論になりません。
あれこれ8つの安定化策を私は打っています。まだ増えるかもしれません。
1. ミニKVMを用意する
Windows PCはグランドコントロールステーションなどの関係から持っていきます。ミニKVMと呼ばれる製品はHDMIとUSBキーボードをエミュレートする機器が数種類あるので用意、練習しておきます。
ここ数年で出てきたものですね。従来の小さいHDMIディスプレイやUSBキーボード繋ぐより表面でもかさばらない点でも、ぜひ揃えておきたいものだと思います。
実際に経験していますが、Raspberry Piが突然ブートしない場合などは直接繋いで状況を見ることができるものがないと手も足も出ません。
私はOpenterraceという製品を使っていますが、動かない組み合わせがあったり、フォントサイズ変えられなかったり、あまりいいとも言えないです。
2. 軽量なRaspi OSを使う
言うまでもないことですが、ドローンに搭載するコンピュータにGUIは必要ありません。また、Unixはコマンドラインからの作業を避けられないのでGUIのないもの、Raspi OS 64bit Lightを選びます。
逆に汎用のUbuntuはRaspiに必要なパッケージが入っていないのでオススメしません。
3. スワップをやめる
Protect your Raspberry Pi µSD card (use read-only filesystem)
SDカードへのアクセスを極力減らすためです。
そこでこのようなシステムではスワップをゼロにして余計な書き込みが起きないようにします。
sudo swapoff --all
これだけだとリブートしても元に戻るので、次を停止。
sudo systemctl stop dphys-swapfile sudo systemctl disable dphys-swapfile
RAMディスクの活用
/etc/fstabに以下を追記する
tmpfs /tmp tmpfs defaults,size=32m,noatime,mode=1777 0 0 tmpfs /var/tmp tmpfs defaults,size=16m,noatime,mode=1777 0 0
ファイルを消す。
sudo rm -rf /tmp sudo rm -rf /var/tmp
4. 耐久性のあるSDカード
「マイクロSDカードが弱いんだ。USBメモリーにすればいいんだ。SSDはパソコンでも使われている!」という意見もあるようですが、どれも中身は同じフラッシュメモリーです。原理的にはどれも同じです。フラッシュメモリーはHDDと違ってアップデートでも追記して、できるだけ幅広くメモリーを使おうとします。メモリーをいっぱいいっぱいで使うことは事実上ありませんから、一般的に容量が大きい方が安定して長持ちするとは言えるのです。
書き込み速度ばかりが話題になりますが、SLC (Single Level Cell) チップを使ったもののほうが耐久性は高いです。1ビットの記憶に1セルが割り当てられています。一般的には「産業用」として売られているモデルです。
ちょっと高いですが、圧倒的な耐久力です。Raspberry PIのシステムのために使うので選ぶべきでしょう。
5. きちんとシャットダウンするメカニズム
Raspberry PIにはボタンでシャットダウンを開始できる機能がある。
/boot/firmware/config.txtに
dtoverlay=gpio-shutdown,debounce=1000
GPIO3(デフォルト)とGNDにスイッチをつけると、1秒以上押すとシャットダウンし、再び押すとブートします。なんだよこれ。ボード上にタクトスイッチひとつつけてほしかったな。
また動いているのかどうか知るために、アクティブな間はLEDを点滅(ハートビート)させて、シャットダウンしたらハートビートが止まる(点灯しっぱなし)定義が以下。
dtparam=pwr_led_trigger=heartbeat
稼働中はパパッ、パパッて感じで赤色LEDが点滅します。
これでいきなり電源をオフすることになって、SDカードファイルが壊れるという心配はなくなります。
6.不要なタスクを削除
systemctl list-timers を行うとさまざまなタスクが登録されています。
少なくとも自動アップデート関連とman-dbは必要ないので止めます。
systemctl stop apt-daily.timer systemctl disable apt-daily.timer systemctl stop apt-daily-upgrade.timer systemctl disable apt-daily-upgrade.timer systemctl stop man-db.timer systemctl disable man-db.timer
7. ケースはファンがついていてピンの抜き差ししやすいもの
ラズパイのケースはいろいろな種類が売られています。いろいろ試しました。
それで譲れない条件が冷却ファンがついていることと、ピンの周りが覆われていない。抜き差ししやすいものであること、です。
ラズパイのGPIOを使わない人のほうが多いのか、なかなか見かけません。
私はこういうケースを選んでいます。だいたい2000円しません。
底面が平らなので、ベルクロテープや両面接着テープでケースに取り付けやすいところも見逃せないポイントです。
8. すべてバックアップを用意する
信頼性を上げるためには、ラズパイもSDカードも本体も冗長性をもつしかありません。
また時々、ddコマンドなどでメディア全体を読み取ることはSDカードのデータのリフレッシュのためにもよいようです。
なお、海上では楽天モバイルはダメ。ドコモ回線一択です。探すとIIJ mioが安い。私が言っても仕方ないがIIJの技術力は高いからなぁ