自作ロボットカーで地図を作る

使い方

1.GMKの電源を入れてMQTTを立ち上げる
2.ロボットカーに電池をつなぎ起動する(LEDが赤全灯から青1個点灯に変わる)
3.コントローラをBluetoothでMiNI2に接続する
4.MiNI2からMy_Mavi.pyを起動する
5.コントローラの三角ボタンを押して、/scanと/odomのパブリッシュを開始する
6.DELL2にリモートでログインし、地図保存用のターミナルを起動する
7.DELL2で使用するROSのノードをまとめて起動する
  ros2 launch My_Navi_basic my_slam_launch.py                  
8.下の「地図を作るときのロボットの動かし方」に従って地図を作る
9.出発点に戻って地図が完成したら別ターミナルから地図を保存する
  ros2 run nav2_map_server map_saver_cli -f ~/My_Navi_ws/src/My_Navi_basic/maps/my_map # マップ名は随時変更する

地図を作るときのロボットの動かし方

============================================================
 SLAM地図作成テクニック:ズレを防ぐ「操縦の極意」
============================================================

地図作成(SLAM)の精度は、パラメータ設定だけでなく「ロボットの動かし方」で8割決まります。
地図がズレ始めた、あるいはズレそうな時は、以下の動作を徹底してください。

【1. 「小さなループ」を何度も描く(最重要)】
一本道で奥へ進むのは厳禁です。
こまめに「知っている場所(スタート地点や作成済みのエリア)」に戻る動きをしてください。

× 悪い動き: スタート → 廊下 → 部屋A → 部屋B → 部屋C(ずっと片道切符)
○ 良い動き: スタート → 廊下 → 一度スタートに戻る → 廊下 → 部屋A → 廊下に戻る

[理由] ロボットが「知っている場所」に戻ると、蓄積された位置ズレが一気に補正されます(ループクロージャ)。

------------------------------------------------------------
【2. 回転は「超スロー」で行う】
直進は多少速くても良いですが、旋回(回転)だけは「そろ〜り」と行ってください。

[理由] 急旋回するとLiDARの前後画像が重ならなくなり、ロボットが「何度回ったか」を見失います。
これが「壁が斜めになる」「部屋が傾く」最大の原因です。

------------------------------------------------------------
【3. 廊下などの単純な道は「千鳥足」で進む】
特徴のない真っ直ぐな廊下では、中央を直進せず、少し「ジグザグ」に走るか、壁に寄ったり離れたりしながら進んでください。

[理由] 景色が変わらない場所(金太郎飴状態)では、ロボットは「進んでいるのか止まっているのか」分からなくなります。
斜めに動くことで、壁との距離変化をLiDARに認識させやすくなります。

------------------------------------------------------------
【4. 新しい場所では「振り返り」確認をする】
未探索エリアに入って数メートル進んだら、ゆっくり180度振り返り、今まで通ってきた道(既知の地図)をLiDARに見せてください。

[理由] 「新しい地図」と「確実な古い地図」をのりしろのように繋ぎ合わせることで、地図の結合が強固になります。

------------------------------------------------------------
【5. 危ないと思ったら「止まって待つ」】
RViz上でスキャン(赤い点)と地図がズレそうに見えたら、即座に停止して数秒間(5〜10秒)待機してください。

[理由] 停止中もSLAMは計算を続けています。止まっている間に確率計算が収束し、ズレが自然に直ることがあります。
ズレたまま走り続けるのが一番の悪手です。

============================================================
【次回の走行プラン(推奨手順)】

1. [開始] スタート地点で、まず「その場でゆっくり1回転」する(初期位置の景色を覚える)。
2. [進行] 直進して少し地図ができたら、旋回してスタート地点を一瞬見る。
3. [探索] 新しいエリアへ進むときは「進む → 止まる → 振り返る → 進む」を繰り返す。
   (だるまさんが転んだ作戦)
4. [帰還] 可能な限り、最後はスタート地点に戻ってきて終了する。

============================================================

mapper_params_online_async.yamlの変更一覧

項目名所属ノードオリジナルのデフォルト値 (推定)現在設定している値設定変更の理由
map_update_intervalslam_toolbox5.0 s5.0 s以前は2.0sに短縮していたが、CPU負荷が高く処理落ちの原因となっていたため、標準値に戻して負荷を下げた。
transform_timeoutslam_toolbox0.2 s0.5 sMQTT/Wi-Fi経由でのデータ到着ジッター(揺らぎ)を許容し、TF変換エラーによる地図作成中断を防ぐため。
minimum_time_intervalslam_toolbox0.0 s (制限なし)0.5 s【負荷対策】 スキャンデータが高速に来ても、最低0.5秒は間隔を空けて処理することで、PCの計算リソースを節約する。
max_laser_rangeslam_toolbox20.0 m (可変)12.0 m使用している LiDAR (RPLidar A1) の計測限界距離に合わせ、無効な遠方データを計算から除外するため。
stack_size_to_useslam_toolbox40000000 (一部Ver)40000000マップのシリアライズ(保存・変換)時にメモリ不足でクラッシュするのを防ぐため、十分なスタックサイズを明示的に確保。
tf_buffer_durationslam_toolbox30.0 s30.0 sWi-Fi遅延環境下でもループクロージャ(位置補正)計算に必要な過去のTFデータを確実に参照できるようにするため。
odom_frameslam_toolboxodomodomEKF (ekf_node) が出力するフレーム名と厳密に一致させ、高精度なオドメトリを利用するため(明示指定)。
minimum_travel_distanceslam_toolbox0.5 m0.1 m狭い室内での移動を想定し、少し動いただけで細かく地図を更新するようにして、詳細な形状を捉えやすくした。
minimum_travel_headingslam_toolbox0.5 rad0.1 rad回転時の更新頻度を高め、旋回中の形状崩れ(壁の二重化など)を防ぐため。