모든 길목(10,9,6,13) 에 대한 정/역 방향에 대한 로직을 정의하고, 나머지 모든위치에서는 해당 길목으로 이동을 한다. 목적지에 따라서 길목을 지정한다 0001 10 역방향 : 0010(BS) 0012(BS) 0016(BS) 0001(BS), 정방향(회전필요) : [ 0010(BR) 0009(FR) 0007(BS) 0010(BS) : 방향전환 완료] - 동일 0015 09 정방향 : 0009(FS), 역방향(회전필요) : [ 0009(FL) 0010(BS) 0007(FL) 0009(FS) ] - 동일 0011 06 역방향 : 0006(BS) 0011(BS), 정방향(회전필요) : [ 0006(BL) 0007(FS) 00013(BL) 0006(BS) ] - 동일 버퍼 06 역방향 : 0006(BL) 0005(BS) ~ 나머지 0031까지는 BS상태로 계속 이동, 정방향(회전필요) : [ 0006(BL) 0007(FS) 0013(BL) 0006(BL) ] - 동일 0008 13 역방향 : 0013(BS) 0019(BS) 0008(BS), 정방향(회전필요) : [ 0013(BL) 0006(FL) 0007(BS) 0013(BS) ] - 동일 0019 13 역방향 : 0013(BS) 0019(BS), 정방향(회전필요) : [ 0013(BL) 0006(FL) 0007(BS) 0013(BS) ] - 동일 나머지 모든 경유는 각 경유지로 해당 방향으로 그대로 길을 찾는다 목적지를 보고 목적지의 경유지까지 경로로를 계산한다 (A*) 동일노드가 목적지 일때에는 도킹방향이 맞고 마크센서가 ON 되어있는 경우에만 완료처리를 한다. 도킹방향이 맞고 마크센서가 OFF되어있다면 반대방향으로 한번 이동하고, 다시 역방향 이동하면서 MARK STOP 처리한다. 도킹방향이 맞지 않는 경우 일반 노드 검색처럼 경유지 처리한다 버퍼에서 버퍼로 이동하는 경우에는 별도 로직으로 처리한다 모니터가 좌측에 있는 경우라면 도킹방향이 맞지 않으므로 0006까지 이동을 완료 한 후 기존 로직을 적용 모니터가 우측에 있는 방향이라면 도킹방향이 맞는 경우이다 목표가 현재 기준 좌측이라면? BACK으로 이동하면 좌측이동이므로 목적지 노드까지 A*로 계산하여 이동 후 MARK STOP 한다 목표가 현재 기준 우측이라면? 위치 정밀도를 높이기 위해서 목표 지점을 벗어난 후 다시 좌측으로 마크스탑한다 A* -> Back -> MARKSTOP * 인식된 위치가 전체 경로상에 존재하지 않는 노드라면 모든 경로계산을 다시 계산 한다 * 경로상 노드에 포함되어있다 해도 진입방향등을 고려하여 일치하지 않으면 경로 이탈로 간주하고 다시 계산 한다