ROS2 機械学習の最近のブログ記事

ROS2 自作 Turtlebot3 による 草刈りロボット開発。#8 Transformer で経路計画をする。

--- ROS2 ロボット自律走行の経路計画の補助に、機械学習(Transformer、LSTM)を使う。 ----

ROS2 自作 Turtlebot3 による 草刈りロボット開発。#6 Nav2 Planner を替えてみる で、ThetaStarPlanner を使って、Auto Mower 時の走行の直進性の改善がみられた。

しかし、まだおんちゃんが望む直進性能には、足りない。
そこで、ThetaStarPlanner の経路プランの一部補正として、機械学習が使えないか、無い知恵を絞って、考えてみた。

1. 概要
結論を先に言ってしまえば、経路プランに、Transformer、Lstm による、Speech To Text モデルのロジックを使えないだろうか? と言う話じゃ。

下の画像だと、赤線の経路を、青線の様にしたい。
障害物の手前まで真っ直ぐ進んで、障害物をなぞるように進んで、再度、スタートとストップの直線上に戻る、走行が欲しい。


2024-09-30 14-25-56-1.jpg

ROS2 自作 Turtlebot3 による 草刈りロボット開発。#7 障害物からの脱出に機械学習を使う。

---- Auto Mower で、障害物に囲まれた際の脱出方向の算出に、機械学習の画像分類 (Image Classify) を使ってみる。-----

Auto Mower で、ロボットを動かして、目的地に到達させた場合に、障害物に近づき過ぎる場合がある。
そうすると、navigation2 で、その場所から抜け出せずに、エラー終了してしまう。

これを、防ぐ為に、static map 上で、障害物に囲まれた際に、脱出方向を計算して、cmd_vel モードで、ロボットを少し遠ざけている。

2024-09-30 17-04-16-1.jpg
現状は、ProControl::obstacle_escape() で処理を行っています。
処理概要は、
Static Map から、ロボットの周りを、OpenCV の cv::Mat に取りこんで、8方向のMaskを用意して、Mask と AND を取って、障害物の Dot を取得した後、
それぞれの方向で、一番障害物が少ない(Dot が少ない)方向に、cmd_vel を使って動かす。
注) 今は、Local Cost Map(static_layer + obstacle_layer) を、resolution: 0.01 の解像度で使っています。

これって、画像(2値画像か、グレースケール画像)を取りこんで、その画像パーターン(黒い部分が障害物、白が空きスペース)から、8クラス(クラス=方向) に分類する、
Image Classify ではないじゃろか?

Image Classify だったら、Orange Pi 5 の NPUでも使えそうじゃ!!。
少し、試してみないといかん。

ROS2 OAK-D-Lite で、Stereo depth と Mobilenet object detection を同時に動かす。

Sub Title: Does an OAK-D run Stereo depth and Mobilenet object detection at the same time?

ROS2 自作 Turtlebot3 による 草刈りロボット開発。#4 草むらの判定 で、Stereo Camera Depth と、
Object Detection を同時に実行できるハードを検討しないと行けないので、
とりあえず、OAK-D Lite で試してみた。

なんか、同時に動くみたいぞね。
google で検索したけど、該当記事がないので、できないかと思ったが、
なぜか動くみたいぞね。
後で、github に上げちょきます。
tosa-no-onchan / depthai_ros_my
rgb_stereo_mobilenet_node_my.cpp

ただし、今は、Mobilenet で試しただけで、Tiny YOLOv4 では、どうなのか?

ROS2 自作 Turtlebot3 による 草刈りロボット開発。#4 草むらの判定。

一連の、ROS2 草刈りロボット の開発で、 GPS を使って畑を走行させる事は実現できそうだと、判った。
最後に残った懸案は、

1. 草むらを障害物とせずに、どうやってロボットを進めるか?
しかし、これも、
Keras V3 Object detection with Vision Transformers を試す。 で、最近の、Object Detection を体感する事で、解決策が浮かんできた。
今は、単なる思いつきじゃが、
YOLOx、Transformer Object detection で草むらを判定させて、それを Local CostMap に取り込めば良い。

Local CostMap での障害物の判定は、
obstacle_layer の plugins で行っている。
実際のプログラムは、plugin: "nav2_costmap_2d::ObstacleLayer" で、
こいつで、入力を、/scan:"LaserScan" か、 /cloudXYZ:"PointCloud2" のどちらかを取り込んで、障害物と判定している。

このアーカイブについて

このページには、過去に書かれたブログ記事のうちROS2 機械学習カテゴリに属しているものが含まれています。

前のカテゴリはROS2 Turtlebot3 自作です。

次のカテゴリはROS2 草刈りロボットです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

カテゴリ

ウェブページ

サイトナビ