使い方
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の変更一覧
| 項目名 | 所属ノード | オリジナルのデフォルト値 (推定) | 現在設定している値 | 設定変更の理由 |
throttle_scans | slam_toolbox | 1 (間引きなし) | 2 (1つ飛ばし) | CPU負荷を軽減するため、入力されるスキャンデータを半分に間引いて処理するように設定した。 |
transform_timeout | slam_toolbox | 0.2 s | 0.5 s | MQTT経由やWi-Fi通信によるデータ到着のジッター(揺らぎ)や遅延を許容し、TF変換エラーを防ぐために待ち時間を延長した。 |
minimum_laser_range( laser_min_range) | slam_toolbox | 0.0 m | 0.2 m | 使用しているLiDAR (RPLidar A1) の計測限界(約0.15m)以下のノイズをカットし、起動時の警告 (exceeds capabilities) を解消するため。 |
map_update_interval | slam_toolbox | 5.0 s (一般的な設定) | 2.0 s | 地図の更新頻度を調整。動的な環境変化や自己位置推定のフィードバックを適度な頻度で得るため(負荷とのバランス)。 |
scan_queue_size | slam_toolbox | 10 (推定) | 20 | 通信遅延などで一時的に処理が詰まった際に、スキャンデータがバッファ溢れで消失するのを防ぐため、キューを大きめに確保した。 |
resolution | slam_toolbox | 0.05 m | 0.05 m | 家庭や一般的な屋内環境に適した標準的な解像度を採用(変更なしだが、重要なベースライン)。 |
solver_plugin | slam_toolbox | solver_plugins::CeresSolver | CeresSolver | Google Ceres Solverを使用。グラフ最適化の安定性と精度が高いため(標準的だが明示的に指定)。 |
tf_buffer_duration | slam_toolbox | 30.0 s | 30.0 s (Launchで60.0sへ延長) | ループクロージャ計算時などに過去のデータを参照できるよう、十分な長さのTFバッファを確保。時間同期エラー対策としても機能。 |