Quadrotor20132013. 8. 25. 00:46

쿼드콥터 Roll축에 대해서만 PID제어를 해보기 위해 시소놀이 중입니다.


말이 놀이지 위험합니다 ㅠ 조심합시다


밑의 동영상은 PID조절도 하기 전이고 심지어 P제어만 약간 넣은 상태인데 일단 평행을 유지하는게 신기해서 찍어봤습니다. (좀 오래된 영상임)



지금 보니까 거의 손으로 세워놓은거네요 ;; 


손으로 조금만 외란을 가해도 맥없이 쓰러지는...


위 영상은 X자 콥터인데 쿼드콥터 제어 관련해서 찾은 논문이 +콥터기반으로 되어있길래 방향을 바꿨습니다. 축도 더 부드럽게 움직여서 실제 떴을 경우랑 비슷하게 실험환경을 바꿨습니다.


밑의 영상은 PID게인 조절 중이었던 영상입니다. 




잘 잡는것 처럼 보이다가 갑자기 값이 튀는데.. 이런것들 잡기위해 현재 노력중입니다.


위위 영상은 열흘 전, 위 영상은 사흘 전 테스트였는데 부족한게 많더라구요


지금은 논문 참고해서 제어기 싹 갈아 엎고.. PID게인 조절도 매틀랩 이용해서 그래프 그리면서 하고 있고.. 오늘은 센서 고정을 더 단디하기 위해 구조물 제작까지 해놓은 상태입니다. 내일 가서 진동이 좀 줄었는지 테스트해봐야겠습니다.


다음번엔 더 좋은 영상을 올려야 할 텐데.. ㅠ




--------------------------------------------------------------- 2014.05.26 수정------------------------

위 영상에서 시소놀이가 제대로 안된 이유는 샘플링타임이 느려서입니다. 최소 200Hz 이상은 되어야 제대로 되는거 같네요.




Posted by 너를위한노래
Quadrotor20132013. 8. 8. 16:50
아두이노로 개발하고 있고 편한 개발을 위해 PC에서 processing프로그램을 통해 그래프 출력 및 디버깅하고 있습니다~

기둥에 쿼드콥터를 매달고(시소) pitch축만 움직이게 한 다음에 pitch축에 대해서만 PID제어 시도하고 있는데 잘 안돼서 센서값과 PWM출력의 상관관계 (위치와 가속도 관계인지)를 생각하고있습니다.


이번달 안에 띄워야하는데...



------------------------------------------- 8월 14일 추가 -------------------

MPU6050 말고 다른 IMU센서로 진행하고 있습니다.


Posted by 너를위한노래
Arduino2013. 7. 27. 17:39

현재 저는 아두이노에서 두개의 시리얼 통신을 구동하고 있습니다. Serial1에서는 IMU와의 시리얼통신을, Serial에서는 안드로이드와의 통신을 합니다.

 

아두이노에서 시리얼 통신 하는건 안드로이드에 비해 비교적 간단한데요,

 

setup() 함수에 Serial.begin(9600); 하시고 필요할 때마다 Serial.print("blah blah");하면 되는 간단한 코딩인데 이 포스팅에서는 제가 헷갈렸던 write함수와 print함수에 대해 설명하겠습니다.

 

(- 함수 작동 양상에 대해 서술하므로 실제 코딩과는 약간 다른점이 있을 수 있습니다.)

 

시리얼 통신이 1바이트(8비트)가 최소 단위라는건 다들 아실겁니다.

 

write함수가 바로 1바이트씩 쓰는 함수인데요, Serial.write(36); 하면 00100100 이 전송되는거죠

 

하지만,

 

print함수는 다릅니다. Serial.print(36)하면 "3"과 "6"이 각각 아스키 코드값으로 변해서 두 바이트로 전송됩니다.

 

즉, Serial.print(36)은 00100100도 아니고 00000011, 00000110 두 바이트도 아니라 00110011, 00110110 이게 전송된다는 겁니다.

 

이거 때문에 한참 고생했네요 ... ㅠ

 

그리고 안드로이드와 통신할 때 아두이노 측 Serial.read() 함수는 Rx버퍼 맨 앞에 있는 한 바이트를 int형으로 반환하고 가져올 게 없을때에는 -1을 반환합니다. 즉, while문으로 read의 결과가 -1일때까지 읽어오면 쉽게 받아오실 수 있습니다. (저는 읽어와서 링버퍼에 저장)

 

그리고 나머지 코딩은 패킷을 정하고 링버퍼를 통해 데이터를 뽑아 쓰는 형식으로 구현했습니다. [안드로이드 편 참고]

 

밑에 주요 소스코드 첨부하오니 이해하는데 참고하세요~

 

 

Posted by 너를위한노래