저는 최근에 DC 모터로 자율 로봇을 만드는 데 성공했으며 잘 작동합니다. 그러나 그것은 직선으로 이동하지 않습니다. 나는 지금 로봇을 똑바로 가도록 어떤 방법을 구현해야 하는지를 연구 중이다. 나는 인코더를 사용하는 방법을 거의 알고 있지만 자이로에 대해서는 잘 모르겠습니다. 엔코더를 사용하여 직선 운동을위한 프로그램을 작성했으나 앞쪽 브러시 속도로 인해 곧바로 움직이지 않습니다. 개선을 위해 자이로를 사용하기로 결정했습니다. 자이로를 사용하여 직선 운동을 만들 수 있습니까? 아니면 어떤 제안?로봇을 직선으로 움직이려면 자이로 또는 인코더를 어떻게 사용할 수 있습니까?
답변
먼저 로봇이 직선으로 움직이는 것이 무엇을 의미하는지 개념적으로 이해해야합니다. 직선으로 완벽하게 움직이는 로봇을 얻지 못할 것입니다. 곧바로 움직일 수 있습니다 (인간이 판단 할 수있는 것보다 더 완벽 할 수도 있음). 그러나 항상 오류가있을 것입니다.
자이로 스코프는 점차적으로 진행되는 경우 코스를 벗어날 것이라고 판단하지 못할 수 있으며 자이로의 품질에 따라 드리프트가 쌓여서 약간의 변화가있을 것이라고 생각하게됩니다. 그것은 여전히 완벽하게 앉아 있습니다. 당신이 사는 자이로가 더 비싸면 적게 될 것이지만 여전히 그렇습니다.
완벽 센서라고 가정해도 "직진 운전"과 "직선 및 좁음 유지"에는 여전히 차이가 있습니다. 가능한 한 일관된 자세를 유지하려고 노력하는 로봇을 코딩했다고 상상해보십시오 (직진). 움직이는 동안 조금 노크하면 측면으로 스쳐지나 원래 각도로 바뀝니다. 그러나 그것은 다른 경로에있을 것입니다. 물론 경로는 원래 경로와 평행하지만 경로가 동일하지는 않습니다.
그렇다면 구타 된 경로에서 얼마나 멀리 떨어져 있는지 파악하고 다시 시도하려고하는 옵션이 있습니다. 그것은 라인 참조 로봇이하는 것처럼 일정한 기준 또는 3D 자이로와 3D 가속도계와 같은 더 많은 센서를 취할 것입니다.
는 두 번째 옵션은 그래서 여기에 특별한 로봇 프레임 워크에서 수행 첫 번째 옵션, 당신이 무슨 일을하는지보다 조금 더 들리 :
//initialize
double angle = gyro.get_heading_degrees();
//...
//logic code that may be looped or fired by events
{
//this is our error; how far off we are from our target heading
double error = angle - gyro.get_heading_degrees() - 360;
drive_system.drive_arcade(error/180, 1);
}
이 아케이드 방식으로 운전하는 가정이; 당신은 탱크 드라이브에 적용하거나이 '1' '180'줄일 수있는 값입니다
'-360'단지 속도
... 드라이브 또는 mecanum 드라이브 또는 H-드라이브 또는를 스쳐지나 수 각도가 -1과 1 사이의 값으로 설정됩니다. 드라이브 방법이 각도를 결정하기 위해 다른 범위를 사용하는 경우이를 적용해야합니다.
마지막으로이 예제는 절대 안전한 것은 아니지만 오류를 발견했을 때 오류를 수정하는 방법에 대해 생각해야합니다.
독자가 달성하려는 목표와 방법을 이해하는 데 도움이 될만한 내용을 보여줄 수 있습니까? –