SLAMノードを実行

SLAM(同時ローカリゼーションおよびマッピング)は、任意の空間内の現在位置を推定することにより、地図を描画するための技術です。
TurtleBot3がコンパクトで手頃な価格のプラットフォームで地図を正確に描画できることを示しています。


【SLAMノードの実行】

リモートPC:$ roscore
リモートPC:$ ssh jun@192.168.1.100
TURTLEBOT:$ roslaunch turtlebot3_bringup turtlebot3_robot.launch <実際はリモートPCよりSSH通信操作>

<SLAM立上げ>
リモートPC:$ roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:=gmapping


上記コマンドは、TURTLEBOT3が静止状態での測定なので中央にあるTURTLEBOT3の位置からの測定となっています。
地図を作成する為には、キーボード&リモコンによりTURTLEBOT3を操作して移動させていく必要があります。



ヒント:上記のコマンドを実行すると、視覚化ツールRVizも実行されます。RVizを個別に実行する場合は、次のコマンドのいずれかを使用します。

・ $ rviz -d `rospack find turtlebot3_slam` / rviz / turtlebot3_gmapping.rviz
・ $ rviz -d `rospack find turtlebot3_slam` / rviz / turtlebot3_cartographer.rviz
・ $ rviz -d `rospack find turtlebot3_slam` / rviz / turtlebot3_hector.rviz
・ $ rviz -d `rospack find turtlebot3_slam` / rviz / turtlebot3_karto.rviz
・ $ rviz -d `rospack find turtlebot3_slam` / rviz / turtlebot3_frontier_exploration.rviz


さまざまなSLAMメソッドのサポート

TurtleBot3は、さまざまなSLAMメソッドの中で、Gmapping、Cartographer、Hector、およびKartoをサポートしています。
これを行うには、slam_methods:=xxxxxオプションを変更します。
slam_methodsオプションはgmapping、cartographer、hector、karto、frontier_exploration、と,あなたがそれらのいずれかを選択する
ことができます。
たとえば、Kartoを使用するには、次を使用できます。
$ roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:= karto

SLAMパッケージの依存パッケージをインストールする

Gmapping:Gmappingに関連するパッケージは、PC Setupページに既にインストールされています。
Cartographer:sudo apt-get install ros-kinetic-cartographer ros-kinetic-cartographer-ros ros-kinetic-cartographer-ros-msgs
  ros-kinetic-cartographer-rviz
Hector Mapping:sudo apt-get install ros-kinetic-hector-mapping
Karto:sudo apt-get install ros-kinetic-slam-karto
Frontier Exploration:Frontier Explorationはgmappingを使用しており、次のパッケージをインストールする必要があります。
sudo apt-get install ros-kinetic-frontier-exploration ros-kinetic-navigation-stage


ヒント:地図製作者バージョン0.3.0でテストしました。
Googleが開発したCartographerパッケージは、ROS Melodicでは0.3.0バージョンをサポートしていますが、ROS Kineticでは0.2.0バージョンを
サポートしています。
したがって、バイナリファイルをダウンロードするのではなく、ROS Kineticで作業する必要がある場合は、次のようにソースコードをダウンロード
してビルドする必要があります。
インストール手順の詳細については、公式のWikiページを参照してください。


【遠隔操作ノードを実行】
上記のSLAMノードの実行状態に加えて、下記コマンドを追加します。

リモートPC:$ roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch


上記画面が現れるので、w, s, x, a, d キーでロボットを部屋のくまなく移動させて地図を作成します。


【 チューニング 】
マッピングには、さまざまな環境のパフォーマンスを変更するための多くのパラメーターがあります。
これによりチューニングを行いますが、今回はこの振る舞いの確認はパスします。


【 地図の保存 】
作成した地図情報を保存する必要があります。
マップは、ロボットの走行距離、tf情報、およびロボットの移動時のセンサーのスキャン情報に基づいて描画されます。
作成されたマップは、map_saverrunnig が実行されているディレクトリに保存されます。
ファイル名を指定しない限り、保存されるファイルは map.pgm と、map.yaml 等のマップ情報です。

 $ rosrun map_server map_saver -f ~/map

map.pgm と、map.yaml はユーザのホームディレクトリーのマップフォルダに保存されます。

地図保存の前に、SLAM操作一連のコマンドをまとめておきます。

 リモートPC:$ roscore
 リモートPC:$ ssh jun@192.168.1.100
 TURTLEBOT:$ roslaunch turtlebot3_bringup turtlebot3_robot.launch <実際はリモートPCよりSSH通信操作>
 リモートPC:$ roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:=gmapping
 リモートPC:$ roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

 上記リモートPCでコマンドを打つことを間違えない様にしてください。

地図完成後

 リモートPC:$ rosrun map_server map_saver -f ~/map

 エラー発生:非推奨のマップサーバーインターファイスを使用しています。新しいインターフェイスに切り替えてください。
       map_server は開けませんでした。(解決済み)

解決しました。多くの方がこのエラーが出ていますが、英語としておかしいコマンドとなっている関係です。
通常は「map_server」と表記しますが、このコマンドは1個目は「map_server」ですが、2個目が「map_saver」です。
要は、上記コマンドをコピペすれば問題なく保存されます。