自作 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}]
草刈りロボットの動きとしては、まずいので、このリカバリー指定を外してみました。
1. おんちゃんの、自作Turtlebot3 の rtabamap_ros の起動 launchの move_base の起動の指定は、下記になっています。
2. move_base.launch をチェック。
catkin_ws/src/turtlebot3/turtlebot3_navigation/launch/move_base.launch
3. move_base_params.yaml でパラメータを読み込んでいるみたいなので、
このファイルの中で、~recovery_behaviors を List 形式で指定します。
catkin_ws/src/turtlebot3/turtlebot3_navigation/param/move_base.params.yaml
リカバリー動作に、このくるくる回るのは、必要なのだろうか?
ちょっと、様子見じゃ!!
なんの事はない、wiki.ros.org/rtabmap_ros/Tutorials/StereoOutdoorNavigation の
costmap_common_params.yaml: にちゃんと記述がありました。
4. あと、move_base に 障害物の判定方法に、scan(LiDar Sensor) から、Stereo Camera に変更したことを伝えないといけないです。
これも、上のページの local_costmap_params.yaml: に記述があります。
おんちゃんは、下記ファイルに記述しました。
turtlebot3/turtlebot3_navigation/param/costmap_common_params_waffle.yaml
min_obstacle_height 、 max_obstacle_height で、障害物判定の高さ範囲をしてやらないといかんぞね!
topic: planner_cloud が何処かと言うと、
rtabmap_ros/obstacles_detection ノードの、obstacles を remap したものになる。
これが、また、stereo_nodelet -> stereo_image_proc.launch -> rtabmap_ros/point_cloud_xyz -> rtabmap_ros/obstacles_detection と繋いでやっと取れます。
オリジナルのサンプルは、az3_mapping_robot_stereo_nav.launch. になります。
おんちゃんの、自作 Stereo Camera の場合は、下記になっちょります。
uvc_camera の stereo_nodelet.launch で、自作 Stereo Camera の映像を取り込みます。
stereo_nodelet.launch で、取り込めるようになるまで、結構大変じゃった!!
注) stereo_nodelet.launch の プロセス Name が、 /camera_process なので、
以下のノードレットも、それに合わせます。
これが、最初は判らずに、苦労しました。コッホ!!
後、<group></group> に、名前属性をつけたらいかんぞね!!。このまま使うのじゃ。
5. rtabmap_ros with Stereo Camera の時の、障害物判定の高さを制限する方法について。
最近判った事ですが、
rtabmap_ros で障害物の高さを制限するには、
Grid/MaxObstacleHeight=1.0
を使います。by nishi 2022.7.13
部屋の中で、低い天井が障害物と判定されて、rtabmap_ros の 2D Map 上に障害物と表示される場合は、有効です。
例えば、Gazebo で、roslaunch turtlebot3_gazebo turtlebot3_house.launch で隣の部屋への通路が、障害物で埋まってしまう場合。