본문 바로가기
SSM/쿼드콥터

[쿼드콥터] 쿼드콥터 입력에서 출력까지의 흐름

by 우툴 2016. 1. 6.
728x90

입력에서 출력까지의 계산의 흐름

 원래 전체적인 제어기를 구현할때 가장 중요한 것이 아마도 입력이 무엇이며 출력이 무엇인가가 매우 중요하다. 왜냐하면 어떤 물리량을 제어할지 알아야 구현을 할 수 있기 때문이다. 그렇기에 우리가 주는 입력값에 대해서 어떻게 계산이 이루어져서 출력값까지 가는지 알아야 한다. 이 부분이 나도 쿼드콥터를 만들면서도 가장 이해가 안되고 힘들었던 부분이기 때문이 설명을 잘 못할 수 있다는 점 미리 양해를 구하겠다.

    

 보통 저 흐름데로 제어기가 돌아가는데 이 흐름을 따라서 설명을 하겠다. 하지만 나같은 경우는 사실상 실제로 코드를 짜다 보면 느끼는 흐름의 방식은 아래의 그림 같다는 것을 느낄 수 있었다.


  <조금 설명을 하자면 이 쿼드콥터에서는 제어기는 PID 제어기이고 플랜트는 4개의 모터, 센서는 자이로/가속도 센서이다.> 

 어 근데 위 그림을 보면 쿼드콥터는 피드벡 시스템인데 왜 센서가 흐름에서 독립적으로 떨어져 있나요 잘못된거 아닌가요?? 라고 의문을 가질 수 있다. 맞다 저 그림은 잘못된 것이다. 하지만 위 그림은 코드를 짤 때 내가 느낀 흐름을 나타낸 것이다. 이렇게 내가 느꼈던 이유는 플랜트의 출력에서 센서로 가는 과정에서 내가 코드를 짤게 없고 단지 센서의 값만 받아오는 코드만 짜면 됬기 때문이다. 하지만 실제로는 센서에서 받아온 값 자체가 플랜트의 출력의 영향을 받아온 값이기 때문에 피드벡 시스템이 되는 것이다. 이제 그럼 위 그림의 흐름대로 설명을 하겠다.

 위의 그림이 전체적인 입력에서 출력까지의 흐름이다.  지자기 센서가 포함된 AHRS인 시스템이면 yaw 각도 제어도 포함되어있지만 내가 만든 쿼드콥터 같은 경우는 지자기 센서가 포함안된 ARS 시스템이라 센서에서 출력값이 Roll 각도랑 Pitch 각도값만 받아온다. 하지만 후에 말하겠지만 ARS 시스템도 yaw 각도제어가 안되는거지 yaw 각속도 제어가 안되는 것이 아니기 때문에 yaw는 각속도 제어만 한다. 

1) 입력 서 부터 제어기 출력 까지

 하여튼 입력으로는 4개의 값이 들어가는데 바로 바로 Roll 각도 , Pitch 각도, Yaw 각도와 그리고 전체 모터의 추력값이 들어간다.

 <Roll,Pitch,Yaw가 기억 안나는 분은 클릭 - 기체 고정 좌표계 부분 참고할 것 >

 이 입력값과 센서의 값의 차이가 제어기로 들어가면 제어기를 나오면서 Roll, Pitch, Yaw 모멘트값이 계산대서 나오고 전체 추력값은 그대로 나온다. 그렇다면 모멘트값이란 무엇인가?? 모멘트란 간략하게 설명하자면 직선운동에서 생각하면 거리의 값이 있고 속도 값이 있지않는가?? 이걸 원운동으로 생각하면 거리의 값이 각도가 되고 속도의 값이 각가속도 즉 모멘트 값이 된다고 생각해도 된다. 어 그렇다면 왜 모멘트값이 나오는 것인가 그것에 대해서도 설명 하겠다. 각도 제어란게 어찌보면 우리가 원하는 각도는 기준이 되고 각속도 즉 모멘트를 가지고 우리가 원하는 각도로 가는 것이다.

 자세히 설명해보겠다. 위의 그림으로 설명하자면 우리의 현재 위치와 우리가 원하는 각도를 알고 있다면 이 각도 차이를 알 수 있을것이다. 그래서 우리가 원하는 위치로 가기 위해서 현재의 바늘을 오른쪽으로 돌리면 될 것이다. 여기서 각도 자체는 기준이되고 실제로 바늘을 원하는 각도로 돌려놓는건 바늘을 오늘쪽으로 돌리는 행위일 것이다. 이 돌리는 행위는 어떻게 생각하면 바늘을 오른쪽 회전방향으로 힘을 주어라 즉 오른쪽 회전방향으로 각속도를 주어라 또는 오른쪽방향에 해당하는 모멘트를 주어라 라고도 설명이 될 수 있는 것이다. 그렇기에 제어기에서 입력값은 각도지만 출력은 모멘트값이 나오는 것이다.

2) 추력 변환 

 그럼 이렇게 얻어온 모멘트와 추력의 값을 가지고 각 모터의 추력값으로 변환해야 한다. 이것을 변환하는 식을 소개하자면 타입에 따라서 달라지는데 그것은 [쿼드콥터] 하드웨어 구성에 앞서 쿼드콥터 모양의 간략한 설명 에서 잠시 소개했는데 다시 말하자면 우리의 쿼드콥터는 x 자 타입이기 때문에 아래의 그림처럼 된다.

  행렬에 대해서 역핵렬을 해서 T, L, M, N 이 각각의 모터의 추력으로 바뀌는 식으로 바뀌게 되고 이 역행렬 식은 아래와 같다. 역행렬을 어떻게 구하는지 궁금하신 분은 가사 역행렬에 대해서 찾아볼것! 

 즉 위의 식을 통해서 각각 모터의 걸리는 추력을 알 수 있게 되는 것이다.

2) PWM 변환

 이 부분은 모터의 추력을 우리가 모터에 입력으로 주는 PWM 신호 값으로 바꿔 줘야 하는데 이 바꾸는 과정은 실험에 의해서 추력 상수 값(추력/PWM)을 구할 수 있게된다. 즉 각 모터의 추력값에 이 상수를 곱해서 우리가 각 모터에 주는 PWM 신호값을 알 수 있게 되고 이 신호에 따라서 각각의 모터가 회전하는 출력값이 나오는 것이다. 이 상수를 구하는 실험에 대한 설명은 다음 글에서 소개하겠다. 



728x90

댓글