篠川です。今回はカメラに関する記事ですが、まず実践的なカメラ導入の注意点を先に説明します。

ちなみにカメラはSKY CrewがRoboCupJunior Soccerに参加すると決めた時から「載せよう」と考えていた、ある種のアイデンティティです。

今までの大会でそれなりにいろいろなノウハウを積んできたので、これからもなんとかこういった記事は出していきたいです。(忙しかったりなんだり、ちょくちょく更新止まるけど許して)

なぜカメラ?

詳しくは約半年前の記事にも書きましたが、 簡単に言えば主に以下の理由からです。

  • 戦略の幅が増える
  • ほかのチームと差がつけられる

当たり前といえば当たり前ですが、ほかのチームと勝つためには、アイデアで差をつける必要があります。

別に特別なことをしなくても、お高い部品を積んで、アウトオブバウンズや故障をせず、きっちりボールを追うなどのことをこなしていれば、関東、日本と勝ち上がることは可能でしょう。

しかし、それだけでよいのでしょうか?

「いいモーターを積んだチームが勝つ」というようなつまらない競技にはしたくないですよね。

しかも、それで仮に日本大会を勝ち上がったとしても、上に行けば行くほどいい部品を積んだロボットは増えてきます。

つまり、(当たり前ですが)誰でもできることだけやっていても、勝てないのです。

どんなロボット競技でもそうですが、結局ものをいうのはアイデアだと私たちは信じています。

そんな方向性のSKY Crewにとって、「敵よけ」「FW・GK入れ替わり」はサッカー参入の時から目指していた夢であり、それらを実現しているのがカメラなのです。

積み方のバリエーション

「さあ、カメラを積もう!」となった時にまず考えるのが、普通に載せる全方位かですよね。

それぞれの特徴や利点などを説明していきます。

1. 普通に載せる(直置き)

  • 全方位ミラーを作るのが大変
  • 最初からいきなり全方位カメラをプログラムすることはリスクが大きい
  • ミラー・周辺部品はそれなりに重い

こういった理由から、Lightweightなら多くの場合は前向き、もしくは後ろ向きにカメラを取り付けることが多いでしょう。

ただし、Openではオレンジボールを認識するために、全方位カメラは必須です。

それからこの場合重要なのが、FW機には前向きGK機には後ろ向きに取り付けることです。(理由は後述)

メリット1. 簡単

簡単であるということは、設計の上で結構大切なポイントです。しっかり動作することを保証するには、やはり複雑にしすぎないことは大切ですよね。

それから、OpenMVの場合Pythonでプログラミングすることになります。

Pythonを使ったことがない場合はその分の学習コストも(そこまで高くはありませんが)必要ですし、バグのリスクもあります。

いきなり全方位を搭載するのはそれなりに大変です。ある程度の慣れ、練習はあってよいでしょう。

メリット2. GKが自陣ゴールとの位置関係を楽に計算できる

全方位ミラーを通して見ると、視界はゆがんでしまします。

しかし、直接カメラを後ろ向きに取り付けると、「ゴールから横に出すぎていないか」「前に出すぎていないか」といった判定がとても手軽にできてしまいます。

全方位でももちろん可能ですが、後方の視界を確保し、安定性を高めるという点で直置きは大変やりやすいです。

メリット3. ゴールがはっきりと、大きく見える

360°ではなく180°のみの視界であり、ミラーのゆがみなどの心配もないことから、カメラにとってはゴールがより大きく、きれいに見えることになります。

2. 全方位カメラ

カメラを真上に向けて、円錐またはドーム状のミラーを取り付けて360°見回せるようにしようというものです。

オープン機はオレンジボールを認識するため、必ず取り付けることになるでしょう。

ミラーの作り方や形状については別記事でゆくゆく解説します。

メリット1. 相手ゴールと自陣ゴールを同時に認識

これの何がうれしいかというと、マルチプルディフェンスを完全に防げるようになります。

割と知名度は低めかもしれませんが、最新ルール(日本語版)には このようなことが書かれています。ご存知でしたか?

マルチプルディフェンスが繰り返された場合、ロボットは故障として扱われます。単一の中断されていないチャンクの間に、3 回以上空いている中立点に移動させられたロボットは、故障したとみなされます。

注:ここでチャンクとは、何らかの理由(例えば、試合の前半が終わったとき、故障したとみなされたとき、またはアウトオブバウンズとなったとき)でロボットが 1 度フィールドから撤去されてから、次にフィールドから撤去されるまでを指します。

長いですが、要するにマルチプルディフェンスに対する罰則が明確に定められているのです。(しかも割と厳しめに)

ちなみにこれは2018年の世界大会になって追加されたルールです。ルール変更はちょくちょくありますから、気を付けましょう。

(逆に言うと、それまではマルチプルディフェンスがどこまで行ったら故障なのか、はっきり定められていませんでした。被害を受けたのが私たちで、2018日本大会の試合中かなり言い合いになってしまったことがあります。)

話を戻すと、このマルチ対策というのが割と難しいんです。距離センサーを後ろ向きに取り付ければ距離は測れますが、自陣ゴールよりも横にずれているときやGK(キーパー)がいるときに問題になります。

しかし、カメラがあれば全く問題が起きません。FWも相手ゴールと同時に自陣ゴールの距離・位置関係までわかるからです。

日本大会においてマルチで危なっかしい思いをしたことが、私たちが全方位にした大きな理由の一つです。

メリット2. 斜めを向いていても対象との位置関係が正確にわかる

このメリットは主にGKに発生します。

先ほど直置きのメリット2.で「自陣ゴールとの位置関係を計算できる」と書きましたが、(ジャイロセンサーを積んでいる限りあまり起きないことですが)何らかの理由でGKが斜めを向いてしまったときに問題が発生します。

ゴールが斜め向きに写るわけです。

これに正しく対処するのはそれなりに面倒です。

しかし、全方位であればミラーは円形ですから、いくら斜めを向いていようと関係ありません。

まあジャイロセンサーで正面を向いてから位置関係を計算すればよい話ですが。

(今回の記事とは関係ありませんが、ジャイロセンサーの記事もゆくゆく書く予定です)

メリット3. FW・GK入れ替えの夢

これを実現するためには、「FWになったら前のゴールを(メインで)見て、GKになったら後ろのゴールを見て」とするわけですから、全方位カメラは必要です。

割とこれは楽しかったですよ。

ちなみにここまで「FW機とGK機に分担する」前提で書いてきましたが、もちろん「両方FW」という戦略もなしではありません。

ただし、ボールの取り合いマルチプルディフェンス、相手のキッカーによるシュートマカオシュートなども考えると、やはりGKも作ったほうが安心ですね。

これも余談ですが、FWとGKの入れ替えは、マカオシュートを使うチームに対して特に有効でした。

マカオシュートを放った直後というのは、たいていスキが生じるものだからです。

最後に、それぞれのカメラに写る様子の写真を貼り付けておきます。

cam1

cam2

設計時に気を付けること

主なものを2つ取り上げます。

向き

カメラの視野は(多分どのカメラも)横長の長方形です。

直置きなら長いほうが水平になるように、全方位ならミラーをちょっと大きめにしてコートの縦の向きに長い辺が来るように置くことで、見える範囲を最大化できます。

視界を隠さない

特に全方位の時ですが、視界を遮るものをできるだけなくしましょう。

不透明なハンドルやフレームによって、カメラの後ろ斜め下が隠れてしまい、GKが自陣ゴールに近づいた時にゴールの下のほうが写らなくなってしまうことがあります。

これは距離を測るときに致命的になるので、注意してください。

試合中に気を付けること

こちらも2つ。

干渉

うっかり相手が青色LEDを使っていたり、見える範囲に黄色い部品をつけていたりすると、それをゴールと認識して突進していくことになってしまいます。

試合が始まる前にしっかりチェックして、干渉しないか時間をとって確かめてください。審判も待ってくれるはずです。

見つけたら指摘して、LEDを切ってもらったり、黒いペンで塗りつぶしてもらったりして対策してもらいましょう。

試合中に気づいた場合も、すぐに審判にコールできます。

ちなみに、白色LEDでも写り方によっては青と認識されることがあります。それはある程度までは認識プログラム側の責任ととられうるので、気をつけてください。

調整

ゴールの形や色合いは、たいていコートによって様々です。

しっかり調整しないと、FWがぐるぐるその場で回りだしたり、GKが自陣ゴールにぶつかりっぱなしになったりします。

各試合前には早めにコートに向かって、調整しましょう。


こんな感じでカメラを搭載したところで、今回の記事は以上です。

今回は余談多めでしたが、最後まで読んでくださりありがとうございます。

今度はプログラマの出番です。画像認識のやり方や全方位ミラーの設計・作成もただ今(本当に)執筆中で、日本大会までに出したいと思っているので、よろしくおねがいします。