미션. 2x2 네 번째 미로

네 번째 미로




찾았습니다!

문을 열어뒀지만 햄스터 로봇을 가둬버릴 수 있는 미로!


앞에서 만든 똑똑이 햄스터 로봇은 벽을 만나지 않으면 그냥 앞으로 갑니다.

즉, 문 옆에 벽이 있어야 꺾어서 나가는데 벽이 없으니 그냥 지나칩니다. (역시 바보였어요. ㅠㅠ)




알고리즘을 다시 생각해야 합니다.

우리가 만든 알고리즘은 완벽하지 않아요.

다시 고민을 시작해야죠!

내가 고민을 한 만큼 내 햄스터 로봇이 똑똑해 질 테니까요.


다시 한 번 힘내서 으쌰!




좋은 방법을 하나 알려 줄까요?

사실 이 문제는 오래전부터 많은 사람들이 연구한 문제에요.

그리고 아주 많은 똑똑한 길찾기 방법의 아이디어들이 있죠.

우리 햄스터 로봇 미로 탈출 문제는 아니지만 비슷한 상황들을 효율적으로 해결할 수 있는 다양한 알고리즘이 있습니다.


그리고 이 알고리즘은 바로 지금 우리가 한 것과 같은 방식으로 문제를 내고 풀고를 반복하며 완성되었습니다.

다른 사람들이 연구한 내용들을 보고 공부해 보세요.


인터넷에서 "미로 탐색 알고리즘"을 검색하면 많은 연구들을 볼 수 있습니다.




미로 탐색 알고리즘 - 좌수법 / 우수법

좌수법(LHR, Left Handed Rule), 우수법(RHR, Right Handed Rule)이라고 하는 알고리즘이 있습니다.

좌수법은 "왼쪽 벽을 짚고 가기" 방법입니다. 우수법은 반대로 "오른쪽 벽 짚고 가기"죠.

벽이 없으면 그쪽으로 돌아서 벽을 계속 짚으며 갑니다.


빠른 이해를 위해 영상으로 한 번 보겠습니다.

좌수법의 동작을 보여주는 영상입니다. 



위의 영상에서 보다시피 어지간히 복잡한 미로도 빠져나갈 수 있는 알고리즘입니다.



미션. 좌수법을 사용하는 햄스터 로봇 만들기


이번 강좌는 중간 과정은 생략 합니다. 그래서 '미션'이에요.

중간 과정은 두 번째 미로 탈출 알고리즘 만들때와 비슷합니다.


좌수법의 원리로 알고리즘을 생각해보고, 생각한 알고리즘을 코드로 바꾸는 과정을 스스로 진행해 보세요.




힌트


좌수법/우수법은 옆을 감지하는 능력이 필요합니다.

햄스터 로봇의 근접 센서는 앞부분 방향으로 감지하고 있어 옆면의 감지 능력은 떨어지는 편입니다. 


햄스터 미로 찾기용 커버



미로 찾기용 커버를 장착하면 전방을 향하는 센서의 감지 방향을 옆면으로 바꿔줄 수 있습니다.

위 그림과 같이 양쪽 다 측면을 감지하도록 할 수도 있고, 한 쪽만 측면을 감지하게 할 수도 있습니다.


좌수법은 왼쪽 벽을 감지해야 하고, 앞의 벽도 감지해야 하기 때문에 왼쪽 근접 센서는 커버를 장착하여 왼쪽을 감지하도록 하고, 오른쪽 근접 센서는 앞면을 그대로 감지하도록 해 줍니다.




전체 코드


전체 코드는 아래 "코드보기" 안에 있습니다.




결과

2x2 네 번째 미로 탈출 영상이 없어 좌수법으로 4x4 미로를 탈출하는 영상으로 대체합니다.

2x2 네 번째 미로를 탈출할 수 있는 햄스터 로봇이라면 아래 미로도 탈출 할 수 있습니다! 예이~ 






이 다음엔 무얼 하나요?


**

햄스터 로봇이 더 똑똑해 졌으니 다시 악당 모드로 변신해야죠!

좌수법 햄스터 로봇을 가둘 수 있는 미로를 다시 만들어 보세요.

햄스터 로봇의 판단하는 방법을 알고 있으니 함정을 만들 수도 있겠죠?

그런 미로를 찾아냈다면, 또 그 미로를 탈출할 수 있는 방법을 찾아 보는 겁니다.


**

다음은 더 효율적인 알고리즘을 연구하는 겁니다.

좌수법은 다양한 미로를 탈출할 수는 있지만 가장 비효율적인(느린) 알고리즘이랍니다.

컴퓨터 과학이나 전문적인 프로그래머에 관심이 있다면 더 빨리 탈출하는 햄스터 로봇에 도전해 보세요.


"그 어떤 미로라도 내 햄스터 로봇이 가장 빠른 속도로 탈출한다!"


로 목표를 잡아 보세요.

그리고 인터넷에서 "미로 탐색 알고리즘"을 검색하면 나오는 많은 연구들 하나씩 공부하고 직접 만들어 보세요.



**

내가 한 것들은 여기저기 알리세요.

처음부터 잘 하는 사람 없습니다.

내가 한 건 너무 초라해보이는데? 사람들이 무시하지 않을까 걱정되나요?


무시하는 댓글을 다는 사람도 있겠죠. 무시하세요. 나보다 못하는 사람입니다.

나보다 잘하는 사람은 그런 댓글을 달지 않습니다.

자신도 그런 과정을 거쳐 실력이 쌓였다는 걸 알고 있고, 나보다 더 잘해질 수 있다는 걸 알기 때문에 무시하지 않아요.

잘하는 사람들은 자기보다 못하는 사람에게서도 배울점을 찾습니다.


그러니 많이 알리세요. 

동영상 찍어서 유투브에도 올리고, 여기에도 댓글로 공유해 주세요.


재미있는 햄스터 로봇 프로젝트가 많이 생겨나길 기대하겠습니다.






햄스터 로봇 좌수법 전체 코드입니다.




왼쪽 근접 센서는 햄스터 로봇의 왼쪽 옆면을 감지하고, 오른쪽 근접 센서는 앞쪽 벽을 감지합니다.





댓글

로그인 후 댓글을 남길 수 있습니다.

댓글 2


  • 동수동수짱짱맨, 3년, 10개월 전

    안녕하세요 선생님.
    엔트리를 활용한 수업을 구성하는 데 있어서 많은 도움을 받고있습니다.
    다름이 아니라 마지막 "코드보기"에서 왼쪽100, 오른쪽98로 속도를 다르게 설정한 이유가 무엇인지 궁금해서 댓글남깁니다.



    • 토니, 3년, 6개월 전

      답이 너무 늦어 동수동수짱짱맨님에겐 도움이 안될 것 같은데, 향후에라도 누군가 같은 의문이 있을지 몰라 늦었지만 답변 남겨둡니다.

      햄스터 로봇의 바퀴는 2개의 별개의 모터로 구성되어있어 똑같은 수치로 명령하더라도 약간씩의 오차가 있습니다. 너무 크게 차이가 나지 않는 한은 로봇 자체의 불량은 아니라 이 부분은 로봇을 코딩하기 전에 보정 소프트웨어를 이용하여 보정을 하거나 코드에서 이 부분을 고려하여 코딩해야 합니다.

      보정 소프트웨어로 직진 보정을 하더라도 정확히 직진하는게 아니라 약간씩 한쪽으로 치우치게 되서 이 부분을 코드에 적용시켜 준 것입니다. (제 경우엔 두 바퀴를 같은 100으로 코딩했을 때 왼쪽방향으로 치우쳐서 이동을 했습니다. 이 경우 오른쪽 바퀴가 같은 숫자일때 좀 더 빨리 굴러간다는 뜻이므로 오른쪽 바퀴 속도를 조금 낮춰 직진하도록 했습니다. 위 예제의 햄스터 로봇은 왼쪽바퀴 100과 오른쪽 바퀴 98일 때 두 바퀴의 속도가 같은 로봇이라고 생각하시면 됩니다.)


  • , 5년, 5개월 전

    안녕하세요! 글을 잘 보았습니다^^저는 엔트리를 배우는 학생인데, 혹시미로찾기용 커버 없이는, 좌수법이나 우수법처럼 햄스터가 똑똑하게 움직일 수 있는 방법은 없을까요?



    • 토니, 5년, 5개월 전

      우선 미로찾기용 커버 없이 좌수법 구현하기는 가능 할 것 같습니다. (해보진 않았어요.) 햄스터 로봇의 근접센서는 옆에 있는 장애물도 감지할 수 있습니다. 햄스터로봇을 벽 근처에 옆으로 세워두고 근접센서 값을 확인해보세요. 커버를 사용하면 벽이 있다, 없다만 판단하면 되지만 커버 없이 하려면 조금더 정밀하게 판단하는 알고리즘이 필요할 것 같습니다.


    • 토니, 5년, 5개월 전

      게임의 규칙을 바꿔서 해 보는 방법도 있습니다. 미로 탈출 미션은 햄스터로봇이 얻을 수 있는 정보를 활용하여 미로를 탈출하는 미션이죠. 미로찾기용 커버는 옆쪽 장애물 정보를 주기위해 추가로 장착한 장치입니다. 그럼 다른 방법으로 햄스터로봇에게 정보를 줄 수도 있지 않을까요? 미로의 교차로(갈 수 있는 방향이 3가지 이상인 곳)에 바닥과 다른 색 표시를 해 두는 건 어떨까요? 햄스터 로봇의 바닥 센서로도 정보를 얻고 활용하는 방법입니다. 길을 직접 알려주는 정보가 아니라면 이렇게 햄스터 로봇의 다른 센서 능력을 활용할 수 있는 정보를 주는 방법도 좋을 것 같습니다.


    • , 5년, 5개월 전

      와 상세한 답변 너무 감사드립니다^^ 해보고 결과 알려드리겠습니다!