ROS2の最近のブログ記事

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 20.04
ros2: foxy galactic
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 オプション

2) SBC
Jetson Nanao 2G
Jet Pack4 .x and Ubuntu 20.04
ros2: foxy galactic
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 で、ESP32(Arduino) を使う。

ROS2 で、ESP32(Arduino) を使う。
--- Turtlebot3 の自作 を、 ROS2 に移植する。 ---
前回の、自作 Turtlebot3 自律走行に向けたプログラム。#15 で、ROS の限界を感じたので、ROS2 を試す事にしました。

1. 環境。
PC
Ubuntu Mate 20.04
ros2: foxy galactic
SBC
Jetson Nano 2G
JetsPack 4.x and Ubuntu 20.04
ros2: foxy galactic

注1) foxy navigation2、teb_local_planner には、不具合があるので、パッチが必要になる。
注2) ubuntu 20.04 で、galactic が使えるので、こちらの方が良い。by nishi 2023.1.21
しかし、なぜか、galactic 版は、EOL になっているみたい。
foxy/Releases

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

2. ros2arduino を試す。
どうやら、こちらは、開発が止まっているようです。
ESP32 にサンプルを入れて試してみましたが、うまく行かないので、止めました。
ESP32 Serial は、まだ使えないままの様です。

上記をテストするのに、eProsima Micro XRCE-DDS が必要な様で、試しにインストールしてみましたが、
次の micor-ROS を試す段階で、/usr/local/lib/libfastrtps.so /usr/local/lib/libfastrtps.so.2.8.0 が競合するようで、
削除する事にしましたが、あいにく make uninstall が無いので、削除するのが大変でした。
$ sudo make install すると、Micro-XRCE-DDS-Agent/build/install_manifest.txt にインスしたファイル一覧があるので、
Shell で、これを読みこんで、削除しました。

uninstall_from_files.sh


$ sudo sh ./uninstall_from_files.sh
$ sudo ldconfig /usr/local/lib

自作 Turtlebot3 自律走行に向けたプログラム。#12 AutoMap II
--- Gazebo Turtlebot3 burger で、C++プログラムによる自律走行でMap を自動作成する 2。 ---

前回、自作 Turtlebot3 自律走行に向けたプログラム。#11 で、rtabmap_ros with Depth Camera の /map の 、
未知領域 と自由領域の境界を目標にロボットを走行させて、2D Map を自動作成しましたが、今回は、障害物の領域のみを使ってみます。

1. 開発環境
PC
  Ubuntu Mate 22.04
  ROS2:humble
  Gazebo Turtlebot3 with Depth Camera、Rtabmap_ros
注1) 今は、Ros2 Humble 版で、waffle になっています。by nishi 2024.3.12

2. アルゴリズム。
1) /map から、障害物のみを2値画像に変換して、それを、ブロブ化します。
2) 上記ブロブの外周を辿って、一定間隔でアンカーを付けて、そこへロボットを行かせて、/map を更新します。
注1) 『OpenCVによる画像処理入門』(講談社) P157 周囲長 を求める処理を参考にします。
3) ロボットを向かわせる地点は、上記アンカーから、半径Rのマスク処理を、今度は、非障害物に対して行って、その重心の方向へ、ロボットを動かした点とします。
4) ロボットを向かわせている途中、到着点が、障害物に含まれるか近接した場合は、その場所は、止めて、ロボットを次の候補地に向かわせます。
5) ロボットを向かわせる候補地は、ロボットから近い順に選びます。
6) 少し大きめのブロックで、/map を分割して、一度行った所はチェックして、次からは行かないようにします。

アルゴリズムは、簡単じゃ、後は、プログラムで試すのみじゃ。
当初のアルゴリズムは、ちょっと無理だったので、変更したぞね。by nishi 2022.8.16

但し、オンちゃんの GPU が壊れたのでちょっと、意気消沈しちょります。
GPUが買える迄、CPU オンリーで試すしかないぞね!!

その後、Humble 版になったら、非GPU でも、問題なくなりました。

自作 Turtlebot3 自律走行に向けたプログラム。#11 -- AutoMap
--- Gazebo Turtlebot3 burger で、C++プログラムによる自律走行でMap を自動作成する。 ---

自作 Turtlebot3 自律走行に向けたプログラム。#10 で、Gazebo & Turtlebot3 burger with Depth Camera and Rtabmap_ros だと、
床が自由領域だと判定できるのが判ったので roslaunch turtlebot3_gazebo turtlebot3_house.launch で、
Burger を起動して、全て C++プログラムで、Houseの中の、自由領域と未知領域の境界を選んで自由に走らせて、
Rtabmap_ros で、Map を完成させられるか試してみます。

注) Stereo Camera だと、Rtabmap_ros で、床が自由領域として、 /map に出てこないのでこちらは、この方法ではできません。
あくまでも、Depth Camera の場合です。
注2) 今は、Ros2 Humble 版で、waffle になっています。by nishi 2024.3.12

開発環境
Ubuntu Mate 22.04
Ros2 Humble
Navigation2
Gazebo & Turtlebot3 Waffle

このアーカイブについて

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

前のカテゴリはROSです。

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

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

カテゴリ

ウェブページ

サイトナビ