ROS2の最近のブログ記事

ROS2 自作 Turtlebot3 による 草刈りロボット開発。#6 Nav2 Planner を替えてみる。

---- Ros2 Navigation2 Planner を、NavfnPlanner から、ThetaStarPlanner に替えてみた。 ----

nav2.org / tuning を見ていたら、

Planner Plugin Selection
NavFn will typically make broad, sweeping curves; Theta* prefers straight lines and supports them at any angle;
and Smac 2D is essentially a classical A* algorithm with cost-aware penalties.

と記述があったので、
Theta を使えば、少しは、ロボットを直線的に走らせられるのではないか?
と思ったので、早速試してみた。

具体的には、xxx.yaml の中の、
planner_server:
で指定するので、ここを変更すれば良い。

ROS2 自作 Turtlebot3 による 草刈りロボット開発。#5 C++ cmd_vel 走行で障害物をよける方法。

今回は、ROS2 自作 Turtlebot3 や、Gazebo Turtlebot3 で、C++ cmd_vel でコントロールしているときに、障害物を検知する機能を組み込んでみました。

方法としては、Stero Camera、Lidar、Depth Camera を入力として、Local Costmap に 障害物が、Topic として出てくるので、
それを、定期的(1 [sec]) に取りこんで、ロボットの前方に障害物が投影されたら、ロボットの方で、なんらかの対応処理をする。

Navigation2 を使えば、かんたんですが、 rpp 等を使うと、まずロボットがまっすぐ走行しません。

草刈りロボットとしては、障害物が無い間は、常に直線上を走行させたいので、cmd_vel で走行させています。
この時に、障害物が現れたら、Nav2 走行に切り替わって、障害物を避ける動きを組み込んでみました。

cmd_vel 走行のみの場合は、そこで、障害物がなくなるのを待つか、走行処理を終了させる か、どちらかになります。

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 C++ rclcpp::Node を継承した、Sub class で、親の nodeポインタがほしい。

忘れないように、書いておきます。
/opt/ros/humble/include/rclcpp/rclcpp/node.hpp

enable_shared_from_this
を見ると、shared_from_this() 親メソッドが使えるみたい。

OAK-D-Lite を ROS2 Humble で、再度試してみた。

OAK-D-Lite を ROS2 Humble で、再度試してみた。

以前、OAK-D-Lite を試して、サンプルプログラムがさんざんだったので、ほったらかしていたのですが、
あれから、2年ほどたって、少しは、改善されたのか、確認のため試してみました。

以前より、改善されたみたいぞね!!。

github に公開しちょります。
tosa-no-onchan / depthai_ros_my

電源容量に注意。
USB 3.x ケーブルを使って、USB3.x ポートを使ってください。
by nishi 2024.9.9

ROS2 GPS Localization 時のスタティックマップの東西南北、に関する、おんちゃんの勝手な解釈。
大学、高専でロボット関連の授業を受けていれば当たり前の事かも知れないが、
なにせ、おんちゃんは独学なので、知識のなさを露呈しちょります。

もし間違っていたら、勘弁しとうせ。

ROS2 LC29H-EA GPS RTK を作る。
で、GPS RTK を使って、部屋の中でロボットの走行テストをしているときに、ふと湧き上がってきた疑問な点を、
おんちゃんながらの、勝手な解釈を書いてみました。

部屋の中で、LC29H-EA + RTK で地球上の位置を取得して、ロボットをうごかしているけれど、GPS だと、東西南北があるよね?
これは、スタティックマップでは、どっちら方になるのじゃろ?

ROS2 LC29H-EA GPS RTK を作る。

ROS2 LC29H-EA GPS RTK を作る。

最終目的は、LC29H-EA で、RTK を使うのが目標です。
が、その前に、勉強を兼ねて、
SparkFun_u-blox_GNSS_Arduino_Library/examples/ZED-F9P/Example15_NTRIPClient を試してみます。

QUECTEL LC29H GNSS L1 L5 Receiver 使えるのか検討してみた。 で、C++ で、GPS データの受信ができたので、
これを、 RTK 対応にするには、どうするか、
勉強を兼ねて、RTCM3 をクライアントとして受信するサンプルがあったので、試してみます。

ZED-F9P の場合は、RTCM をサーバーから受信して、それをそのまま ZED-F9P に送れば、RTK Fix するみたいぞね。
ただし、問題は、近くにフリーのサーバーが無い事だが。

だが、実際は、PC から試せるさんぷるがあったので、こちらを試してみました。

sevensx/ntrip
examples/ntrip_client_exam.cc

実際にサーバーに接続するは、下記、情報を指定しないといかんぞね。

ROS2 自作 Turtlebot3 による 草刈りロボット開発。#3 - Auto Mower

自作 Turtlebot3 自律走行に向けたプログラム。#12 AutoMap II で、Gazebo House での自動 Mapping ができるので、
今回は、その作成されたマップを使って、Auto Mower を作ってみました。

Auto Mower を試す前に、Auto Map II で、マップを作っておいとうせ。
手動操作で、teleop-keyboard で動かして作っても、OK です。

1. 開発環境
PC
  Ubuntu Mate 22.04
  ROS2:humble
  Gazebo Turtlebot3 with Depth Camera、Rtabmap_ros
  GPU: Gazebo で試すなら、GPU が必要みたい。無いと、rtabmap-ros が良く狂って、TF-Map - TF-Odom がぶっ飛ぶみたい。

2. Auto Mower コース計画のアルゴリズム。
1) Static Map を取り込んで、ロボットがいる自由領域(White) の領域を最初に求めます。
2) その自由領域を、ロボットの走行サイズに合わせて、スライスして、そのスライス線に従って、ロボットを走行させる。
以上です。

考えかたは、ずっと以前、ROS and Python で試した方法のままです。
ただし今回は、場所が、 Gazebo House と、 C++ で作成します。

3. 技術的検証。
じっさいに、Auto Mower のプログラムを作る前に、クリアしなといけない技術的問題点を検討します。

ROS2 自作 Turtlebot3 による 草刈りロボット開発。#2

ROS2 自作 Turtlebot3 による 草刈りロボット開発。 の続き。

7. 屋外での Map II。
結局、今は、GPS(みちびき級) を使って、畑の外周の、各頂点でGPSデータを採取して、 それを、順に線分で結んで、
畑の図形に使う事にしました。

はーー、しかし面倒くさい、誰か替わりに、此処のシステムを作ってくれないじゃろうか?
システム構成のラフは、ノートに手書きで出来あがっています。誰か、これを実際に作ってくれないだろうか?
替わりに、もし実際に出来上がたっら、システムとして自由に販売もOKにするのだが!!
仕方がないので、自分で作っています。
いまは、 ESP32 bluetooth で、GPSデータが、PCで採取できるところまで出来ています。by nishi 2023.5.6

Gazebo ROS2 Humble で、My ワールドを追加する

Gazebo ROS2 Humbleで、My ワールドを追加する。

下記、ページを参考に、自分で使いたいワールドを追加する方法を考えてみる。

ROS2 Gazebo に world を追加できるか。
1) useful-world-files-for-gazebo-and-ros-2-simulations
2) CustomRobots / car_junction
3) automaticaddison / two_wheeled_robot
4) how-to-load-a-urdf-file-into-rviz-ros-2

ROS2 自作 Turtlebot3 による 草刈りロボット開発。-- 屋外走行

ROS2 自作 Turtlebot3(foxbot_core3_r2) rtabmap_ros も一応完成したので、
草刈りロボットとしての、屋外での走行にチャレンジします。

1. 屋外でのMap
屋外での走行で、 そもそも、Static Map 作成をどうするのか?
map 自体は、 画像ソフト(Gimp等) で作成できるとのこと。
Creating map with paint(or any other image editor)
Youtube
ROS Map Editor と言うのもある。
こちらが簡単。git clone して、python3 で、そのまま起動できる。
例) ~/map4.pgm ~/map4.pgm.yaml があったら。
$ python3 MapEditor.py ~/map4

だとしたら、ただ走行可能領域のみの、空白の Map だけで良いのでは?

その状態で、GPS を元にした、robot_localization/ekf_node で、自己位置を特定して、Stereo Camera からの
rtabmap_ros/point_cloud_xyz で、 local_costmap、global_costmap に障害物情報を与えてやるだけで、
navigation2 で、1[m] 先の位置、2[m] 先の位置と、順々に走行できるのでは、ないじゃろか?
10[m] 先も、1[m] 毎に区切って行けば、OK か?

ROS2 自作 Turtlebot3(foxbot_core3_r2) Rtabmap_ros with Stereo rgbd and GPS. by T100TA #2
--- GPS を付けて、robot_localization ekf で試すを、T100TA から操作。#2 ---

ROS2 自作 Turtlebot3(foxbot_core3_r2) Rtabmap_ros with Stereo rgbd and GPS. by T100TA の続きです。

ubuntu 20.04 galactic 版へ移行しての再テスト。

ここでの動作を試す前に、ROS2 自作 Turtlebot3(foxbot_core3_r2) Rtabmap_ros with Stereo rgbd. #2 を終わらせて下さい。
上記ページで、 WiFi Lan の安定が重要だと判ったので、その点に注意して、T100TAを使っての走行テストを行います。

1. 環境。
1) Remote PC / T100TA
Ubuntu Mate 20.04
ros2: galactic
navigation2, Rviz2, multi_goals4_nav2
Wi-Fi: 2.4 [GHz]

2) SBC
Jetson Nanao 2G
Jet Pack4 .x and Ubuntu 20.04
ros2: galactic
micro-ROS Agent
Single USB Stereo Camera
GPS: AE-GYSFDMAXB
rtabmap_ros
Wi-Fi dongle: TP-Link 2.4[GHz] 150[Mbps]
USB SSD Stick

3) SOC
ESP32 Arduino
micro-ROS
IMU

4) Wi-Fi portable router
ELECOM WRH-300BK3-S

5) 自動走行プログラム。
turtlebot3_navi_my / multi_goals4_nav2

ROS2 自作 Turtlebot3(foxbot_core3_r2) Rtabmap_ros with Stereo rgbd and GPS. #2
--- GPS を付けて、robot_localization ekf で試す。続き ---

ROS2 自作 Turtlebot3(foxbot_core3_r2) Rtabmap_ros with Stereo rgbd and GPS. の続きです。
自作 Turtlebot3 自律走行に向けたプログラム。#14 の ROS2版です。

1. 環境。
1) Remote PC
Ubuntu Mate 20.04
ros2: galactic
rtabmap_ros, navigation2, Rviz2

2) SBC
Jetson Nanao 2G
Jet Pack4 .x and Ubuntu 20.04
ros2: galactic
micro-ROS Agent
Single USB Stereo Camera
GPS: AE-GYSFDMAXB
USB SSD Stick

3) SOC
ESP32 Arduino
micro-ROS
IMU

4) 自動走行プログラム。
turtlebot3_navi_my / multi_goals4_nav2

5) lanuch ファアイル。
rtabmap_ros_my/launch/ratbmap_stero_rgbd_gps.launch.py

1. galactic 版へ移行しての再テスト。by nishi 2023.3.2
galactic だと、 foxy版で出た、navigation2 の不具合などは、まるきりでなくて、すんなり動いた。

ちょと、走行テストをしていたら、たまに、 navigation2 を動かしている Remote PC と、foxbot_core3_r2 の通信が切断されるようです。
これは、改善しないと、まともにテストできましぇん。

方法は、Remote PC 上で、navigation2 を動かす時は、 heart beat を出すプログラムを同時に動かして、foxbot_core3_r2 からこの、
heart beat を取れなくなったら、モータドライブを止めて、heart beat が回復するのを待つ。

ROS2 自作 Turtlebot3(foxbot_core3_r2) で、Rtabmap_ros with Stereo rgbdを試す。#2

------ Jetson Nano 2G の SDCHが壊れたので、新しいカードへ移したら、問題がでた。 --------

ROS2 自作 Turtlebot3(foxbot_core3_r2) で、Rtabmap_ros with Stereo rgbdを試す。 の続きです。

1. 環境
1) SBC
Jetson Nano 2G
Jetpack 4.x and ubuntu 20.04
ROS2: Galactic

2) Remote PC
Ubuntu Mate 20.04
ROS2:Galactic

3) lanuch ファイル。
rtabmap_ros_my/launch/ratbmap_stero_rgbd.launch.py

Jetson Nano 2G の Micro SDHC を新しくして、同じ様に、 rtabmap-ros-with-stereo-rgbd が動作するようにしたのですが、
何故か、リモートPC から、/cloudXYZ(rtabmap_ros/point_cloud_xyz /cloud) が、以前のように安定して受信出来なくなりました。

$ ros2 topic hz /cloudXYZ

で、最初の30件から40件くらいは、15[hz] で受信できるのに、その後が、殆ど受信出来なくなってしまいました。
おまけに、 /disparity (stereo_image_proc.launch.pyの出力) に至っては、Remote PC からまるっきり受信できません。
どちらも、local の SBC(Jetson Nano 2G) 上では、問題なく受信できています。どちらも、 15[hz] 位、出ています。

ROS2 自作 Turtlebot3(foxbot_core3_r2) Rtabmap_ros with Stereo rgbd and GPS. by T100TA
--- GPS を付けて、robot_localization ekf で試すを、T100TA から操作。 ---

ROS2 自作 Turtlebot3(foxbot_core3_r2) Rtabmap_ros with Stereo rgbd and GPS. の続きです。

前回、SBC(Jetson Nano 2G) で、全て起動して、Remote PC からは、ssh2 で、SBCにログインして、launch の起動と、Rviz2の表示だけを行いましたが、
Remote PC を、ASUS Tablet(T100TA) に変えて同じ操作を行いました。

一応、ロボットは、完走できましたが、navigation2 のログ表示に、結構 ERROR、WARN がでているので、それの考察です。

しかし、T100TA にすると、このようになるのか? 疑問ぞね。

ROS2 自作 Turtlebot3(foxbot_core3_r2) Rtabmap_ros with Stereo rgbd and GPS.
--- GPS を付けて、robot_localization ekf で試す。 ---

ROS2 自作 Turtlebot3(foxbot_core3_r2) Rtabmap_ros with Stereo rgbd. の続きです。
自作 Turtlebot3 自律走行に向けたプログラム。#14 の ROS2版です。

1. 環境。
1) Remote PC
Ubuntu Mate 20.04
ros2: foxy
rtabmap_ros, navigation2, Rviz2
注1) foxy navigation2 には、不具合があるので、パッチが必要。後述。
注2) ubuntu 20.04 で、ros2 galactic が使えるみたい。こちらの方が良いと思います。by nishi 2023.1.17

2) SBC
Jetson Nanao 2G
Jet Pack4 .x and Ubuntu 20.04
ros2: foxy
micro-ROS Agent
Single USB Stereo Camera
GPS: AE-GYSFDMAXB

3) SOC
ESP32 Arduino
micro-ROS
IMU

2. foxbot_core3_r2.ino のビルド。
foxbot_core3_r2_config.h を、下記にして、ESP32 へ書き込みます。
詳しい事は、ROS2 で、ESP32(Arduino) を使う。 を参照。

foxbot_cor3_r2 からは、tf-base_footprint を出力しません。
IMU は、出力します。

ROS2 自作 Turtlebot3(foxbot_core3_r2) で、Rtabmap_ros with Stereo rgbdを試す。
--- 上記、自作ロボットに、navigation2 を組み込んで、Active SLAM で、C++ プログラム制御で、部屋の中を計画コース通りに走らせる。----

ROS2 で、ESP32(Arduino) を使う。 の続きです。

予めMap を作成していないので、同時に、Active Mapping で、地図も作成します。
一応、上記仕様で、自作 Turtlebot3(foxbot_core3_r2) が、動かせるようになったので、書いてみました。

1. 環境。
1) Remote PC
Ubuntu Mate 22.04
ros2: foxy galactic humble
rtabmap_ros, navigation2, Rviz2
注) foxy navigation2 には、不具合があるので、パッチが必要。後述。
注2) ubuntu 20.04 で、galactic が使えるので、こちらの方が良い。by nishi 2023.1.21
しかし、なぜか、galactic 版は、EOL になっているみたい。
humble/Releases
どうすりゃいいんじゃ?

EOL 版でも大丈夫みたいぞね。
下記で、eol 版の galactic 版も、同じようにビルドできます。
$ rosdep update --rosdistro=${ROS_DISTRO} && rosdep install --from-path src --ignore-src -y
rosdep オプション

注3) 今は、ubuntu 22.04 Ros2 Humble対応です。navigation2 rpp

2) SBC
Orange Pi5
Armbian Jammy
ros2: foxy galactic humble
micro-ROS Agent
Single USB Stereo Camera

3) SOC
ESP32 Arduino
micro-ROS
IMU

2. foxbot_core3_r2.ino のビルド。
foxbot_core3_r2_config.h を、下記にして、ESP32 へ書き込みます。
詳しい事は、ROS2 で、ESP32(Arduino) を使う。 を参照。

ROS2 で、Rtabmap_ros を試す。#2

ROS2 で、Rtabmap_ros を試す。#2
--- ROS2 & Rtabmap_ros で、Gazbo Turtlebot3 with Scan (Acitve SLAM も可) ---
Foxy devel Rtabmap_ros を参考に、rtabmap_ros で、ROS2 Gazebo Turtlebot3 with Scanを、動かしてみました。
PC 環境:
Ubuntu Mate 20.04
ROS2 :foxy

1. 手順。
Example with Turtlebot3 を参考にすればできます。
$ ros2 launch turtlebot3_gazebo turtlebot3_house.launch.py

$ ros2 launch rtabmap_ros rtabmap.launch.py \
visual_odometry:=false \
frame_id:=base_footprint \
subscribe_scan:=true depth:=false \
approx_sync:=true \
odom_topic:=/odom \
scan_topic:=/scan \
qos:=2 \
args:="-d --RGBD/NeighborLinkRefining true --Reg/Strategy 1" \
use_sim_time:=true \
rviz:=true

Teleop keyboard を起動して操作。
$ ros2 run turtlebot3_teleop teleop_keyboard

ROS2 で navigation2 の Active SLAM を試す。

ROS2 で navigation2 の Active SLAM を試す。
--- ROS2 Gazbo Turtlebot3 で、Mapping しながら、 Navigationでロボットを動かす。 ---

(SLAM) Navigating While Mapping を参考に、ROS2 Gazebo Turtlebot3 を、動かしてみました。
PC 環境:
Ubuntu Mate 20.04
ROS2 :foxy

1. Gazebo turtlebot3_house Waffle の準備。

$ ros2 launch turtlebot3_gazebo turtlebot3_house.launch.py
で、Gazebo House が起動出来ますが、ロボットの起点がちょっと、ROS と比べて変なので、修正します。
~/colcon_ws/src/turtlebot3_simulations/turtlebot3_gazebo/worlds/turtlebot3_houses/waffle.model


注)ロボットの pose(位置と向き) は、tf base_footprint が、 tf odom の pose からの距離と向きの差で決まる。ので、tf odom を起点とした値を使います。
tf odom の x 軸は、ロボットの前、後、 y軸は、ロボットの左右になっていて、Rviz2 の開始時の画面が、90[度] 左に回転しているのがややこしいが、
Rviz2 の開始時の画面を、90[度] 右に回転すれば、理解しやすい。
tf base_footprint は、tf odom から、後ろに 3[m] (x軸で、-3.0) 、左に 1.0[m] (y軸で、+1.0) になります。これが、起動時のロボットの位置になります。
z軸=0.01 は、ちょっと浮かせているのかな? 向きは、変わらず。

tf odom は、tf map からの距離と、向が与えられる。
tf map は、 Map原点(左、下が 0,0) からの距離が、Map データ上から与えられる。
注)全ては、MAP 情報の定義で自由に決まる。
Turtlebot3 Gazebo の MAP 定義が上記のようになっているだけです。

2. (SLAM) Navigating While Mapping の 4- Getting Started Simplification を参考に、

$ ros2 launch nav2_bringup tb3_simulation_launch.py slam:=True
すれば、Gazbo も一緒に起動できるようですが、
なぜか、おんちゃんが試すと、Gazebo が起動途中でだんまりになります。

ROS2 で、Rtabmap_ros を試す。

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[%] 辺りまで進んで、それからずっと進まない。
途中で、なんやら変なエラー表示が出てくる。

このアーカイブについて

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

前のカテゴリはROSです。

次のカテゴリはRaspberry Piです。

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

カテゴリ

ウェブページ

サイトナビ