SKY Crew Lab

RoboCup Junior(ロボカップジュニア)参加チーム、SKY Crew(スカイクルー)の技術ブログ。
技術の共有・伝達を目的に、ロボットに関するいろいろな情報やガイドを載せていきます。

2017年大会でRescue Line(レスキューライン) 世界3位、2018年大会でSoccer Lightweight(サッカーライトウェイト) 世界総合5位を獲りました!

2019年01月

こんにちは。SYです。今回は前回の続き、敵よけアルゴリズムについてです。

前回のおさらい

敵よけにはカメラ距離センサなどが不可欠!

ゴール前の敵目の前の敵をそれぞれよける!

ゴールが空いた一瞬を狙ってシュート!

アルゴリズム その1 ~敵よけ編~

敵よけアルゴリズムは4段階に分けられます。

図で表すと、下のような感じになります。

敵よけの説明

距離センサで敵を検知

まず、距離センサで敵がいることを検知する必要があります。

敵は凸凹していて距離センサがきちんと反応しにくいため、一瞬でも近いと検知したら敵がいるとし、一定時間遠いままであれば敵がいないとすることにしました。

回転して敵をよける

一番左の図にあるように、敵がいるとなった場合、最初にゴールがある方向へと前進しながら大きく回転します。

こうすることで、ゴールの方向へと進みつつ、相手の捕捉ゾーンからボールを奪い取ることが可能となります。

横に移動して敵をよける

中央の図にあるように、一定の角度以上回転した場合、ゴールがある側へ斜め方向に動きます。

すでに機体がある程度回転しているため、斜め方向に動くことでゴールに対しほぼ横移動することができ、ボールを捕捉ゾーンに入れたまま敵をよけることができます。

開いた瞬間を狙ってシュート!

一番右の図にあるように、敵がいなくなった場合、ゴールがある方向に向きつつ前進し、ゴールが空いていたらシュートします。

こうすることで、ゴールが空いた一瞬を狙って正確にシュートすることができます。

一つ一つの動きは単純に見えますが、これがあるとないとではボールを取り合うような状況になったときの戦況が大きく変わります。このような敵よけを行うことで、私たちはより高確率でシュートまでたどり着けるようになりました。

アルゴリズム その2 ~シュート編~

シュートするかどうかは、捕捉センサ距離センサカメラの3つを併用して判断しています。

まず大前提として、捕捉センサが反応していて、ボールが捕捉ゾーンに入っている、つまりキッカーで蹴れる位置にボールがあることが必要です。

次に、距離センサによって目の前に敵がいないことを確認します。もし敵がいれば、シュートはせずに先ほどの敵よけを行うことになります。

そして、最も重要なカメラによる判断です。カメラでは、正面の一定の方向がゴールの方向の範囲に含まれていればシュートを打つ、としています。言葉ではわかりづらいのでいくつかの例を挙げて説明します。

敵よけの説明2

黄色の方向が正面の方向、赤色の方向がゴールの見える範囲を表し、○がシュートできる場合、×がシュートできない場合です。

左上ではGKがいるためゴールが斜め方向に見え、前方向にゴールがないためシュートできませんが、右上ではGKがずれているため前方向(黄色)の範囲がゴールの範囲(赤色)に完全に含まれています。

また、左下ではFWがいるためゴールが斜め方向に見えシュートできませんが、右下では敵よけをして自分が斜めを向いているため、相対的にゴールは正面にあり、シュートができると判断されます。

これら3つを組み合わせることで、一瞬を狙った正確なシュートが可能になります。

まとめ

これらのアルゴリズムを組み合わせることで、最初に見せたような敵よけが可能になります。合わさると複雑かもしれませんが、一つ一つの動きは単純なので、そこまで難しくはないと思います。

また、この敵よけもまだ発展途上なため、これからも改善を続けていく予定です。

疑問点や質問、意見等あればブログのコメントにてお願いしますm(_ _)m

では、また次回の記事で!(´∀`)ノシ

先日は今後の記事に関するアンケートにご協力いただき、ありがとうございました。

カメラの認識アルゴリズムが得票率が高かったので、それに関する記事を書き始めているのですが、説明の上でカメラにどのように映っているかを写真で示しながら説明しようと思ったので、詳細な記事については冬休み明けの活動再開まで少々お待ちください。

そこで今回は、チーム戦略について書こうと思います。

ちょっと企業みたいでかっこいいですね。

今まで大会に参加した中、私たちはいろいろなチームのいろいろなロボットを見てきました。

その中で蓄積した勝つチーム・負けるチームの違いや、心の持ち方について、いくつかの記事を通して書いていこうと思います。

今回はタイトル通り、ソフトウェアの重要性について。

一応確認:ソフトウェアというのはモーターやマイコンなどの物理的な部品ではなく、プログラミングのことです。

言いたいことを先に行ってしまうと、「ちゃんとしたプログラマーを持とう」 ということです。

というわけで、さっそく内容に入っていきましょう。

「勝つ」という気概

さて、勝つためにはどうしたらよいのでしょうか。

設計の段階で 「勝つビジョン」 を持っておくことは非常に大切です。

ほかのチームと似たようなものを作っていても、仕方がありません。

それでは相手に打ち勝つことはできないし、そもそもそれではロボットを作って大会に参加する意味がないですよね。

「ほかのチームよりも優れたロボットを作る」 という目標を持ち続けているからこそ、勝利をつかむことができるし、お金をかけてロボットを作り、大会に参加する意味があるというものです。

「こうやってほかのチームに打ち勝つ」 というはっきりしたイメージやアイデア差のつきどころ、ということですね。

じゃあどう勝つのか

たとえば「ボールを追う・ラインから必ず復帰する」といったことは、どのチームも当然のようにやることです。

だとしたら、どうすればほかのチームより優れたロボットを作れるのでしょうか?

ここで 「カメラを積む」「キッカーを積む」「マカオシュートをする」 といった発想が出てくるわけです。

ちなみに(以下余談寄りです)、maxonなどのお高いモーターを買えば勝てる(無いと勝ち上がれない)、という考えもRCJ Soccer界にはあるようです。

確かに資金があるほうが有利、ということは事実かもしれません。

しかし、SKY Crewの世界大会機はモーターが故障して現地で取り換えたこともあり(1個300円くらいだった)、LEGOのモーターくらい遅いものでした。

日本大会もそうです。

つまり、アイデアと努力次第で世界5位になれると実証できたわけです。

(なんか割と遅くても勝てるんですよ)

また、maxonを積んで実績を上げているチームは、ほかのところも作りこんでいます。

高いお金をかけるわけですから、思い入れがあるのも当然ですね。

私たちも結局今年からはmaxonに交渉しスポンサーしてもらうことで、安くmaxonモーターを手に入れることができ、速くなりましたが…

要するにこういうことです。

  • いいモーターを積んだチームが勝つというような夢のない世界ではない
  • いいモーターを積めば必ず勝てるとは限らない(ある程度有利にはなるかも)

ちなみに(また余談ですが)maxonのモーターは(ものによりますが)安いものでも2万円はします。

school supportというサービスで安くて1万6千円くらいになり、私たちはYoung Engineers Programというもので結果44%引きになりました。

結局は工夫のしようですね。

ハードウェアとソフトウェア

さて話を戻しますが、つまりは「高度なロボットを作ろう」 ということです。

ここでよく見かけるのが、「ハードウェアは優れているけどソフトウェアが追い付いていない」 というチーム。

やろうとしてる方向はわかるけど、実現できていない・ずれているということです。

エンジェルリング積んでみたけど結局角でアウトオブバウンズしていたり、そもそもスタートから動き出さなかったり。

「この状態で全方位カメラやキッカーなどを積んだところで仕方がない」 ということはわかっていただけるのではないでしょうか。

あとちょっと衝撃だったのが、普通の(キーボードで入力する)プログラミングではなく、C-styleやScratchといったGUI(マウスで操作するスタイル)で頑張っているチーム。

SKY Crewのロボットが積んでいるプログラムは2千行超えです。外部ライブラリも様々なものを利用しています。

GUIで頑張るくらいなら、プログラムが書ける人材を取り入れたほうが絶対にいいです。

いいチームにはいいプログラマがいる

というわけで、結局言いたいことは 「いいプログラマを持て」 ということです。

小学生の頃からLEGOでロボットを作っていたようなロボット作りのプロであったとしても、プログラミングは全く別の能力です。

そして、勝てるロボットには勝てるプログラムが絶対に欠かせません。

考えてみれば、そこまで意外な話でもないはずです。

サッカーにおいてはどのチームも構造的には似たようなロボットを作ってくるわけですから、なおさらですね。

それなのに、ロボット自体は悪くなさそうに見えるのにプログラムの完成度が及ばず、結果につながらないチームがたくさんあります。

皆さんのチームは大丈夫でしょうか?

まず、「ボールを追う・ラインから復帰する」ことは点を決めるための最低ラインです。

これができない状態でなにやら高度なことを取り入れようと思ったとしても、ソフトウェアがそれに見合うものでなければ、仕事ができないガラクタになってしまうことだってあり得ます。

基本的なところはしっかり詰めてください。

ちなみにコート角でアウトオブバウンズしてしまうなんかも、割と差のつきどころだったりします。

それから、それなりに欠陥のないものができ、順調に勝ち上がっているが、各地のブロック大会、日本大会あたりで壁にぶち当たってしまうチームもそうです。

自分たちのロボットを成長させ、勝ち上がっていくために必要なのは アイデア力勝つビジョン です。

そしてその実現を支えるのはソフトウェアの力なのです。

以上が今回の私からのメッセージです。

ちなみにSKY Crewのチーム構成は、ハードウェアの機体設計・製作担当が1人、回路担当が1人、そしてプログラマが2人です。

ソフトウェア担当が半分ということになりますが、多すぎるということは決してありません。

やりたい戦略や完成度を高めたい部分はいくらでもあるので。

「ロボット大会は頭脳戦」っていうのも割と真実だ思いますよ。

関東大会終わったタイミングでこんな記事を書くのもあれだなあとは思いましたが、長々とここまで書いてみました。

ご意見やご質問等あれば、なんでもコメントやメッセージでお寄せください。

↑このページのトップヘ