##ROS-noeticでSLAMシミュレーション
SLAMを試してみたいと思ったので、入り口としてお試し。
- インストール
- シミュレーション実行
- SLAM、mapping
環境
ubuntu 20.04
###ROSのインストール
ROS-noeticのインストールは、手っ取り早く行うには、ROBOTISのshellを使うといいと思います。
$ git clone https://github.com/ROBOTIS-GIT/robotis_tools.git
$ cd robotis_tools
$ chmod 755 ./install_ros_noetic.sh
$ bash ./install_ros_noetic.sh
この方法でインストールすると、~/.bashrcに
alias cw='cd ~/catkin_ws'
alias cs='cd ~/catkin_ws/src'
alias cm='cd ~/catkin_ws && catkin_make'
のショートカットが作成され便利です。
cs,cmは結構使います。
即座に反映させたい場合は
source ~/.bashrc
と打ち込んでください
###ワークスペースの作成
上記のshellでインストールすればcatkin_wsというワークスペースができますので飛ばしてください。
それ以外の方法でインストールした人は、ワークスペースを作成します、名前(ここではcatkin_ws)はなんでもいいです。
cd
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src
$ catkin_init_workspace
$ cd ~/catkin_ws && catkin_make
###turtlebot3のシミュレーション環境の作成
branchをnoetic-devに指定して、パッケージをインストール
$ cd
$ cd ~/catkin_ws/src
$ git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git
$ git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git
$ cd ~/catkin_ws && catkin_make
turtlebot3にはBurger, Waffle, Waffle Piの3種類あるので、指定しなけれなりません。どれでもいいですが、今回はBurgerを選ぶことにします。
毎度 export TURTLEBOT3_MODEL=burger を打ちたくないので、bashrcに書き込みます。
(エディターは使い慣れているもので)
$ gedit ~/.bashrc
最後の行に
export TURTLEBOT3_MODEL=burger
を書き込んで保存し閉じます。
$ source ~/.bashrc
で反映させます。(今後TURTLEBOT3_MODELが不明的なエラー出たらまたこれを実行してください)
turtlebot3のシミュレーターのインストール
$ cd ~/catkin_ws/src
$ git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git
$ cd ~/catkin_ws && catkin_make
###シミュレーターの実行[RViz]
$ roslaunch turtlebot3_fake turtlebot3_fake.launch
これでturtlebot3が立ち上がリます。
以下のコマンドでキーボード操作できるようになります、”新しいターミナルで”実行してください。
$ roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
###シミュレーターの実行[Gazebo]
ターミナルをすべて終了して新規で立ち上げます。
次はGazeboでシミュレーションを実行します。RVizはデバッグツールですが、Gazeboでは任意の環境下でシミュレートできます。
ここでは定番(?)のポールの立った空間でシミュレートします。
$ roslaunch turtlebot3_gazebo turtlebot3_world.launch
(turtlebot3_simulations/turtlebot3_gazebo/launch/ に様々な環境が用意されています。
何もない空間>>turtlebot3_empty_world.launch
家の中>>turtlebot3_house.launch)
次に障害物を避けて自動制御させます
$ roslaunch turtlebot3_gazebo turtlebot3_simulation.launch
これでgazeboをみると自立制御していることがわかります。
このとき、RVizを起動すれば、Turtlebot3がレーザーで距離を測っている様子を可視化できます。
$ roslaunch turtlebot3_gazebo turtlebot3_gazebo_rviz.launch
###最後にSLAMシミュレーション
ターミナルをすべて終了して新規で立ち上げます。
SLAMは自己位置推定とマップ生成を同時実行するものです。
SLAMのモジュールをインストールします。
$ sudo apt-get install ros-noetic-slam-gmapping
そしてもう一度先程のGazeboを起動させます。
$ roslaunch turtlebot3_gazebo turtlebot3_world.launch
Gazeboが起動したら、早速SLAMを実行します。
$ roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:=gmapping
これでマップ生成が始まります。
この空間全体のマップを生成するためには、先程の衝突しないプログラムを実行すれば良いです。
$ roslaunch turtlebot3_gazebo turtlebot3_simulation.launch
これでしばらく放っておけば、全体マップが作成できます。
マップを生成できたら保存したいです。
まずmap serverのインストールをします。
$ sudo apt-get install ros-noetic-map-server
保存したいフォルダ(ここではmaps)を作成し、そこに保存します。
$ mkdir ~/maps
$ cd ~/maps
$ rosrun map_server map_saver
エラーが出る場合: rosrun map_server map_server にしているかもしれません、2回目はsaverです。
map.pgmを開くと取得した地図を表示できます。
参考
How to Launch the TurtleBot3 Simulation With ROS
「ROS ロボットプログラミングバイブル」