Arduino PID 라이브러리를 사용하여 로봇을 직선으로 구동하려면 어떻게해야합니까?


19

두 바퀴, 각 바퀴에 구적 엔코더, H 브리지 드라이버 칩 (또는 모터 컨트롤러) 및 캐스터가있는 Arduino 기반 로봇을 만들고 싶습니다. PID 라이브러리를 사용하여 속도가 이동 거리에 비례하는지 확인하고 싶습니다.

개념적인 수준에서 (모터가 PWM 레벨에 동일하게 반응하지 않는다고 가정) PID 제어를 직선으로 이동하고 남은 거리에 비례하는 속도로 PID 제어를 어떻게 구현할 수 있습니까?


이 질문은 Arduino PID 라이브러리를 기반으로하기 때문에 여기에도 있습니다 .
Anindo Ghosh

답변:


18

사양

PID 기본 예제를 살펴보면 각 휠, 인코더 및 pwm마다 하나씩 두 개의 PID 컨트롤러 사본을 인스턴스화해야한다고 생각합니다.

PID leftPID(&InputLeft, &OutputLeft, &SetpointLeft,2,5,1, DIRECT);
PID rightPID(&InputRight, &OutputRight, &SetpointRight,2,5,1, DIRECT);

그런 다음 loop()두 엔코더를 모두 읽고 각 엔코더 값을 관련 항목에 전달한 다음 PID두 PWM 값을 모두 작성하면됩니다.

지금 SetpointLeftSetpointRight실제로 동일한 값을 가리, 그러나 이것은 나중에 설정하는 기능을 추가 할 수 있습니다처럼 개별적으로 정의 할 수 있습니다.

개념

이것이 기본적인 경우에는 효과가있을 수 있지만, 그것이 충분한 지 여부는 실제로 직선이 얼마나 정확한지에 달려 있습니다.

추측 항법

각 바퀴에 인코더가 있다고 가정하면 두 개의 PID 루프를 실행하고 각 바퀴의 오류를 비교 하면 바퀴가 미끄러지지 않는다고 가정하여 거리에 대한 최대 abbe 오류 를 계산할 수 있습니다 . 해당 오류가 요구 사항보다 작은 경우 데드 레커닝 이 필요합니다.

그러나 바퀴가 미끄러지기 쉬운 경우 제어 시스템에서 감지 할 수없는 오류에 따라 숨겨진 오류가있을 수 있으며 바퀴 인코더와 독립적으로 미끄러짐을 감지하거나 위치를 계산 한 다음 더 높은 수준의 소프트웨어를 사용하여 수정해야합니다 직선을 유지하기 위해 휠 위치 / 속도를 요구했습니다.

상대 위치 결정

John이 제안한 것처럼 가속도계를 사용하여 위치를 결정할 수 있지만 시간이 지남에 따라 정확도와 누적 오차의 영향을 고려할 때 가속도계 데이터를 사용하여 휠 미끄러짐을 감지하고 수정하는 것이 더 나을 수 있습니다.

모바일 로봇 공학에서 칼만 필터링 기술은 일반적으로 현재 위치를 더 잘 판단하기 위해 가속도계 및 휠 인코더와 같은 여러 소스의 데이터를 융합하는 데 사용됩니다.

그러나 상대 위치 결정으로 무엇을 하든지, 시간이 지남에 따라 자신이 있다고 생각하는 위치 실제 물리적 위치에서 멀어지게됩니다.

절대 위치 결정

이 문제를 해결할 수있는 유일한 방법은 차량 외부에 기준점을 두는 것입니다.

예를 들어, 룸바는 일반적으로 방 주위를 움직이기 위해 데드 레커닝을 사용하지만, 도킹이 필요할 때마다 충전 도크가 보낸 적외선 광선을 찾습니다. 룸바가 무작위로 해당 빔을 통과 할 때이를 감지하고 빔에 고정한 후 소스로 다시 이동합니다. 범프 센서와 함께 충전 접점에 정확하게 위치 할 수 있습니다.

로봇의 경우 홈 위치가 될 수 있으며,이 위치로 돌아가서 알려진 위치에 있음을 감지 할 수 있습니다. 이때 정확한 위치를 파악하고 계산 된 위치가 실제 위치에서 얼마나 떨어져 있는지보고 할 수 있습니다.

또 다른 옵션은 로봇이 수백 미터가 넘는 직선으로 이동해야하는 경우 Arduino GPS 쉴드 추가와 같은 다른 기술로 전환하는 것 입니다 .

기술의 조합

궁극적으로 정확도 요구 사항에 따라 이러한 기술의 조합을 사용해야 할 수도 있습니다.

가이드 빔이 가능하면 보이지 않는 선 추적 기법으로 원하는 것을 간단하게 수행 할 수 있습니다 . 제한된 영역에서 임의의 직선으로 이동해야하는 경우 룸바와 같이 한 직교 축에서 합성 된 위치를 수정할 수 있도록 한 쌍의 안내 빔 (서로 직각으로)을 사용할 수 있습니다 로봇이 빔 중 하나를 통과 할 때마다

여기에는 많은 옵션이 있으며, 선택한 내용은 필요한 내용에 따라 다릅니다.


1

하나의 차축을 사용하여 두 바퀴를 구동하지 않는 경우 내가 볼 수있는 유일한 해결책은 로봇의 방향을 감지하기 위해 3 축 가속도계 또는 다른 센서를 추가하고 그에 따라 각 모터에 신호를 조정하는 것입니다.


0

위에서 언급했듯이 각 휠에 같은 속도로 움직 이도록 지시 한 다음 PID가 해당 속도로 주행하는지 확인합니다. 그러나 이것은 완벽하지 않을 것입니다. 오류를 계속 확인하고 수정해야합니다. (1) 주기적으로 두 개의 휠 엔코더 카운트를 읽고 비교해야하며 카운트를 동일하게 유지하려면 필요한 경우 하나의 휠이 약간 더 빨라집니다. (2) 엔코더 가속도계와 나침반이 필요한 완벽한 제품은 아닙니다.

칼만 필터를보고 있습니다. 엔코더, 나침반 및 가속도계 데이터를 결합하여 표제를 제공하려는 경우.


0

링크 는 두 개의 PID 계산없이 좋은 예를 제공합니다. 또한 직선 경로를 측정하기 위해 imu / compass를 구현할 수 있습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.