【ROS】ROS kineticでTurtlebot3のgazeboを使ったシミュレーション

# はじめに
ROSは世界中で使われているロボットミドルウェアであり、またturtlebotもよく使われている車輪型の移動ロボットとなっています。今回はROSでturtlebot3をgazebo上で動かすための環境設定を紹介したいと思います。

# 環境
OS:Ubuntu 16.04
ROS:ROS kinetic

# セットアップ
ROS kineticではまだturtlebot3のパッケージをaptでインストールできないためgit cloneで取得します。

以下、ROSのワークスペースが/home/catkin_wsにあるとします。
まずcatkin_ws/srcに移動して、

```bash
$ cd ~/catkin_ws/src
```
以下のコマンドを1つずつ実行してください。

```bash
$ git clone https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git
$ git clone https://github.com/ROBOTIS-GIT/turtlebot3.git
$ git clone https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git
$ git clone https://github.com/ROBOTIS-GIT/turtlebot3_gazebo_plugin.git
```

その後、catkin_makeをしましょう。

```bash
$ cd ~/catkin_ws
$ catkin_make
$ source ~/catkin_ws/devel/setup.bash
```

# 実行
turtlebot3のノードを実行する際は最初に
`TURTLEBOT3_MODEL`
という環境変数をセットしなければいけません。
`waffle`か`waffle-pi`か`burger`を選べます。これは実際のturtlebot3と同じですね。
http://emanual.robotis.com/docs/en/platform/turtlebot3/specifications/

モデルを気にしないのであればどれかひとつを選んで ~/.bashrc に追記しておけばいいですね。

```bash
$ export TURTLEBOT3_MODEL=burger
```

実行コマンドは以下です。以下のような画面がでてきたら成功です。

```bash
$ roslaunch turtlebot3_gazebo turtlebot3_world.launch
```

![Screenshot from 2020-04-19 21-12-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426354/6aa36ffc-c30e-cc0b-3a94-9993095ad526.png)


# その他いろいろ
## rostopic一覧
```bash
$ rostopic list
/clock
/cmd_vel
/gazebo/link_states
/gazebo/model_states
/gazebo/parameter_descriptions
/gazebo/parameter_updates
/gazebo/set_link_state
/gazebo/set_model_state
/gazebo_gui/parameter_descriptions
/gazebo_gui/parameter_updates
/imu
/joint_states
/odom
/rosout
/rosout_agg
/scan
/tf
```

## turtlebot3を動かす(teleop)
rostopic一覧より、`cmd_vel`トピックを使えば良いので、以下のturtlebot3にはいっているteleopか、apt-getでできる[teleopのノード](http://wiki.ros.org/teleop_twist_keyboard)で動かすことができます。

```bash
$ roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
```

```bash
$ sudo apt-get install ros-kinetic-teleop-twist-keyboard
$ rosrun teleop_twist_keyboard teleop_twist_keyboard.py
```

## turtlebot3が動くgazebo上の環境
さきほど実行する際には以下のコマンドでした。

```bash
$ roslaunch turtlebot3_gazebo turtlebot3_world.launch
```

これはさきほどgit cloneした turtlebot3_simulation/turlebot3_gazebo/launchの中のlaunchファイルを起動しています。launchファイルの一覧を見てみましょう。

```bash
$ cd ~/catkin_ws/src/turtlebot3_simulations/turtlebot3_gazebo/launch/
$ ls
multi_map_merge.launch        turtlebot3_autorace_mission.launch  turtlebot3_simulation.launch  turtlebot3_stage_4.launch
multi_turtlebot3.launch       turtlebot3_empty_world.launch       turtlebot3_stage_1.launch     turtlebot3_world.launch
multi_turtlebot3_slam.launch  turtlebot3_gazebo_rviz.launch       turtlebot3_stage_2.launch
turtlebot3_autorace.launch    turtlebot3_house.launch             turtlebot3_stage_3.launch
```

ここで環境を定義しています。例えば、turtlebot3_house.launchを起動してみましょう。以下のような家の中の環境っぽい環境が出てくれば成功です。この他ここのlaunchファイルごとに環境があります。

```bash
$ roslaunch turtlebot3_gazebo turtlebot3_house.launch
```

![Screenshot from 2020-04-19 21-26-19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426354/0d797554-465f-182f-8d3d-8533d40d9dfa.png)

## Rviz
turtlebot3_gazebo内にrvizを実行するlaunchファイルが用意されています。

```bash
$ roslaunch turtlebot3_gazebo turtlebot3_gazebo_rviz.launch
```

以下のようにrvizが立ち上がれば成功です。

![Screenshot from 2020-04-19 21-31-58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426354/4ec7c6b6-0dc7-6f7b-b47a-b41d184356e0.png)

左右で並べるとLaserscanがちゃんと反映されるのがわかりますね。(小さくてすみません、、、)


![Screenshot from 2020-04-19 21-37-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426354/574daa3e-9130-5647-9873-4947cb063a6b.png)

## turtlebotのインストール
turtlebot3ではなくturtlebotのgazebo環境はapt-getでインストールすることができます。

```bash
$ sudo apt-get install ros-kinetic-turtlebot-gazebo
$ sudo apt-get install ros-kinetic-turtlebot ros-kinetic-turtlebot-apps ros-kinetic-turtlebot-interactions ros-kinetic-turtlebot-simulator ros-kinetic-kobuki-ftdi ros-kinetic-ar-track-alvar-msgs
$ . /opt/ros/kinetic/setup.bash
```

実行は以下です。

```bash
$ roslaunch turtlebot_gazebo turtlebot_world.launch
```

注意事項ですが、cmd_velトピックが使われていません。ですのでturtlebotを動かすときは以下のコマンドになります。
(apt-getできるほうのteleop_twist_keyboardは使えない)

```bash
roslaunch turtlebot_bringup minimal.launch
```

# おわりに
今回はここまでにします。簡単にできるのでやってみてください！
次はmappingとnavigationをやってみたいと思います。


# 参考
[Turtlebot3 e-manual](http://emanual.robotis.com/docs/en/platform/turtlebot3/simulation/#ros-packages-for-gazebo)
[【ROS】 Turtlebot3 のシミュレーション環境を構築してみた](http://ogimotokin.hatenablog.com/entry/2018/06/08/215044)
[ROS-kineticでturtlebot gazeboを動かす](https://r17u.hatenablog.com/entry/2017/06/11/213942)
[ROS.org teleop_twist_keyboard](http://wiki.ros.org/teleop_twist_keyboard)