【メモ】catkin buildでワークスペース作成

#環境
Ubuntu18.04
ros-melodic

#はじめに
ROSの備忘録として、基本となるワークスペース作成関連をメモしました。公式docでは、バージョンがhydro、かつ```catkin_make```を使っていたので、melodicで```catkin build```を使っていきます。
参考：
- [ROS Kinetic の Ubuntu へのインストール(ROS.org)](http://wiki.ros.org/ja/kinetic/Installation/Ubuntu)
- [catkin_tools](https://catkin-tools.readthedocs.io/en/latest/index.html)
- [ROS catkin buildの簡単な使い方](https://qiita.com/harumo11/items/ae604ba2e17ffda529c2)
#ROSのインストール
Ubuntuにインストールする場合は、[こちら](http://wiki.ros.org/ja/kinetic/Installation/Ubuntu)を参考にします。
ドキュメントではバージョンが```kinetic```になっているので、kineticの部分を```melodic```に書き換えれば大丈夫です。

例）

```latex

(変更前)
$ sudo apt install ros-kinetic-desktop-full
(変更後)
$ sudo apt install ros-melodic-desktop-full
```
また、関連パッケージのインストールも忘れずにやりましょう。

```
$ sudo apt install python-rosinstall python-rosinstall-generator python-rosdep python-wstool
$ sudo apt install build-essential ninja-build liburdfdom-tools
$ sudo apt install libceres-dev libprotobuf-dev protobuf-compiler libprotoc-dev
```

#ワークスペース作成
ROSのワークスペースを作成します。

今回は`catkin build`を使用するので下記のコマンドでcatkin build用のパッケージをインストールしましょう。

```
$ sudo apt install python-catkin-tools 
```

いよいよワークスペース作成です。
今回はHOMEディレクトリ(~/)に```sample_ws```というワークスペースを作成します。

```
$ mkdir -p ~/sample_ws/src
$ cd ~/sample_ws
$ catkin init
$ catkin build
```
`-p`オプションをつけることで、`/src`ディレクトリも同時に作成しています。

次に、ワークスペースに移動し、`catkin init`コマンドでワークスペースを初期化しています。
※`catkin build`コマンドを使用する際は`catkin init`を使用しなくても、catkin buildを使用する際に勝手に初期化してくれます。
これで、ワークスペースのビルドは完了です。

あとは、下記のコマンドでpathを通せば使えます。

```
$ source ~/sample_ws/devel/setup.bash
```
毎回、パッケージを追加後catkin buildして上記のコマンドでpathを通すのは面倒なので、以下のようにすると便利です。

```
$ echo "source ~/sample_ws/devel/setup.bash" >> ~/.bashrc
$ source ~/.bashrc
```
１行目のコマンドによってbash起動時（端末を開いた時）に勝手にpathが読み込まれます。

```
$ emacs ~/.bashrc
```

とすれば、source~が追加されているのが確認できます。

ただし、端末を開いたままだと.bashrcの内容は読み込まれないので、catkin buildした後は

```
$ source ~/.bashrc
```
は忘れずに実行しましょう！！

# パッケージの追加
パッケージの追加方法は様々あると思います。
1.wstoolを使ったやり方
2.git cloneで追加
3.パッケージの自作

##1. wstoolで追加
[こちら](http://wiki.ros.org/wstool)を参考にします。
wstoolは.rosinstallというファイルを基にパッケージのインストールを行うツールです。

```
$ cd ~/sample_ws
# 初期化
$ wstool init src
(または以下で初期化とインストールを一括で行う)
$ wstool init src PATH_TO_ROSINSTALL_FILE.rosinstall
```
２回目以降は、

```
wstool merge -t src PATH_TO_ROSINSTALL_FILE.rosinstall
```
を使いましょう。

このままではリポジトリが登録されただけでパッケージはインストールされていません。

```
wstool update -t src
```
を実行することでインストールが行われます。

また、インストールしたパッケージに依存パッケージがある場合は、`rosdep`を使います。

```
$ rosdep update
$ rosdep install -y -r --from-paths src --ignore-src
```
このコマンドで依存パッケージをインストールしてくれます。

##2. git clone
.rosinstall ファイルがない場合はgit cloneでもインストールできます。

## 3. パッケージの自作
パッケージを自作したい場合は、`catkin_create_pkg`コマンドを使います。

```
$ cd ~/sample_ws/src/
$ catkin_create_pkg <YOUR_PACKAGE_NAME> <DEPEND_PACKAGE_NAME>
```
を実行することで作成できます。
`YOUR_PACKAGE_NAME`: 作成したいパッケージ名
`DEPEND_PACKEGE_NAME`: 作成するパッケージが依存するパッケージ(pyhtonをしようする場合は`rospy`など)
依存パッケージに関しては、作成パッケージ内の'package.xml'を書き換えることで、作成後でも変更可能です。


####ビルド
上記のようにして、パッケージをインストール/作成したら、`catkin build`でビルドしましょう。

```
$ catkin build <PACAGE_NAME>
source ~/.bashrc
```
これで完了です。

##(おまけ)buildの方法
###ワークスペース全体をビルド

```
catkin build
```
###特定パッケージのみビルド

```
catkin build <PACKAGE_NAME>
```
###現在のディレクトリのパッケージをビルド
catkin build --this