드론

1-14 드론의 비행 제어:PID 제어를 위한 setpoint 값 결정, 제어 오차 계산 및 ESC 펄스 값 계산

coding art 2017. 11. 1. 17:23
728x90


드론이나 자동차처럼 움직이는 물체는 뉴튼의 운동 방정식을 따른다. 물체에 작용하는 힘이나 모멘트들의 벡터적 합이 영이 아니면 물체는  감가속 이 일어나게 된다. 따라서 보다 현실적으로 실제 드론의 비행 상태를 모델링해보자.



드론이 호버링 하는 상태라 가정한다. 이 상태에서 송신기로부터의 +PITCH  방향으로 초기 입력 값을 받게 되면 다음과 같이 명령 실행을 통해서 pid_pitch_setpoint 값을 계산한다.


 pid_pitch_setpoint = (receiver_input_channel_2 – 1508)/3

물론 이때의 자이로 값은 호버링 상태에서 즉 PITCH 각속도(angular velocity )가 0인 상태이다. 따라서 아래의 그림에서처럼 pid_error_temp 가 계산된다.


그 다음 단계는 코드 내에 부여 되어 있는 PID 값을 적용하여 pid_output_pitch 값을 계산한다.
현재 드론의 상황은 ROLL, YAW 명령 값이 스틱 중앙값인 1500 이며 한편 THROTLE 값은 현재 값으로 그대로 둔 상태에서 PITCH  명령을 준 상태이므로 ROLL, YAW 관련 pid_output_roll, pid_output_yaw 변수 값들은 모두 0 이다. 반면에 PID 제어 대상이 아닌 THROTTLE 값은 채널 3에서 그대로 읽어 들인다.

 throttle = receiver_input_channel_3

그러면 pid_output_pitch 값과 throttle 값을 사용하여 모터 회전을 제어하기 위한 esc_1,esc_2,esc_3,esc_4 값들을 계산할 수 있다. 드론이 기울어지기 시작하는 시점에서 pid_error_temp 의 값은 명백히 마이너스(-) 값이며 pid_output_pitch  값도 마이너스(-)임에 유의하자.


esc_1 = throttle - pid_output_pitch ;
esc_2 = throttle + pid_output_pitch ;
esc_3 = throttle + pid_output_pitch ;
esc_4 = throttle - pid_output_pitch ;


위의 esc 값 계산에서 1번과 4번 모터는 throttle 값에서 앞서 계산된 마이너스(-) 값의pid_output_pitch 값을 빼면 throttle 값보다 큰 값이 되며 반면에 2번과 3번 모터는 throttle 값보다 작은 값이 됨을 알 수 있다. 이 값이 ESC를 통해 모터에 전달되면 이 값에 비례하여 회전 rpm을 변화 시키게 된다.

따라서 아래 그림에서처럼 1번 4번은 추진력이 더 커지고 2번과 3번은 추진력이 더 작아져서 드론이 앞으로 회전에 의해서 기울게 된다. 아울러 그 다음 자이로 데이터 샘플링에서는 당연히 pid_error_temp 가 줄어들게 될 것이다. 동시에 드론이 호버링 상태에서 +PITCH 방향으로 기울어짐에 따라 4개 모터 추진력 합 벡터의 수평성분이 발생하게 되어 + PITCH 방향으로 이동하게 된다.       

추진력 합 벡터의 수평 성분은 다음과 같이 Tx = T sin θ 로 계산된다. 즉 수직 추진력 T가 일정한 값의 상수라면 수평 성분은 θ 에 관한 비선형적인 힘을 드론에 가하게 되어 드론 운동의 비선형성으로 인해서 인지 순수히 매뉴얼로 조종하는 경우에 조종이 만만치 않은 원인 중의 하나인 듯하다.



특히 빠른 속도로 아두이노 내부에서 loop()문이 실행되면서 점차 에러 값이 줄어들게 되면 그에 따른 pid_output_pitch 값도 줄어 들게 되어 결국 각속도가 송신기에서 지정했던 pid_pitch_setpoint 값에 접근하게 된다.

이와 같은 메카니즘에 의해서 드론의 각속도 값이 setpoint 값을 목표로 변화함에 따라 즉 각가속이 일어나게 된다. 참고로 질점의 선형 감가속이 2계 상미분 방정식에 의해 기술되듯이 회전 감가속의 경우도  2계 상미분 방정식에 의해 기술될 수 있음을 지적한다, 하지만 한 가지 큰 차이점은 선형적인 감가속에서 질량이 사용되었지만 회전 운동에서는 질량관성모멘트 I 가 사용됨에 유의하자.
 


드론의 관성모멘트는 단순히 저울로 계량할 수 있는 양은 아니라 CAD 모델링을 통해 수치 값을 얻을 수 있다. 공기 중에서 비행 중인 리튬 폴리머 배터리로부터 에너지를 공급 받는 드론은 비행 에너지로 대부분의 에너지를 소모하고 일부 공기와의 마찰이나 전기회로의 발열로 손실이 일어난다. 하지만 드론의 회전 운동에 있어서 자체적인 감쇠력이나  스프링과 같은 복원력은 없는 듯하며 오히려 이러한 효과는 드론 외부의 강한 바람과 송신기로부터의 입력에 따라 일어나게 되는 드론 모터 PID 제어에 따른 추진력 즉 F(t)에 포함된 것으로 보인다.
바람이 잔잔한 경우라면 결국 드론 모터 추진력 변동이 드론의 운동에 대부분의 영향을 미치게 된다. 즉 드론의 회전 운동 방정식 추진력 F(t) 는 드론 모터 PID 제어에 따른 입력 값의 함수로 볼 수 있다.
 


여기서

로 정의 된다. 드론 제어 입력 값에서 계산된 제어 목표 값 즉 setpoint 값과 자이로 센서 측정값과의 차이 가 바로 제어 오차 e(t)이다.

물론 함수 F(t)가 PID 제어에 직접 영향을 받는 것은 사실이나 함수자체는 정확히 모른다.
하지만 PID 제어 시스템을 선형으로 가정한다면 위의 질량 관성 모멘트 상미분 방정식이 1회 미분 작업에 의해 e(t)에 관한 2계 상미분 방정식으로 변환될 수 있다.

결국 2계 상미분 방정식으로 표현이 된다면 그 해는 3가지 유형으로 압축된다. 하나는 오차가 단순 감소하여 안정적으로 영으로 가는 경우이며 다른 하나는 진동하면서 영으로 가는 경우이며 3번째는 아주 불안정한 경우이다.

실제로 PID 3개 파라메터의 값을 변화시키면서 드론 비행 실험을 실시하면 진동하는 불안정한 영역과 진동이 없는 안정된 영역이 있음을 확인할 수 있다.