답변:
PID 기본 예제를 살펴보면 각 휠, 인코더 및 pwm마다 하나씩 두 개의 PID 컨트롤러 사본을 인스턴스화해야한다고 생각합니다.
PID leftPID(&InputLeft, &OutputLeft, &SetpointLeft,2,5,1, DIRECT);
PID rightPID(&InputRight, &OutputRight, &SetpointRight,2,5,1, DIRECT);
그런 다음 loop()
두 엔코더를 모두 읽고 각 엔코더 값을 관련 항목에 전달한 다음 PID
두 PWM 값을 모두 작성하면됩니다.
지금 SetpointLeft
과 SetpointRight
실제로 동일한 값을 가리, 그러나 이것은 나중에 설정하는 기능을 추가 할 수 있습니다처럼 개별적으로 정의 할 수 있습니다.
이것이 기본적인 경우에는 효과가있을 수 있지만, 그것이 충분한 지 여부는 실제로 직선이 얼마나 정확한지에 달려 있습니다.
각 바퀴에 인코더가 있다고 가정하면 두 개의 PID 루프를 실행하고 각 바퀴의 오류를 비교 하면 바퀴가 미끄러지지 않는다고 가정하여 거리에 대한 최대 abbe 오류 를 계산할 수 있습니다 . 해당 오류가 요구 사항보다 작은 경우 데드 레커닝 이 필요합니다.
그러나 바퀴가 미끄러지기 쉬운 경우 제어 시스템에서 감지 할 수없는 오류에 따라 숨겨진 오류가있을 수 있으며 바퀴 인코더와 독립적으로 미끄러짐을 감지하거나 위치를 계산 한 다음 더 높은 수준의 소프트웨어를 사용하여 수정해야합니다 직선을 유지하기 위해 휠 위치 / 속도를 요구했습니다.
John이 제안한 것처럼 가속도계를 사용하여 위치를 결정할 수 있지만 시간이 지남에 따라 정확도와 누적 오차의 영향을 고려할 때 가속도계 데이터를 사용하여 휠 미끄러짐을 감지하고 수정하는 것이 더 나을 수 있습니다.
모바일 로봇 공학에서 칼만 필터링 기술은 일반적으로 현재 위치를 더 잘 판단하기 위해 가속도계 및 휠 인코더와 같은 여러 소스의 데이터를 융합하는 데 사용됩니다.
그러나 상대 위치 결정으로 무엇을 하든지, 시간이 지남에 따라 자신이 있다고 생각하는 위치 는 실제 물리적 위치에서 멀어지게됩니다.
이 문제를 해결할 수있는 유일한 방법은 차량 외부에 기준점을 두는 것입니다.
예를 들어, 룸바는 일반적으로 방 주위를 움직이기 위해 데드 레커닝을 사용하지만, 도킹이 필요할 때마다 충전 도크가 보낸 적외선 광선을 찾습니다. 룸바가 무작위로 해당 빔을 통과 할 때이를 감지하고 빔에 고정한 후 소스로 다시 이동합니다. 범프 센서와 함께 충전 접점에 정확하게 위치 할 수 있습니다.
로봇의 경우 홈 위치가 될 수 있으며,이 위치로 돌아가서 알려진 위치에 있음을 감지 할 수 있습니다. 이때 정확한 위치를 파악하고 계산 된 위치가 실제 위치에서 얼마나 떨어져 있는지보고 할 수 있습니다.
또 다른 옵션은 로봇이 수백 미터가 넘는 직선으로 이동해야하는 경우 Arduino GPS 쉴드 추가와 같은 다른 기술로 전환하는 것 입니다 .
궁극적으로 정확도 요구 사항에 따라 이러한 기술의 조합을 사용해야 할 수도 있습니다.
가이드 빔이 가능하면 보이지 않는 선 추적 기법으로 원하는 것을 간단하게 수행 할 수 있습니다 . 제한된 영역에서 임의의 직선으로 이동해야하는 경우 룸바와 같이 한 직교 축에서 합성 된 위치를 수정할 수 있도록 한 쌍의 안내 빔 (서로 직각으로)을 사용할 수 있습니다 로봇이 빔 중 하나를 통과 할 때마다
여기에는 많은 옵션이 있으며, 선택한 내용은 필요한 내용에 따라 다릅니다.
하나의 차축을 사용하여 두 바퀴를 구동하지 않는 경우 내가 볼 수있는 유일한 해결책은 로봇의 방향을 감지하기 위해 3 축 가속도계 또는 다른 센서를 추가하고 그에 따라 각 모터에 신호를 조정하는 것입니다.