• Dec 25 Update structure, fix typo
P1140154
Yunit5.3 Offensive robot of team Mavericks (10th Place in RCJ Japan Open)

はじめに:Summary

There were some important changes of RoboCupJunior's rule between 2017 and before then. One of the biggest change is, the ball used for the soccer open-league has replaced from IR-emitting ball to Passive ball. So now all the participants have to develop some device to detect the ball.

The omnidirectional camera is effective device to get a advantages in the RoboCupJunior soccer rule. Because the omnidirectional camera has no dead angle, and also it can easily measure the distance to the color object from its view.

But if you try to use omnidirectional camera in this competition, you need to care about the limitation regarding the omnidirectional camera. There is specific limitation for omnidirectional camera, which is defined as a with over 140° horizontally and more than 80° vertically field of view. If you want to use omnidirectional camera, you need to develop it by yourself.

In 2017 domestic competition in Japan, I personally made a prototype of omnidirectional camera and tested it. Then it actually succeed to detect the passive ball by 1 meter far from the robot.

In this article, I will introduce how did I made the omnidirectional camera which is known as its requirement of precision is quite high and usually hard to make. Also, the demonstration of the camera I actually made is described below.

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

2017年よりRoboCupJuniorのルールのがアップデートされ、サッカーオープンリーグで用いられるボールが、従来の赤外線ボールからオレンジ色のカラーボールへと変更されました。 これにより、2017年以降にRoboCupJuniorのOpen Leagueカテゴリに参加するチームは、画像処理を行うためのデバイスの開発が必須となりました。

また、ボールの検出に用いるセンサのうち全方位センサに分類されるものを用いる場合に限り、特殊な制限が設けられています。 以下に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.

市販されている全方位カメラ/レンズは使用できない。 全方位カメラ/レンズは、学生によって作られたもののみ使用が許可される。 すなわち、全方位センサの作成はチーム独自の活動に基づいたものでなければならない。

from RoboCupJunior Soccer Rule 2017

このように、全方位センサに分類されるセンサの使用は、学生が独自に作成したセンサの使用のみが認められるというルールになっています。 2017年ルールの定める「全方位カメラ」の定義は以下の通りです。

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°(これは人間の視野に相当する)を超えるものを全方位センサと定義する。

競技の特性上、全方位カメラは非常に有利なアイテムですが、この競技に使用するには学生が自ら作成する必要があります。 全天球ミラー型のセンサの作成は、光学デバイスとして機能するために十分な精度を持ったミラーを、何らかの方法で自作する必要があります。 本記事では、プラスチックミラーシートを熱成形する手法を用いて作成した全方位センサの作成方法と、その実際の動作を紹介します。

ミラーの設計:Designing of mirror

First of all, you have to design the shape of mirror by calculation. There are several way to design appropriate hyperbolic mirror, but in this case, I draw each surfaces of curve one by one to draw entire hyperbolic curve. I personally think this is not smart way and I surely recommend much smarter way, but this method actually work. As reference.

Generally, you have to design all the parameters of hyperbolic mirror by yourself depending on the sensor you make for your robot. So you need to understand how you decide those parameters of hyperbolic curve by understanding basics of its principle. I personally think, this document is really good material to understand about it.

In case of using math, you have to calculated parameters of hyperbolic curve's polynomial. After that, get plots in coordinate by using EXCEL or Python program you wrote, etc. In another way, using gnuplot with DXF terminal is pretty good way as I heard. Then you can plot them to AutoCAD with command line. Search for "EXCEL AutoCAD" or something like that to find tips to do so.

Inventor1
Figure1 Self-made 360 degree camera 3D CAD design
slide-3
Figure2 Drawing hyperbola curve on 2D CAD

今回扱う全方位カメラは、図1に示すように曲面のミラーを下からカメラで覗き込む事で全天球の映像を取得するタイプです。 この手法の特徴として、魚眼レンズを使用する方法に比べてカメラモジュール(電装系)を低い位置に配置できること、ミラーの形状やその大きさにによって明るさや画角を変更可能なことがメリットだと思います。

図2はミラーの曲線の設計データです。 全方位センサにおける曲面ミラーの役割は、黄色い線で示したカメラの画角面View surface (before reflection)を、ミラー反射後の画角面View surface (after reflection)に変換することです。双曲線ミラーを使うことで、反射後のLight axisが焦点を通るようになるのがポイントです。 例えば、ただの球体の面を使って反射させた場合には、反射後の画角面View surface (after reflection)が1点で交わることが無いため、画像で読み込んだあとの処理が複雑になります。

今回作成したミラーは、双曲線の原理よりミラー反射後の画角面が図2に示したFocus of hyperbola mirrorを中心とする円弧となるように設計しています。 設計にはAutoCADを使用し、双曲線は拘束と繰り返しコマンドを駆使して作図しました(脳筋手法)。

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

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

数式によるプロット作図ベースでミラーを作る手法をたどるには、聞いたところによるとGnuplotで"set terminal dxf"して出力する方法が簡単らしいです。

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

図2において、光軸は双曲線ミラー上のいかなる点を反射しても、光路長(Length of light axis)が等しくなります。 実際にAutoCADでそえぞれの光路長を作図した結果を図4に示します。 あくまで近似解ではありますが、3経路それぞれの光路長が等しくなっているのが分かると思います。 実際に計算すると、光路長が等しくなるのが確かめられるそうです。

parameter

Figure5 The parameter for calculate Hyperbola-mirror

ミラーの物理的な原理が分かっていれば作図だけで必要な機能は満足できます。 計算で求める場合は、以下の3つのパラメータがわかっていればその条件を満たす双曲線の関数が求まります。

  1. カメラの焦点から双曲線の焦点までの距離
  2. カメラの画角
  3. 全方位センサの垂直画角

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

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

ミラーの作成:Manufacturing of mirror

In order to shape mirror, I used "Heat forming" method. This is generally known as a method that makes thin plastic sheet specific shape with pressing sheet onto the mold after heated the sheet up and make it elastic.

After you fixed the parameters of mirror, you need to print the mold out with 3D printer or something. As far as I know, some Japanese teams make the mold with their own hands, this is also fine I think(this is kind of Japanese vibe way by the way though).

But usually if you print the mold with 3D printer, the surface of mold become very rough and it will be transferred to the mirror. So in order to avoid the surface of mirror becomes rough, I used plastic paste to fill the uneven shape and make the surface smooth.

The mold I made is shown in figure7. As you can see, surface covered by yellow plastic paste and its surface is smooth. Then you should to care heat damage of plastic mold, but in this case, it takes only few seconds so no problem happened.

Inventor3

Figure6 The hyperbola curve surface 3D CAD Model

図6は3D-CADで作成した双曲面のモデルです。 このデータを使用して、実際にミラーを作成してきます。 ミラーの作成には、ヒートプレスと呼ばれる手法を使っています。

購入当時で1500円と非常に安かったためこれを選びました。 ヒートプレスにガスコンロを使う例もあるようですが、高確率でプラ板に火が付くためお勧めしません。

上の商品のような電熱器タイプをお勧めしますが、家にあるからと言って例えばキッチンから電気コンロを借りて樹脂を溶かす…なんてことをすると以下お察しなので、 なるべくご家族と喧嘩にならないメイカーライフを送りましょう。 自分はヒートプレス用に新規購入しました。

For heating, I bought kitchen electric heater dedicated for this making. You may think you can use gas cooker for heating but I DO NOT RECOMMEND TO DO THAT. The plastic thin sheet easily burn if you take it close to the fire, it would be dangerous. Or another, you can use heat-gun to heat the mirror.

UNADJUSTEDNONRAW_thumb_2f7

Figure7 The mold for plastic heat forming

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

UNADJUSTEDNONRAW_thumb_2eb

Figure8 A vinyl chloride mirror sheet

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

A lot of teams from oversea asked me "How do I get plastic mirror sheet which is appropriate for heat forming?" though unfortunately I have no idea what kind of shops are available in your location. Also I sometimes look for a shop in Japan that have international shipping, but as far as I know there are no shops like that.

Or you might be find some other items instead. I think even if you choose another items that available in your location, that could be okay if the sheet you buy having a specific conditions for the heat forming.

Through my experience, those below are important in terms of applying heat forming for the plastic sheet. But actually, I think there is nothing that never fail. That means you have to test several materials by yourself in any case.

  1. It becomes soften when you heat it up --> Vinyl, Polycarbonate, Pet, etc
  2. Thickness around 0.5~1.0 mm --> Thinner or thicker is not suit for heat forming
  3. Mirror keeps fine even you heat it up --> some of plastic mirror become clowdy when you heat up

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を使っています。

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

Movie1 Plastic sheet heat press forming

UNADJUSTEDNONRAW_thumb_2f1

Figure12 Detaching

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

UNADJUSTEDNONRAW_thumb_2f3

Figure13 Detached mirror and put it on the mold

整形後に切り出したミラーです。 型の上に乗せるとピッタリ重なります。 実際には、熱成形やプレス成形においては「スプリングバック」と呼ばれる、整形後の形状が若干型から浮き上がる現象を考慮する必要がありますが、今回はそれを誤差とみなして無視します。 これでミラーが完成です。 次のセクションで、モジュールの組み立てとカメラ取り付けについて説明します。

カメラモジュールとの接続 Connect 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(Pixy (CMUcam5) Smart Vision Sensor)で60~70USD (およそ7000~8000JPY)で購入できます。

Movie2 Pixy test 1 (Read with Arduino), from kemarin-tech.blog.jp

Pixyの動作とマイコンでのデータ読み取りのデモ動画です。

P1140164

Figure17 Assemble 360° camera module and connect usb cable

L字のUSBケーブルを使ってロボットからケーブルを引き出して調整します。

実際の動作 Demonstration

Yunit5 equips omnidirectional sensor but it is actually not for ball detection but only for goal detection. Consequently, the robot doesn't recognizes the ball as you expect, specifically, the robot can't detect ball when ball is close.

So this section just shows how heat-formed hyperbolic mirror works. Do not quote how I designed robot because as I said this robot is for IR ball rule, not for passive ball rule.

After the rule changed from IR ball to passive ball, common shape in the Soccer Open League is also in transition lately. If the robot equips omnidirectional camera on the top, the robot should be designed not to block camera's field of view.

As reference, please check design of RoboCup Middle Size League robot. Robots in Middle Size League equips omnidirectional camera, then you may see how they design it.

Movie3 Self-made 360° camera demonstration

動作のデモンストレーションです。 Pixy専用アプリケーションにて映像を取得し、青と黄とオレンジの3色を登録して追跡しています。 マイコンと接続した際にどのように座標が出力されるかは、動画2を参考にしてください。

P1140170

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

図18はオレンジボールを検出できる限界の距離を示したものです。 タイルカーペットが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)

図19及び図20は、全方位カメラがボールを検出可能な最小距離を示したものです。 図19において、カメラはボールの頭の部分のみを捉えている状態で、これ以上内側にボールが入り込んでしまうと、ボールを見失ってしまいます。 正面の場合、もう少し前進すればあとはホールドセンサ(ボールがロボットのキッカーに接触しているか検出するセンサ)の情報を使ってボールの追跡が可能である可能性があります、今後検討が必要です。

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

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

  • ハードウェア的な解決方法
    センサの位置を高くする、あるいは死角を発生させているオブジェクトの位置を変更する。
    課題としては、ハードウェアの再設計自体のコストと、デザインへの影響が考えられます。
  • ソフトウェア的な解決方法
    ボールの座標自体を、時間との条件付き確率分布として扱う。
    連続してボールを検出-->その辺りにボールがある可能性が高い、そうでなければその辺りにボールがある可能性が低い、等のアルゴリズムの実装。

「連続」の定義を調整しないと、鈍くなってしまったりノイズに弱くなってしまったりしそうですが、 Pixyの送ってくる座標自体が結構Noisyなので、いずれにせよ時間領域でのフィルタは必要になってくると思います。

おわりに Concluding

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

いま、世界中のRCJ参加選手がパッシブボール(カラーボール)への対応を迫られており、その中には全方位カメラの導入を模索しているチームも多いと思います。 今回、日本のみならず海外の多くのチームから僕の自作全方位カメラについての問い合わせがあり、僕としても是非多くの人にこの技術をシェアしたいという思いがあったため、この記事の執筆に至りました。 質問等はコメントかTwitterのDMかブログ右のメッセージ欄(公開されません)よりお願いします。