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」です。
要は、上記コマンドをコピペすれば問題なく保存されます。
