Opp TensorFlow 2.16.2 Lite C++ library build.
TensorFlow 2.16.2 Lite C++ library build. の続き。
前回に続いて、今回は、本題の ROS2 自作 Turtlebot3 による 草刈りロボット開発。#9 LSTM で経路計画をする。
で作成した学習モデルを、C++ 及び ROS2 C++ で簡単に predict できるライブラリーを作成する。
環境
PC and Orange Pi 5 Armibian Jummy
Ubuntu 22.04
Tensorflow 12.6.2
ROS2 Humble
/home/nishi --> /home/your-id に変えとうせ。
1. ROS2 のプログラムから使える、opp_tflie.cpp を作成する。
ROS2 global costamap の一部を、cv::Mat に取り込んで、class Opp_Tflite に渡せば、
opp_with_lstm または、opp_with_transformer のモデルで、predict して、その結果を、
std::vector<u_int8_t> y_pred に返してくれるもので、これをライブラリとして使えるようにする。
1.1 ライブラリ libopp_tflite.a のビルド。
$ make -fMakefile-Archive-opp_tflite
$ make -fMakefile-Archive-opp_tflite install
$ make -fMakefile-Archive-opp_tflite clear
1.2 CMakeLists.txt で、
find_package(Tflite REQUIRED)
find_package(Opp_tflite REQUIRED)
をすれば、同じく簡単にリンケージができるようにします。
cmake/FindOpp_tflite.cmake
一応、ROS2 の turtlebot3_navi_my/CMakeLists.txt に追加して、リンケージ and Run ができました。
CMakeLists.txt の記述には、少し留意点が出たけれども、なんとか出来ました。
~/colcon_ws/src/turtlebot3_navi_my/CMakeLists.txt の抜粋
どうやら、ROS パッケージでない場合のリンクは、ament_target_dependencies() に追加するのではなくて、
Cmake 本来の、target_link_libraries() を使うみたいじゃ。
実習ROS 2 CMakeLists.txtとpackage.xmlの書き方
ROS2の共有ライブラリを使用したプログラムの作成 before Foxy Fitzroy
後は、Turtlebot3_navi_my のプログラムに処理を追加して、global costmap から、opp_with_lstm で、経路の predict ができるのが確認できれば、
学習データを増やして、精度をあげてやれば、実際に使えるものかどうか判断できるぞね。
Orange Pi 5 Armibian jummy で、動けば、目的を達成だが。
学習データを増やすのが難儀ぞね。
2. ライブラリー自体の開発と動作確認。
dummy.cpp を用意しているので、opp_tflite.cpp 、 opp_tflite.hpp を改造した場合は、これを使います。
class Opp_Tflite の使い方も、 dummy.cpp を参考にしとうせ。
$ make -fMakefile-dummy
$ export LD_LIBRARY_PATH=/home/nishi/usr/local/lib/tensorflow-2.16.2-lite-flex:$LD_LIBRARY_PATH
$ ./dummy
3. 試しに、turtlebot3_navi_my for Ros2 humble r5 の Auto Mower の中に組み込んで、 predict を要所要所で実行してみました。
おかしな挙動もなく、完走できるみたいぞね!!
今後は、ROS2 自作 Turtlebot3 による 草刈りロボット開発。#8 Transformer で経路計画をする。 の
"2. このモデルの運用イメージ" 方針に従って組み上げてみます。
内容は、後日 github に公開するので、それを参照しとうせ。
github に公開しました。by nishi 2025.1.2
tosa-no-onchan/opp_tflite
turtlebot3_navi_my for Ros2 humble r6 の Auto Mower に正式に組み込んでみました。