자세제어 (4) 썸네일형 리스트형 PWM Update rate와 PID Update rate의 관계 PWM Update Rate는 말그대로 PWM의 펄스가 출력되는 주기를 뜻한다. 만약 400Hz의 PWM펄스를 출력하고 있다면 1초에 400번, 즉 2.5ms마다 펄스를 출력한다는 것이다. PID Update rate는 PID계산을 하는 주기를 뜻한다. 그래서 이게 뭐? 내가 하고싶은 말은 PWM Update rate를 PID Update rate의 속도보다 같거나 빠르게 해야한다는 것이다. 즉, PWM Update rate >= PID Update rate 왜? PID계산을 아무리 빠르게 해봤자 모터출력에 그만큼 반영하지 못하면 의미가 없다는 것이다. 예를 들어 모터출력 반영을 1초에 200밖에 못한다면 PID계산을 1초에 400번, 1000번 아무리 빠르게한다해도 1초에 PID계산을 200번하는 것과.. 이중 PID제어 이전에 사용한 PID제어는 단순히 각도를 PID제어한 것이었다. 그 결과 자세를 안정화하는데 시간이 걸려서 자세제어가 잘 되지않았다. 그럼 어떻게해야할까 고민하며 구글링을 해보았는데, 원래 PID제어로는 자세 제어가 잘 안되고 이중 PID제어를 해야한다는 것이다. 이중 PID제어도 어떻게 하냐에 따라 다른 것같았다. PI-PI제어를 하기도 하던데 내가 찾은 것 중 가장 괜찮다고 생각한 것은 외부 루프로 각도를 P제어한 후, 그 결과를 Set point로 하여 내부 루프로 각속도를 PID제어를 하는 것이다. 단순히 각도만으로 제어하는 것보다 각도로 제어한 값을 각속도로 융합해서 제어하므로 효율이 더 좋을 거라 생각했다. errorAngle = targetAngle - currentAngle; //각도 오차.. PID제어 피드백 제어란 뭘까? 드론을 원하는 각도로 움직이기 위해서는 자세 센서에서 출력되는 오일러 각도, 각속도 그리고 조종기(SBus data)의 값을 이용하여 피드백 구조로 제어하여야 한다. 피드백 구조를 사용하지 않는다면 조종기로 드론에 명령을 내려도 명령을 정확인 수행하지 못한다. 예를 들어, 제자리에서 왼쪽 모터에 30만큼 힘을 주면 10도만큼 오른쪽으로 기울어진다고 가정해보자. 하지만 드론이 제자리에서 오른쪽으로 이미 조금 기울어져 있다면 왼쪽 모터에 30만큼 힘을 주었을 때, 10도보다 더 오른쪽으로 기울어질 것이다. 그러므로 자세 센서에서 드론의 현재 오일러 각도를 분석한다. 그리고 드론은 조종기에서 내린 명령 각도에서 현재 각도를 뺀 값만큼을 움직인다. 예를 들어 조종기에서 30도만큼 기울이라는.. Ziegler-Nichols Method(지글러-니콜스 방법) PID를 튜닝을 많이 해봤지만 도무지 감이 안온다. 노가다식으로 하는거말고 뭐 별다른 방법이 있나? 싶어서 찾아봤더니 있었다. 바로 지글러 니콜스 방법이다. 방법은 간단했다. I gain과 D gain을 0으로 설정한 후 P gain값을 늘리다보면 기체가 일정하게 진동하는 임계상태에 도달한다. 이 때의 P gain값을 임계이득(Kc), 진동주기를 임계주기(Tc)로 하여 구한다. 그 다음 아래에 table을 보고 Type에 맞춰서 Gain값을 구하면 된다. 지글러 니콜스 방법은 두 가지가 있는데 계단응답곡선을 사용하는 방법과 방금 내가 설명한 주파수 응답 방법을 사용하는 것이다. 따라서 위에 표에서 From frequency response 부분을 참고하면 될 것이다. 이전 1 다음