여기 묻는 질문의 연속으로 : 자치 모드에서 간단한 이륙과 쿼드 콥터 불안정 ... 나는 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 입력'(롤을 제어하는 두 모터)의 샘플 판독 값입니다.
입출력에 관해서는 :
입력 : 가속도계 + 자이로의 조합으로 얻은 롤 및 피치 값 (도)
출력 : 서보 라이브러리의 motor.write () 함수를 사용하여 제공되는 모터의 PWM 값
해결
문제를 해결했습니다. 방법은 다음과 같습니다.
문제의 핵심은 내가 Arduino 프로그램을 구현하는 방식에 달려 있습니다. 나는 write () 함수를 사용하여 인수의 정수 단계 만 받아들이는 서보 각도를 업데이트했습니다 (또는 정수 입력에만 응답합니다 .100과 100.2는 동일한 결과를 생성합니다). 나는 그것을 writeMicroseconds ()로 바꾸었고 헬리콥터가 훨씬 더 안정적이었습니다.
한 모터에 RPM을 더하고 다른 모터는 일정한 값을 유지했습니다. 나는 반대 모터를 줄이면서 한 모터에서 RPM을 높이기 위해 이것을 변경했습니다. 그 점은 총 수평 추력을 변경하지 않고 유지합니다. 이것으로 수직 고도를 유지하려고 할 때 도움이 될 수 있습니다.
RPM을 최대 한도까지 올리려고했기 때문에 쿼드 콥터가 최대 스로틀에서 제어력을 계속 잃었습니다. 기울기를 감지했을 때 RPM이 증가 할 여지가 없었습니다.
나는 모터 중 하나가 다른 모터보다 본질적으로 약하다는 것을 관찰했지만 이유를 모르겠습니다. 모터 PWM 입력에 오프셋을 하드 코딩했습니다.
모든 지원에 감사드립니다.
소스 코드:
관심이 있으시면 베어 본 PID 구현의 소스 코드는 다음과 같습니다. PID 소스 코드
하드웨어에서 자유롭게 테스트하십시오. 프로젝트에 대한 모든 기부를 환영합니다.