ROSを用いたローバー制御（シュミレーター編）

# テーマ記事へのリンク
以下の記事には今回のテーマを設定した目的や関連記事がまとめてあります。自分が見たい項目がある場合は利用してください。
[自作ロボット（ローバー）のROS対応](https://qiita.com/Naotaka_K/items/122c18f163f608bf299e)
# 目次

1. [準備するもの](#準備するもの)
2. [環境構築](#環境構築)
3. [ソースコードのダウンロード＆ビルド](#ソースコードのダウンロードビルド)
4. [実行](#実行)
5. [環境構築時に直面したエラー](#環境構築時に直面したエラー)
   1. [パブリックキーエラー](#パブリックキーエラー)
   2. [VMWareでの環境構築時のエラー](#vmwareでの環境構築時のエラー)

6. [参考記事](#参考記事)
# 準備するもの

1. Ubuntu 16.04

# 環境構築

[こちらの手順]( [http://www.sigverse.org/wiki/jp/?Tutorial%20using%20ROS%20for%20ver.3](http://www.sigverse.org/wiki/jp/?Tutorial using ROS for ver.3) )に従ってROSをインストールします。

その後、[こちらの記事]( http://wiki.ros.org/ROS/Tutorials/InstallingandConfiguringROSEnvironment )に従ってROSのワーキングディレクトリを
作成します。

英語を読みたくないという方向けに、以下のコマンドを打っていけばROSの環境構築が完了するよう必要な部分だけ抽出しました。



```shell
$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

$ sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

$ sudo apt-get update

$ sudo apt-get install ros-kinetic-desktop-full

$ sudo rosdep init

$ rosdep update

$ echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc

$ source ~/.bashrc

$ sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential

$ mkdir -p ~/catkin_ws/src

$ cd ~/catkin_ws/

$ catkin_make

$ source devel/setup.bash

<環境構築が正しく行えていたら以下の出力が得られる>
$ echo $ROS_PACKAGE_PATH
/home/<youruser>/catkin_ws/src:/opt/ros/kinetic/share
```

参考記事ではPython3.7での使用法が記述されているが、ROSはPython2系で開発がスタートしているので、上記の方法だと**SystemのPython2**が使われるようになる。もし入っていない場合はSystemの方にPython2系をインストールしてください。[pyenv](https://github.com/pyenv/pyenv)や[anaconda](https://www.anaconda.com/)などの仮想環境上でのPythonも指定できるが、相性が悪いため注意が必要です。

Ubuntu16.04での構築のためROS Kineticを使っていますが、UbuntuのバージョンによってはIndigoなどUbuntuのバージョンに対応したROSをインストールしてください。

# ソースコードのダウンロード＆ビルド

必要なパッケージをインストールした後、githubからソースコードをcloneします。

```shell
$ sudo apt-get install ros-kinetic-ros-control ros-kinetic-ros-controllers

$ sudo apt-get install ros-kinetic-gazebo-ros-control

$ cd ~/catkin_ws/src

$ git clone https://github.com/NaotakaKawata/rover.git rover

$ chmod +x rover/src/teleop_keyboard_omni3.py

$ cd ~/catkin_ws 

$ catkin_make
```

# 実行

```shell
$ roslaunch rover rover_vertual.launch
```

実行後、gazeboとコントローラーウィンドウが起動したら成功。

![Screenshot from 2019-11-11 22-07-33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531981/f2e5fa7d-82a4-d03f-e9b7-728c7730510c.png)


# 環境構築時に直面したエラー

## パブリックキーエラー

元々入っていたROSを使ったときに発生。どうやら昔とパブリックキーが変わっていることが原因。

```shell
W: GPG error: http://packages.ros.org/ros/ubuntu bionic InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY F42ED6FBAB17C654
```

そこでパブリックキーの更新を行うことで対応。

```shell
$ sudo apt-key del F42ED6FBAB17C654

$ sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
```

## VMWareでの環境構築時のエラー

著者は再現実験用にVMWare15.5.0を使用してUbuntu環境を構築している。OpenGLまわりでのエラーらしい。

```shell
VMware: vmw_ioctl_command error Invalid argument.
```

そこで環境変数を変更することで対応。

```shell
$ echo "export SVGA_VGPU10=0" >> ~/.bashrc

$ source ~/.bashrc
```

##参考記事
[ROS講座50 オムニホイールのシミュレーション2（全方向台車のモデリング）]
(https://qiita.com/srs/items/ba0b5588f943bcc7b7f4)
寸法がこちらの記事のものを使用したため、実機とは異なる。余裕があれば直す。