쿼드 콥터 PID 튜닝


13

여기 묻는 질문의 연속으로 : 자치 모드에서 간단한 이륙과 쿼드 콥터 불안정 ... 나는 APM 2.6 모듈에 의해 제어되는 quadrotor에 대한 기본 PID를 구현하는 방법에 대한 몇 가지 질문을하고 싶습니다. (3DRobotics의 프레임을 사용하고 있습니다)

나는 전체 제어 시스템을 두 개의 PID 블록으로 줄였습니다. 하나는 롤을 제어하고 다른 하나는 피치를 제어합니다 (요와 다른 모든 것 ... 나중에 생각할 것입니다).

나는 자유롭게 회전하는 빔으로 구성된 리그에서이 설정을 테스트하고 있는데, 쿼드 로터의 두 팔을 묶었습니다. 다른 두 사람은 자유롭게 움직일 수 있습니다. 그래서 실제로 한 번에 한 자유도 (롤 또는 피치)를 테스트하고 있습니다.

아래 이미지를 확인하십시오. 여기 A, B는 셋업이 장착 된 자유롭게 회전하는 빔을 표시합니다. 여기에 이미지 설명을 입력하십시오

P와 D 파라미터를주의 깊게 튜닝하면서 약 30 초 동안 비행을 지속 할 수있었습니다.

그러나 '지속적'이라는 말은 드론이 한쪽으로 넘어지지 않는 테스트를 의미합니다. 흔들림없는 비행은 여전히 ​​시력이없는 곳이 아니며 30 초 이상의 비행도 상당히 어려워 보입니다. 처음부터 흔들린다. 20-25 초에 도달하면 한쪽으로 기울기 시작합니다. 30 초 내에 허용 할 수없는 여백으로 한쪽으로 기울어졌습니다. 곧, 거꾸로 쉬고있는 것을 발견했다

PID 코드 자체는 자이로 + 가속도계 데이터의 '무료 필터'에서 비례 오류를 계산합니다. 적분 항은 0으로 설정됩니다. P 항은 약 0.39가되고 D 항은 0.0012입니다. (나는 Arduino PID 라이브러리를 의도적으로 사용하지 않고 여기에 구현 된 자체 PID 중 하나를 얻고 싶습니다.)

작동 방식을 보려면이 비디오를 확인하십시오.

http://www.youtube.com/watch?v=LpsNBL8ydBA&feature=youtu.be [예, 설정이 꽤 오래되었습니다! 동의한다. :)]

이 단계에서 안정성을 향상시키기 위해 무엇을 할 수 있는지 알려주십시오.

@Ian : 설정으로 수행 한 많은 테스트 중에서 직렬 모니터의 판독 값을 사용하여 일부 테스트에 대한 그래프를 플롯했습니다. 다음은 Roll vs 'Motor1 & Motor2-PWM 입력'(롤을 제어하는 ​​두 모터)의 샘플 판독 값입니다.

롤 대 모터 PWM 입력

입출력에 관해서는 :

입력 : 가속도계 + 자이로의 조합으로 얻은 롤 및 피치 값 (도)

출력 : 서보 라이브러리의 motor.write () 함수를 사용하여 제공되는 모터의 PWM 값


해결

문제를 해결했습니다. 방법은 다음과 같습니다.

  1. 문제의 핵심은 내가 Arduino 프로그램을 구현하는 방식에 달려 있습니다. 나는 write () 함수를 사용하여 인수의 정수 단계 만 받아들이는 서보 각도를 업데이트했습니다 (또는 정수 입력에만 응답합니다 .100과 100.2는 동일한 결과를 생성합니다). 나는 그것을 writeMicroseconds ()로 바꾸었고 헬리콥터가 훨씬 더 안정적이었습니다.

  2. 한 모터에 RPM을 더하고 다른 모터는 일정한 값을 유지했습니다. 나는 반대 모터를 줄이면서 한 모터에서 RPM을 높이기 위해 이것을 변경했습니다. 그 점은 총 수평 추력을 변경하지 않고 유지합니다. 이것으로 수직 고도를 유지하려고 할 때 도움이 될 수 있습니다.

  3. RPM을 최대 한도까지 올리려고했기 때문에 쿼드 콥터가 최대 스로틀에서 제어력을 계속 잃었습니다. 기울기를 감지했을 때 RPM이 증가 할 여지가 없었습니다.

  4. 나는 모터 중 하나가 다른 모터보다 본질적으로 약하다는 것을 관찰했지만 이유를 모르겠습니다. 모터 PWM 입력에 오프셋을 하드 코딩했습니다.

모든 지원에 감사드립니다.


소스 코드:

관심이 있으시면 베어 본 PID 구현의 소스 코드는 다음과 같습니다. PID 소스 코드

하드웨어에서 자유롭게 테스트하십시오. 프로젝트에 대한 모든 기부를 환영합니다.


1
루프의 입력과 출력은 무엇입니까?
Guy Sirton

@GuySirton : 내 질문 업데이트
metsburg

모터 명령에서 평평한 부분은 무엇입니까? 포화 상태 인 것 같습니다. 연속 기능처럼 변경 사항을 롤링하지만 명령이 매우 갑작스럽게 보입니다. 또한 롤 입력이 동일한 범위처럼 보이는 동안 두 모터 PWM 명령이 표류하는 이유는 무엇입니까? 그런데 대략 시간표는 얼마입니까?
Guy Sirton

1
30 초 후에 제어권을 잃는 이유는 아마도 두 명령이 표류하는 것과 관련이있을 것입니다. 나는 당신이 명령의 차이점을 통제하려고한다고 생각하지만 명령을 계속 표류 할 수는 없습니다.
Guy Sirton

@GuySirton : 그들은 표류하지 않고, 0에서 위로 증가하여 3/4 초 내에 특정 정상 상태에 도달합니다. 그러나 "30 초 후에 제어권을 잃은 이유는 아마도 두 명령이 표류하는 것과 관련이 있습니다"라고 말할 때 당신이 옳다고 생각합니다. 이 점진적 증분을 사용하지 않으면 PWM 입력을 특정 수준 (위의 최대 입력보다 낮음)으로 고정하면 30 초 후에 제어 기능이 손실되는 문제가 사라집니다.
metsburg

답변:


6
  1. 비례 게인이 너무 높은 것 같습니다.
  2. 한 모터에서 RPM을 지속적으로 증가시키면서 다른 모터를 잠가 시스템을 회전시킵니다. 이것은 결국 모두 포화 상태가되어 제어력을 잃게되므로 제어 전략이 좋지 않습니다. 또한 시간이 지남에 따라 시스템 명령 능력이 떨어집니다. 따라서 더 나은 시스템 모델이 필요합니다.
  3. # 1 및 # 2를 다루는 경우 시스템이 더 안정적이지만 제어 대역폭에 만족하지 않을 수 있습니다. 이를 처리하려면 사물 센서 쪽과 사물 쪽에서 지연을 제거하는 등 시스템을 더 단단하게 만들어야합니다.

3

: 나는이 질문을 통해 읽고 시작 했죠 튜닝 PID 루프를위한 좋은 전략은 무엇인가?

추측해야한다면 무료 필터가 구성되는 방식에 문제가 있다고 말하고 싶습니다. 쿼드 콥터 모터를 끈 상태에서 프레임을 앞뒤로 기울이고보고 된 롤 / 피치 값이 실제로 정확한지 확인해야합니다.

나에게 가속도계의 입력과 필터의 출력 사이에 지연이있는 것처럼 보입니다. 오실 레이션은 입력 데이터에 대한 늦은 반응으로 설명 할 수 있습니다. 결국 뒤집는 것은 시간이 지남에 따라 누적되는 가능한 통합 오류처럼 보입니다. 즉, 쿼드 콥터가 옆에 있지만 실제로는 수평으로 떠오르고 있다고 생각합니다.

(업데이트) 그래프와 관련하여 균형을 유지하지 않고 모터 속도가 계속 증가한다는 사실은 어딘가에 오류가 있음을 의미합니다. 적분 용어가 무한대로 커질 수 있으므로 합리적인 최대 값을 지정해야합니다.


앞뒤로 기울일 때 롤 값으로 질문을 업데이트했습니다. 최대 PWM 입력을 낮추어 결국 뒤집어졌습니다. 보정 값이 매우 높은 RPM에서 작동하지 않는 것 같습니다. RPM이 높을 때 손으로 리그를 쉽게 돌릴 수 있습니다. RPM이 낮을수록 저항이 커지고 쿼드 콥터가 원래 위치로 다시 진동하는 것 같습니다. 따라서 '회전'문제는 아마도 RPM을 낮춤으로써 해결 될 것입니다 (드론이 전혀 이륙 할 것인지 알지 못한다면 희망합니다). 진동 문제는 여전히 남아 있습니다.
metsburg

35±90

글쎄, 그래프는 비디오에 표시된 테스트를위한 것이 아닙니다. 위에서 언급했듯이 그래프는이 설정으로 수행 한 많은 테스트 중 하나에서 얻은 것이며이 특정 사례가 어떻게 생겼는지 정확하게 기억하지 못합니다. 그래프는 입력 대 출력 응답의 작동 방식에 대한 아이디어를 제공하기 위해 입력과 출력 사이에 지연이 거의 없다는 것을 알고 싶었습니다 (루프가 150 + Hz에서 실행되는 경우). 비디오와 그래프를 일치시키는 것은 의미가 없을 수 있습니다. 비디오에서 테스트에 대한 정확한 데이터 세트가 없습니다.
metsburg

나는 그래프가 다소 오도임을 깨달았습니다. 죄송합니다. 보다 정확한 그래프로 그래프를 업데이트하려고합니다. 실제로 직렬 포트에서 데이터를 플로팅하기 때문에이 그래프를 만들 때 Arduino 보드는 랩톱과 테 더링되었습니다. 특정 비트의 진동 후, 나는 수동으로 진동을 중재하고 느리게해야했습니다. 그렇기 때문에 실제로는 약 5 도인 반면에 실제로는 5도 정도입니다. 나중에 더 정확한 그래프를 업데이트하려고합니다.
metsburg

그래프에서 볼 수있는 또 다른 것은 결합 된 추력이 항상 증가 한다는 것 입니다. 그건 잘못된 것 같습니다.
Ian

1

여기에 여러 가지 일이있을 수 있습니다 ...

1)보고 된 각도가 정확합니까? 시끄러운? 쿼드를 수동으로 기울이고 나오는 값을 모니터링하여 쉽게 확인할 수 있습니다.

2) 자신의 PID 구현에 버그가 있습니다. 신뢰할 수있는 구현을 사용하여 코드를 확인할 수 있습니다.

3) 소품, 모터가 잘못 설치되었습니다.

4) ...


1) 나는보고 된 각도를 기울이고 확인했는데 거의 정확하지만 시끄 럽습니다. 2) 매우 가능성이 높습니다 ... 사실, 나는 그것을 완전히 요약한다고 생각합니다 : P 3) 시계 방향으로 두 개, 시계 반대 방향으로 두 개 ... 제어 할 수없는 방식으로 오류가 발생했습니다. 4) ....
metsburg

4) ... 잘못된 PID 튜닝은 PID가 전혀없는 것보다 최악의 상황을 초래할 수 있습니다!
dm76

네, 지금 봅니다. 나는 내일 그것을 할 것입니다. 첫 번째 계획은 신뢰할 수있는 PID 라이브러리를 사용하는 것이고, 두 번째는 PID의 출력을 PWM 신호에서 roll.pitch 보정으로 변경하는 것입니다.
metsburg
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.