RaspberryPi3とZumoとROSで半永久自走式充放電ロボを作成したい_001日目_はじめに

[![GitHub stars](https://img.shields.io/github/stars/PINTO0309/zumo32u4.svg?style=social&label=Stars)](https://github.com/PINTO0309/zumo32u4)
#◆ 目次
<table>
<tr><th>No.</th><th>記事</th>
<tr><td colspan=2">１章　ROSの基本など</td></tr>
<tr><td>1</td><td>はじめに</td></tr>
<tr><td >2</td><td><a href="https://qiita.com/PINTO/items/f6162219d2f17e2f1714">用語・TOPIC</a></td></tr>
<tr><td >3</td><td><a href="https://qiita.com/PINTO/items/fb18a79958cdc4f40fa9">独自Message・Service</a></td></tr>
<tr><td >4</td><td><a href="https://qiita.com/PINTO/items/12a7f86a7f8861a2ff83">Action</a></td></tr>
<tr><td colspan=2>２章　ハードウェア制御</td></tr>
<tr><td>1</td><td><a href="https://qiita.com/PINTO/items/1786670cdcc2de60117c">Arduino+モーター制御</a></td></tr>
<tr><td>2</td><td><a href="https://qiita.com/PINTO/items/ec0c6f891f28ec856cbe">Arduino+RaspberryPi+Bluetooth+シリアル通信+ROS連携</a></td></tr>
<tr><td colspan=2>３章　SLAM</td></tr>
<tr><td>1</td><td><a href="https://qiita.com/PINTO/items/c5d69c0c0c58d4ded3f8">MONO-VO(単眼カメラ視差推定)</a></td></tr>
<tr><td>2</td><td><a href="https://qiita.com/PINTO/items/9aa737c284dc4e8212f1">GMapping_LiDAR(A1M8)</a></td></tr>
<tr><td>3</td><td><a href="https://qiita.com/PINTO/items/4845c438cac05eda4d1e">Google Cartographer_LiDAR(A1M8)</a></td></tr>
<tr><td>4</td><td><a href="https://qiita.com/PINTO/items/b3eb7205baf9c55de81b">Hector SLAM_LiDAR(A1M8)</a></td></tr>
<tr><td>5</td><td><a href="https://qiita.com/PINTO/items/7939b1e53e23a9458c1d">Karto SLAM_LiDAR(A1M8)</a></td></tr>
<tr><td>6</td><td><a href="https://qiita.com/PINTO/items/5ffdb0484b07d78ab38f">ORB-SLAM2</a></td></tr>
<tr><td>7</td><td><a href="https://qiita.com/PINTO/items/8989f45ad0908184e6e5">VINS-Mono</a></td></tr>
<tr><td colspan=2>４章　地図生成</td></tr>
<tr><td>1</td><td><a href="https://qiita.com/PINTO/items/fb0d44b2bb9455800667">自宅の地図作成_Google CartoGrapher 【失敗事例】</a></td></tr>
<tr><td>2</td><td><a href="https://qiita.com/PINTO/items/d8fd7a91ee00df7702b7">自宅の地図作成_Google CartoGrapher 【成功事例】</a></td></tr>
<tr><td>3</td><td><a href="https://qiita.com/PINTO/items/f8fa5d6ce55317ea590b">オドメトリの調整と地図生成と位置推定_Google CartoGrapher</a></td></tr>
</table>
※予想どおり投稿件数が多くなってきたため、自らが辿りやすくするという意味合いで目次を追加。

#◆ はじめに
今まで自分が投稿してきた記事は、一見すると何の脈絡があるのか全く理解できないものだが、実は、思いつきの構想を進めていくため、前提知識を自分なりに少しずつ仕入れる作業の一環に他ならない。
以降、完成まで何百日掛かるか分からないが、SW実装を一歩ずつ着実に進める決意を固めるためココに記す。
※ タイトルを xxx日目 としたのは、正直完成まであと何日掛かるかわからない、アドベントでも何でもない、という心持ちの現れ。

そもそも、前回までの記事を書き始めた８月頃までは下記のようなスキルレベル。

- RaspberryPi 何それ?
- Linux系OS 見たことも触ったこともない
- Raspbian と Ubuntu は同じもの？
- Python 触ったことない
    - もちろん、C / C++ なんか見たことも触ったこともない
    - もっぱら VB.neter
    - 旧石器時代の遺物 COBOLer
- ROS この世に存在していることすら知らない
- 電流/電圧/抵抗 中学以来ノータッチ、RVIの公式(オームの法則)の存在すら忘れている
- 機械工学とか電気工学とか物理とか、数理系の知識は皆無
- RaspberryPi はおろか、端子類はミニ四駆以来ほぼ触れていない (PCの自作もしたことない)
- リチウムイオン電池はスマホに実装されているから気にするほど危険なものではない、と思い込んでいた
- GPIO, SPI, I2C, 1-Wire, PWM, ... はぁ？？？？
- Lチカすげぇ！
- 物体認識すげぇ！

余談だが、いまどきの小学生は RaspberryPi を授業で触れ、GPIOの制御をいとも簡単にやってしまうそうだ。
恐ろしい。。。
かくいうオジサンはPC-98とDOS-Vのパソコンを自分の小遣いで初めて手に入れたのが中学３年生のとき。
N88-Basicで『Basicマガジン』に掲載されているゲームプログラムをひたすら写経して楽しむ程度だったのを思い出す。が、それだけ。ほんとにそれだけ。
インターネット環境を初めて手に入れたのは社会人になってからで、就職するまでは情報社会からはほぼ隔絶した状態にあった。

そんな低スキルな奴が 「やってみたい」 と突然思い立ったのが、タイトルに記載のありとあらゆる要素乗っけ盛りのモノだ。
昨年までは少なくとも「IoT」というワードがバズっていたような気がしているが、オジサンも多分に漏れず、うかつにも気になってしまったわけで、分からない、知らないことを調べることだけに実に半年もの月日を費やしたことになる。

やりたいことが伝わりにくいと思うので次のセクションで少しだけ整理する。

#◆ 実現したいコト・モノ
実は色々と勉強がてら技術検証する過程のなかで、HW自体はほぼ？組み立てが終わっていると勝手に思いこんでいる。
そもそもHWの実装に関しては、ちゃんとできているかどうかのレビューをいただけるような立場でもないため、破壊神と化す前提で初めての使用に近いハンダごてを握り、毎日充電と放電をバカみたいに繰り返し、実験の過程で制御基板を幾度となく破壊しまくって今日に至る。
あとはSW面でのあらゆる実装を行っていくつもりなのだが、オジサンのスキルではあとどれほどの時間が掛かるか、皆目検討もつかない。

(1) 実現したいこと(要素)

```
　1. RaspberryPi3でのHW制御 (モーター、センサー、他)
　2. 自己位置推定
　3. 障害物回避
　4. 自律的にベースへ戻って自己充電
　5. 自律的にIoT機器の設置場所を巡回してセンサー機器類に接続されたバッテリを充電
　6. 非接触無線充電・給電(Qi)
　7. 太陽電池充電(色素増感太陽電池による室内光充電)
　8. 電力消費効率を最大化するためのOS自動スリープと自動復旧
```


(2) 実現したいモノ

```
　1. 自走する巡回ロボット
　2. 他機器を充電するロボット
　3. 自身のバッテリを定期的に充電するロボット
　4. 障害物回避するロボット
　5. 半永久稼働ロボット
```

その道のスペシャルな方々から言わせれば、世迷い事を・・・と怒られてしまいそうな内容なのは重々承知のうえだが、この年になってHWイジリを初めてみて、本当に自分は機械イジリが好きなのだなと今更自覚し、少年期の小遣い程度以上には金銭に困らないお年ごろになったところで、「とことん無理と思えるまでチャレンジしてみたい」と考えた次第で、生温かく見守っていただけると此れ幸い。

#◆ 現時点のHW外観
・組み立て途中の通電確認時の配線概観

実は、基盤、センサー、モーター、Qiなどの電源網 及び 通信網は、ほぼ全てUSBケーブルのみで実現している。（一番上に載っている電源管理基板だけは端子が特殊だったので、100均で買ったUSBケーブルにマルツで買ったコネクタを自分で付け直した。無意味に防水加工の熱収縮チューブを使用。）
また、モーター駆動用の乾電池は使用せず、市販のモバイルバッテリを5Vから6Vへ昇圧してダミー電池(中身が空洞のエセ電池)経由でモーターへ給電している。
自分のような素人でも絶対に組み立てられる、をコンセプトに構成した。
どの配線も、気軽にいつでも抜き差ししても良い。
ちなみに、一番苦労した工作は、ユニバーサル基板を好みのサイズにカットすること。
![aaa.jpg](https://qiita-image-store.s3.amazonaws.com/0/194769/d41bfe47-c60b-4841-0d4f-f4219b8ed2f9.jpeg)

・組立後の概観(前後・斜め上)

１枚目画像の白い部分が自機用メインバッテリ、突起部が充電用端子
２枚目画像中段の奥に見えるのがQi送電部、底面にはひっそりと超薄型のQiレシーバーが潜んでいる、熱暴走防止用のサイドフロー式小型空冷ファンも取り付けてある
４枚目のGIFはHW構成作業の前にRTMで実装したラジコン、これをROSに置き換え完全自走させたい
各画像、重心は走行時でも一応ギリギリ保てている
![bbb.jpg](https://qiita-image-store.s3.amazonaws.com/0/194769/c476def9-c74b-8af6-3ef8-e389d474c0f8.jpeg)　![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3139343736392f34626635396435612d373061342d356530382d643563312d3432343430313733643364392e6a706567.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194769/c6e1d08f-b034-9204-6037-c6e74953a088.jpeg)


![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3139343736392f63313565313232652d623331652d373831662d303365612d3766386238343031313665652e6a706567.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194769/9b1f5cb6-0b7e-280e-0fad-4c26f1e343d1.jpeg)　![Remocon.gif](https://qiita-image-store.s3.amazonaws.com/0/194769/f962590a-8b09-bab8-7339-fd92d826b0e7.gif)

#◆現時点のHW構成 (写っていない物含め、思い出せる限り...)
* RaspberryPi3
* 35mm角DCファン 5V サイドフロー方式【UDQFNKH01】
* Zumo 32U4 Robot (Assembled with 100:1 HP Motors)
* ELECOM DE-M04L-3015 3,000mAh (メインバッテリ / RasPi駆動用 兼 Qi放電用)
* Li-Poバッテリ 860mAh (スリープ後の復電用 兼 サブバッテリ)
* PlusUs LIFECARD 1,500mAh (モーター駆動用、極薄極小バッテリ)
* ELP WebカメラLinux/Windows HD画質 800万画素 Sony IMX179 sensor ウェブカメラ
* iNepo USBブースターモジュール USBケーブル電圧転換　DC5VとDC9V/DC12V転換可能 ☓２
* slee-Pi2(Raspberry Pi用電源管理・死活監視モジュール、メイン電源切れの際シームレスにサブ電源へ切り替わる、OSスリープ状態への移行と復帰にも使用)
* Li-Po ライダー Pro(室内光発電＋充電に使用、サブバッテリへの充電・放電制御)
* Qiワイヤレス充電レシーバー MicroUSB端子対応 Android対応
* Qiワイヤレス充電トランスミッタ - 5V＆1A
* Fujikura 色素増感太陽電池 FDSC-FSC4
* RPLidar A1M8-360度レーザースキャナー
* Intel Movidius Neural Compute Stick
* Groovy 内蔵USBケーブル GN-US001A
* ダミー電池 電圧の調整や軽量化に最適 14500型/単3形 超軽量 イエロー (4本/セット)
* ユニバーサル基板　各種サイズ
* 変換名人 USB変換プラグ　各種
* コネクタ、熱収縮チューブ、スペーサー、etc...　たくさん

**注）残念ながら、HW構成図とか、そういうコジャレたものは今のところ一切無い。**

#◆ 次回予告
ROSのキホンの「キ」。
まじかよ！　まさかのソコからかよ！　というお叱りは想定の範囲内です。
だって、ほとんど知らないんですもん。
次の参考書あたりを読みながらトライしてみます。
週一回の日本語による更新を目標に頑張ります。
ちなみに、最低限の環境構築は[→こちら←](https://qiita.com/PINTO/items/b084fe3dc716c42e2867)の作業で完了していることを前提とします。


- ROSではじめるロボットプログラミング
- ROS詳説ロボットプログラミング -導入からSLAM-Gazebo-MoveItまで-
- プログラミングROS Pythonによるロボットアプリケーション開発

#◆ 次回記事
[RaspberryPi3とZumoとROSで半永久自走式充放電ロボを作成したい\_002日目\_用語・TOPIC](https://qiita.com/PINTO/items/f6162219d2f17e2f1714)　へ続く