'자세제어'에 해당되는 글 2건

  1. 2013.08.25 쿼드콥터 PID제어 1
  2. 2013.03.13 쿼드콥터 제작 현황 2
Quadrotor20132013. 8. 25. 01:16

아직 제가 만드는 쿼드콥터의 PID제어가 완성된건 아니지만 시간이 좀 나서 포스팅해봅니다.


PID제어의 기본에 대해서는 따로 공부가 필요한 부분입니다. 관련 정보는


위키백과 - PID제어

PID제어 관련 포스팅


요 두군데를 참고하기 바랍니다.


먼저, PID는 Feedback이 일어나기 때문에 무엇을 가지고 무엇을 제어하는가가 첫번째가 되어야 합니다.


제 경우에는 쿼드콥터를 가지고 많은 고민을 했습니다.


쿼드콥터의 경우 센서에서 받아온 자세값을 가공하여 그에 맞는 다음 자세를 출력해야하는데, 출력은 결국 각 모터의 PWM값이 될겁니다.


근데 여기서, 받아온 자세값은 분명 각 모터 자체의 위치값인데 출력은 모터의 회전수란 말이죠. 모터의 회전수는 모터의 추력과 연결되고, 이는 결국 모터 자체의 가속도 값이 되지 않습니까? 위치값을 받아서 가속도값을 출력해야하니까 받아온 위치값을 두번 미분해서 사용해야하나..? 이런 생각이 들더라구요..


그냥 일단 해보자는 식으로 위치값의 오차로 PWM출력을 줘봤는데 잘 되질 않아서 더 저런 생각이 들었던 것 같습니다.


그래서 논문도 찾아보고 여기저기 쿼드콥터 카페도 찾아보고 했는데


결론은 그냥 자세값(roll, pitch, yaw)를 가지고 PWM출력하는게 맞더라구요.. ㅠ


아예 확신을 가지고 논문 참고해서 PID제어기를 다시 만들어서 돌려보니 어느정도 되는거같습니다 ㅠ


그래도 좀 불안정해서 센서값과 P, I, D각 제어값들을 뽑아서 그래프로 그려보니까 문제가 있더라구요..


P는 그냥 센서값에 비례하니때문에 진동에 영향을 덜 받지만 I나 D는 그렇지가 않더라구요. 


그나마 I는 계속 누적되니까 화이트노이즈같은 진동은 어느정도 무시되서 비교적 잘 누적되는 성향을 보이는데


D가 문제예요.. 손으로 누르는 힘에 잘 저항하게 D게인을 높이면 진동에 의한 노이즈까지 잘 반영해서 출력값이 알아볼수도 없게 요동치더라구요.. 


그렇다고 D를 낮추면 반응이 느리고.. 적당히 중간으로 잡아놓으면 수평을 유지하긴하는데 다소 불안하게 왓다갓다하고.. 


그래서 뭔가 변화를 줘보기위해 D제어 입력에만 LPF를 씌워봤습니다. 결과는 한결 나아졌지만 역시 LPF를 통과해서그런지 다소 반응이 느린감이 있더라구요. 


센서를 쿼드 중앙에 나사 한개로만 고정시켜서 그런가~ 싶어서 고정 판도 제작했어요. 오늘 드릴질하고 난리도아니었음 ㅠ


방진 고무나 댐퍼 얘기가 카페같은데서 나오긴 하는데 소프트한걸 쓰면 자세값을 바로 반영 안할거같고 딱딱한걸 쓰면 진동따위 그대로 전달해버릴거같아서 별로 땡기질 않네요 ㅠ


누가 옆에서 이럴땐 이러면 돼~ 하고 조언을 해주면 속편하겠는데.. 그런 사람도 없고.. ㅋ


쓰다보니 푸념으로 바뀌었네요.. 다음 포스팅에서는 좋은 글로... ㅋㅋㅋ



Posted by 너를위한노래
Quadrotor20132013. 3. 13. 18:01

 

원래 네이버 블로그에 있는 글을 모두 옮겨오려고 했지만.. 굳이 그럴 필요 없을거 같아서 이 글에 제목과 링크만 올려두겠습니다.

 

네이버 블로그 주요 포스팅:

쿼드콥터 초기 계획안 

재료, 부품 구매 현황

MPU-6050 3축 자이로 + 3축 가속도 센서 구매 

[스크랩]오일러각 

[스크랩] I2C (Inter-Integrated Circuit) 버스 

[스크랩]칼만 필터(Kalman Filter) - Part 1 : Linear Systems | Robotics 

[스크랩]칼만 필터(Kalman Filter) - Part 2 : Kalman Filter & Algorithm | Robotics 

 

 

현재는 가속도, 자이로 센서 값을 이용해서 칼만필터로 융합한 다음, Q행렬, H행렬을 조정하는 단계입니다.

 

 

노랑, 자주 : 가속도

빨강, 초록 : 가속도 + 자이로 using 칼만필터

 

여러가지 상황에 대해 테스트하고 있는데 쿼드콥터 진동이 장난이 아니더라구요.. ㅠ

 

어느 정도는 칼만필터로 보정할 수 있겠거니~ 했는데 이건 너무 심해서 기구적으로 손을 보고 있습니다.

 

그래서 스펀지로도 방진 해보고 고무줄로 진동을 줄여보고자 노력했지만 별로 효과는 없더라구요..

 

   

 

 RPM은 모두 동일

   

 스펀지 장착

 고무줄 장치 장착

 

위의 테스트에서는 RPM이 낮은데 높게하면 +90도~-90도 화이트노이즈수준으로 심하게 감지되더라구요 ㅠ

모터랑 센서가 싸구려라 그런가... ㅠ

 

아예 모터에서 발생하는 진동을 제거하는 방향으로도 해봐야겠습니다.

 

 

안드로이드 소스파일(accel gyro Kalman Filter, PWM generate):

SimpleAnalogInputActivity.java

GraphView.java

Matrix.java

SnowCube.java

SnowRenderer.java

 

 

 

 

Posted by 너를위한노래