ROSの最近のブログ記事

自作 Turtlebot3 自律走行に向けたプログラム。#14

自作 Turtlebot3 自律走行に向けたプログラム。#14
--- 自作 Turtlebot3 (foxbot_core3) で、GPS( gysfdmaxb ) を使ってみる。 ---

手持ちに、gysfdmaxb があったので、これを使って、自作 Turtlebot3 (foxbot_core3) の GPS として試してみました。
みちびき(QZSS) の受信ができると言うので、ずっと前に買って、少し試して、そのままだったのですが、
自作 Turtlebot3 自律走行に向けたプログラム。#13 で、Gazbo Trutlebot3 で、GPSプラグインを試したので、こんどは、
実機でどうなのかと試してみました。
ただ、測位確度:2m の様なので、期待は、していませんが、robot_localization/ekf_localization_node で、
Fusionしたらどうなのか、試してみました。

結論から言えば、部屋の中で、2[M] 行って、元の位置へ帰ってくるテストでは、なぜかうまく動いているようです。
次は、屋外で、100[M] 位プログラムで自動走行させてみたくなりました。

さて、ROSでの使用方法ですが、インターネットで、ros gysfdmaxb で検索しても出てこないので、結局自分で作る事にしました。

GPSデータをrostopicとして取り扱う 辺りを参考に github.com/KumarRobotics/ublox をベースに作ってみました。
でも、却って、結構大変でした。
callback ルーチンの使い方と、boost::asio::io_service、boost::asio::serial_port を使った Serial I/O が初めてだったので、
それを真似して、C++ の勉強にはなりました。

開発環境
Remote PC:
 Ubuntu Mate 20.04
 ros noetic

SBC:
Jetson Nano 2G
 Ubuntu 20.04 and Jetpack 4.0
 ros noetic
 Moter Controll : ESP32
 IMU、USB Serial Stereo Camera
 rtabmap_ros、move_base、ebnad_local_planner

自作 Turtlebot3 自律走行に向けたプログラム。#13

自作 Turtlebot3 自律走行に向けたプログラム。#13
--- Gazebo Turtlebot3 burger で、GPS を使ってみる。 ---

ROS IMUとGPSのGazeboプラグインを使う に、Gazebo で、GPS を使う例があったので、試してみました。

1. GPS プラグインの組み込み。
パッケージ版があったので、おんちゃんは、こちらををつかってみました。

$ sudo apt install ros-noetic-hector-gazebo-plugins

2. URDF の作成。
URDF は、上記ページにも例がありますが、おんちゃんは、以前、IMU、Camera を組み込んだ例に習って、今回も作りました。

catkin_ws/src/turtlebot3/turtlebot3_description/urdf/gps_macro.xacro

注) 使えるパラメータは、hector_gazebo_plugins に、記載があります。
注2) frameId
<frameID>${prefix}_link</frameID> --- Bad
<frameId>${prefix}_link</frameId> --- OK

自作 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

自作 Turtlebot3 自律走行に向けたプログラム。#10

自作 Turtlebot3 自律走行に向けたプログラム。#10
--- local_costmap をプログラムから直接アクセスして、障害物の判定に使う ---

自作 Turtlebot3 自律走行に向けたプログラム。#9 で、move_base を使わないで、
cmd_vel を操作して、ロボットを移動させる事ができたの、今回は、Turtlebt3 の local_costmap をc++ プログラムから、
直接アクセスして、障害物の判定に使う方法を考えてみます。

と言うのも、Single USB Stereo Camera から stereo_image_proc -> rtabmap_ros/point_cloud_xyz を通すと、
障害物の PointCloud2 が得られるので、
それを、 local_costmap の入力に与えると、 Stereo Camera による障害物の判定結果が、自動的に、local_costmap の
出力に出てきます。

1. 開発環境。
Turtlebot3
Gazebo Sumilation または、自作 Turtlebot3 (foxbot_core3.ino)

PC
 Ubuntu Mate 20.04
 ROS noetic
 rtabmap_ros
注) 今回から、ROS noetic での開発になります。

SBC
 Jetson Nano
 Single USB Stereo Camera
 JetPack4.6 and Ubuntu 20.04
 ROS noetic
 rtabmap_ros

または、
Gazebo & Turtlebot3 burger with Stero Camera

自作 Turtlebot3 自律走行に向けたプログラム。#9

自作 Turtlebot3 自律走行に向けたプログラム。#9
--- 草地をまんべんなく走行する仕掛け ---
副題: move_base を使わずに、Python 、C++ から、/cmd_vel を使ってロボットを動かす。また、C++ から、global_planner、
local_palnner を直接使って、Navigationを行う。

1. 前方の1平米を、障害物が無いことをチェックして、隈なく通る。
プログラムを作るにあたっての考察。
ほとんど、お掃除ロボットの動きぞね。

実機環境
1) ロボットカー。
自作 Turtlebot3(foxbot_core3)
 ESP32(モータ制御、IMUアクセス) + Jetson Nano 2G(SBC)+ Single Stero USB Camera
 ROS
 WiFi
ハードの制作は、Turtlebot3 自作
ソフトインストールは、
関連する git
i) tosa-no-onchan/foxbot_core3
ii) tosa-no-onchan/lib-nishi3
ii) tosa-no-onchan/rtabmap_ros_my
iv) tosa-no-onchan/turtlebot3_navi_my
v) tosa-no-onchan/uvc_camera_single

2) ROS PC
 Ubuntu Mate 20.04
 WiFi Lan
 ROS:noetic

アルゴリズム
i) rtabmap_ros を、Mapping モードで起動。
ii) ロボットを 360度 1回転させて、周囲の3D & 2D マップ を rtabmap_ros で作成する。
iii) Mapping か完了したら、rtabmap_ros をそのまま、Navigation モードに切り替えて。
iv) 作成された、2Dマップから、前方1平米だけを、ロボットの横幅サイズのブロックで分割して、その中から通行できるブロックを全て順繰り通る。
この部分は、以前 Gazebo 草刈りロボット で試した処理が使えるぞね。
Python Scripts は、
/tosa-no-onchan/turtlebot3_navi_my/tree/main/scripts の、

自作 Turtlebot3 自律走行に向けたプログラム。#8

自作 Turtlebot3 自律走行に向けたプログラム。#8
--- Turtlebot3 SBC(Jetson Nano 2G) で、rtabmap_ros で、色々試す。#2 ---
補記) move_baseのローカルプランナーを変更する 。

自作 Turtlebot3 自律走行に向けたプログラム。#7 の続きです。

Spark Fun DMP 6軸フュージョンをキャリブレーション でロボットの前傾姿勢 (IMUの観測値) の補正が出来なくて、
IMUの取り付けスペーサーの両面テープで、前傾を調整して、それから、ロボットを平らな所に置いて、
$ rostopic echo /odom_fox | more
で、見てみると orientation:y = 0.013
で少し前傾しているので、最後の手段、foxbot_core3.ino で、むりやり、q[1] -= 0.013
をして、やっと、前傾がなくなりました。

注) ここは、クォータニオンの回転の計算をしないといけないようです。
クォータニオン(四元数)を使用して座標を回転させる
P2 = Q x P x 共役Q
クォータニオン積を2回行う様です。
今は、手抜きの計算なので、ロボットが、後ろ、179[Deg] から -179[Deg] へ回転する時、変にぶれます。by nishi 2022.6.12

後、ロボットの起点を平らな所に移して、これで、rtabmap_ros で試すと、Rviz の画面で、以前ほどは、沈み込はなくなりました。
ただ、高さの計測が出来ているかと言えば、まだまだその精度には、なっていません。

ROS IMU による移動距離(距離測定) と向き測定

ROS IMU による移動距離(距離測定) と 向き測定。

IMU 6軸フュージョンを使って、距離と向きを測定します。

このページは、自作 Turtlebot3 自立走行に向けたプログラム。#7 の、16. 再挑戦。 以降を、実際のやり方に向けて、改めて記述したものです。
今回のプログラムの考え方を書いているの、一度ご覧ください。

IMU(ICM-20948) 6軸センサー(加速度、ジャイロ)値を、ESP32で取り込んで、6軸フュージョン(MadgwickAHRS) で、
クオータニオンを算出して、それを元に、加速度センサーの読み取り値から、1G の影響をキャンセルした正味のAccを算出した、加速度と時間から速度、移動距離を出して、
ロボットの座標系から、ROS の基準座標系に変換した位置と姿勢データを、ESP32 Wi-Fi で、リモートPC 上のROS サーバーへ送って、
リモートPC上の Rviz を用いて、3D での姿勢と移動距離を見える化します。

良くYouTube で見かける、IMU を手に持って、空中で動かして、それに連れて、PCのモニターの中の物が3Dで動く、やつです。
注) 但し、あまり完成度は、高くありません。ぜひ、ご自分で完成度を上げっていてください。by nishi 2022.5.13
注2) 基準座標系: ロボットの開始時点の座標。ROS の TF で言えば、odom になります。

開発環境
1. 開発 PC
 Ubuntu Mate 18.04
 Visual Studio Code + Platform I/O IDE
   ESP32 Arduino Framework
 Arduino IDE ( こちらは、Tools -> Serial Plottter を使う為 )

2.実行環境
1) PC / ROS Server
 Ubuntu Mate 18.04
 WiFi 環境が必要です。
2) SOC
  ESP32
  Wi-Fi Ros Serial通信
  TTL-Serial : デバッグ用に使います。テストが終われば、不要です。
3) IMU
 Spark Fun ICM-20948
 SPI 接続

3. ハード構成
ESP32端子 SPI & TTL-Serial
IO1(TxD0) ---- Rx
IO3(RxD0) ---- Tx
IO23(MOSI) ---- MOSI(DA/SDA) and with 1K Pull Up
IO19(MISO) ---- MISO(ADO) and with 1K Pull Up
IO18(SCLK) ---- SCLK(CL/SCL) and with 1K Pull Up
IO5(CS) ---- CS(SS) and with 1K Pull Up
IO17 ---- LED

Single USB Stereo Camera を試す。

Single USB Stereo Camera を試す。

OAK-D-Lite が、rtabmap_ros with Depth Camera で、役立たないので、
最近購入した、HBV-1780-2 S2.0 を 使ってみました。
当初、使い方が判らなかったので、困りました。

Web で検索して、画像サイズの指定のしかたで、
1画像に、Stereo 画像の、左右を一緒に Capture して送って来るみたいです。
640x240 -> 320x240 Stereo

下記に、記述がありました。
https://www.programmersought.com/article/17263978832/

Python のサンプルも、下記にありました。

Jetson Nano 2G ROS rtabmap_ros with Oak-D-Lite

Jetson Nano 2G ROS rtabmap_ros with Oak-D-Lite

いよいよ本題の、rtabmap_ros で、Oak-D-Lite(depthai) を使って見ることにします。
自作 Turtlebot3(foxbot_core3) に組み込んで、確認してみます。

1. 環境:
自作 Turtlebot3(foxbot_core)
1) SBC
Jetson Nano 2G
ros: melodic
arduino: ESP32

2) リモートPC
Ubuntu Mate 18.04
ros: melodic

2. 処理の流れ。
1) SBC での処理。
i) depthai_examples の stereo_node.launch の、stereo_publisher node の部分を動かして、
/stereo_publisher/stereo/depth を publish させます。
ii) rtabmap_ros で、上記、 /stereo_publisher/stereo/depth を取り込んで、3D-Map をpublish させる。
2) リモートPC の Rviz で動作を確認します。

Jetson Nano 2G ROS Oak-D-Lite

Jetson Nano 2G ROS Oak-D-Lite

やっと、OAK-D-Lite を購入できたので、
Jetson Nano 2G の ROS(Melodic) で、Oak-D-Lite(depthai-ros) を使えるようにしてみました。
参考は、 luxonis / depthai-ros です。

環境:
1) 実行 SBC
Jetson Nano 2G: jetpack4 (ubuntu 18.04 相当)
OpenCV4.1.1
注) OpenCV4.x が必要とのことです。
Jetson Nano 2G OpenCV4.1.1 Build を参考にして下さい。
Ubuntu 18.04 は、OpenCV3.2 です。
後、他のROSパッケージも、OpenCV4.x 対応にしないと行けないので、下記を参考にして下さい。
自作 Turtlebot3 自立走行に向けたプログラム。#5
2) Rviz の確認用 リモートPC
Ubuntu Mate 18.04
ROS:melodic
注) こちらにも、同じように、depthai-core、 depthai-ros をインストールします。
但し、OpenCV3.2 なので、完全にはインストール出来ませんが、Rviz での確認に必要になります。

自作 Turtlebot3 自律走行に向けたプログラム。#7

自作 Turtlebot3 自律走行に向けたプログラム。#7
--- Turtlebot3 SBC(Jetson Nano 2G) で、rtabmap_ros で、色々試す。 ---

自作 Turtlebot3 自律走行に向けたプログラム。#5 の続きです。

14. たまに、IMU データの音信不通がありますが、それでも大夫安定して動く様になったので、 rtabmap_ros の使い込みをしています。
その中で、判った事を書いています。
注) IMU データの音信不通 の原因がわかりました。/odom_fox の出力を、camera_info に同期して出す
様に組み込んだ処理にバグがあるようです。
いまは、この機能を外して使用します。by nishi 2022.5.18

1)
RGBD/OptimizeMaxError=3.0(default) - 3.3
この値によって、tf-odom の補正の量が左右されるみたいです。
デフォルトの 3.0 より大きめの 3.3 にしています。動かしていて、ワーニングが出たので少しだけ大きくしました。
試しに、2.1 など、小さくして試しましたが、そうすると、tf-odom の補正がされなくなりす。
Rviz で見ていると、tf-odom が補正されると、黄色の線が表示されるようです。
tf-odom が補正されないと、2M 行って帰ってきた時、出発点から、随分ずれて止まります。

自作 Turtlebot3 自律走行に向けたプログラム。#6

自作 Turtlebot3 自律走行に向けたプログラム。#6
--- Turtlebot3 SBC(Jetson Nano 2G) で、rtabmap_ros で、move_base の ~recovery_behaviors を変更してみる。 ---

自作 Turtlebot3 で、Stereo Camera を使って、rtabmap_ros で、Active SLAM を試していると、突然ロボットがクルクルまわりだす。
どうやら、move_base の、~recovery_behaviors default List の中の、
{name: rotate_recovery, type: rotate_recovery/RotateRecovery}
の指定の所為みたいです。

wiki.ros.org/move_base
~recovery_behaviors (list, default: [{name: conservative_reset, type:
clear_costmap_recovery/ClearCostmapRecovery}, {name: rotate_recovery, type:
rotate_recovery/RotateRecovery}, {name: aggressive_reset, type:
clear_costmap_recovery/ClearCostmapRecovery}]

草刈りロボットの動きとしては、まずいので、このリカバリー指定を外してみました。

自作 Turtlebot3 自律走行に向けたプログラム。#4

自作 Turtlebot3 自律走行に向けたプログラム。#4
--- Turtlebot3 Navigation の move_base で base_footprint の代わりに、base_link(base_link0) を使う方法。 ---

自作 Turtlebot3 自律走行に向けたプログラム。#3 の続きです。

前回の方針転換前のプログラムの解決方法が判ったので掲載します。

前回は、下記エラーが出て navigation がまるきり反応しなかった点への対策です。

最終的な問題が、turtlebot3/turtlebot3_description/urdf/turtlebot3_waffle.urdf に、TF Tree のすべての親(root)を、
base_footprint から定義している点に在りました。ここを変更しないといけないです。
今回は、ちょっと、修正箇所が多くなります。

1. turtlebot3_waffle.urdf の変更。
turtlebot3_waffle.urdf を turtlebot3_waffle_nishi.urdf にコピーして変更します。

注) base_footprint を base_link0 に変えます。

自作 Turtlebot3 自律走行に向けたプログラム。#3

自作 Turtlebot3 自律走行に向けたプログラム。#3
--- 自作 Turtlebot3 Rtabmap_ros で、Odometry と IMU のフュージョンの問題点。 ---

自作 Turtlebot3 自律走行に向けたプログラム。#2 の続きです。

前回、2 [M] 行って帰って来た時、ロボットの向きが、少しずれて止まる。
base_footprint が真正面になっていて、base_link が少し真正面よりずれています。
ロボットの向きは、base_link と一致していて、move_base が、base_link を基準に停止してくれれば、完璧ですが、
move_base が、base_footprint を基準に停止しているような気がします。
まで書きましたが、その続きです。

色々試したのですが、turtlebot3_navigation/launch/move_base.launch のパラメータで、
odom_topic:=/stereo_camera/fusion/odom を指定しても、move_base には、反映されないようです。
試しに、odom_topic:=/odom_nothing 等、適当に指定しても影響なしです。

自作 Turtlebot3 自律走行に向けたプログラム。#2

自作 Turtlebot3 自律走行に向けたプログラム。 #2
--- 自作 Turtlebot3 Rtabmap_ros で、Odometry と IMU のフュージョンを行う。 ---

前回、自作 Turtlebot3 自律走行に向けたプログラム で、Odometry と IMU のフュージョンが必要だと痛感したので、
今回は、それを試してみます。

Odometry と IMU のフュージョンに関しては、下記を参考にしています。
ROS講座61 位置情報の統合

1. 環境
1)リモートPC
Ubuntu Mate 18.04
ROS: Melodic
IP:192.168.1.170

2)TurtleBot3 SBC
Jetson Nano 2G
Wi-Fi Lan
IP:192.168.1.37
ROS:Melodic
USB Camera: Logi Cool C270 x 2
IMU:ICM-20948 / Switch Science SparkFun のこちら

自作 Turtlebot3 自律走行に向けたプログラム。

自作 Turtlebot3 自律走行に向けたプログラム。
--- Python Script で 自作 Turtlebot3 を動かしてみる。 ---

Turtlebot3 の自作 #12 で、自作ステレオカメラ & rtabmap_ros & Navigation が出来るようになったので、
それを使って、自律走行に向けたプログラムの試作をしてみます。

常套手段として、Python プログラム で自作 Turtlebot3 を動かしてみます。

1. 環境
1)リモートPC
Ubuntu Mate 18.04
ROS: Melodic
IP:192.168.1.170

2)TurtleBot3 SBC
Jetson Nano 2G
Wi-Fi Lan
IP:192.168.1.37
ROS:Melodic
USB Camera: Logi Cool C270 x 2

Turtlebot3 の自作 #12

Turtlebot3 の自作 #12
- ROS rtabmap_ros 自作 Stereo Camera で MappingAndNavigationOnTurtlebot を試す 2 --

Turtlebot3 の自作 #11 で作成したプログラムを、今回は、少し改造してみます。
前回は、stereo_node.launch を除いて、全て リモート PC上 で rtabmap_ros を動かしました。
今回は、確認の意味を込めて、SBC 上で、rtabmap_ros を動かしてみたいとお思います。
1. SBC で動かす、node、launch。
turtlebot3_bringup/turtlebot3_robot.launch
stereo_node.launch
stereo_image_proc
rtabmap_ros/rtabmap

2. remote PC で動かす、node、launch。
roscore
turtlebot3_bringup/launch/turtlebot3_remote.launch
turtlebot3_navigation/launch/move_base.launch

自作 Turtlebot3 foxbot_core3

3. 環境
1)リモートPC
Ubuntu Mate 18.04
ROS: Melodic
IP:192.168.1.170

2)TurtleBot3 SBC
Jetson Nano 2G
Wi-Fi Lan
IP:192.168.1.37
ROS:Melodic
USB Camera: Logi Cool C270 x 2

Turtlebot3 の自作 #11

Turtlebot3 の自作 #11
-- ROS rtabmap_ros 自作 Stereo Camera で MappingAndNavigationOnTurtlebot を試す --

今回は、自作 Turtlebot3 に搭載した、自作 Stereo Camera を使って、
rtabmap_ros/Tutorials/MappingAndNavigationOnTurtlebot を試してみます。
上記ページの 6.1 Turtlebot3 on Melodic and Noetic を試してみます。

これが、上手く動けば、rtabmap_ros で、自作 Stereo Camera を使って、Mapping しながら、ナビゲーションができるようになります。

自作 Turtlebot3 foxbot_core3

1. 環境
1)リモートPC
Ubuntu Mate 18.04
ROS: Melodic
IP:192.168.1.170

2)TurtleBot3 SBC
Jetson Nano 2G
Wi-Fi Lan
IP:192.168.1.37
ROS:Melodic
USB Camera: Logi Cool C270 x 2

Turtlebot3 の自作 #10

Turtlebot3 の自作 #10
-- ROS rtabmap_ros 自作 Stereo Camera で StereoOutdoorMapping を試す --

今回は、自作 Turtlebot3 に搭載した、自作 Stereo Camera を使って、 rtabmap_ros/Tutorials/StereoOutdoorMapping を試してみます。

自作 Turtlebot3 foxbot_core3

1. 環境
1)リモートPC
Ubuntu Mate 18.04
ROS: Melodic
IP:192.168.1.170

2)TurtleBot3 SBC
Jetson Nano 2G
Wi-Fi Lan
IP:192.168.1.37
ROS:Melodic
USB Camera: Logi Cool C270 x 2

このアーカイブについて

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

前のカテゴリはPytorchです。

次のカテゴリはROS2です。

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

カテゴリ

ウェブページ

サイトナビ