LoginSignup
11
5

More than 3 years have passed since last update.

ルービックキューブを解くロボットを作ろう!1 概要編

Last updated at Posted at 2020-06-15

前書き

こんにちは、Nyanyan(読み方は一応「にゃにゃん」)です。今回から何回かにわたって、私が作ったSoltvvo(そるゔぉー): 2x2x2のルービックキューブを解くロボットの解説をしていきます。記事の構成は
1. 概要編(本記事)
2. アルゴリズム編
3. ソフトウェア編
4. ハードウェア編
とします。
なるべく平易には書きますが、内容はかなり詳しく書く予定ですので、気になるところをつまみ食いしてくださっても結構です。なお、記事が完成し次第YouTubeにこの記事に関連する動画集を上げる予定です。この動画集では細かいところは伏せて、大雑把に概略を説明します。各記事の冒頭に動画を紹介しますので、よろしければご覧ください。

GitHubはこちら

想定された読者

  • アルゴリズム(全探索)に興味がある方
  • ロボットづくりに興味がある方
  • ルービックキューブに興味がある方

プロモーションビデオ

プロモーションビデオはこちらです。
Soltvvo

この記事に関連する動画集

プレイリストはこちらです。
ルービックキューブを解くロボットを作ろう!

プロジェクトのきっかけ

あの、ほら、暇じゃないですか。何か作りたいなと思ってとりあえず2x2x2を最短手数で解くプログラムを書いてみたら思いの外楽しくて、実際にこの手順を使って2x2x2を解くロボットを作れないかと思ったわけです。

前提知識

アルゴリズム編では平易に書くことを心がけるため、(所詮記事を書くのはAtCoder水色の人というのもあり)特に前提知識は想定していません。
ソフトウェア編ではPythonとC++(Arduino)を用います。これらの最低限の知識は必要だと思います。
ハードウェア編では、ところどころ専門用語が出てくるかもしれませんが、ググっていただければわかるものばかりだと思います。よって前提知識はいりません。
その他に、記事全体を通してルービックキューブに関する基礎知識が必要ですのでここで紹介します。

ルービックキューブに関する基礎知識

ルービックキューブの仕組み

ルービックキューブはよく「色を揃えるパズル」と言われがちですが、実際はパーツの場所と向きを揃えるパズルです。まず普通の3x3x3を分解した写真を載せましょう。
分解.png
ルービックキューブの動くパーツにはエッジとコーナーの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種類の面を回すだけですべてのぐちゃぐちゃ状態(スクランブル)を作り出せるのです。

最後に

では、長い記事集になると思いますが、楽しんで読んでいただければ幸いです!

11
5
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
5