Quadrotor20152014. 7. 15. 23:55

요새 초음파센서를 이용한 고도제어를 구현하고 있는데.. 이것도 테스트하는게 제일 골치아프네요 ㅠㅠ


그래서 테스트에 앞서 제가 구현한 고도 PID결과가 맞는지 검증하기 위해 이론을 바탕으로한 시뮬레이터를 만들어 봤습니다


이론이라 그런지.. 결과는 대 만족이었지만 실제 쿼드에서 돌리려니 이런저런 문제가 또 발생하네요.. 이건 이 후 포스팅에서 다루기로 하고 여기선 시뮬레이터에 대한 내용만 다루겠습니다.


먼저 구현한 시뮬레이터 구조도는 이렇습니다



시뮬레이터 전제는 이렇습니다


여기서 먼저 알아둬야할 것은 우리가 흔히 말하는 무게의 단위가 kg이 아니라는 겁니다. 무게는 F(힘)이고 F=ma에 의해 단위는 (=N)입니다. 따라서 저울로 측정한 제 쿼드의 무게는 800N이 된다는거죠. 바닥에 놓여있는 제 쿼드는 항상 지면을 800N으로 밀고있다고 할 수 있습니다. 


프롭을 돌리면 바람에 의한 추력(F=힘)이 발생될테고 점점 세게 돌린다면 어느순간 800N의 추력을 내게 됩니다. 그럼 이제 쿼드 기체는 힘의 평형 상태인거죠. 이상태에서 조금만 더 프롭을 세게 돌린다면 쿼드는 뜨기 시작합니다. 


이 때, (추력-800N)만큼의 힘을 받는 쿼드 기체는, F=ma에 의해 질량의 반비례한 가속도로 뜨기 시작합니다.


가속도는 속도를 낳고, 속도는 위치를 변화시키죠. 이 내용을 가지고 시뮬레이터를 구현해보았습니다.


그리고 제가가진 초음파센서도 심플하게 모델링해 넣고 측정값을 바탕으로 프롭의 속도를 조절하는 PID제어기를 시뮬레이션 해봤는데 결과는 다음과 같습니다.




황색이 쿼드의 높이고 파랑, 초록, 빨강 순으로 P, I, D 제어량 수치(y축과 관련x)입니다.


그래프는 아주 맘에 듭니다 뜨기 시작한 후 약 2초 안에 원하는 40cm에 수렴하니까요..


하지만 이렇게 되었다고 쿼드에 적용하고 프롭을 돌릴순 없는게 함정.. ㅠ 실제 센서의 노이즈와 여러 변수에 대한 대책도 있어야하니까요..


실제 쿼드에 적용한 이야기는 다음 포스팅에서 다루기로 하겠습니다.



-------------------------------------------------------------- 14년 7월 16일 추가 -------------------------


수렴할 때 왜 I제어량만 많느냐에 대한 설명을 빼먹었네요..


보통 모터의 속도제어같은 경우 P가 증가된 상태에서 I와 D가 0 근처에서 왔다갔다 거리는 결과가 나오는데 이건 그렇지가 않아서 고민을 많이 했습니다. 틀린거 아닌가?


처음 생각엔 가속도를 가지도 위치를 제어하려고 하니까 적분항이 이렇게 나오는구나~ 하고 넘어갔는데 지금은 다른 이유가 있는거 같아요


I가 정상 상태 오차를 커버해준다는 점을 생각해보면, p로 인한 제어량이 무게를 이기지 못하면 결국 위치는 0이니까.. 정상상태 오차가 40이 되어버리는거잖아요? 정상상태 오차가 100%니까 결국 I제어량만 남을것이다~ 라는 생각이 드네요


-------------------------------------------------------------- 14년 10월 14일 추가 -------------------------


PID제어를 모두 사용하지 않고 baseThrottle + P + D로도 가능할거 같다는 의견을 남깁니다. 여기서 baseThrottle은 기체의 무게(mg)와 같은 추력을 발생시키는 throttle값입니다.



-------------------------------------------------------------- 15년 8월 20일 추가 -------------------------

쿼드콥터 모델링 시 duty가 곧 추력이라고 해놨는데.. duty는 모터 회전 속도를 만들어 냅니다.


추력은 모터 회전 속도의 제곱에 비례한다는 사실을 덧붙여 추가합니다.









Posted by 너를위한노래