[NXT] 라인트레이서 01 (Brixc C)

심플디 2013.08.05 20:25 조회 수 : 195

01.png


최근에 잡기 시작한것은 라인 트래이서다.

하고있던 NXT - Segway 때려치고 이것을 왜 했냐고 비난하지 마라.

랩실에서 NXT Line tracer로 5만원빵 내기를 했는데 어떻게 안하겠냐.

아무튼, 처음에는 "아... 까짓거 별거 아니겠네." 라고 생각했는데, 왠걸? 

트랙이 너무 얼탱없어서 생각보다 별거더라.


02.jpg

03.jpg 

04.jpg 

05.jpg 

<그림 1 : 라인트레이서 하드웨어 01 >


 <그림 1>을 보면 알겠지만, 컨셉은 이러하다.

후방 센서가 라인을 따라가게 해놓고 일정한 장애가 발생할 때마다 

후방 센서는 제자리, 전방 센서만 360도 회전을 하면서 그 곳을 어떻게 지나가야 하는지 판단 하는것이다.


하지만 이렇게 되면 시간이 너무 많이 소요될 것 같아서 아래와 같은 디자인으로 바로 바꿔버렸다.




06.jpg

<그림 2 : 라인트레이서 하드웨어 01 >


<그림 2>를 보면 감이 오겠지만, 대충의 알고리즘은 이러하다.


1. 좌측 센서가 검정색을 감지하면 우측으로 약간 회전시킨다.


2. 우측 센서가 검정색을 감지하면 좌측으로 약간 회전시킨다.


3. 만약 길이 + 인 경우 (교차로), 뒤로 몇번 빼면서 

좌, 우를 살핀 후

커브길이 아님을 3번을 반복하여 확인하고, 

3번 이상 확인되었을 경우 그냥 전진시킨다.

 


{

빛 센싱 과정 때문에 문제가 있다.

트랙이 <그림 2>와 같을 때도 있고, <그림 1>과 같이 흰색&검정색인 경우도 있다.

또한 주변 환경이 밝을 때도 있고, 어두울 때도 있다.

이것은 흰색이 조금 더 검게 될 수 있다는 얘기고, 

검정색이 생각보다 빛을 많이 반사해서 '흰색 화' 될 수 있다는 것이다.


따라서 <검정색>을 명확하게 NXT에 정의 해 줄 수가 없다.

이에 따라 만약, 센싱 시간 간격을 촘촘하게 했다면 (속도가 낮음), 검정색 선을 하나의 센서가 딱 달라붙어서 갈 것이다. (좋은 예)

그리고 센싱 시간 간격을 조금 너프하게 설정했다면 (속도가 높음), 가끔 라인을 놓치는 경우가 발생한다. (나쁜 예)


일단 처음에는 완주가 목표니까, 필자는 센싱 간격을 조금 촘촘하게 설정했다.

물론 속도는 거북이. ^^;

근데 이게 역효과 나서 90도 이상 턴 하는  곳에서 장애를 발생시켰다.

회전 되는 구간에서 안쪽 센서와 바깥쪽 센서가 모두 센싱을 하기 때문에 그곳을 교차길로 인식하고, 훅! 지나가는 상황이 발생하는 것이다...ㅠㅠ

이에 따라 필자는 아래와 같은 알고리즘을 구상했다.


후진 (일정 시간동안 센싱되면 그 자리에서도 멈춤)  -> 

좌턴하며 센싱 -> 

후진 (일정 시간동안 센싱되면 그 자리에서도 멈춤) -> 

우턴하며 센싱 -> 

카운터 비교 -> 

만약 좌턴이 카운터가 적게 되었다면 우턴시킴 ->

반대방향의 센서로 라인에 밀착됨  

무슨 개소린가 하면 직접 해보길 권장한다.

}


Bricx C는 Tab설정이 병맛이라, 코딩은 VC++로 짜고 컴파일만 Bricx로 돌렸다.


02.png

<그림 3  : 코딩 모습> 


 

돌려보면 알겠지만, 각도가 큰 커브길인 경우도 교차로(+)로 인식 될 수 있다는 것이 큰 난제였다.

이에 2틀간 빡쳐서 센서를 3개로 달까 했는데, 2개 쓴것도 대회에서 인심 쓴 것처럼 하길래 2개로만 가능한 알고리즘이 필요했다.

(센서를 많이 쓸 수록, 스펙 향상을 기대 할 수 있다.)


09.jpg

<그림 4 : 트랙의 처음부터, 죽음의 커브까지의 루트>


02.png

<그림 6 : 우측 센서가 먼저 센싱 되는 경우>