Amalgam Blog

(断りがない場合WLの話です)

「ルールが難しい」とか「運営が匙加減を知らない」とか普段言ってますが、今回は逆の路線から
「じゃあどういうロボットだったら対応できるのか」を真面目に考えてみます。

まずはロボットに対する要求仕様を定める必要がありますが、当然ルールがある競技なので

「ルールで定められている課題を攻略可能なロボット」

である必要がありますが、ルールも多いので果たしてどこから手をつければいいのやら...

ここで、ジャパンオープンの競技結果を見ていると結構なチームが時間を使い切るような競技をしていたことに注目して、まず初めに

「8分以内に競技を終了できるロボット」

という軸で考えてみます。


競技に必要な時間をざっくり見積もるため、ライントレースの長さや課題の数を数えていきます。
例えばジャパンオープンのラウンド3の競技レイアウトを見てみましょう。
スクリーンショット 2023-04-02 20.31.51

スクリーンショット 2023-04-02 20.32.13

指折り数えると、救助エリアを除いてスタートからゴールまで54タイルあることが分かります。
1タイルあたりの長さが30cmだとして、これを5分で走り抜けることを考えると、5.4cm/sで走行する必要があります。
ただこれは現実的ではなく、実際は様々な得点要素がライントレース上にあります。
例えば障害物であればこれを避ける時間が必要です。課題の攻略は基本的にロボットの動作速度に依存すると仮定して、「障害物のあるタイルは普通のライントレースタイルの2つ分の時間が余計にかかる」みたいな考え方をします。つまり障害物に進路上3回遭遇するラウンド3のレイアウトでは、
54+2×3 = 60
で60タイル分の長さがあるものと見積もります。これを換算タイル数とします
同様に他の課題について時間の重み付け係数を表のように設定すると、ラウンド1~3でそれぞれ表のような換算タイル数が計算できました。

スクリーンショット 2023-04-02 21.24.05

各係数は採用するアルゴリズムによって上下すると思うので各自適当に変えてください。

求まった換算タイル数を元に、目標時間と安全率(進行停止等でのタイムロス)を入れて、必要走行速度を計算します。

表によると、換算タイル数が一番多いラウンド3では9cm/sでライントレースを行えば事足りるそうです。

あれ、意外と遅い
まぁ安全率が1.2と低い=ほぼ進行停止をしない前提なので、当然といえば当然でしょうか。
逆に言えばロボットの動作速度をここまで落としても、進行停止がなければ5分でライントレースが終わり残り3分を救助に充てられる、という計算になります。

とりあえずこの数値から、
①モーターと減速比、タイヤ径
②電源
あたりが見積れます。



おまけですが、この9cm/sという数値を元に、マイコンの処理速度を見積もってみます。
といっても私自身あまり込み入った部分はよく分からないので、これもざっくりとした見積もりです。
結論として、全く気にする必要はなさそうなので読む必要はあまりないです。

ラインを引くのに用いられているビニールテープはルール上1~2cmと定められていますが、実際には入手性の良い幅18mmのものが用いられていると思います。
このラインを9cm/sで横切ると0.2秒で通過することが分かります。

つまりロボットの制御周期は最低でも5Hzはないと、そもそもラインを見過ごしてしまう可能性があります。
余程変なシステムを組まない限りはこれを下回ることはないとは思いますが...


軽く調べたところ、ArduinoではanalogReadで100~200μsで読み取り可能です。
I2C通信ではビットレートを100kbpsの元、1回の通信として20bitだとやはり200μs程度です。

例えばこれらのセンサを合計20個つけると200μs × 20 = 4msとなります(250Hz)。
実際は諸々の影響(特にI2Cだとセンサ側の応答速度等)で読み取り速度は落ちるでしょうが、ライントレースの処理自体を50~100Hz程度でこなすぐらいなら余裕そうな感じです。
つまりこの辺りは全く問題にならないですね。

折角なのでプレゼンポスターも漁っていきます。
まだジャパンの公式サイトにアップロードされていないのですが、優勝したRememberはTwitterにポスターを載せてたので、まずはここから。



【制御まわり】
メインボードはTeensy4.1でセンサ類は次の通り
フォトリフレクタ :10
ToF測距センサ
:7
マイクロスイッチ :5
カラーセンサ :2
磁気エンコーダ :2
加速度センサ :1
カメラ :1

多いので単純なハードの実装が大変だったかと思いますが、ここまで増やせばソフトの負担はだいぶ減ったのかなと思います。
またセンサが多ければ多いほどフィールドから得られる情報量も多いため、競技中のあらゆる行動を時間短縮できます。
個人的に意外だったのが姿勢制御用のセンサが加速度のみでジャイロ等角度に関するものがない点ですかね。串やバンプ等の外乱対策を突き詰めるには欲しくなるところです。

モーターは
駆動用 :4(DCモーター)
救助アーム :4(サーボモーター)
被災者放出用 :1

ですかね

【機体構造】
よくよく見ると、結構簡単に(というと失礼ですが)作ってあるのがわかります。
個人的にポイントが高いのはベース部分にタミヤのユニバーサルプレートを使っている点で、試作のしやすさとか後出しでの設計変更にかなり強かったと思います。
一方で細々した部品は3Dプリンタで作っていて、ここの棲み分けがしっかりしているなという感想です。

特にレスキューラインはハード自体にそこまで過酷な要求がないので、ちゃんと形さえ保っていればなんでもいいわけです。そういう意味で過不足のないハードウエアと評価できます。ハードを凝るのはいいけど、その分他がお粗末では元も子もないですからね...
逆にメイズとかサッカーの方だとガチガチに設計されたマシンが多いですが、あれはあれでハードへの要求が高い故の姿だと思っています。(ハードこだわり抜きたい人はそっちの方が輝けるはず)

今回のRememberの機体は初心者にもおすすめできるような機体だなと感じます。


【ソフト】
ハードと違ってプレゼンで語られていること以上を推測することは難しいですが、要約すると
・ライントレースはセンサの数で確実性を上げている
・レスキューキットはカメラで検出
・救助は測距センサを駆使して最短で
みたいな感じです。

【電装周り】
センサやモーターが多い割に見た目の配線はスッキリしています。
性能に直接影響する部分ではありませんが、見た目はもちろんメンテナンス性にも影響するので、ここまでしっかり仕上げてあると好感度が高いです。

ToFを繋ぐのにわざわざI2Cのハブを使っているということは、アドレス変更ができないタイプのやつだったのかな?

電源にはeneloopを使っているそうです。
安全でいいですね。
スペックの要件が厳しいサッカーの方ではリポ系のバッテリーがスタンダードですが、その分危険性も大きいです。事故の未然のために厳しい車検も設けられ、車検シートの事前チェックもあるなど毎年スタッフの胃を痛めている原因の一つかと思います。

方やレスキューは(さっきも言いましたが)ハードへの要求も少ないのでニッケル水素等の手軽に使えるバッテリーで十分戦えるはずです。


基本的にレスキューはハードへの要求は緩いので、そこをしっかりを見極めて制作コストを落とせば、レゴを使っていたチームが一年で自作に乗り換えるというのはできるんだな、と思いました。
(もちろん本人らの能力が一番でしょうが)






無責任レビュー続けていきます。

ワールドリーグも見ていきます。
まず得点分布
chart (12)
まぁいつも通りですね。
ざっくり4つのグループに分かれています。(下から①~④とします)

ルール上やることがとにかく多く、課題に忙殺されて全体的にまともに動かない、というのがグループ①でしょう。(それでも地区によってはジャパンに出れるんですね)


②は
「ロボットは一通り動くが、一部致命的に対応できていない課題がある」

③は
「ロボットは一通り動き、概ね動作している」

④は
「③に加え被災者の救助が行えた」

みたいな感じでしょう。

次にラウンドごとの得点の内訳と、得点源ごとの得点の内訳を見てみます。
chart (10)
chart (11)
ラウンドの得点内訳はひとまず無視し、得点源の内訳に注目したいと思います。
なおワールドリーグの救助得点はライントレース部分への倍率として与えられ、グラフの赤部分は「救助倍率による増加分」になります。

これ見るとグループ③と④の差が一目瞭然ですね。

というわけで
みなさんもっと救助にチャレンジしましょう

救助ボーナスの威力は絶大です。しかも1位(Remember)は2位(沙羅曼蛇)に対してライントレース部分では140点ぐらいの差で負けていますが、救助部分で巻き返しています。
(普段はあまり特定のチーム名は出していませんが、珍しくしっかりとレスキュー出来ていたので今回は出します。)

ちなみに彼らが具体的にどれぐらい救助できたかというと
Remember :レスキューキット×2、銀の被災者×2
沙羅曼蛇 :レスキューキット×2、銀の被災者×1
(いずれもLevel2)

となります。
細かいところでは進行停止の回数に差がありますが、基本的には被災者一人の差でライントレースの140点を巻き返したと言えるでしょう。

というわけで繰り返しますが
みなさんもっと救助にチャレンジしましょう


話を進めましょう
先ほどラウンドごとの内訳を無視しましたが、改めて見ましょう。
とはいえ救助得点による影響がかなり大きいので、ライントレース部分だけで再度比較してみます。
chart (14)
左から最終順位の順で並んでいます。
日本リーグの時にあった「第3ラウンドで大きく差が出た」みたいなことはなさそうですね。
むしろ上位陣は第3ラウンドを欠かさず取れてる傾向にありますね。

やはり決めては被災者救助ということで



あと最後に、一応これを...
chart (13)
横軸は得点です。
縦軸は...競技進行の停止回数です。
平均は出したくないですが、最小値でも20近いってのが中々現環境を物語ってますね。

ちなみに日本リーグはこんな感じ
chart (15)

ただ現状ワールドリーグでは
「進行停止を取ってチェックポイントをスキップしたりすることを戦略的に取り入れる」
ことをしないと競技時間的にも開発期間的にも厳しいと思うので、これは完全にルールと運営側の問題です。



無責任レビュー第2弾
①では「上位陣は第3ランドで大きく差がついた」ということが分かったので、特にそのラウンドに注目して見ていきます。
まずレイアウトがこちら
スコアリングシステムの結果から掻っ攫ってきたのでチェックマークが邪魔ですが、コースの様子は分かるでしょう。
スクリーンショット 2023-03-28 22.00.12
チェックポイント(CP)がスタートを含め7つあり、6つのライントレース区間があることがわかります。
以降、例えばCP2とCP3の間の区間のことを「CP3区間」と呼ぶことにします。

次に各チームの競技結果から、各CP区間での競技進行停止の回数を集計しました。
(最終得点の降順で並んでいます)
スクリーンショット 2023-03-28 22.04.53
各チームの進行停止回数を上限にCP区間ごとにまとめ、平均をとっています。
なお進行停止が3回を超えるものについては過大評価を避けるために3回として集計しています。
またCP区間までロボットが到達していない場合に進行停止数が0となり過小評価されることを避けるため、未到達と記録から推測できる場合、集計から除外するため"None"となっています。

最上部にCP区間ごとの平均の競技進行停止が計算されており、これによるとCP2とCP5の区間での進行停止が多かったようです。ここがラウンド3の結果的な核心部分と言えるでしょう。

まずはCP2区間から見ていきましょう。
得点要素は減速バンプ2本と十字ギャップです。
実際の写真も見てみます。(設営中なので余計なのものも多いですが)
XsTTuQdp 2

まぁ、しっかりと難しいですね。
①のバンプはS字カーブ上に配置されてる都合上
・バンプに真っ直ぐ入れない
・バンプを超えた先の線がすぐに曲がっている
という二重苦になっています。嫌ですね〜

②も難しいパターンですね。
・カーブ上にあるので①のような難しさが若干ある
・ロボットの片輪が乗り上げるので、カラーセンサへの影響が不均一に出る
みたいな感じです。
特に今回の例ではカーブ外周にバンプがあるので、
進行方向右手のタイヤが乗り上げる
→右のラインセンサが浮き上がる
→右のラインセンサの反射量が減り、相対的に暗く見え、黒を誤認する
→右方向に進もうとする
という形で、カーブ方向と逆方向に進む傾向を生んでしまいます。
アルゴリズムやハード構成によっては結構な致命傷になるのかなと。

特にバンプがらみの不具合はその場で対応しづらいものが多いので、結構なチームが苦労したと思います。

③は直角直後のギャップとなりますが、まぁジャパンオープンのレベルを考えるとそこまで難しいポイントではないと思います。


CP5区間を見ると、カーブ直後のギャップとやや複雑なライントレースでしょうか。
XsTTuQdp 3
正直あまり難しいポイントはないでしょう。
進行停止の集計表を見ても上位陣はあまり進行停止していないので、どちらかというと下位陣が苦労した形になります。

①は直線区間の短いギャップですが、ギャップ自体は短いため極端に難しいことはないでしょう。
また一度進行停止をとってCP4からやり直せばロボットの向きは好きなように置けるため、二度目のトライでまずクリアできると思います。

②は写真だと見切れてしまっていますが、単に直角の多いだけの部分です。
ただ強いて言えばこの直角群はフィールド端に位置しているため、ロボットが大きかったり動作が大振りだったりするとフィールドから脱輪してしまうことがあったかもしれません。

とりあえず日本リーグはのレビューは以上です。



どうも
大会会場に足を踏み入れてないし、競技も全く見ていないですがレビューします。
解像度は低いですが、競技スコアから見れる部分だけでも見ていきましょう。


とりあえずいつも通り得点分布を出してみます。
chart (7)
ちょっと上の方の区切りが変ですが、まぁなんとなく正規分布ぽさがありますね。
差はしっかりつきつつも、極端な独走はないあたり、ちょうど良いレイアウト構成だったのかなと思います。

こちらは競技ラウンドごとの得点
chart (5)
作ってる途中で気が付きましたが、ラウンド1と2はチームによって使うフィールドが入れ替わっています。なのでラウンド基準じゃなくて競技レイアウト基準で色分けしたほうがよかったです(が、面倒なのでこのまま)。

最終得点は3競技の合算なので、一つでも大きなミスをするとその時点で上位争いに食い込めなくなる、というのが厳しいところですね。
また2日目のラウンド3がどうも鬼門だったようで、上位陣だけならず8位ぐらいまでがラウンド3の出来栄えで最終的な順位が決まったと言えるでしょう。

つまり
・ラウンド1と2は比較的簡単なレイアウトでチーム群を大雑把にスクリーニング
→ある程度できるチームはほぼ横並びで似たような点をとる
・ラウンド3の難しめのレイアウトで上位の順位付けを明確にする
→1日目の上位チーム内でも大きく差が出て、最終的な総得点がいい感じにバラける

先程のグラフは総得点順にソートしてありますが、初日の得点順にソートすると次のようになります。
chart (9)
棒の下の数字は最終順位です。
こう見ると最終日での逆転がかなり目立ちますね。


最後に救助得点の具合を見ておきます。
chart (6)
これ出すたびに被災者の得点割合少なくない???と思うんですけど、救助の課題自体は簡単なのでまぁ見合った点数でしょう。
上位3チームはもれなく救助得点をしっかり稼げていますね。
完璧とは言えませんが、ライントレースが長く救助に避ける時間が少なくなりがちな中で、よく探せた方だと思います。

 

このページのトップヘ