ROS2 で、 Rtabmap_ros を試す。
--- Jetson Nano 2G でのBuild トラブルの巻。---
Jetson nano 2G
Jetpack4.x and ubuntu 20.04
ROS2: galactic
rtabmap_ros/ros2
Ubuntu Mate 20.04 で、Rtabmap_ros のソースビルドが出来たので、
1. 次は、Jetson Nano 2G で、Rtabmap_ros のソースビルドを行って見たのですが、
これがなかなかうまく行かない。
84[%] 辺りまで進んで、それからずっと進まない。
途中で、なんやら変なエラー表示が出てくる。
まだ、下記エラーが出てくる。
3. どうやら、RAMメモリー不足みたいだ。
実メモリ不足なので、swapfile を増やしても駄目みたいだ。
https://lore.kernel.org/linux-mm/CABXGCsMZ0hFFJyPU2cu+JDLHZ+5eO5i=8FOv71biwpY5neyofA@mail.gmail.com/
注) GFP_NOWAIT の場合みたいだが。
kernel の警告表示だけみたいだけの様だが、コール元は、影響を受けるのか?。
$ sudo swapon --show
/swapfile file 10G 0B 1
/dev/zram0 partition 246.5M 0B 5
/dev/zram1 partition 246.5M 0B 5
/dev/zram2 partition 246.5M 0B 5
/dev/zram3 partition 246.5M 0B 5
で、ramfile を使っている様なので、これを止めた方が良さそうだ。
下記ページを参考に、止めました。
Jetson Nano 2GB で初めての推論
今は、新しい、SDHC カードに、デッドコピーして、再度ビルドを試している。
どうやら、PC の方で、corss-comple するしかなさそうだ (これは、大変なので、止めたほうが良いか) !!
または、Jetson Nano 4G を使うか?
あるいは、ソースビルドを止めて、パッケージ版、OpenCV、 rtabmap、rtabmap_ros にしたほうが簡単か。
4. 現状で、後できる事は、 build に最低必要なシステムサービス以外は、全て止めて、メモリーを空けて、ビルドしてみる。
$ sudo systemctl list-unit-files -t service
一覧の中から、めぼしいものを一時止める。
1) blueman-mechanism stop / disable
2) bluetooth stop / disable
3) containerd stop
4) cups-browsed stop / disable / mask
5) cup stop / disable / mask
6) docker stop
7) ModemManager stop / disable / mask
8) openvn stop
9) pppd-dns stop / disable
10) rpcbind stop
11) rsync stop / disbale
12) sshd stop
etc.
注) snapd が入っていたので、パッケージ自体、削除しました。
shell script で、ビルドの前に、一括で設定して、ビルドが終わったら。
再起動させれば、自動で元に戻るようにすれば簡単ぞね。
$ sudo sh ./stop_nano.sh
stop_nano.sh
$ free -h
で Mem: used 239 Mi 以下、Mem: available 1.6 Gi 以上になれば、良いみたい。
結構、早くなったみたい。rtabmap_ros に限らず、常にこれを、行うと良いかも。
途中、kernel の ram 不足のワーニングが出ているのかもしれませんが、5 時間 25 分 で、なんとか ビルド出来ました。
やれやれでした。
後で、Jetson Nano 2G で、ros2 ratbmap_ros を試してみないといかんぞね!!
T100TA(2G memory Ubuntu 20.04) でも、同じ様に、rtabmap_ros をビルドしても、問題は出ない。
不思議だ、やはり、 swap に、ramfile を使っている所為か?
5. google で、"SLUB: Unable to allocate memory on node -1, gfp=" で検索すると、下記がヒットした。
SLAB: Unable to allocate memory on node 0 (gfp=0x20) の Warning が出たら
上記を参考に、現状のチェックから、
$ cat /proc/sys/vm/min_free_kbytes
22528
だった、しかし試しに、倍の 45056 に増やしてみた。その後、67584 にしました。
/etc/sysctl.conf に、記述
vm/min_free_kbytes = 67584
$ sudo sysctl -p
これで再度、rtabmap_ros をビルドしてみる。
ちなみに、Ubuntu 20.04 PC は、 67584 でした。
T100TA(Ubuntu 20.04) は、45056 でした。
結局、本設定をして、text login 後、上記、stop_nano.sh を実行せずに、jetson nano のクロックを上げて、
$ sudo jetson_clocks
1 cpu で、ビルドしました。
$ colcon build --symlink-install --cmake-args -DRTABMAP_SYNC_MULTI_RGBD=ON -DRTABMAP_SYNC_USER_DATA=ON -DCMAKE_BUILD_TYPE=Release --parallel-workers 1