[はじめてのRDBOX(1)]rdbox使ってみました：概要編

# はじめに
[RDBOX](https://rdbox-intec.github.io/homepage_jp/)に関係していながら、[ROS](http://wiki.ros.org/ja)や[Docker](https://www.docker.com/)/[DockerHub](https://hub.docker.com/)や[Kubernetes](https://kubernetes.io/ja/)などの使い方に不安があったので、とっても簡単なROSアプリを作り、RDBOX(k8s)にdeployするまでを実施してみました。
書き始めたら長文となったため、連載の形となっています。
使用言語は、python, bash などです。

# 動機
1. ROS の良いところ(要点)は以下のように思い実際にこれらを体験したい
  - Pub/Sub システムを提供している
  - Pub/Sub システムで利用できるメッセージ型を提供している
  - 独自のメッセージ型を定義できる
1. RDBOX のチュートリアルを行ったが、次は自分で作成した ROS アプリを RDBOX 上で動かしたい
1. 実際に開発することで、以下のツールやサービスの使い方や連携について理解を深めたい
  - git / GitHub
  - docker / DockerHub
  - Kubernetes(k8s)

# 実施内容（というか概要）
1. ROS で独自に定義したメッセージ型を用いた、ノード間通信(Pub/Sub)アプリ構築
   - 関連技術は、ROS/Python/Git
2. 作成したアプリをコンテナ(アプリ＋実行環境) 化
   - 関連技術は、Git/Docker/*Hub
3. RDBOX に ROS アプリコンテナ(ROS アプリ＋実行環境) 配備
   - 関連技術は、RDBOX/Kubernetes/DockerHub

# 構築するアプリのイメージ
**『モバイルバッテリー接続した RaspberryPI(+カメラ) を持ち歩くことで、一定間隔で写真撮影/保存される』**
たとえば、農作業や工場で働いている人の安全確認などに使えないか？（作業中なのか？休憩中なのか？倒れていないか？など画像で確認できると考える）

- [RDBOX のチュートリアルで構築した環境](https://github.com/rdbox-intec/rdbox/wiki/tutorials-en)をベースに Raspberry PI を追加
- Raspberry PI にはカメラ接続し、一定間隔で静止画を自動撮影
  - 今回は、実際にロボットやカメラの向きなどは制御しません。
- 撮影した画像は、RDBOX-HQ側(k8s node)に送信し蓄積
  - 今回は、撮影した画像に対して、加工や解析などの処理は行いません。
- ブラウザ経由で、蓄積された画像を参照

# RDBOX 以外で使用した機器
- Raspberry Pi 3 Model B+
  - Raspberry PI 用カメラを接続
  - [参考情報]最初は Pi Zero W を使用する計画であったが、**CPUアーキテクチャが「ARMv6」と古く k8s の導入に難があり**断念した
- モバイルバッテリー
  - 移動しながら撮影を行いたかったため（設置型で利用する場合は不要）
![rdbox-hajimete-parts.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427107/f9b3c909-1864-ab9a-b09d-24222fd57baa.png)


# 概要設計
## 前提条件
- 構築と基本的な動作確認を主目的とし、例外ケースは考慮しない

## 画像撮影アプリ
- 撮影した画像を送信(Publish)するため ROS アプリとして作成
- カメラ撮影アプリが稼働する Raspberry PI は、１台
- 撮影する静止画サイズは、640 x 480
- 撮影間隔は、秒単位で 20秒
- 画像送信(Publish)はROSのキューでバッファリング。キューあふれは想定しない

## 画像蓄積アプリ
- 撮影した画像を受信(Subscribe)するため ROS アプリとして作成
- 画像蓄積アプリが稼働する k8s node は、１台（今回、画像参照用アプリも同居）
- 画像受信(Subscribe)は、ROSのキューを使用
- 画像ファイルは、画像蓄積アプリと画像参照アプリで共有するディレクトリに保存

## 画像参照アプリ
- 蓄積画像確認のため Flask アプリとして作成
  - ROS アプリを Python で作成するため、Python を利用可能な Flask を採用
- 画像蓄積アプリが稼働する k8s node に画像参照用アプリも同居
- 画像蓄積アプリと画像参照アプリで共有するディレクトリに保存された画像をもとに画像ファイル一覧などを表示
- Flask とは
  - https://www.google.com/search?q=flask+とは
  - https://palletsprojects.com/p/flask/

# 事務連絡
- この連載では、amd64 と arm 環境を使用しました（一部、Raspberry PI 実機も使用）
- また、以下の情報をもとにクロスbuild環境を構築し使用しました
  - https://github.com/rdbox-intec/rdbox/wiki/tutorials-en#tutorials

---
# 記事リスト
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)