ROS を用いたラジコン作成：ハードウェア設計編

# 概要
この記事は[RaspberyPi , Arduino , ROS を使ってラジコンを作る！！](https://qiita.com/take4eng/items/0b21c4927d42b3d7cd62)のハードウェア設計編です。
全体の概要や流れに関しては、本編をご覧ください。

[ROS を用いたラジコン作成：本編 (全体まとめ)](https://qiita.com/take4eng/items/0b21c4927d42b3d7cd62)
[ROS を用いたラジコン作成：要件定義編](https://qiita.com/take4eng/items/916fbbc68e2f7e34e384)
[ROS を用いたラジコン作成：ROS環境構築編](https://qiita.com/take4eng/items/70f167320ede46e4139c)
[ROS を用いたラジコン作成：Arduino制御編](https://qiita.com/take4eng/items/527793c9a1f902a0a62c)
[ROS を用いたラジコン作成：コントローラー制御編](https://qiita.com/take4eng/items/e067628971fa171d6d5a)
[ROS を用いたラジコン作成：ハードウェア設計編](https://qiita.com/take4eng/items/271924b986e072378439) **← 今ここ**
[ROS を用いたラジコン作成：ソフトウェア設計編](https://qiita.com/take4eng/items/1d5007ab623c3f7d3ad4)
[ROS を用いたラジコン作成：ソフトウェア制作編](https://qiita.com/take4eng/items/99df06b0e28d7c601632)
[ROS を用いたラジコン作成：ハードウェア制作編](https://qiita.com/take4eng/items/21d34d5bf56f99aba54e)
![S__24641539.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634805/b0d59ec3-4226-c14b-6730-acd771a44b9d.jpeg)

## 今回やること

- **ラジコンを制作するのに必要なパーツを見積もる**
- **使用するパーツの仕様を確認する**
- **各パーツの接続方法を見積もる**
- **各種コネクタのピンアサインを決める**

## 今回できるもの
**必要パーツ一覧**

|必要パーツ|対応|費用|備考|
| ---- | ---- | ---- | ---- |
|車体|割りばし等で作成|350円|Amazonでアイス棒を購入|
|タイヤ|既製品から取得|330円|ダイソーで660円 (動力源含む)|
|動力源|既製品から取得|330円|ダイソーで660円 (タイヤ含む)|
|サーボモーター|家にあるものを使用|0円|買うと400円くらい|
|コントローラー|家にあるものを使用|0円|買うと2,000円くらい？|
|RaspberryPi |家にあるものを使用|0円|グレードにもよるが4,000～10,000円|
|Arduino |家にあるものを使用|0円|グレードにもよるが1,000円くらい？|
|LED|家にあるものを使用|0円|買うと150円くらい|
|カーボン抵抗|家にあるものを使用|0円|買ってもほぼ0円|
|バッテリー|家にあるものを使用|0円|買うと2,000円くらい？|
|合計|－|1010円|15,000円くらい|

**系統概要図**
![ROS-CAR-概略図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634805/4358e494-c9a6-ab6b-ffb6-07e626662258.png)
**ピンアサイン (Arduino in)**
![ROS-CAR-ピンアサイン1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634805/7ba21395-d996-9beb-47c0-a39eb5772bab.png)
**ピンアサイン (Arduino out)**
![ROS-CAR-ピンアサイン2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634805/94e0ed1d-ba97-09fa-8524-2b99696f9c0d.png)
**ピンアサイン (イラスト)**
![ros_car_ブレッドボード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634805/c39936ef-387d-e35d-30a3-2a32d0115e6b.png)


# ハードウェア設計
前回の[要件定義編](https://qiita.com/take4eng/items/916fbbc68e2f7e34e384)により、『何を作るのか』『どんな機能を組み込むのか』が決定しました。
では次に、**『何が必要か』『どんな接続をするのか』**を考えていきます！！

# パーツの選定
実装機能を満たすために必要なパーツを考えます。
最終的に実装した機能は以下の通りです。

- **車体、タイヤ、動力源**
- **前後左右の移動**
- **有線コントローラーでの操作**
- **ハザードやウインカーとなるライト**

## 車体、タイヤ、動力源
ラジコンカーの土台となる『車体』や『タイヤ』、更には『動力源』、まずはこれらを用意しなければ話になりません。
ですが、そんなもの作ったことありません。どうしましょう・・・？

**『そんなもの、既製品を使えばいいじゃない！！』**

という事で買ってきました。
ダイソーに売っていたラジコンカーです。
![S__24879112.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634805/f5b76b83-e0f6-2663-7972-4df5ab559b3d.jpeg)
もはや完成品なのですが、今回はここから必要な部品を取ることで開発工数を減らしていきます。
今回の目的はハード開発ではなくROS学習ですので、そこは多めに見ていただければと思います。

さて、既製品の車体を分解することで、『タイヤ』と『動力源 (DCモーター)』を手に入れることができました。
くっついてる基板は無線モジュールや電源スイッチですね。今回は使用しないので取り外します。
![S__24879114.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634805/c50d9e9f-d0d0-a8a6-aeb2-d69e307d19c0.jpeg)
あれ？車体はどこに行ったって？

いつの間にか破壊されていたよ・・・
破壊しないと前輪が回収できない仕様だったのさ・・・
![S__24879108.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634805/b06c5df9-7975-eb08-fede-93c13c3ba467.jpeg)
ダイソーでラジコンを買うついでに、こんなものも買ってきました！！
これがあれば割りばしとかでシャーシくらい作れるでしょ！！
(これが地獄の始まりであった・・・)
![S__24879113.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634805/4405a699-f8ac-7bfe-7f8f-07423ddc0565.jpeg)

|必要パーツ|対応|費用|備考|
| ---- | ---- | ---- | ---- |
|車体|割りばし等で作成|350円|Amazonでアイス棒を購入|
|タイヤ|既製品から取得|330円|ダイソーで660円 (動力源含む)|
|動力源|既製品から取得|330円|ダイソーで660円 (タイヤ含む)|

## 前後左右の移動
続いて前後左右の移動方法について見ていきましょう！！

前後の動きは、先ほど手に入れたDCモーターが担ってくれるでしょう。
ここで考えるべきは左右の移動方法です。

ここで参考にしたのが、先ほども出てきた『ダイソーのラジコンカー』です。
左右移動の機構はコイツを真似しましょう。

仕組みはとても簡単で、下図を見ればすぐに理解できます。
赤いバーが左右に動くことで、それに連動してタイヤも左右に動くという仕組みです。
今回はハード設計がメインではないので、このような簡単な機構で十分でしょう。
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634805/d04b1a71-ebbd-a928-eee8-3039b95d8823.png)

さて、ではこの機構をどうやって再現しようか？

私はサーボモーターで左右の傾きを制御するのが良いかと考えました。
軽くググってみると、左右の制御はサーボモーターを使用している物が多く見られ、特に問題は無いと思われます。

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634805/617d4950-f7d5-3f4c-947c-5cf32adaac65.png)

|必要パーツ|対応|費用|備考|
| ---- | ---- | ---- | ---- |
|サーボモーター|家にあるものを使用|0円|買うと400円くらい|

## 有線コントローラーでの操作
次はコントローラーによる制御です。
今回の制作の中で最も重要なポジションとなる内容です。

事前に準備していたように、ROSでのコントローラーの使用、ROSでのArduinoの制御は可能なことを確認済みです。

さて、それでは必要なものをまとめてみましょう！！
この機能を満たすのに必要なものは以下の3つです。

- ジョイスティックコントローラー
- ROSが利用できるPC
- Arduino 

今回、ROSを利用するPCには『RaspberryPi 』を選択しました。
理由は**『家にあったから』**です(笑)
もし家に無くとも、『ラジコンに載るサイズかつ安価』となればラズパイが選択されるとは思います。

また、Arduino に関しては『Arduino互換品』を使用しています。
たまに本家と仕様が異なるパチモンが売っていることがありますが、その辺は上手く見極めて安く手に入る互換品で十分かと思います。

|必要パーツ|対応|費用|備考|
| ---- | ---- | ---- | ---- |
|コントローラー|家にあるものを使用|0円|買うと2,000円くらい？|
|RaspberryPi|家にあるものを使用|0円|グレードにもよるが4,000～10,000円|
|Arduino|家にあるものを使用|0円|グレードにもよるが1,000円くらい？|

## ハザードやウインカーとなるライト
次はライト関係です。
ここはオマケ要素なので、特に深く考えることはありません。

家に転がっているLEDでも光らせておきましょう。
ちなみに今回は、赤色×2、青色×2 の計4つを使用します。

|必要パーツ|対応|費用|備考|
| ---- | ---- | ---- | ---- |
|LED|家にあるものを使用|0円|買うと1個150円くらい|
|カーボン抵抗|家にあるものを使用|0円|買ってもほぼ0円|

## バッテリー
最後にバッテリーについて考えていきましょう。
一番最後の記述となってしまいましたが、非常に重要なパーツとなります。
バッテリーから供給される電力が、上記の全てのエネルギーとなるためです。

では、これまでのパーツの中で電力供給が必要なものはどれでしょうか？

- DCモーター
- サーボモーター
- コントローラー
- RaspberryPi 
- Arduino 
- LED

このあたりでしょうか。
更に、直接バッテリーから電力供給が必要なものは、以下の2つのみです。

- **DCモーター**
- **RaspberryPi**

他のパーツは、ラズパイやArduinoからの間接供給により動作するので、バッテリーについて考える必要はありません。

- サーボモーター ⇒ Arduino より供給
- コントローラー ⇒ RaspberryPi より供給
- Arduino ⇒ RaspberryPi より供給
- LED ⇒ Arduino より供給

では、『DCモーター』と『RaspberryPi』が動作するのに必要な内容を見ていきましょう。

**DCモーター**
仕様不明
残念ながら、今回用意したDCモーターはダイソーのラジコンから取得したものなので、仕様の詳細は分かりませんでした。
分かっていることとして、以下の2点が挙げられます。

1. デフォルトは乾電池3本(約4.5V)で動作していた
2. 形状はマブチモーター130タイプ

上記内容より、基本的にはマブチ130タイプと考えれば良いでしょう。
[こちらのページ](https://akizukidenshi.com/catalog/g/gP-06437/)を見ると、以下の項目を確認できます。

- 電圧範囲：1.5~3.0VDC (標準1.5V)
- 静止電流：2.2A (最大で2.2A)

つまり、**『直流電圧が 1.5~3.0V で、2.2A 以上の電流を流せるバッテリー』**を用意すれば良いという事になります。
もともとは乾電池3本(約4.5V)で動作していますが、多少のオーバーは問題ありません。(長時間の使用は避けること)

**RaspberryPi**
続いてメインPCとなる RaspberryPi について見ていきましょう。
今回用意したものは『Raspberry Pi 4 (4GB)』です。
[こちらのページ](https://www.iodata.jp/product/pc/raspberrypi/ud-rp4b/spec.htm)を見ると、以下の項目を確認できます。

- 電源定格：DC 5V
- 消費電流：1.7A (3A以上推奨)

つまり、**『直流電圧が 5V で、3A 以上の電流を流せるバッテリー』**を用意すれば良いという事になります。

DCモーターとRaspberyPiの仕様について確認しましたが、いかがでしょうか？
理想を言えば、各装置に合わせて仕様に沿った電源を用意する必要があります。

|パーツ|電圧|電流|備考|
| ---- | ---- | ---- | ---- |
|DCモーター|直流 1.5~3.0V|最大 2.2A|4.5V でも動作可能|
|カーボン抵抗|直流 5.0V|1.7A|供給電流は3.0A以上推奨|

が、今回は**『小規模な個人制作』**です。
細かい所まで気にするような段階ではありません。
バッテリーを2つも用意するような出費をするワケにもいきません。
変圧のためのレギュレータを用意するのも面倒です。

ここは**大雑把にそれっぽいバッテリーを使用**します！！
それがこれ、**『スマホ用のモバイルバッテリー』**です！！
![S__24879115.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634805/adb4fe13-86cb-b5c2-132d-c2e05d078615.jpeg)
理由はもちろん**『家にあったから』**です！！

こちらのモバイルバッテリー、出力端子の仕様は以下の通りです。

- USB Type-A：5V 1.0A ×1
- USB Type-A：5V 2.1A ×1

今回はそれぞれ、**『1.0Aの出力端子をDCモーター』**に、**『2.1Aの出力端子をRaspberryPi』**に割り当てて使用します。
モーターに関しては仕様との乖離が少し大きいですが、長時間の使用を避ければ大丈夫でしょう。

# 必要パーツ一覧
これで必要なパーツは全て揃いました！！
今回の制作に使用するパーツをまとめて確認してみましょう。

|必要パーツ|対応|費用|備考|
| ---- | ---- | ---- | ---- |
|車体|割りばし等で作成|350円|Amazonでアイス棒を購入|
|タイヤ|既製品から取得|330円|ダイソーで660円 (動力源含む)|
|動力源|既製品から取得|330円|ダイソーで660円 (タイヤ含む)|
|サーボモーター|家にあるものを使用|0円|買うと400円くらい|
|コントローラー|家にあるものを使用|0円|買うと2,000円くらい？|
|RaspberryPi |家にあるものを使用|0円|グレードにもよるが4,000～10,000円|
|Arduino |家にあるものを使用|0円|グレードにもよるが1,000円くらい？|
|LED|家にあるものを使用|0円|買うと150円くらい|
|カーボン抵抗|家にあるものを使用|0円|買ってもほぼ0円|
|バッテリー|家にあるものを使用|0円|買うと2,000円くらい？|
|合計|－|1010円|15,000円くらい|

ほとんどが家にあるものですので、非常に低価格でラジコンを作ることができそうです！！

# 概略図
ハードウェアの接続について大まかな概略図を作成しました。
こうして見ると、非常に単純な作りになっていることが分かります。
![ROS-CAR-概略図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634805/4358e494-c9a6-ab6b-ffb6-07e626662258.png)

1. コントローラーから RaspberryPi の操作信号を送る
2. RaspberryPi から Arduino に制御信号を送る
3. Arduino から各パーツに制御信号を送る
4. 各パーツが動作する

# ピンアサイン
続いてピンアサインです。
ピンアサインの正式な記述方法を知らないのでこれで良いのか分かりませんが、配線位置が分かるような図を作成しました。

要は、上の概略図をもう少し詳しく書き直しただけです。
また、1枚にまとめるとごちゃごちゃして見難いので、Arduinoのinとoutで分けました。
書き方は合ってるか分かりません・・・素人の作図ですみません。

**1枚目 (Arduino in)**
![ROS-CAR-ピンアサイン1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634805/7ba21395-d996-9beb-47c0-a39eb5772bab.png)
**2枚目 (Arduino out)**
![ROS-CAR-ピンアサイン2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634805/94e0ed1d-ba97-09fa-8524-2b99696f9c0d.png)

ここで、新たにモータードライバ(L293D)というものが登場しました。
電子工作を知っている方ならご存じとは思いますが、『DCモーターの制御モジュール』です。
モータードライバに与える信号によって回転方向や停止の制御が可能となります。


また、バッテリーのUSBから2本の配線が飛び出ていますが、こちらはUSBケーブルを改造して電源に使用する線を抜き出したものになります。
はんだごてとジャンパワイヤーで改造しました。

さらに、上記のピンアサインをイメージ図で表すと以下のようになります。
バッテリーはいい感じのイラストが無かったため電池ボックスとなっています。
そこは適宜読み替えていただければと思います。
![ros_car_ブレッドボード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634805/c39936ef-387d-e35d-30a3-2a32d0115e6b.png)


# まとめ
以上で大体のハードウェア設計が完了しました。
途中で曖昧な点やパーツの仕様との乖離があったかもしれませんが、そこは個人開発という事で許していただければと思います。

とりあえず、ハードウェアの設計で大事なことをまとめます。

- **必須機能を満たすために必要な部品を考えること**
- **各パーツの仕様に沿ってバッテリーや配線の組合せを考えること**
- **過度に仕様から外れた使い方をしないこと (事故の原因にもなる)**

今回は使用しませんが、ラジコンのバッテリーには主に『リポバッテリー』と呼ばれるものを使用することが多いです。
使い方を間違えると普通に**爆発**とかします。
危険な物を扱うことになるので、ハードの設計はしっかり行う必要があります。