[はじめてのRDBOX(3)]rdbox使ってみました：ROSパッケージ作成編

# はじめに
ROS の初心者が、とっても簡単なROSアプリを作ってみました。（連載記事です）

# 今回の記事の概要
- GitHub に、今回の記事用の repository を作成
  - GitHub アカウントを必要とします
- 新規 ROS パッケージを作成
- 画像ファイルの受け渡しに使用するメッセージを定義
- 作成したソースファイルを GitHub に登録
- 今回の記事に該当するソースファイルは、以下のアドレスから参照可能です
  - https://github.com/higuchi-toshio-intec/example-picam/tree/master/picam_ros

# 使用環境
- Docker(ROS) 環境起動

  ```
  $ sudo docker pull ros:melodic-ros-base
  $ sudo docker run -dit --name hajimete_rdbox_ros --net host ros:melodic-ros-base
  $ sudo docker exec -it hajimete_rdbox_ros /bin/bash
  root@hajimete_rdbox_ros:/#
  ```


# 連載記事内共通情報
- ROS アプリのソースファイルは GitHub にて管理/共有しています
- ROS アプリによって、コンパイルおよび実行環境が異なる(amd64/arm)ため、GitHub を仲介してソースファイルを共有しています

## GitHub に新規 repository 作成
- GitHub の使い方に関する説明は省略します
- 作成する repository 名は「picam_ros」
  - 'Initialize this repository with a README' にチェックを入れておくと良い

## GitHub から clone/pull
- 必要に応じて、GitHub から clone や pull します

  ```
  $ mkdir -p ${HOME}/ros_ws/src
  $ cd ${HOME}/ros_ws/src
  $ git clone https://github.com/YourGitHubAccount/picam_ros.git
  # 以下は clone 済みの場合
  $ cd ${HOME}/ros_ws/src/picam_ros
  $ git pull
  ```

# 構築

## ROS パッケージ作成
- パッケージ作成
  - パッケージ名は「picam_ros」
  - 関連パッケージ

    |パッケージ名          |説明                 |
    |---------------------|---------------------|
    |roscpp               |c++用パッケージ|
    |rospy                |python用パッケージ|
    |std_msgs             |基本的なデータ型用メッセージ形式|
    |sensor_msgs          |画像を含むセンサー類のメッセージ形式|
- 以下(↓)は具体的な手順
  - 実行後、${HOME}/ros_ws/src/picam_ros ディレクトリ以下にファイルが作成される

  ```
  $ cd ${HOME}/ros_ws/src
  $ catkin_create_pkg picam_ros roscpp rospy std_msgs sensor_msgs
  ```

## msg/picam_photo.msg
- 今回の一連の記事で使用する ROS メッセージの定義ファイルの作成
- 以下の情報を含むメッセージとする
  - 撮影日時情報
  - 撮影端末識別情報
  - 画像データ
- ROS アプリ(sub_photo.py および take_pub_photo.py)で使用する
- 以下(↓)は具体的な手順（下記例では、GitHubよりファイルを取得）

  ```
  $ cd ${HOME}/ros_ws/src/picam_ros
  $ mkdir msg
  $ cd msg
  $ curl -s -o picam_photo.msg https://raw.githubusercontent.com/higuchi-toshio-intec/example-picam/master/picam_ros/msg/picam_photo.msg
  ```
  https://github.com/higuchi-toshio-intec/example-picam/blob/master/picam_ros/msg/picam_photo.msg

## CMakeLists.txt
- 自動作成された CMakeLists.txt を ROS アプリ picam_ros 用に修正（修正箇所は diff で確認）
  - 新たにメッセージ型を作成するため message_generation の記述を追加、generate_messages 関連の記述を有効化
  - 新たなメッセージ型として picam_photo.msg の記述を追加
  - パッケージの依存関係の記述を有効化
- 以下(↓)は具体的な手順（下記例では、GitHubより修正済みファイルを取得）

  ```
  $ cd ${HOME}/ros_ws/src/picam_ros
  $ mv CMakeLists.txt CMakeLists.txt.orig
  $ curl -s -o CMakeLists.txt https://raw.githubusercontent.com/higuchi-toshio-intec/example-picam/master/picam_ros/CMakeLists.txt
  $ diff -up CMakeLists.txt.orig CMakeLists.txt
  ```

  https://github.com/higuchi-toshio-intec/example-picam/blob/master/picam_ros/CMakeLists.txt

## catkin_make
- コンパイル実行
  - 実行コマンドは catkin_make
  - 「catkin_make: command not found」となった場合は、以下のコマンドを実行

    ```
    $ source /opt/ros/${ROS_DISTRO}/setup.bash
    ```
- 以下(↓)は具体的な手順

```
$ cd ${HOME}/ros_ws/
$ catkin_make
```


## GitHub への登録
- 作成したファイル全てを GitHub に登録
  - clone 済みなので、add/commit/push を実行
  - commit メッセージは、あとでどのような commit であるかわかるようにすると良い
- 以下(↓)は具体的な手順

  ```
  $ cd ${HOME}/ros_ws/src/picam_ros
  $ git add .
  $ git commit -m 'CommitMessage'
  $ git push
  ```
- 念のため、ブラウザで以下のアドレスに接続し GitHub の登録状況を確認する
  - https://github.com/YourGitHubAccount/picam_ros

---
# 記事リスト
1. [概要編](https://qiita.com/higuchi-toshio-intec/items/5d5499447d667e339b87)
2. [画像参照アプリの構築編](https://qiita.com/higuchi-toshio-intec/items/1deae0d03a74bafec8af)
3. [ROSパッケージ作成編](https://qiita.com/higuchi-toshio-intec/items/44f1377c171738d9b49b)（← 今回の記事）
4. [ROS Subscriber編](https://qiita.com/higuchi-toshio-intec/items/3d62bbfc5e520de9dce1)
5. [ROS Publisher編](https://qiita.com/higuchi-toshio-intec/items/0c136f4d90e70983a8a3)
6. [DockerImage 作成編](https://qiita.com/higuchi-toshio-intec/items/826b4c5407b05372b78c)
7. [RDBOX(k8s) ポート転送編](https://qiita.com/higuchi-toshio-intec/items/b3b79da5ca160ee418b0)
8. [RDBOX(k8s) Subscriber アプリ編](https://qiita.com/higuchi-toshio-intec/items/765d7ef1b6baf85d9f02)
9. [RDBOX(k8s) Publisher アプリ編](https://qiita.com/higuchi-toshio-intec/items/9c43e001d8098a6c7a40)
10. [雑記](https://qiita.com/higuchi-toshio-intec/items/5d80fd647514dfbd2938)