마우스 이동 알고리즘 (방법) 에 대해 이야기하고자 한다.
탐색 알고리즘에 대해 많이 찾아 보면, 일부 배운 것이 있어 이해는 하지만, SW 로 구현하면 답이 안나온다.
인터넷을 뒤지다가 우수법/좌수법 하면서 일부 source 코드를 공개해 놓은 것이 있어, 감은 잡아서
현재는 마우스가 미로를 잘 돌아다니가 start 지점으로 잘 오는 것까지 완성했다.
이를 글로 남기려 한다. 그림까지 첨부하면 좋을 텐데, 블로그 실력이 없으니 그냥 글로 마무리 한다.
이동 물체(드론, 자동차, 이동형 로봇)를 여기서는 마우스라고 하겠다, 일반화 시키면 동일하다.
수학에서 숫자로 표현하던 문자로 표현하던 동일하니까, 솔직히 문자로 표현하면 더 멋지긴 하다.
마우스를 어떠한 순서대로 동작을 하고, 이 동작한 순서를 계속해서 loop 를 통해 동작시켜,
원하는 지점(위치)까지. 이동/움직이도록 해야한다.
목표: 마우스 동작을 loop가 될 수 있도록 순서를 정의
내용: 목표대로 코드를 작성
마우스의 동작 3가지와 반드시 주어져야 하는 값 : 직진이동(이동 거리), 회전이동(회전각), 장애물 감지(Detect Barrier)(장애물 유무 및 방향 결정)
그외 동작은 열거된 3가지 동작을 조합한 것이다.
예) 장애물 회피 :장애물감지, 회전, 이동을 순차 또는 동시에
smooth Turn :회전이동+직진 이동을 동시에
45도 turn : 회전이동+직진 이동을 동시에 특정 회전각/특정 거리를 이동
"동시에(same time)"은 동작을 번갈아가며 동작하는 것(이것 땜시 미분/적분이 나옴)
마우스가 동작하는 경우 수는 6가지(3x2x1)인데 회전운동은 장애물 감지후에 동작하는 것이라 장애물 감지가 항상 회전운동보다 먼저 나와야 하므로 조건에 의한 경우의 수는 2가지(2x1) 이다. (수학 확률과 통계)
1. 직진 -> 장애물 감지 -> 회전
2. 장애물 감지 -> 회전 -> 직진
세부적인 항목에 조건과 제한을 붙여보자.
직진: 이동거리가 반드시 필요, 마우스 미로 찾기 이기 때문에 기본 이동거리는 정해져다. (표준 미로 칸 간격이 180mm, 미로 한칸 이동 거리는 1로 본다(좌표평면으로 정의한다.)
회전: 회전이동은 이동이 포함되긴한데 이건 무시하고, 회전각을 기준으로한다. 0~360도로 정해져 있다.
장애물 감지: 장애물 유무와 진행 방향를 순서대로 결정해야 한다. (여기서가 그 어렵다는 탐색 알고리즘이 나온다.)
못 다한 이야기는 여기서부터 계속 작성할 예정이다.
정의
탐색 알고리즘 : scan alogrothm(mode)
벽 유무 : wall or barrier(장애물)
벽/장애물 감지: detect
방향 결정 : scan
방향: Direct, compass
방위(compass) 절대(Absolute) 방위, 상대(Related) 방위
각도(Angle) : 절대(Absolute) 각도, 상대(Related) 각도
이전/현재/이후: pre/current/post
시계뱡향, 반시계방향, 직진방향: Right/Left/Straight
위치 : position(pos)
경로: Path
미로 : maze
미로 칸 ; position, cell
미로 표시: x,y
집 위치 : home position
목적위치 : goal position, goal
시작위치: start position
목표위치 : target position, target
찾는위치 : target position, seach cell
이동 / 회전: move / turn
이동회전/회전이동 : moveTurn / turnMove
'기능 > 마이크로 마우스(uMouse)' 카테고리의 다른 글
마이크로 마우스 - 미로 시뮬레이션 프로그램 - 탐색 알고리즘 2 (2) | 2024.01.02 |
---|---|
마이크로 마우스 - 미로 시뮬레이션 프로그램 - 탐색 알고리즘 1 (0) | 2024.01.02 |
마이크로 마우스 - 미로 시뮬레이션 프로그램 - 탐색알고리즘 (0) | 2023.12.27 |
마이크로 마우스 - 미로 시뮬레이션 프로그램-2 (0) | 2023.12.10 |
마이크로 마우스 - 미로 시뮬레이션 프로그램 (0) | 2023.11.11 |