自作 Turtlebot3 自律走行に向けたプログラム。#15
--- 自作 Turtlebot3 (foxbot_core3) で、屋外での走行 ---
1. 屋外走行に向けて。
いま、おんちゃんの頭の中には、屋外で、自作 Turtlebot3(foxbot_core3) を走らせる為のハード機器の構成をどうするかで、
一杯ぞね。
ロボット自体のコントロールは、C++プログラムから行うので、自律走行になりますが、せめて、ロボットの Start、Stop、
Go back home くらいは、PC タブレットから、WiFi 経由で ロボットに指示したいです。
Windows PC タブレットを安く手に入れて、其れに Ubuntu 20.04 をインストールして、今、部屋で PCに載せている部分を、
それに入れられれば、一番簡単そうですが。
なかなか、安い Windows PC タブレット だと、荷が重いかも?
最終的には、ロボットカーの方に、全部乗っけて、Start/Stop の操作コマンドだけを送る構成にしないといかんぞね。
なんと、Linux デスクトップアプリが動く、 Linuxスマホ - pinePhone がありました。
これなら、簡単にできそう。
取り敢えず、おんちゃんは、メルカリで、 ASUS TransBook T100TA をそれなりの価格で買ったきに、
Xubuntu 辺りが乗りそうなので、これでトライしてみます。
ASUS TransBook T90chiにXubuntuを入れてみました。キーボードドックも使えるようになりました。
T100TA ubuntu インストールは、下記が参考になるみたい。
T100TA_guide.md
OSをふっとばされたタブレットPCにUbuntuを入れてみた
草刈りロボット-自立走行の最近のブログ記事
自作 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
--- 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 Ros2 C++ AutoMap II
--- Ros2 Gazebo Turtlebot3 waffle で、C++プログラムによる自律走行でMap を自動作成する 2。 ---
前回、自作 Turtlebot3 自律走行に向けたプログラム。#11 で、rtabmap_ros with Depth Camera の /map の
、
未知領域 と自由領域の境界を目標にロボットを 自律走行させて、2D Map を自動作成しましたが、今回は、障害物の領域のみを使ってみます。
注1) オペレータは、C++ プログラを起動したあとは、人の操作は必要ありません。すべて、ロボットの自律走行で、Map が作成されます。
最後に、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 -- Ros2 C++ AutoMap
--- Ros2 Gazebo Turtlebot3 waffle で、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 を完成させられるか試してみます。
注1) オペレータは、C++ プログラを起動したあとは、人の操作は必要ありません。すべて、ロボットの自律走行で、Map が作成されます。
最後に、Map の保存だけ操作してください。
注2) Stereo Camera だと、Rtabmap_ros で、床が自由領域として、 /map に出てこないのでこちらは、この方法ではできません。
あくまでも、Depth Camera の場合です。
注3) 今は、Ros2 Humble 版で、waffle になっています。by nishi 2024.3.12
開発環境
Ubuntu Mate 22.04
Ros2 Humble
Navigation2
Gazebo & Turtlebot3 Waffle
自作 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
--- 草地をまんべんなく走行する仕掛け ---
副題: 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 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 による移動距離(距離測定) と 向き測定。
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
自作 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 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 自律走行に向けたプログラム。#5
--- Turtlebot3 SBC(Jetson Nano 2G) で、rtabmap_ros で、Kp/DetectorStrategy=6(GFTT/BRIEF) を使う方法。 ---
副題: OpenCVにcontrib を組み込んで、rtabmap の再ビルド。
自作 Turtlebot3 自律走行に向けたプログラム。#4 の続きです。
rtabmap_ros で、Kp/DetectorStrategy=6(GFTT/BRIEF) を使うには、OpenCV に contrib を組み込まないといけない。とのことなので、
組み込んでみました。結構大変ぞね!!!
参考は、下記ページ。
introlab/rtabmap_ros
開発環境
Jetson Nano 2G JetPack 4 (Ubuntu 18.04)
Ros: Melodic
自作 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 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 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 自律走行に向けたプログラム。
--- 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
- 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
-- 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
-- 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
Turtlebot3 の自作 #9
-- ROS rtabmap_ros 自作 Stereo Camera の搭載 --
ROS rtabmap_ros 自作 Stereo Camera #2 で確認した機能 (rtabmap_ros/Tutorilas/SetupOnYourRobot 2.9 Stereo B) を、
Turtlebot3 自作機(Foxbot_core3) へ、搭載してみます。
自作 Turtlebot3 foxbot_core3
概要:
1) SBC(Jetson nano 2G) では、stereo_node.launch、 turtlebot3_robot.launch を動かす。
2) リモートPC で、stereo_image_proc、stereo_odometry、 rtabmap_ros を動かす。
3) リモートPCで、teleop_key を使って、自作 Turtlebot3 を動かして、Wi-Fi経由で、Stereo 画像をリモートPCで受けて、
Rtabmap_ros で、2D Mapping を作成する。
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
2. SBC(Jestson nano 2G) での準備。
1) 自作 Stereo カメラを、車体に固定します。
2) USBカメラ x 2 を、Jetson nano 2G に接続して、
$ roslaunch uvc_camera stereo_node.launch を実行して、
カメラの左右が正しいことを確認します。
3) Stereo キャリブレーションを行います。