ET相撲NEO攻略について

# まずは自己紹介から・・・

全国３千万のロボコンファンの皆さん、初めまして！ETロボコン2016,2017と宇部高専~~(変態養成学校)~~からデベロッパー部門、アドバンストクラスに出場した「パズどす」のチームリーダーです。

2年ともCS大会に出場したので、チーム名を知っている方もいるのではないでしょうか。アドバンストの競技内容が「パズルを解く」ことと、「相撲をする」ことだったので、**`パズ `**ルと**`どす`**こいをするという意味合いで「**パズどす**」という名前にしました。すごくお気に入りの名前なんです。これ。

僕個人の話をすると、2015年にイノベータで初出場、2016,2017年は、プライマリーを飛び級してアドバンストに挑戦しました。ほんとはTrikeで遊びたかったのですが、まさかの走行体の変更で今のHackEVになってしまいました。

若僧なので、技術があるわけでもなく非常に恐縮なのですが、Qiitaで記事を書いてみてはというお誘いをいただいたので、2年間攻略してきたET相撲NEOについて書いていこうと思います。今回はETロボコン2017でのET相撲NEOについて書いていきます。つたない内容かもしれませんが、最後までお付き合いくださいm(_ _)m
頑張って文字数抑えようと思っていますが、こだわりを書くとどうしても長くなってしまう（多分わかってもらえるはず）ので、ご容赦ください。


# ET相撲NEOとは
アドバンストクラスで使用される走行体、HackEVで木の土俵の上のブロックを押し出したり寄り切ったりするやつですね。この走行体のために作られた難所のようなものでしょうか。HackEV(はっけぶい）という名前にピッタリですね。このカレンダーを見ている方はルールは大丈夫だと思うのでここでは割愛します。わかんない方はぜひETロボコン公式サイトから競技規約を確認してみてください！→[ETロボコン公式サイト　競技規約](http://www.etrobo.jp/2017/gaiyou/kiyaku.php)

さて、今回この難所に挑戦された方、今年の一番の悩みはなんでしたか？僕の場合、**「時間」**でした。ボーナス獲得が認められる最大時間はスタートの「Go!」の合図から2分間。ベーシックを走ってから、あのくるくる回る新幹線を検知して避けて全部押し出し、寄り切りしてたらとても2分じゃ終わらないじゃないか！！！！！　という参加者も多かったのではないでしょうか。僕も同じです。では、どのようにして2分以内で実現したか。僕の頭の中をそのまま書くと、こんな感じです。

<dl>
<dt>新幹線検知してたら時間ないよ問題</dt><dd>→新幹線止めてしまえば検知しなくていいじゃない</dd>
<dt>そもそもどうやって動かそうか問題</dt><dd>→去年のアルゴリズムをそのまま使いたいな…</dd>
<dt>懸賞どうやって取ろうか問題</dt><dd>→え、待ってこれどうしたらええんやろ</dd></dl>

ざっとこんな感じでしょうか。問題だらけですね。ベーシックの走行速度を上げて、難所も何らかの工夫をしないと完全攻略は難しかったでしょう。
今回、僕はベーシック部分はかなりリスクはありますが、大胆なショートカットを実装しました。地区大会では例のチームのショートカットを実装しました。今が旬のあの魚の名前が入ったチームです。CS大会ではショートカットコースを潰してくるだろうということで（見事に潰されていました）INコースを攻めるかつ相手コースに侵入しないルートを走行させました。トレースなんてしてたら勝てないと思ったので、ベーシック区間はほとんどライントレースをせずに走行しています。実装方法その他については今回は割愛します。

では、難所部分のそれぞれの問題について細かく書いていきます。


## 新幹線検知してたら時間ないよ問題 
 新幹線検知は最初からするつもりはありませんでした。ソナーセンサの動作不調の話がMLであったりしたので、時間短縮とリスク回避のためにも駅のレバー操作で新幹線を停止させようと考えました。
ということでまずどうやって駅のレバーを操作するか、ですが、尻尾では弱すぎるし最悪外れてしまうこともあったので腕で操作することにしました。レバーまでは近くの灰色マーカからの距離計算で移動し、腕をあげてレバーを操作、黒線に復帰して難所へ、という戦略でした。以下に手順を示します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/224609/0bc117ae-7dd3-89a2-578d-37168b5c8bdf.png)　　　　　　　　　　　　　　　　　　
1：ベーシックエリア走行（ノンライントレース）
2：黒線検知して線に復帰
3：灰色検知するまでライントレース
4：検知してから一定距離走行（試走時に微調整）
5：駅レバーに対して正対し、レバー操作、線に復帰して難所へ

新幹線を検知する必要がないことで、検知の際の待機時間の制約がなくなるので完全攻略の品質の大幅な向上が狙えます。

## そもそもどうやって動かそうか問題
さて、新幹線を全く気にすることなく土俵に入場したらついにブロックの押し出しに入ります。マーカに行くまでにどのような動きをさせるとよいか。縦横無尽に走行させるのがいいのですが、僕たちの技術ではそれは無理だったので、やはり線を沿って走行することにしました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/224609/c9b11a72-fc06-44a5-422b-ed02a8231de8.png)
1：指定色検知まで走行
2：旋回して次のマーカまで移動
3：旋回して黒線復帰、次のマーカまで移動
4：2と同様
` ※ブロックの押し出し、寄り切りは各番号の最後にそれぞれいろに対応した処理を実施する。 `

2016のルールだと、ブロックの位置が決まっていたので色を見ずに済んだのですが、2017はブロック色を検知する必要がありましたので、ブロックに対して正対するようにトレースしてマーカ、ブロックを検知するようにしました。土俵入場、退場以外の動作は土俵の1、2枚目で同じです。

大変なのはトレースの調整です。閾値は競技前のキャリブレーションで決定しました。直線はブレず、かつ直角でしっかり曲がる、かつスピードを上げて…という鬼のような調整をしました。
ライトセンサで取得したRGB値をグレースケール変換し、どんな値を取得しているかでPIDゲインを変更しました。去年は、色検知のRGBとトレースのReflectの値をひたすら取得して色検知とトレースの互いに及ぼす影響を少なくしようとしていましたが、今年はRGB値でトレースと色検知をいっしょにしました。トレース中の誤検知はなかったので、いい感じにできたのではと思っています。

##　押し出し、寄り切り動作
他の参加者や、実行委員の方たちのウケが一番よかったのはこの部分でしょうか。特に押し出しですね。
押し出しは、**前進＋腕をあげる**　ことにより実現しました。これは動画を見てもらった方が速いので、中四国地区大会（2017年）でご覧ください。動画URLを最後のほうにのっけておきます。調整にかなり時間はかかっていますが、かっこよく押し出しできてるでしょ？お気に入りポイントの一つです。ただしカラーセンサをブロックに打ち付けてしまい、カツッと大きな音がしますので、もしかしたらカラーセンサへのダメージがあるかもしれないです…



## 懸賞どうやって取ろうか問題
懸賞、悩みました。もうあきらめようかとも思いましたが、2016の相撲のコースは完全制覇したので、その意地で頑張って作りました。
懸賞の位置がやらしいですよね。非常に。もう自己位置に依存した制御しかないと思ったので、どこで自己位置のリセットをするかで悩みました。結局新幹線のレールを青検知して、そのタイミングで自己位置推定の各種データをリセットし、あとは角度旋回の調整を鬼のように頑張りました。また、土俵の黒線がクロスしている部分を検知してそれを懸賞を取りに行く動作のトリガーにしています。

懸賞が取れても、今度は置くのが難しかったんですよこれが。懸賞の持ち上げ方によっては重心が崩れて腕をあげたまま前に倒れてしまったり、三方に引っかかってしまったり。これらの問題を解決するため、土俵退場を少しずらして行い、三方に右輪を乗り上げるように調整しました。これにより、前に倒れる問題を解決し、懸賞を置く精度も向上しました。
![IMG_EOS 5D Mark III_2016_09_18_0232.jpg](https://qiita-image-store.s3.amazonaws.com/0/224609/49cc0605-d60c-5241-0987-6078c82e79c7.jpeg)







## 動画URL
丁度競技が始まる直前のURLを載せています（46：30あたり）。ベーシックは例のショートカット、新幹線停止、相撲まで行きましたが、懸賞はミスをしてしまいました。
動画：[ETロボコン2017中四国地区大会の様子](https://youtu.be/fMXcW-8Sm3c?t=2790)

また、11月に行われた広島IT総合展で行われたエキシビジョンマッチの動画も紹介します。2回走行がありますが、両方宇部高専チームです。1走目(13:15~)は相撲がいい感じにできてますが、この時用にトレース案に書き換えていて、新幹線停止の調整が上手くいかず、少し時間オーバーしてしまいました。2走目(22:00)は、ブロック並べの凹四角形＋センターブロックの完全制覇が見所です。なんとリザルトタイムは-35.3　秒でした。非公式ではありますが、かなりの高リザルトだと思います。
URLは1走目です。2走目は22:00まで飛ばしてご覧ください。
動画：[エキシビジョン大会の様子](https://youtu.be/6TIeXP4uY7w?t=795)


2017年のCS大会では、競技3位に入賞しましたが、難所は1つもクリアできておらず、悔しい結果となってしまいました。また機会があればリベンジしたいと思います。


# 最後に
さて、長々と書いてきましたが、いかがでしたでしょうか。学校のテストがあったこともあり、あまり時間がなかったので凝ったことが書けずにすみません。技術的なことは何も書いていませんが、誰でもマネできる小さなコツがいくつか紹介できたかと思います（必ずその通りに行くとは限りませんが）。同じ問題で困ったときは、この記事を思い出してみてください。

僕の身の回りでは、アドバンストクラスに高い壁を感じている人が多いのですが、走行体自体の動かし方はWayより簡単だと思います(wayをしっかりいじったことはないが)。割と思った通りに動いてくれますよ。倒立振子をかまさないので、入力がよりダイレクトに走行に反映されます。ただ、モデルは難しいと思います（毎年非常に悩みながら書いて、審査でフルボッコにされます）。ただ、そこを含めてのアドバンストクラスですので、プライマリーを経験した方はぜひ挑戦してみてはいかがでしょうか。
↓CS大会でのピットで。2年間頑張ってくれた走行体です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/224609/7334fa05-7aff-b760-e430-9afaa2f7d82a.png)

# 参考文献
ETロボコン2017競技規約の写真を一部使用しました。
動画URLはYouTubeのものです。
1枚目走行体は2016年中四国地区大会で実行委員の方に撮影していただいたものです。
2枚目走行体の写真は自分で撮影したものです。