[NXT] 라인트레이서 02 (Bricx C)

심플디 2013.08.05 20:36 조회 수 : 230

StructProject.cpp

StructProject5.cpp

Untitled1.nxc


01.jpg


 <그림 1 : 트랙의 모습>


저런 트랙을 그리는 것도 일이라서, 트랙이 상당히 간소화 된 모습을 볼 수 있다.

하지만 트랙이 얼마나 꼬불꼬불한지는 크게 문제되지 않으므로 가볍게 넘어가자.


일단 코드에 대한 설명을 하겠는데,

크게 나누어 보자면

{

1. 교차로로 센싱되는 경우

2. 한쪽만 센싱되는 경우

3. 아무것도 센싱되지 않은 경우

}

로 나누어 볼 수 있겠다.


이때 <1. 교차로로 센싱되는 경우>에는

{

1) 교차로가 아닌 급코너

2) 진짜 교차로

}

로 나누어 지고, <2. 한쪽만 센싱되는 경우>에는

{

1) 우측 코너링

2) 좌측 코너링

}

으로 나누어 진다.


물론 <3. 아무것도 센싱되지 않은 경우>에 대한 알고리즘도 존재한다.


이전에는 급코너(1-1)알고리즘을 급코너(1-1)까지만 사용했지만,

어떤 트랙에서도 사용이 가능해야 하므로 아래와 같은 알고리즘을 적용하여, 범용성(?)과 실용성(?)을 높였다.


실제로 돌려보면 NXT가 계속 삐걱삐걱 소리를 내는데, 이유는 NXT 뒷부분에 바퀴가 없기 때문이다.

바퀴를 달고 싶은 마음은 굴뚝 같았으나, 

바퀴를 달면 앞 부분이 바닥과 심하게 밀착되며, 

이에 따라 센싱값이 달라지기 때문에, 

과감히 장애 컨셉으로 만들었다.


알고리즘 설명


1-1. 교차로가 아닌 급 코너

1) 일단 양쪽 센싱이 되면 일정 구간을 후진해야 되는데, 길게 후진 한다. 무한대로 가면 1-2 에서 망할 확률이 100%다.

2) 후진 기간 동안 한쪽 센서에 검정색 선이 밟힌다면, 후진 후 좌, 우를 살피는데 영향을 미친다.

2-1) 만약 후진 중, 우측 센서가 검정색 선을 센싱하면, 후진 한 후에 좌측 턴부터 하게 된다.

2-2) 만약 후진 중, 좌측 센서가 검정색 선을 센싱하면, 후진 한 후에 우측 턴부터 하게 된다.

2-3) 후진중 어떤 선도 밟지 않았다면, default 좌측 턴부터 하게 된다. (다음 상황에서는 우측 턴을 하게 되며, 상황을 돌고 돌게 하게 된다.)

3) 일정량의 후진이 완료되면 bool 변수에 의해서 좌우턴을 하며, 좌측 회전을 하며 카운터, 다시 한번 후진하고, 우측 회전을 하며 카운터를 센다.

3-1) 우측 카운터가 적을 경우, 우측 센서를 무시하고 좌측 센서에 검정색 선이 센싱될 때까지 좌회전을 시도한다.

3-2) 좌측 카운터가 적을 경우, 좌측 센서를 무시하며 우측 센서에 검정색 선이 센싱될 때까지 우회전을 시도한다.


1-2. 진짜 교차로

1) 1-1의 과정을 수 차례 반복해도, 교차로 센싱이 계속 카운터 된다면, 그 구간을 과감히 직진한다.


2-1. 우측 코너링

1) 좌측 센서가 센싱되었음

2) 좌측 센서가 계속 센싱되며 센싱 카운터가, 좌측 모터의 회전량에 누적된다. (점점 빨라진다.)

3) 단, 센싱 카운터는 10회로 제한한다.

4) 회전의 동작이 끝나면 역회전의 동작을 시도한다. 단, 역회전은 센싱 카운터와 무관하게 항상 일정하다. (안쪽 코너가 밀리는 것을 방지)


2-2. 좌측 코너링

1)~4) 2-1 참고.


3. 직진

1) 검정색 선을 놓치지 않을 정도로만 촘촘하게 이동하면 된다.



2012.03.02. AM 1:00

빌어먹을 -_- 코딩한 것을 저장 안하고 무심결에 닫아버렸다...

알고리즘 복구 중..


2012.03.02. AM 04:22

알고리즘 복구에 힘입어 속도 컨트롤하고 급커브 회전 알고리즘을 쪼오끔 보완했다.

StructProject.cpp


2012.03.02 AM 09:17

아 자두먹고 싶다.

아무튼, 코드를 전부 함수화 한건 자랑.

함수화 하는데 알고리즘이 자꾸 꼬이는것을 잡지 못해서 5시간 넘게 걸린건 안자랑 ㅠㅠ

StructProject5.cpp