前回の続きです。
前回はROS2で組んだシステムがある程度動作するところまで確認しました。ここからはJetson Nanoに環境を移し、同様に動作することを確認します。
結論
初めにこの記事の結末を書くと、今回の試みはあまり上手くいかず、見通しの甘さなどを感じる結果でした。一方、そういった失敗を重ねるつつ学びを得ることがロボット部としての活動の目標であったので、そういう意味では良かったと感じています。
学びとしては
- armアーキテクチャのマシンにおける環境構築が大変なことに気づいていなかった
- 実機でどういう仕組みにしていくかという検討が足りなかった
という2点が大きいと思います。以下、これらに触れつつやったことを振り返ります。
やったこと
今回は会社の予算でJetson Nanoを購入してもらいました。
これに対して
- ROS2
- PyTorch
- Mediapipe
が動く環境を準備できれば、今までamd64マシンで開発していたものを使えることになるため、それを目指して作業を行いました。
反省点1 : 環境構築に苦労した
1つ目の反省点として、まずは環境構築の手順そのものに不慣れで苦労したという面があります。Dockerコンテナを使えば用意に環境が作れると想像していたのですが、そうは簡単にいきませんでした。
1-1 : ROS2とPyTorch
まず前提として前回開発したものではROS2とPyTorchが必要になるためその準備が必要でした。
そういったものとして、たとえばnvidiaからnvidiajetson/l4t-ros2-foxy-pytorchなどが出ているのですが、今回の用途だと必要なros2のcv_bridgeが上手く導入できず実行が失敗してばかりでした。導入段階をDockerイメージで省略していると、いざ足りないものがあったときに上手く修正ができず困ることになりました。
最終的にはdustynv/ros:foxy-pytorch-l4t-r32.7.1の方を使わせていただき、
ROS2とPyTorchについては導入できました。
1-2 : mediapipe
さらに必要なライブラリであるmediapipeで苦労することになります。amd64であれは「pip install mediapipe」だけで入るライブラリですが、armの方では自前でビルドする必要があります。
大まかな手順としては以下の記事を参考にさせていただきました。
ただし、そのままだとバージョンの違いなどで失敗することがあったため、これも試行錯誤して
- bazelのバージョンを記載の3.4.1から6.1.1に変更
- protobuf-compilerのバージョンを記載の3.15.6から3.20.3に変更
など、いろいろやってようやく動く環境ができることになりました。
1-3 : コンテナの設定
上記試行錯誤において、いろいろ試行錯誤してからコンテナに基本的な設定が足りていないと気づくと、構築のビルド手順が全てやり直しになるというところでも苦労がありました。
たとえば、この時点ではJetson Nanoを直接ディスプレイに繋いで開発を進めており、GUIを使える準備をする必要がありました。結局、Jetson NanoでGUIを動かすのはあまり良くない方針であったのではないかと反省するところなのですが、構築時点ではそれを目指していました。
ここで、コンテナからGUIを使うための設定を忘れていた場合に、後から修正するということが難しくビルド手順などをやり直すことで時間がかかってしまいました。
反省として、たとえば、GPUが利用できるかどうか、GUIが利用できるかどうかの確認はすぐにできるため、まずそれらを行うべきだったと思います。
## GPU確認
sudo apt install vim -y
python3 -c 'import torch; print(torch.cuda.is_available())'
## GUI確認
sudo apt update
sudo apt install xterm -y
xterm
反省点2 : 構成などの検討が甘かった
上記環境構築が終わった後も、メモリのリソースが足りないなどの問題が生じました。前述したように、Jetson Nanoに直接ディスプレイを繋げて環境を作ろうとしていたため、そこでメモリなどを多く消費していました。GUIなしに設定を変えると再び環境構築自体をやり直すことになるので、ここも見通しが甘かったところです。
結局、実行時にはUIを確認するPCは別に用意するべきなのではないかという考えに至りました。また環境構築でのビルドなどにおいても、Jetson Nano上で直接ビルドすると重い処理も多いので、強力なビルド用マシンをクラウド上ででも用意した方が良いのではないかという案も上がりました。
総合的に見て、どのように開発を進めていくのが、実際動かすときにはどういう構成になるのかといった検討が十分ではなく、時間が多く取られてしまったと感じます。
また環境構築に時間がかかったことも、それに不慣れである事自体は仕方がないのですが、スケジュール的な見積もりが甘く、3月末という一つの締切があるなかで適切に区切りを付けていくことができなかったとも感じています。
終わりに
改めてですが、経験の無い状態でこういったことを完全に見通すということは難しく、失敗のできるときに苦労することで、身に沁みて理解するというものなのだとも思います。こういった活動を通してどういったところに時間がかかるかという点を肌で理解していけたのは良かったです。
諸事情によりこの先筆者の時間が取れるかは不明なのですが、上手くいけば継続していく予定です。