前書き
こんにちは、Nyanyan(読み方は一応「にゃにゃん」)です。今回から何回かにわたって、私が作ったSoltvvo(そるゔぉー): 2x2x2のルービックキューブを解くロボットの解説をしていきます。記事の構成は
- 概要編(本記事)
- アルゴリズム編
- ソフトウェア編
-
ハードウェア編
とします。
なるべく平易には書きますが、内容はかなり詳しく書く予定ですので、気になるところをつまみ食いしてくださっても結構です。なお、記事が完成し次第YouTubeにこの記事に関連する動画集を上げる予定です。この動画集では細かいところは伏せて、大雑把に概略を説明します。各記事の冒頭に動画を紹介しますので、よろしければご覧ください。
GitHubはこちら。
想定された読者
- アルゴリズム(全探索)に興味がある方
- ロボットづくりに興味がある方
- ルービックキューブに興味がある方
プロモーションビデオ
プロモーションビデオはこちらです。
この記事に関連する動画集
プレイリストはこちらです。
プロジェクトのきっかけ
あの、ほら、暇じゃないですか。何か作りたいなと思ってとりあえず2x2x2を最短手数で解くプログラムを書いてみたら思いの外楽しくて、実際にこの手順を使って2x2x2を解くロボットを作れないかと思ったわけです。
前提知識
アルゴリズム編では平易に書くことを心がけるため、(所詮記事を書くのはAtCoder水色の人というのもあり)特に前提知識は想定していません。
ソフトウェア編ではPythonとC++(Arduino)を用います。これらの最低限の知識は必要だと思います。
ハードウェア編では、ところどころ専門用語が出てくるかもしれませんが、ググっていただければわかるものばかりだと思います。よって前提知識はいりません。
その他に、記事全体を通してルービックキューブに関する基礎知識が必要ですのでここで紹介します。
ルービックキューブに関する基礎知識
ルービックキューブの仕組み
ルービックキューブはよく「色を揃えるパズル」と言われがちですが、実際はパーツの場所と向きを揃えるパズルです。まず普通の3x3x3を分解した写真を載せましょう。
ルービックキューブの動くパーツにはエッジとコーナーの2種類があり、それぞれ形が違う(例えばエッジパーツには2つのステッカーが、コーナーパーツには3つのステッカーがついています)ため、エッジパーツがコーナーの位置に来る、またはその逆のことは起こりません。
2x2x2キューブの場合、構造は3x3x3と同様なものの、外見ではエッジパーツは内部に埋もれていてコーナーパーツのみ見える状態です。
回転記号
ルービックキューブの回転を表す記号として、回転記号というものが使われます。これは、キューブをある基準の向きで持った時に、
- 上の面を回す: U (Up)
- 下の面を回す: D (Down)
- 前の面を回す: F (Front)
- 後ろの面を回す: B (Back)
- 右の面を回す: R (Right)
- 左の面を回す: L (Left)
と表され、それぞれの文字(仮にXとします)について、「X」なら面を正面かあら見て時計回りに90度、「X'」は反時計回りに90度、「X2」なら180度回転させます。
参考としてtriboxという会社のページを載せておきます。
実は2x2x2キューブで使う回転記号の種類(回転させる面)はU, F, Rのみです。よく考えてみてください。Rを回すこととLを回すことは(キューブの向きが変わることを無視すれば)同値ですね。よって6面あるうちの3種類の面を回すだけですべてのぐちゃぐちゃ状態(スクランブル)を作り出せるのです。
最後に
では、長い記事集になると思いますが、楽しんで読んでいただければ幸いです!