2011-04-05 3 views
6

나침반을 사용하여 로봇을 이동하려고합니다. 우리는 나침반을 사용하여 로봇을 직선으로 움직이게하고, 2 개의 바퀴를 사용하고 조금씩 움직입니다. 방향으로 0과 359 사이의 값을 설정 한 다음 현재 방향을 확인하고 오류를 계산하여 수정합니다. 오류 = current_direction - 실제 방향과 같습니다.나침반 : 359 ~ 0도

예를 들어 우리의 초기화 방향이 90도이고 로봇이 45 일 경우 오류는 45이며 문제를 해결할 것입니다. 값이 0이면 오류가 90이되고 오류가 수정됩니다. 문제는 0보다 조금 더 움직이고 359로 이동하면 오류가 -269가되어 한 방향으로 90을 이동하는 대신 다른 방향으로 -269를 이동한다는 것입니다.

오류의 표시를 사용하여 방향을 고정하기 위해 이동할 바퀴를 결정합니다. 어떻게 해결할 수 있습니까?

답변

6
if (error > 180) { 
    error -= 360; 
} 

if (error < -180) { 
    error += 360; 
} 
+3

나는 혼란에 빠질 수있는 로봇을 가지고있었습니다. '그'를'while's로 변경하십시오 : D –

+0

@Jakub Hampl : Dizzybot이라고 부릅니까? : D – Piskvor

2

오류가 180 °보다 큰 경우 360에서 랙에 넣고 부호를 반전해야합니다. 이렇게하면 로봇이 항상 가장 짧은 방향으로 움직이는 지 확인할 수 있습니다.

1

오류가 180도 이상인 경우 반대 방향으로 이동하여 보정 알고리즘을 전환하여 보정을 계산하십시오. 간단한 if-else 문이 수행해야합니다.

1

나는 NXT와 Mindstorm에 대해 많이 알지 못하지만 기본적으로 원형 동작에서는 공통적 인 문제입니다. 당신은 단순히 두 개의 서로 다른 좌표계를 사용하고 서로간에 번역 할 수 있습니다. 가장 우아한 방식입니다. 그렇지 않으면 기호가 음수이면 360을 빼기 만해도 문제를 해결할 수있는 해킹과 우아한 방법이 아닙니다 .-

+0

흠, 극좌표? 우아하지만, 계산 속도가 느릴 수도 있습니다 (특히 임베디드 플랫폼). – Piskvor

+0

네가 맞을 수도있다. 왜냐하면 내장 된 것들은 대부분 해킹 된 것들이기 때문에 NXT가 _ 내포되어 있다고 생각하지 않는다. ;-) – tamasgal

+2

나는 CPU 속도와 그와 관련된 모든 것을 생각하고 있었다. 아키텍처에 익숙하지는 않지만 NXT에는 쿼드 코어 i5 @ 2.8GHz가 있다고 생각하지 않습니까? 나는 속도가 수십 MHz, 최대 수백 일 것이라고 추측 할 수 있습니다. 예, 그것은 내 컴퓨터가 20 년 전에 얻은 것 이상의 것입니다. 그러나 당신은 여전히 ​​그러한 제약 조건 하에서 성능을 진지하게 고려해야합니다. – Piskvor

관련 문제