ROSとGazeboでロボットアームのRRBotを動かしてみた(シミュレーション)

#はじめに
とてもシンプルなロボットアームのモデルであるRRBotというのがgithubで公開されていたので今回なんとかしてGazebo上で動かしてみました。
![Screenshot from 2017-12-21 21-11-48.png](https://qiita-image-store.s3.amazonaws.com/0/216904/18f7875f-ba50-6292-97de-07e6157f4af7.png)

#前提条件
・ROSが入っていること
・Gazeboのros連携するプラグインが入っていること
→ros連携のプラグイン自体は次のコマンドを打てばインストールできます。

```
$ sudo apt-get install -y ros-indigo-gazebo-ros-control
$ sudo apt-get install -y ros-indigo-ros-control ros-indigo-ros-controllers
```
※なお、↑のコマンド中のindigoの部分は自分が使っているROSのdistributionにしてください。筆者はkineticですが大丈夫でした。

前提条件の準備方法に関しては、下記のサイトがわかりやすいです。
[ROSで始めるロボティクス](http://bril-tech.blogspot.jp/2016/10/ros1-robot-operating-system.html)
[Building a Visual Robot Model with URDF from Scratch(R2D2のモデルを作って動かすチュートリアル)](http://wiki.ros.org/urdf/Tutorials/Building%20a%20Visual%20Robot%20Model%20with%20URDF%20from%20Scratch)

かなりROSをいじっているので、他にも必要な条件があるかもしれないです…。


#実行環境
Ubuntu 16.04
ROS Kinetic
windows7 64bit がloaderのデュアルブート
cpu intel Core i7 860
メモリ　8GB

#RRBotの導入
参考サイト
[No.6-5:GazeboをROSに繋ぐ (GazeboにおけるURDF 編)](http://cir-kit.github.io/blog/2015/02/17/gazebo-urdf-in-gazebo/)

```
$ cd ~/catkin_ws/src/
$ git clone clone https://github.com/ros-simulation/gazebo_ros_demos.git
$ cd ../
$ catkin_make
```
↑のコマンドを行って、catkin_ws/srcのディレクトリにRRBotのパッケージ(以下、pkgと略す)をgit cloneでダウントードしてください。

#GazeboにRRBotを出す。
次のコマンドを行うと、gazeboが起動してそこにRRBotが現れるはずです。

```
$ roslaunch rrbot_gazebo rrbot_world.launch
```
![Screenshot from 2017-12-21 20-06-50.png](https://qiita-image-store.s3.amazonaws.com/0/216904/8ba2f489-5b14-f5fd-6fc7-708c050f2bb5.png)

勝手にアームがだらんとなると思います。
しかし、まだ動かせないですね。

#RRBotを動かすためのコントローラーの実行
今のままでは動かせないので、次にRRBotを動かすためのコントローラーを実行します。ただ、普通の人が想像するコントローラーとはかなり異なりますが…。

新しく端末(ターミナル)を開いて、次のコマンドを実行します。

```
$ roslaunch rrbot_control rrbot_control.launch
```

まだ、動かせませんね。

#RRBotにtopicを送る
参考サイト
[controllers behaviour in rrbot](https://answers.ros.org/question/262440/controllers-behaviour-in-rrbot/)

また新しく端末(ターミナル)を開いて(3つ目)、次のコマンドを実行します。

```
rostopic pub -1 /rrbot/joint1_position_controller/command std_msgs/Float64 "2.0"
```

これで、RRBotが動いたのでは？
![Screenshot from 2017-12-21 20-52-26.png](https://qiita-image-store.s3.amazonaws.com/0/216904/6ea24e6e-0b63-ab10-225e-ca918a399b03.png)

ちなみに、RRBotは根本から1つ目の関節がjoint1、2つ目の関節がjoint2です。なので、次のコマンドを送ると、

```
rostopic pub -1 /rrbot/joint2_position_controller/command std_msgs/Float64 "1.0"
```

![Screenshot from 2017-12-21 20-55-20.png](https://qiita-image-store.s3.amazonaws.com/0/216904/40b6cf22-31a8-0126-86fc-6e034fc81c12.png)
このようになるはずです。joint2が曲がりましたね。

ROSに詳しくなれば、今は端末から直接topicをpublishしていますが、自分でpythonなりC++なりでpubliserを作れるようになるはずです。ちなみに、筆者は優秀な動機の力を借りて最近やっとサンプルコードをコピペしてpublisherが作れるようになったところです。

#参考文献まとめ
[ROSで始めるロボティクス](http://bril-tech.blogspot.jp/2016/10/ros1-robot-operating-system.html)
[Building a Visual Robot Model with URDF from Scratch(R2D2のモデルを作って動かすチュートリアル)](http://wiki.ros.org/urdf/Tutorials/Building%20a%20Visual%20Robot%20Model%20with%20URDF%20from%20Scratch)
[No.6-5:GazeboをROSに繋ぐ (GazeboにおけるURDF 編)](http://cir-kit.github.io/blog/2015/02/17/gazebo-urdf-in-gazebo/)
[controllers behaviour in rrbot](https://answers.ros.org/question/262440/controllers-behaviour-in-rrbot/)
[ROS演習８：ロボットアーム](http://demura.net/lecture/13136.html)