おもにBLD

スピードキューブ、特に Blindfolded (BLD) の記事を書きます。

GiiKER用の3BLDタイマー

この記事はルービックキューブ Advent Calender 2018の1日目の記事です。穴を空けることなく、無事にみんなで完走できることを祈っております。

TL; DR

  • GiiKERと接続して使う3x3x3目隠し部門用のタイマーを作った
  • 最小限のクリックで、詳細な区間情報を分析できる
  • 苦手な部分が可視化されるので、上達へのヒントが得られると考えられる

はじめに

他の競技と同様に、3x3x3ルービックキューブ目隠し部門(以下、3BLD)においても、タイムを短縮するためにはソルブをパートごとに分解して考え、苦手な部分に焦点を当てて改善していくことが大切である。3BLDのソルブは大きく分けて分析記憶時間と実行時間の2つに分けられるが、それらは次のように更に細かく分解することができる。

  • 分析記憶
    • コーナー
    • エッジ
  • 実行
    • エッジ
      • エッジ1
        • 想起
        • 実行
      • エッジ2
    • コーナー
      • コーナー1
        • 想起
        • 実行
      • コーナー2

タイマーアプリの中には、計測中にボタンを押すごとにラップタイムを記録することができるものがある。しかし、上記のようなステッカー単位のラップタイムを知るにはソルブ中に20回以上ボタンを押す必要があるし、そのたびにキューブから手を離す必要があるため計測結果も本来のソルブとは違ってしまう。

区間ごとのラップタイムだけでなく、そこで回した手順が何であったかを知りたかったり、そのtpsを知りたいということもあるだろう。通常のタイマーではこの機能は無い。ソルブを解析するためには動画を録るという手段もあるが、これには以下の2つの課題がある。

  • 360度キューブの状態を把握することはできないこと
  • 解析に時間がかかること
    • 再生して止めて戻しての繰り返し

他にも、こんな課題がある。3BLDは目隠し状態でソルブを続ける性質上、途中で意図せず失敗していてもそれを知るのはソルブが終わってからである。ソルブが失敗した場合、それが分析記憶のミスなのか、実行のミスなのか。また、実行のミスにしても1回だけだったのか、何回もミスしたのかをハッキリさせることで、より現状を正しく認識することができる。 (※ こちら、構想はあるものの、実装ができなかったため今後の課題とする)

ここまでの課題をまとめると次の通りである。

  • ステッカーごとの実行時間を知るには、通常のタイマーではソルブ中に20回もボタンを押す必要がある
  • それぞれのステッカーごとの実行にかかった時間を知りたい (思い出し時間/実行時間/tps)
  • 動画を録ればソルブの解析はできるが、手間がかかる
  • どこかの手順で実行ミスをした時、もしそれが正しかったら、成功してたのか気になる (※ 今後対応)

これらの課題を解決するため、今回私は3BLD用のタイマーアプリを作成した。3BLD用のサイトであるhinemos上の機能として実現した。hinemos上には登録した3-styleのみで解けるスクランブルを生成する機能があるため、必要に応じて利用するとよいだろう。

なお、利用の場合は以下の点に注意が必要である。

  • 実装の都合上、初代のGiiKER(i3)にしか対応しておらず、GiiKER i3Sなど別のキューブでは使うことができない
  • 基準面が白上緑前以外の場合、回転が正しく表示されない可能性がある 12/1、改善しました
  • 記録は保存していないため、一度ブラウザやタブを閉じると消える

関連研究

GiiKERと接続して使うタイマーアプリとして、hakatashi氏のSmart Cube Timerがある。hakatashi氏のタイマーはCFOP/Roux用であり、完成までのステップ数がほぼ固定されていることや、ソルブ中に目で見てミスに気付くことができるという性質がある。 一方、3BLDの場合、2点交換手順と3点交換手順を併用する場合、完成までのステップは多様である。

他には、GiiKERの公式アプリ、Blootooth CubingCS Timerなどがあるが、いずれもhakatashi氏のタイマーと同様、3BLDに特化したものではない。

提案手法

GiiKERのムーブ列を受け取り解析しているが、技術メインの記事ではないため詳細は説明しない。

  • スライスムーブに相当する手順 (例: R L') が短い時間で行われた場合は変換
  • 何回かの回転により変化したパーツの数に注目し、2点交換または3点交換の部分を自動的に判別して、そこでムーブ列を区切る
  • 部分手順ごとに想起の時間やtpsを計算して表示

なお、GiiKERのムーブ列を受け取るために、hakatashi/giikerのコードをMITライセンスの下で利用している。

残された課題と今後の展望

以下のように、いくつもの課題が残されている。これらのうち、可能なものから改善していく予定である。

  • どこかの手順で実行ミスをした時、もしそれが正しくできていたら完成できていたのかを判定
  • 最小限のクリックで区間の記録を取るというコンセプトで作成したものの、コーナー分析記憶とエッジ分析記憶をクリック無しで区別する方法が無い
  • キューブの回転が認識されなかった場合に後から訂正する機能
  • GiiKER i3Sへの対応
  • hinemosに登録した情報の利用
  • 回した手順が表示されるだけのPlaygroundを作る
  • JavaScriptのカメラ機能で、ソルブも一緒に録ってしまう

まとめ

  • GiiKERと接続して使う3x3x3目隠し部門用のタイマーを作った
  • 最小限のクリックで、詳細な区間情報を分析できる
  • 苦手な部分が可視化されるので、上達へのヒントが得られると考えられる
  • 多くの課題が残されているが、今後改善していく予定

変更履歴

12/1 記事公開直後に改善を入れた内容を反映。また、TL;DRとまとめを微修正。