본문 바로가기

Theory/ControlTheory

쿼드콥터(Quadcopter)의 동역학 방정식

 쿼드콥터의 필요성에 대해서는 이전(쿼드콥터 소개...)에 이야기 했었습니다. 이번에는 그 쿼드콥터의 동역학 방정식에 대해서 이야기하겠습니다. 네 개의 로터(f1, f2, f3, f4)를 가진 쿼드콥터는


위와 같이 간략화 시킬 수 있습니다. 이 상태에서


전체적으로 작용하는 위치, 병진운동, 회전운동의 에너지 관계식을 위와 같이 만들 수 있는데 이때,


ksi는 병진운동 상태를 eta는 회전운동 상태를 의미하고, q는 그걸 합친 거라고 해 두고 아래의 오일러-라그랑지안 방식으로 유도 하겠습니다.





위 식에 각 에너지를 대입하면


와 같이 전개 됩니다.



여기서 각 축 중심의 회전행렬로 x-y-z의 3축 회전행렬을 적용하면





와 같이 제어입력을 정리할 수 있습니다.



여기에 몇몇 인자를 정리하고



투로터때처럼 시뮬레이션을 위해 파라미터를 좀 가정하면 간단한 쿼드콥터의 동역학 방정식을 얻을 수 있습니다.



이를 MATLAB/Simulink 블럭으로 꾸며 놨습니다. 역시 c1,c2,c3,c4는 불확실성을 고려한 것이기 때문에, 필요없으면 '0'을 인가하면 됩니다.

QuadrocopterModel.mdl


반응형
  • LivingDEAD 2011.07.07 12:14

    상당히 늦은 댓글이지만
    Rx, Ry, Rz 행렬이 각 축을 중심으로 회전시킨 각도로 인한 벡터 변화를 행렬식 곱으로 보정하기위한 식 같은데 그보다 위에 나온 그림이랑 좀 안맞는거 같은데요(...)
    그림에서 x축이랑 z축이 바뀌면 식이랑 맞을거 같네요
    근데 그러면 ksi랑 eta 행렬이 안맞으니(...)

    • BlogIcon PinkWink 2011.07.08 13:34 신고

      네.. 말씀하신데로.. 딴건 다 그대로 두고, 그림에서 x,z축의 글자만 바꾸면 되겠네요.. 어쩌다 실수를 한것인지...ㅠㅠ
      감사합니다.^^

  • eom 2011.07.27 22:31

    혹시 Quadrotor 카페에 양력 테스트한 글을 올리셨던데
    그림이 안보여서 죄송한데 자료좀 보내주실 수 있으신가요?
    mgy777@nate.com입니다. 감사합니다. ^^

  • eom 2011.07.28 21:33

    뎃글 달아주셔서 감사합니다. 간단하게 설명이라도
    해주시면 정말 도움이 될거같습니다. 염치없는 요구인거
    같긴한데. ㅠㅠ

    • BlogIcon PinkWink 2011.07.29 08:37 신고

      당시에는 로드셀을 설치하고, 지렛대처럼 프로펠러가 회전하면 그 로드셀을 누르는 정도를 측정했습니다. 그러나, 프로펠러에서 발생하는 힘을 정말 크게 단순히 해서 1차계로 보더라도, 로드셀에서 읽는 값이 정상상태에서는 믿을 수 있다하더라도, 과도상태에서는 로드셀의 응답속도가 너무 느려 신뢰할 수가 없었습니다. 그래서, 실험을 중단했었습니다. 그 후 쿼드콥터를 계속 진행했다면, 뭔가 성과가 나왔을텐데, 그 후에는 자이로+가속도센서로 자세추정에 주력하다보니....
      하여간 위의 이유로 신뢰할 수 없는 데이터라 저도 삭제해버렸답니다.ㅠㅠ

  • eom 2011.07.30 21:39

    답변 너무 감사합니다.^^
    어떻게든 스스로 찾아봐야겠네요.
    수고하세요~~

  • 꼽사리 2013.06.21 17:26

    안냥하세요
    지금 댓글로 질문써도 보실려나,,,
    무식한질문 하나 하겠슴니다
    상태방정식으로 표현하려면 dot_x=Ax+Bu로 표현될텐데 위식에서는 상태변수가 우변에 안보이내요 A가0인 경우로봐야하나요?

    • BlogIcon PinkWink 2013.06.21 19:11 신고

      상태방정식이 아니라 동역학을 유도했습니다.
      저기서 선형화를 거쳐서 상태방정식을 유도할 수도 있을겁니다.
      전 그냥 동역학을 비선형으로 보고 싶었었거든요^^

    • 꼽사리 2013.07.16 01:33

      안녕하세요?
      이 동역학에서는 동작점 부근에서 선형화를 한다고 해도 제어입력이 상태변수에 곱해지는 꼴이라, x_dot=Ax+Bu형태로 유도가 안되는 것 같습니다.
      제가 제어공학에는 문외한인지라, 선형시불변시스템외에는 다룰 줄 모르는 데요, 강좌에 언급하신 궤환선형화기법이 이런형태의 시스템에 쓰라고 개발된 방법인 것 같습니다. 혹시 궤환선형화기법에 대해 체계적으로 접근하려면 어느 텍스트를 봐야 하는지요? 이 강좌에 언급한 내용만으로는 감을 좀 잡기가 힘드네요.

    • BlogIcon PinkWink 2013.07.16 09:21 신고

      네 말씀하신대로입니다. 기구부를 약간 바꿔서 선형화할 수 있는 동역학을 얻든지 아니면 저는 궤환선형화나 TS 퍼지를 봤구요. 궤환선형화는 논문으로 익혔습니다.
      Nonlinear Control Design for Slightly Non- minimum Phase Systems: Application to V/STOL Aircraft

      JOHN HAUSER, SHANKAR SASTRYII and GEORGE M EYER

      라는 논문을 저는 봤었습니다. 1992년도 논문이지만, 구글에서 쉽게 찾을 수 있습니다.

      이 논문은 한편의 드라마 같은 논문으로 저는 석사때 처음 이 논문을 보고, 이해를 못하고(^^) 다시 보고 또 이해를 못하고(ㅠㅠ) 그러다가 조금씩 이해하면서 이렇게 쓰는 논문도 있구나... 하고 일종의 감명도 받았던 논문이랍니다. ^^

  • 꼽사리 2013.07.06 23:49

    안녕하세요?
    소개해 주신 울프럼 알파로 x,y,z 축으로 회전 변환을 해 보니, Fx,Fy 부호가 바뀐 것 같습니다.
    암턴...
    질문은...
    Fy성분에 cos(theta)가 곱해진 것을 보면, Fx성분에도 cos(phi)가 곱해져야 할 것 같은 데요,
    직관적으로 봐도 그래야 될 것 처럼 보이고...
    회전 변환 행렬을 취해서 결과를 보면 그렇지 않은데, 왜 그런 걸까요?

    • BlogIcon PinkWink 2013.07.08 14:48 신고

      네.. 안녕하세요 부호는 틀린건지 아닌지는 확인해보지 않았습니다.
      회전행렬을 적용하고 나타난 결과라 결과식만 놓고 이야기하기에는 어려움이 있습니다.
      예전에 저도 동일한 의문을 가졌던 적이 있었고,
      그래서 회전행렬을 적용하지 않고
      기하학적으로 풀었을때도(물론 동역학이 아니라 유사환경에서) 회전행렬을 적용한것과 유사했습니다. 그러나 너무 힘들고 복잡해서 나중에는 그게 맞는지도 혼돈이...ㅠㅠ 그래서 회전행렬이라는 것을 쓰나봅니다.

    • 꼽사리 2013.07.09 20:13

      제가 회전 변환 순서를 거꾸로 해서 부호가 반대로 나왔군요, 죄송합니다.

    • BlogIcon PinkWink 2013.07.10 12:31 신고

      아 그런가요? 아무튼 찾으셨다니 다행입니다.
      좋은 성과 있으시길 바랍니다.

  • 아사리 2014.07.10 09:52

    제어 입력에 u가 들어가는데 어떤것을 의미하나요?

    • BlogIcon PinkWink 2014.07.10 12:34 신고

      본문에 제어입력 u는 4개의 날개에서 발생하는 양력의 합이라고 이야기를 하고 있습니다.
      여기서 양력은 일반적인 Newton단위의 힘으로
      아직 모터와의 관계식이 대입된 것은 아닙니다.

  • 손영동 2014.10.14 00:46

    안녕하십니까 쿼드콥터 관련해서 공부하고 있는 학부생입니다.
    SImulink 파일을 보았는데 output을 얻기 위해 input에 output의 결과를 가지고와 연산 후 output을 계산하는걸로 보입니다. 그러면 처음에 즉 time=0s일 때는 SIMULINK에서 어떻게 계산을 하는건지요?

    • BlogIcon PinkWink 2014.10.14 12:48 신고

      네.. 뭐 대부분 모델에 맞게 구현했거나 혹은 Algebraic Warning이 나지 않는다면 괜찮습니다.
      어차피
      x_dot = x를 시뮬레이션한다고 하면 적분기 출력을 입력에 넣어 주어야하거든요. 그건 지금 손영동님이께서 simulink의 선을 시간의 흐름으로 따라갈려고해서 그렇습니다.
      아 그리고 내부적으로 구현하는 건 저도 모릅니다. ODE45같은 알고리즘을 돌린다는 정도는 알아도 여러가지 복잡한 알고리즘이 들어간 것일텐데 고맙게 잘 쓰기는 해도 말이죠^^

    • 손영동 2014.10.14 22:36

      감사합니다. 제가 현재 동역학 시스템 전에 모터 시스템이 있는데 모터 시스템의 input으로 동역학 시스템의 output(phi, theta, psi)이 들어갑니다. 모터 시스템에서 Algebraic Warning at t=0s 이 나오는데 도저히 방법을 모르겠습니다. 혹시 방법을 알 수 있을까 질문드려봅니다.

    • 손영동 2014.10.14 23:43

      질문을 애매하게 한 것 같아 다시 올립니다.
      현재 SIMULINK로 모터>시스템>자세 (phi,theta,psi) 피드백> 제어기 > 전압으로 변환 > 모터 로 돌아가는 걸로 잡았습니다.
      하지만 전압으로 변환 과정에서 시스템 결과를 피드백 받아야하는데 Algebraic State 라는 에러가 뜹니다. t=0s에서 값이 무한대이거나 NaN이다. 라고 나오는데 어떤 방식으로 수정을 해야할지 몰라 질문드립니다 감사합니다.

    • BlogIcon PinkWink 2014.10.15 12:41 신고

      시뮬레이션 구현이야 당연히 구축된 수학적 모델에서 하셨겠지만, 둘 다 다시 검토하시면서 현재값을 참조하지 않도록 시뮬레이션을 변형해야합니다만... 딱 시스템을 보기전엔 뭐라 드릴 말씀이 없답니다.ㅠㅠ. 물론 본다고 또 모를 확률이 높지만요.ㅠㅠ 도움이 되지 못했네요.ㅠㅠ

    • BlogIcon PinkWink 2014.10.15 12:42 신고

      네~~~~ㅠㅠ

  • 유현 2014.11.01 22:02

    안녕하세요.쿼드로터에 대해서 공부를 하고 있는 학생입니다. 혹시 X-type 쿼드로터의 동역학인 경우에는 좌표변환을 어떻게 하는지 궁금합니다.그리고 왜 좌표 변환을 할때 요,피치,롤 순서로 회전행렬 R을 정의했는지도 궁금합니다.^^ 십자가 형태인 좌표변환과 같은지 의문이 들어 올리게 됬습니다.

    • BlogIcon PinkWink 2014.11.03 02:07 신고

      네.. X 타입이라는 말을 순간 잘 이해하지 못했네요. 아마 동역학 유도에서의 형태를 말씀하신 거죠? 시작할때, +냐. X하는 것 말이죠. 어떻게 되든 절대좌표 상에서 Front를 어디로 보느냐의 차이일 뿐입니다. 물론 그로 인해 몇몇 표현이 결과적으로는 달라 보일 수도 있습니다만.. 중요한건 결과를 그대로 사용하지 말고 그 과정도 알고 있어야만 나중에 다시 응용할때 편할겁니다.^^

  • 김상현 2015.09.20 22:00

    좋은 글 잘 보고 갑니다.
    그런데 읽다가 이해가 잘 안되는 부분이 있어서 질문 올립니다.
    맨 마지막 부분 수식에서 x_dot_dot = -u*sin(theta) 로 되어있는데요. (y, z, psi, theta, phi 도 포함)
    x는 위치고 이걸 두 번 미분하면 가속도가 되는데 그게 왜 u*sin(theta)가 되는지 모르겠습니다. u는 힘이 아닌가요?

    • BlogIcon PinkWink 2015.09.21 13:14 신고

      당연히... x 위치에 대한 가속도는 알고봤더니... u 어쩌고 하는 놈이더라는 것을 수학적 정리로 밝혀낸겁니다.^^
      위 정리과정을 다시 꼼꼼이 보시면서 이해하셔야할듯 합니다.

  • 장래희망 2015.11.14 07:50

    안녕하세요.
    장래희망이 로봇공학자인 학생입니다. 제가 아직 대학생도 아님에도 불구하고 염치없이 이런 질문을 하는이유는 저의 목표에 한발짝 더 다가가기 위해서입니다.
    아직 대학을 진학도 안했지만 대학에 알아보는도중 항공우주공학과, 드론에 대해서 알게되었습니다.
    아직 학생이라 많은것을 모르고 주제넘지만 저는 드론과 로봇을 만들고 사람을 도와주거나 편리하게 해주는 행위를 하고싶습니다.(가장큰 이유는 중국에 계신 외할머니께서 홀로지내며 몸이 불편하시기 때문에 로봇을 만들고 싶고 저는 대인기피증 때문에 택배를 받기 수월할수 있도록 하고 싶어서 드론을 만들고 싶습니다.너무 무리한 생각일까요?) 선택지가 두개나 생겨버렸는데....어디쪽으로 가야하나요?(제가 가고 싶은 대학교는 기계공학과랑 우주항공공학과로 나눠져 있습니다.)
    드론을 만들려면 비행역학과 공기역학 항공전자같은거 해야한다는데.. 이런 커리큘럼 없는 기계공학과로 가도 드론을 만들수 있나요?

    그리고 마지막으로 드론은 크게 무슨 이론으로 만드나요? 어떤사람은 기계공학과가서 기본적으로 배우는 재료역학, 유채역학, 열역학, 동역학,기구학과, 기계설계학, 자동제어, 계측공학만 배워도 드론을 만들수 있다는데 맞나요? 그렇다면 기계공학과로 목표를 잡아야할까요?

    p.s 참고로 다문화가정이여서 한국어가 서툰다는점 양해부탁드립니다.

    • BlogIcon PinkWink 2015.11.16 08:20 신고

      일반적인 학과를 추천합니다.
      기계공학과이든, 제어공학이든, 전기공학이든... 그 속에서 드론이나 로봇을 하는 경우가 많이 있습니다. 그것은 학교마다 조금씩 다르기 때문에 잘 찾아보셔야합니다.
      참고로 저 같은 경우는 제어공학에서 로봇을 공부했답니다.^^

  • 장래희망 2015.11.17 09:30

    일반적인 학과면 기계공학과 말하시는거죠?
    그리고 제어공학에서 로봇을 전공하셨다는데 로봇을 전공하게 되면 드론에 대해서도 어느정도 알게되고 만들수도 있나요?

    • BlogIcon PinkWink 2015.11.17 13:41 신고

      그건... 어떻게 하느냐의 문제입니다. 기계공학과든... 전기든, 제어든.. 항공이든.. 드론같은걸 정규교과목에서 가르쳐주는 곳은 제가 알기론 없습니다. 응용예제나 수업중 프로젝트의 목표로 드론을 정할 순 있어도 말이죠. 드론을 만드는 걸 공부하는 경우는 그 번외... 동아리활동이나 별도 개인이 공부하는 경우들입니다. 그래서 일반적으로는 기계, 전기, 전자, 제어.. 등등 일반적인 학과에서 공부하는 것이 조금더 괜찮지 않겠는가라고 말씀드린 것입니다. 물론 뚜렷하게 우주관련,... 등의 목표가 있다면 다르지만 말이죠^^

  • 장래희망 2015.11.17 15:44

    궁금한점이 많이 해결되었습니다.
    그리고 댓글 하나하나에 정성스럽게 답변해주셔서 정말 감사합니다^^.

  • CIE 2016.09.23 16:33

    안녕하세요! 쿼드콥터를 공부하고있는 한 공학도입니다. 글 잘 읽어보았습니다! 많은 도움이 되었습니다.
    다름이 아니고 한가지 질문이 있습니다. 쿼드콥터 시뮬레이션을 해볼려고하는데 시뮬링크에 대한 지식이 많이 없어 입력부에 어떠한 블럭을 주어야 결과를 얻을 수 있는지 궁금합니다. 목표 좌표값을 설정하여주어서 결과값을 얻을 수 있는 방법이 있을까요?

    • BlogIcon PinkWink 2016.09.24 11:04 신고

      시뮬링크의 사용이나 시뮬레이션의 환경 구축에 대한 학습을 다룬 글들이 저도 있습니다 화면 상단 연재목록을 보시면 되구요...
      또 하나는 일반적 시뮬레이션에 대해서 한 번 학습해보시는게 중요할 듯 합니다.

  • imlab 2016.09.28 14:14

    반갑습니다! 쿼드콥터 모델링을 하던중 이 글을 보게되었습니다. 보던 중 몇 가지 질문이 있어서 이렇게 댓글을 남깁니다.
    토크의 세가지 결과에서 서로 맞은편의 모터에서 나오는 힘들을 빼주는데 τΘ에서는 (f3-f1)*l이고 τØ는 (f2-f4)*l궁금합니다.
    또 맨 마지막 결론에서 ddotΨ = uΨ , ddot_θ = uθ , ddotØ = uØ 이 세가지 결론이 잘 이해가 되지 않습니다. 이 세가지 각가속도가 단순히 양력의 각각의 xyz축의 양력을 말하는 건가요?

    • BlogIcon PinkWink 2016.09.29 08:20 신고

      theta 방향의 회전력은 2번 4번의 힘의 차이에 의해 발생합니다. 그런 의미에서 나머지도 마찬가지구요....
      그리고 더블닷으로 표현된 힘... ddot_theta = u_theta와 같은 표현은 그렇게 정의한 것입니다.

  • Kang 2019.10.12 04:45

    이상한 점이 있어서 질문 드립니다. 마지막에 나온 식 중 y''은 자세각 중 theta와 phi의 영향만 받고 x''은 theta의 영향만 받는다는것이 이해가 잘 가지 않습니다. x'', y'' 둘 다 theta, phi, psi의 영향을 모두 받아야 하지 않나요?

    • BlogIcon PinkWink 2019.10.12 08:18 신고

      기구학적인 정의를 내리고 진행했으니 그럴겁니다. x 축 방향은 로봇바디좌표기준으로 보면 한쪽의 영향만 받습니다.

  • 누미던 2021.06.18 17:53

    안녕하세요 드론을 학습하면서 찾게 되었습니다. 글 잘봤습니다!! 몇가지 궁금해서 댓글을 남깁니다. 입력부에 Z_ddot에 -10이 있는데 이 친구는 어떤 친구죠?? 그리구 u에 f가 모터의 추력으로 알고 있습니다. M 같은 경우에는 어떻게 구하면 되나요?ㅠ