엔코더 로봇
엔코더 로봇에 대해서 알아보기
로봇을 제어하다 보면 정확하게 20cm 거리 가기, 정확하게 90도 회전하기 등을 하고 싶어집니다. 보통은 시간으로 이를 제어 하는데, 그 과정에서 많은 시행착오를 거치게 됩니다. 하지만 이렇게 어렵게 맞춘 제어 시간도 배터리의 잔량에 따라 그 동작이 변합니다. 로봇은 같은 시간 동안 직진을 하더라도 배터리의 잔량이 많을 때는 많이 가고 그렇지 않을 때는 적게 갑니다. 이렇게 시간을 이용한 제어보다 정확하고 정밀하게 제어하는 방법은 모터의 회전 각도를 이용하여 제어하는 것입니다. 이 포스팅에서는 서보모터의 회전각도를 이용하여 원하는 거리 가기, 회전하는 방법을 알아봅니다. 또한, NXT 로봇은 모터 출력의 차이 때문에 로봇이 똑바로 직진하지 않습니다. 즉, 한쪽 모터가 조금 빠르게 가게 되면 방향으로 휘어져 갑니다. 이렇게 휘 어져 가게 되면 정밀 제어는 어려워집니다. 이러한 차이를 보정하기 위한 제어인 PID 제어, Synch 제어를 소개하도록 하겠습니다. 서보모터의 개념에 설명해드리자면 서보모터에는 내부 회전을 감지할 수 있는 회전 속도계가 내장되어 있어 모터의 회전 속도나 회전 각도를 측정할 수 있습니다. 또한, 기어 구조가 내장되어 있어 모터의 회전이 작아지는 대신 모터의 힘이 증가합니다. 서보모터의 외부 회전 부분에는 여러 가지 바퀴를 부착할 수 있도록 축을 끼울 수 있는 여러 개의 구멍이 있습니다. 서보모터는 회전속도계 센서의 값을 활용하여 모터의 회전 위치와 회전 속도를 직접 제어하는 피드백 제어가 가능한 모터로서, 정방향 제어(정회전), 역방향 제어(역회전), 감속, 가속 등의 미세한 제어가 가능하기 때문에 정확한 제어를 필요로 하는 정밀기계 및 로봇 분야에 핵심적으로 쓰이는 부품입니다. 서보 모터의 엔코더 사용 엔코더의 기능을 간단히 정의하자면 각도를 제어할 수 있도록 수치화하는 기능이 있습니다. 엔코더를 우리말로는 "부호화" 정도로 옮길 수 있는데, 모터가 움직인 값을 + 또는 각도로 계산할 수 있습니다. RobotC에서는 이러한 서보모터의 출력을 100단계로 조정 가능합니다. 즉, 모터의 파워를 조절할 수 있습니다. 또한, 내부에 포토커플(Photo-couple)을 사용한 엔코더(회전 센서)가 내장되어 있으며 이 엔코더의 분해능은 1°입니다. 즉 1° 단위로 모터를 제어할 수 있다는 뜻입니다. (작동 오차는 ±1) 서보모터의 엔코더값을 읽어들여 모터의 출력을 좀 더 미세하고 정확하게 조정가능 합니다. 또한, 엔코더를 기본으로 하는 여러 함수들을 사용함으로써 섬세한 출력과 조종이 가능합니다. 서보모터의 엔코더값은 모터의 회전 방향과 회전 각도에 따라 실시간으로 증가하거나 감소하며, 임의로 값을 초기화시키거나 엔코더에 입력된 값을 언제든 읽어들일 수 있습니다. 엔코더의 값이 0으로 초기화된 후에는 바퀴의 회전에 따라서 엔코더값이 실시간으로 바뀌어 저장되기 때문에 초기화 이후의 바퀴의 회전량을 알 수 있습니다. 서보모터의 출력 범위는 -100 + 100까지이며 -100은 최고 속도로 역회전, 0은 정지, + 100은 최고 속도로 정회전입니다. 범위를 넘어가는 경우, 예를 들어 -100보다 작은 출력은 -100으로 인식되고, + 100보다 큰 출력도 + 100으로 인식됩니다. 엔코더의 값은 현재 서보모터의 회전에 대한 정보를 정수값으로 제공합니다. -360은 역방향으로 모터가 한바퀴 회전한 것을 의미하고, 360은 정방향으로 한바퀴 회전한 것을 의미합니다. 앞서 언급한 것처럼 시간을 이용한 로봇 제어의 경우, 배터리의 잔량에 따라 모터의 출력이 달라져 정밀한 제어가 어렵지만, 엔코더를 이용하면 배터리의 잔량에 따라 달라지는 모터의 출력에 영향을 덜 받을 수 있어 보다 정밀한 제어가 가능해 집니다.