openCV와 대칭군을 이용한 Cube solving robot 제작
참가 부문
학과
팀명
Descent Counter
신청자 이름
학생행정실
컴퓨터가 공간을 인식하는 과정은 이산적(discrete)이다. 때문에 어떤 공간이든 유한하게 인식하는데, 마찬가지로 사물들 또한 유한하며, 사물들은 이 유한한 공간에 배치되게 된다. 이는 적당한 공간을 잡으면 사물과 1:1대응이 되는 함수, 즉 순열(Permutation)을 만들 수 있다는 말과 같은데, 여기서 주로 이용되는 것이 대칭군(Symmetric Group)이다.
본 프로젝트에서는 대칭군의 성질을 응용하여, 대표적인 순열 찾기 문제인 rubik cube를 풀어보는 로봇을 만들되, 아두이노나 라즈베리파이가 아닌 STM사의 STM32f407 보드를 MCU로 사용하여, 유사하지만, C나 C++를 최대한 활용할 수 있는 방식으로 cube solver robot을 제작하였다.
큐브 solver robot을 제작하는 과정은 크게 큐브 인식, 큐브 풀이 알고리즘, 신호 전달 및 모터 제어, 외형으로 나뉜다. 큐브 인식은 openCV를 활용하여, 각 포트의 카메라와 컴퓨터를 연동시키고, 카메라가 인식한 사진(frame)에서 모서리(edge)들을 추출한 뒤, 각 큐브면의 모서리들의 무게중심(centroid)의 frame에서의 좌표를 찾고, 해당 좌표에서의 픽셀 값(Blue, Green, Red)을 추출한다. 이 추출 값의 범위를 큐브면의 색 6가지를 포함하여 산정하고, 각 카메라들의 사진들을 통해 큐브의 전개도를 완성하는 것으로 이루어지며, 큐브 풀이는 여기서 전달받은 사진들을 바탕으로, 큐브면 48개를 이용한 대칭군 S48을 고찰하면 여러 부분군(Subgroup)들이 숨어있음을 알 수 있는데, 부분군들로 우선 수렴시킨 뒤, 다시 Trivial group인 항등함수 하나만을 원소로 갖는 집합으로 수렴시키는 Thistlethwatie의 알고리즘을 이용하였다. 이렇게 구현한 알고리즘의 결과값 신호들을 MCU가 읽고 모터를 제어하여 큐브룰 돌린다.
앞서 언급하였듯이, 큐브를 푼다는 것은 주어진 이산적인 위치에 원하는 큐브 면들을 대응시키는 것이며 각 위치와 원하는 큐브 면에 같은 번호를 주면, 이는 항등함수(identity)가 된다. 이미 이상한 형태로 돌려진 큐브의 경우는, 이 항등함수가 왜곡돼서 어떤 순열을 띄고 있을 것이므로, 결국 주어진 순열을 다른 순열들을 항등함수로 수렴시키는 알고리즘을 짜는 것이 큐브를 푸는 것이다.
이는 어질러진 사물들을 자동으로 기존/원하는 위치에 배치하는 것과 같다.
물론 로봇팔로 물체를 잡는 것도 중요하지만, 자동으로 원하는 위치에 원하는 방식으로 사물들을 배열 하는 것 또한 중요하며 큐브로봇은 그 대표적인 예이고, 저예산으로 구현할 수 있다. 이런 점으로 보아 카메라 및 모터등과 함께 해당 알고리즘을 충분히 잘 사용하면, 산업현장에 유용하게 쓰일 것으로 기대된다.
담당부서학생행정실
전화번호880-2277