2_車両の自己位置推定と地図作成(SLAM)
実現の考え方
Cartographer アルゴリズムを用いて、シャーシカーが置かれた未知の環境の地図を作成しながら同時に自己位置推定を行い、最後にこの地図を保存します。この地図は次の節のシャーシカーのナビゲーションで使用します。

シーン図
操作手順
ステップ 1:回路を接続します。
ステップ 2:プログラムを実行して動作を確認します。具体的な操作手順は以下のとおりです。
-
「Ctrl + t」でターミナルを開きます。
-
開いたターミナルから ssh で車両に接続します(パスワードは uni)。
ssh uni@192.168.xx.xx
- 下位ドライバをリモートで起動します。ターミナルに次のコマンドを入力してください。
roslaunch device device_actual.launch
-
開いているターミナルで新しいウィンドウを開きます。ショートカットキーは「CTRL + shift + T」です。
-
新しく作成したウィンドウでキーボード操作サービスを起動します。ターミナルに次のコマンドを入力します。
rosrun teleop_twist_keyboard teleop_twist_keyboard.py
Enter キーを押すと、次のような画面になります。

- LiDAR データのパッケージ(bag)を記録します。ローカルで新しいターミナルを開き、次のように入力します。
roslaunch slam uni_record_bag.launch

Enter キーを押すと、次のような画面になります。

- キーボード操作用のコマンドターミナルをクリックし、車両を遠隔操作して環境内を一周させます。走行が終わったら、3 つのターミナルをそれぞれ終了します。
注意:ここで遠隔操作を開始した位置を覚えておいてください。この後のナビゲーションでは、車両をこの開始位置に置く必要があります。

- パッケージデータを処理します。車両に接続した Raspberry Pi のターミナルで次のように入力します。
roscore

- Enter キーを押した後、

ローカルのターミナルで次のように入力します。
roslaunch cartographer_ros uni_process_minimap.launch

Enter キーを押すと:処理中 1

処理中 2

処理中 3

処理が完了するまで待ちます。

- 地図作成を停止します。ターミナルに次のコマンドを入力してください。
rosservice call /finish_trajectory 0
ローカルのターミナルで次のように入力します。

Enter キーを押した後。

- 処理用パッケージを作成します
開いているターミナルで新しいウィンドウを開き、次のように入力します。
rosservice call /write_state "{filename: '${HOME}/uni_robot/src/slam/bag/data.bag.pbstream', include_unfinished_submaps: "true"}"

Enter キーを押した後。

- 地図ファイルを生成します
ローカルのターミナルで次のように入力します。
roslaunch cartographer_ros uni_create_minimap.launch

Enter キーを押した後。

- 生成された地図ファイルを確認します。
下図のように、赤枠内のフォルダアイコンを左クリックして開き、緑枠内のファイルパスを探すと、最後に青枠内に地図ファイルが表示されます。

その後、「Ctrl」+「C」でローカルの 2 つのターミナルと Raspberry Pi のターミナルをそれぞれ終了します。

その後、不要なターミナルは閉じてかまいません。

ドキュメント