로봇 코딩 두번째 프로젝트 1

 230 total views,  3 views today

여름 방학을 시작하자 마자, 차고 마무리 및 페인트 작없을 하느라 약 3주를 보내고, 다시 로봇 코딩을 시작했다.사실 방학 전에 다른 로봇으로 시도를 했는데, 모터의 던지는 파워가 일정하지 않아서 실패로 끝났다. 그래서 시작한 다른 프로젝트는 이미 3년전에 시도했던 선을 따라가는 미로 찾기 로봇으로 정했다. 한번 했던 경험도 있고, 나 나름대로 좀 더 복잡한 미로 찾는 알고리즘에 대한 목표도 있어서 이렇게 정했다.

예전에 만든 적이 있었지만, 그 때의 프로그램 방식( 내셔널 인스트루먼트 (NI) 사가 64비트용 프로그램으로 업데이트 하는 것을 거부해서)을 쓸 수가 없어서 처음부터 다시 시작해야 했다. 예전의 프로그램을 살릴 수가 없으니 기억도 가물가물하기도 하거니와, 아들(파이선)과 딸(스크래치)의 다른 방식을 코딩을 해야 하니 시간이 좀 많이 들었다.

첫단계는 로봇을 만드는 것인데, 지난 번에 만들어 놓았던 것이 있어서 무리 없이 그대로 쓸 수 있었다.

사실 로봇을 만든 것도 쉽지 않다. 센서를 어떻게 배치를 해야 원하는 기능을 할 수 있는지는 코딩을 해봐야 알 수 있기에, 코딩 과정에서 로봇을 다르게 만들어야 하기도 한다. 그러면, 다른 로봇 디자인 때문에 코딩이 바뀌게 되는 반복적인 작업이 필요하다. 다행히 지난 번에 만들어 놓았던 성공적인 로봇이 있어서, 로봇 디자인은 별로 걱정한 필요가 없어졌다. 로봇 디자인과 코딩을 동시하기엔 인내심이 없는 아이들에겐 좀 벅찬 감이 있다. 같은 또래가 아닌 4살이나 나이 차이가 나는 두 아이를 데리고 하기에 더욱 그렇다.

일단 세 개의 똑같은 로봇을 만들었다. 그래서 각자의 로봇을 각자가 프로그램 한다.

다음은 어떠한 미로의 코스를 정할 것인가. 아이들과 첫 미팅에서 몇 가지 형태를 같이 스케치했다.

너무 복잡하면 나중에 아이들이 힘들어 하거나 지칠 것 같아, 다양한 루트가 있지만 다소 간단한 형태로 택했다. 센서가 잘 인식할 수 있는 흰색 바탕에 검정색 전기 테이프로 코스를 만들었다.

그리고 간단한 테스트를 위한 연습용 코스를 각자에게 만들어 주었다.

그리고는 이런 행태 (검은 선을 따라가는 ) 미로 찾기의 기본은 검은 선을 얼마나 잘 따라가는 갈 수 있는가 이기에 직선 따라가지 연습을 했다. 선 따라가기는 첫번째 시도한 로봇과 거의 비슷하기에 별 무리 없었다.

다음은 어떤 원리에 의해 로봇이 길을 찾아가는가 라는 문제인데, 루프 (무한히 돌게 되는)가 없는 경우에 로봇이 여러 개의 경로를 결정해야 할 경우 무조건 한쪽 방향을 선택하는 방식을 택하면 다소 시간이 걸리더라도 항상 길을 찾을 수 있다. 이 방법은 오랫동안 알려진 방법이다. 로봇이 인터섹션을 만나면 무조건 좌회전이 먼저하고, 좌회전이 없다 직진, 좌회전 직진 둘다 없으면 우회전 하는 방식을 택한다. 이런 방식 때문에 로봇은 최소한 3개의 컬러 센서가 필요했다. 그리고 아래의 사진처럼 센서들이 일직선이 아니게 배열되어있다. 위의 열과 아래의 열 사이의 간격은 약 검은 선 두께정도 여야 한다.

그 다음엔 이 센서들이 어떻게 좌회전, 직진, 우회전을 결정해야 하는 지를 알기 위해, 가능한 모든 경우를 표로 만들어서 아이들에게 판단하게 했다.

위의 표에서 검은색은 경로이고, 빨간 점들은 센서들인데, 아이들이 무리 없이 파악할 수 있었다. 경로를 쉽게 파악할 수 있는 방법은 수학에서의 이진법을 이용하는 것인데 (다른 인터넷 소스에는 if 를 세번 사용하는 방법을 쓰기도 하는데 이는 고수가 아닌 하수가 사용하는 방법이다.) 다행히 둘리양은 한달 전에 이진법을 배워서 문제가 되지 않았다.

위는 둘리양 풀어낸 것이다. 총 8개의 경우의 수 (센서가 세 개이므로 2 x 2 x 2 =8 이 된다)가 있는데, 이진법을 통한 십진법 수로 표시하면 0 부터 7까지 숫자로 표시할 수 있다. 0이 나오면 180도 회전, 1이 나오면 우회전, 2나 3이 나오면 직진, 그리고, 4부터 7까지 나오면 좌회전, 이런 식이다. 우리 로봇은 좌회전이 모든 경우에 우선하게 되므로 당연히 좌회전을 할 가능성이 많아 진다.

위의 논리(로직)에 의한 간단한 프로그램을 테스트 했는데, 별 무리 없이 해결 했다.

(계속)

Related Posts

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments