概要 Summary

P1140154
TADA(Twitter : @yxtada)です.

ジャパンオープン中津川2017に参加するロボットに搭載されている,自作の全方位カメラについて説明します.このセンサは,2017年サッカードラフトルールに向けて開発したもので,中津川大会ではゴールの検出のために使用する予定でした.
ただ,センサの実装が間に合わなかったのと,重量オーバーで,残念ながら中津川大会で全方位センサを実際に使うことはできませんでした.

RoboCupJunior Soccer - Rules 2017

このルールでは,今までのルールで使用されていた赤外線ボールが廃止され,新たにパッシブボール(オレンジ色のカラーボール)が採用されており,ロボットは画像処理を行うための処理及びデバイスを搭載しなければならなくなりました.

また,このルールには,ボールを検出するためのカメラについての規定があり

8.2.2 Limitations 

All commercial omnidirectional lenses/cameras are not permitted. Only omnidirectional lenses/cameras made by students are permitted, meaning that their construction needs to be primarily and substantially the original work of a team. 

(訳) 市販されている全ての全方位カメラ/レンズは使用できない.全方位カメラ/レンズは,学生によって作られたもののみ使用が許可される.つまり,全方位センサの作成は,チーム独自の活動に基づいたものでなければならない.

...omnidirectional is defined as having a field-of-view of more than 140 degrees horizontally and more than 80 degrees vertically (these values reflect the optical system of the human eye). 

(訳) 画角が水平140° 垂直80°(これは人間の視野に相当する)を超えるものを全方位センサと定義する.

これにより,全方位センサをロボットに搭載する場合は,それを自作する必要がありました.
今回は,実際に自作した全方位センサの作成方法と,実際の動作を紹介します.

Explanation in English (Wrote in blue color in this article)

I will introduce about the self-made 360 degree camera in this article. I develop it for the RoboCupJunior Soccer Rule 2017, and adopt it on probation for Japan-Open 2017 in Nakatsugawa.

This time I wrote an article in Japanese earlier English, and now I'm writing English article that is same detail as this. So Please w
ait a while until the English version of the article is published !

ミラーの設計 Designing of mirror

Inventor1
Figure1 : Self-made 360 degree camera's overview
slide-3
Figure2 : Drawing Hyperbola curve on 2D-CAD

今回作成した全方位カメラ[Figure1]は,曲面のミラーを下からカメラで覗き込むことで,全天球の映像を取得するタイプです.魚眼レンズを使用する方法に比べて,カメラモジュール(電装系)を低い位置に配置できること,同じカメラでもミラーの形状で光の量や画角を変更可能なことがメリットだと思います.

[Figure2]はミラーの曲線の設計データです.
全方位センサにおける曲面ミラーの役割は,黄色い線で示したカメラの画角面 View surface (before reflection)を,ミラー反射後の画角面 View surface (after reflection)に変換することです.例えばただの球体の面を使って反射させた場合,反射後の画角面View surface (after reflection)が中心を持つ円弧ではなくなってしまいます.

今回作成したミラーは,双曲線の原理を用いて,ミラー反射後の画角面が,[Figure2]に示したFocus of hyperbola mirrorを中心とする円弧となるように設計しています.
これにより,反射前と反射後のView surfaceが線形の関係(*)であるため,カメラで取得した映像の計算がより正確かつ簡単になります.
(*) 双曲線の2つの焦点と,どちらかの双曲線上の点を繋いだ2本の直線の角度変化の関係性について確認する必要がある(2017/4/4)

設計にはAutoCADを使用し,双曲線は拘束と繰り返しコマンドを駆使して作図しました(脳筋手法).

slide-1
Figure3 : The relationship between AOI(*) and AOR(**) on the hyperbola mirror
(*) : Angle of incident 入射角
(**) : Angle of reflection 反射角

[Figure3]は,双曲線ミラー上での光軸の入射角と反射角の関係性を示した図です.
光軸が曲面ミラー上で反射するとき,入射角と反射角はいかなる点においても等しくなります.
この関係が成り立つように接線の角度を決定し,それを画角のステップごとに繰り返して曲面を作図しました.CAD上では,入射角と反射角は角度の一致拘束を適応し,必要な回数だけコピーして繰り返し作図しています.それでも,毎回角度の一致拘束を適応する必要があるので,それなりに時間がかかります.

今後の展望としては,パラメータからDXF図面(座標のテキストバイナリデータ)を生成するソフトウェアを開発する事が考えられます.今のところ一度作成したきりもう変更は滅多にしないので需要がないのですが,機会があればプログラミングの練習がてらにチャレンジしてみたいと思います.

slide-2
Figure4 : The mathematical property of length of the optical axis

[Figure2]において,光軸は双曲線ミラー上のいかなる点を反射しても,光路長(Length of light axis)が等しくなります.実際,AutoCADでの作画では,計算通りの値は出ていませんが,ある3点を無差別に選択し,そえぞれの光路長を測定した結果[Figure4]を見ると,それぞれの光路長の長さは,その差が十分に無視できる程小さく,従って光路長はいかなる点で反射しても等しいと結論付けることができます.

光路長の計算は,双曲線の数学的性質に基づくものですが,その説明は今回は割愛します.

参考:
双曲線の定義 (焦点がy軸上の場合)
Hyperbola - Wikipedia


parameter
Figure5 : The parameter for calculate Hyperbola-mirror

今回僕が双曲線を描いた手法は,線分を数十本くらい作図する脳筋手法です.
ミラーの物理的な原理が分かっていれば作図だけで必要な機能は満足できますが,計算で求める場合でも,以下の(1) ~ (3)のパラメータがわかっていれば,その条件を満たす双曲線の関数がただひとつ求まります.
(1) カメラの焦点から双曲線の焦点までの距離
(2) カメラの画角
(3) 全方位センサの垂直画角

設計のパラメータを[Figure5]にまとめました.
使用するカメラを決めた時点で,カメラ画角は製品により決定されます.残る必要なミラー画角と焦点間距離は,自分で決定します.

今回の設計では,画角を水平方向+15 -45[degree]とし,ミラー直径を46[mm]に決定してすべてのパラメータを決定しました.ミラー直径を予め決めたのは,アクリルのクリアパイプを特注する際に,汎用性の高い直径50[mm] 厚2[mm]のタイプを使うとコストを削減できたためです.

ミラーの作成 Manufacturing of mirror

Inventor3
Figure6 : The hyperbola curve surface 3D-CAD Model

[Figure6]は3D-CADで作成した双曲面のモデルです.
このデータを使用して,実際にミラーを作成してきます.

ミラーの作成には,ヒートプレスと呼ばれる手法を使っています.
51o8FqBRN4L
イズミ 電気コンロ IEC-105 オレンジ
購入当時で1500円と非常に安かったためこれを選びました.
ヒートプレスにガスコンロを使う例もあるようですが,高確率でプラ板に火が付くためお勧めしません.
上の商品のような,電熱器タイプをお勧めしますが,家にあるからと言って例えばキッチンから電気コンロを借りて樹脂を溶かす…なんてことをすると,以下お察しなので,なるべくご家族と喧嘩にならないメイカーライフを送りましょう(自分は新規購入しました).

UNADJUSTEDNONRAW_thumb_2f7
Figure7 : The mold for plastic heat forming

[Figure7]は,ヒートプレス整形のためのモールド(型)です.3Dプリンタで出力したあと,ポリパテで細かい段差を埋めてなめらかに仕上げています.熱で溶けてしまう心配がありましたが,幸いパテの耐熱が充分だったので問題ありませんでした.

UNADJUSTEDNONRAW_thumb_2eb
Figure8 : A vinyl chloride mirror sheet  

[Figure8]はヒートプレス整形するt = 0.5[mm]塩化ビニールのミラーシートです.
東急ハンズで購入しましたが,ホームセンターやAmazon.co.jpでも購入できます. 
300x450なので150x150[mm]の板が6枚取れます(写真のように切った後それに気が付く).

UNADJUSTEDNONRAW_thumb_2ec
Figure9 : Cutting with cnc milling machine
UNADJUSTEDNONRAW_thumb_2ed
Figure10 : Taping
UNADJUSTEDNONRAW_thumb_2ee
Figure11 : Paste the mirror sheet

塩ビのシートをCNCで切削した治具に貼り付けます.正直CNCじゃなくても作れると思うのですが,部屋を汚したくなかったのと,僕の腕力の低下によりCNCを使っています.

ヒートプレスでは,熱で柔らかくした樹脂を押し付けて延ばして整形しますので,両面テープは,なるべく円形に近い形に繋げて貼り付けます[Figure10].また,押し付けた際に剥がれてしまわないように,なるべくしっかり固定します.


Movie1 : Plastic sheet heat press forming

UNADJUSTEDNONRAW_thumb_2f1
Figure12 : Detach
ハサミを使ってミラーから必要な部分を切り出します.型に押し付ける際に境界線も写るので,それに添って切っていきます.一旦大雑把に切ってからハサミで仕上げると楽です.

UNADJUSTEDNONRAW_thumb_2f3
Figure13 : Detached mirror and put it on the mold
切り出したミラーです.型の上に乗せるとピッタリ重なります.実際には,熱成形やプレス成形においては「スプリングバック」と呼ばれる,整形後の形状が若干型から浮き上がる現象を考慮する必要がありますが,今回はそれを誤差とみなして無視します.

これでミラーが完成です.
次のセクションで,モジュールの組み立てとカメラ取り付けについて説明します.

カメラモジュールとの接続 Connection to camera
module

UNADJUSTEDNONRAW_thumb_2f8
Figure14 : Printing parts using 3D printer
UNADJUSTEDNONRAW_thumb_2f4
Figure15 : Parts of 360° camera module

全方位センサのパーツは3Dプリンタを使用して出力しました.
フィラメントはAfiniaのABS Plus Blackを使用しています.

アクリルの透明パイプは特注品です.今回はアクリ屋.comさんにお願いしました.

d30063d1
Figure16 : Pixy CMUcam5
※画像引用元(丁度いい写真が無かったから拝借):http://kemarin-tech.blog.jp

カメラモジュールには Pixy CMUcam5を使用しています.
Amazon.com(US)で60~70USD (およそ7000~8000JPY)で購入できます.

Pixy (CMUcam5) Smart Vision Sensor



Movie2 :Pixy test 1 (Read with Arduino)
from http://kemarin-tech.blog.jp/archives/19994568.html

Pixyの動作とマイコンでのデータ読み取りのデモ動画です.
P1140164
Figure17 : Assemble 360° camera module and connect usb cable
L字のUSBケーブルを使ってロボットからケーブルを引き出して調整します. 

実際の動作 Demonstration of behavior


Movie3 : Self-made 360° camera demonstration
動作のデモンストレーションです.Pixy専用アプリケーションにて映像を取得し,青と黄とオレンジの3色を登録して追跡しています.マイコンと接続した際にどのように座標が出力されるかは,[Movie2]を参考にしてください.

P1140170
Figure18 : Ball detectable max limit distance (In the state of the photograph, the camera can detect the ball)

[Figure18]はオレンジボールを検出できる限界の距離を示したものです.
タイルカーペットが1枚あたり50cmスクエアですので,およそ1m程度であれば検出可能である事がわかります.因みに,画面を見ると前後方向の視野が削られているように見えますが,水平方向+15°の余裕分が削られているだけなので,正面方向でも遠くのボールは検出可能です.

P1140171
Figure19 : Ball detectable min limit distance (in front of Robot)
P1140174
Figure20 : Ball detectable min limit distance (behind of Robot) 

[Figure19]及び[Figure20]は,全方位カメラがボールを検出可能な最小距離を示したものです.

[Figure19]において,カメラはボールの頭の部分のみを捉えている状態で,これ以上内側にボールが入り込んでしまうと,ボールを見失ってしまいます.正面の場合,もう少し前進すればあとはホールドセンサ(ボールがロボットのキッカーに接触しているか検出するセンサ)の情報を使ってボールの追跡が可能である可能性があります,今後検討が必要です.

[Figure20]においても,正面と同様に,カメラはボールの頭を少しだけ捉えた状態です.
僕のロボットの場合,後ろにはユーザーインターフェイスが搭載されており,上下方向の視界がフロントに比べて狭くなってしまい,結果的にロボットの後ろ9[cm]ほどが死角となってしまっている状態です.

解決方法としては以下が考えられます.

①ハードウェア的な解決方法
センサの位置を高くする,あるいは死角を発生させているオブジェクトの位置を変更する.
課題としては,ハードウェアの再設計自体のコストと,デザインへの影響が考えられます.

②ソフトウェア的な解決方法 
ボールの座標自体を,時間との条件付き確率分布として扱う.
→連続してボールを検出したのであれば,その辺りにボールがある可能性が高い
→連続してボールを非検出であれば,その辺りにボールがある可能性が低い

課題としてはただただ難しそうってだけなので,これは頑張って実装してみたいと思います.
「連続」の定義を調整しないと,鈍くなってしまったりノイズに弱くなってしまったりしそうですが,Pixyの送ってくる座標自体が結構Noisyなので,いずれにせよ時間領域でのフィルタは必要になってくると思います.

おわりに

2017年のRoboCupJunior国際ルールで,全方位カメラに関するルールが公開されてから2ヶ月足らずですが,早速こうして自作の全方位センサを実現できたことに満足しています.

いま,世界中のRCJ参加選手がパッシブボール(カラーボール)への対応を迫られており,その中には全方位カメラの導入を模索しているチームも多いと思います.今回,日本のみならず海外の多くのチームから僕の自作全方位カメラについての問い合わせがあり,僕としても是非多くの人にこの技術をシェアしたいという思いがあったため,この記事の執筆に至りました.

今後,なるべく早い段階で,この記事を英語に翻訳して全世界に発信したいと考えています,
残念ながら当方あまり英語が得意でなく,英語版の執筆にはもう少し時間がかかると思いますが,可能な限り早く英語での情報を公開したいです(誰か助けて!

So, this time, the 360° camera got a lot of interested from other country. So I decide to write an English explanatory to share this article.

Actually, I'm terrible at english. So 
It takes more time to publish an English articles. I'm sorry about that :(

質問等はコメントかTwitterのDMかブログ右のメッセージ欄(公開されません)よりお願いします.