Quadrotor20152015. 4. 18. 16:41

초음파 센서를 이용해서 고도 PID제어기를 구현해서 실험한 영상입니다. 덤으로 자세제어기도 작동되고있습니다~


제원은.. 아두이노 Mega2560, 초음파센서 SRF08를 이용했네요.




왼손으로 잡고있긴 한데.. 저건 아두이노랑 PC랑 연결선을 잡고있는거지 기체를 잡고있는게 아니예요 ㅋㅋ






Posted by 너를위한노래

댓글을 달아 주세요

  1. 비밀댓글입니다

    2015.04.19 20:00 [ ADDR : EDIT/ DEL : REPLY ]
  2. 비밀댓글입니다

    2015.05.19 03:23 [ ADDR : EDIT/ DEL : REPLY ]
  3. 이승현

    저렇게 제작할려면 금액이 대강 얼마나 들죠??

    2015.05.22 17:01 [ ADDR : EDIT/ DEL : REPLY ]
    • 이 포스팅의 영상은 파이랑 파이캠 달기 전인데.. 저 부품들 다 고려하면 50~60은 되지 않을까 싶네요 ㅋㅋ

      2015.05.24 23:16 신고 [ ADDR : EDIT/ DEL ]
  4. 비밀댓글입니다

    2015.05.28 19:49 [ ADDR : EDIT/ DEL : REPLY ]
    • 남겨주신 글에 "아날로그 신호는 문자열로 들어오기 때문에" 부분이 이해가 안가네요. 사용하시는 자이로센서는 I2C방식으로, 아마 high byte와 low byte를 조합하여 원하는 16비트 데이터를 얻는 방식일텐데.. 왜 문자열로 들어온다는건지 잘 모르겠네요 ㅠ
      소스는.. 아직 오픈할 예정이 없습니다 ㅠㅠ

      2015.05.29 23:42 신고 [ ADDR : EDIT/ DEL ]
  5. 강민수

    많이 배웠어요
    mpu6050에서 디폴트설정으로 가속도는 정수값 -16383~16383 자이로는 정수값 -32768~32768이 출력되는게 맞나요?
    그리고 -2g~+2g -8g~+8g -250~+250 -500~+500 은 뭘의미하는건가요?
    그냥 mpu6050아무것도 안건드린 디폴트설정에서
    (가속도출력값/16383)*90
    (자이로출력값/32768)*(180/3.14)
    이렇게 구한 각도는 잘못된 각도인가요?

    2015.05.31 01:16 [ ADDR : EDIT/ DEL : REPLY ]
    • 가속도 자이로 모두 -32768~32768범위로 출력되지만 가속도를 16384로 나누는 이유는 mpu6050의 디폴트 측정 가속도가 -2g~2g이기 때문입니다~
      우리가 물리시간에 배우는 중력가속도(9.8㎨)가 1g에 해당하는 가속도가 되겠구요,
      자이로는 각속도[deg/s]가 되겠습니다~ 1초에 몇도를 움직이는가~
      각도를 구하는 방법은.. 가속도와 선속도, 각속도와 각도에 대해서 먼저 공부하셔야 되겠네요~

      2015.06.02 00:05 신고 [ ADDR : EDIT/ DEL ]
  6. hyeop

    안녕하세요 도움이절실하여 글을답니다.
    아두이노로 쿼드콥터 제작중인 대학생인데 비전공분야라 많이 어렵네요
    현재 자이로센서(mpu6050) 값추출까지만 되는상태이고 그이후에 해야하는작업이 상보필터값인지 pid제어인지도
    모르겟네요 초보자의애환.. pid제어는 프로그래밍작업인건지 아니면 무슨 따로 작업하는건지두 아예모르겟습니다ㅜ
    카톡아이디를 혹시 알려주실수있다면 도움좀 받고싶네요 제 아이디는 shyeop입니다

    2015.06.03 22:33 [ ADDR : EDIT/ DEL : REPLY ]
  7. birdpani

    안녕하세요 영상 잘봤습니다
    고도제어 알고리즘은 PID 만 쓰시나요?

    2015.10.10 21:26 [ ADDR : EDIT/ DEL : REPLY ]
  8. Moon

    안녕하세요... 초음파 센서 사용하는데... 지금 도움이 절실합니다.
    연락 할 수 있을까요?
    qnfroadl@naver.com로 이메일 주시면 정말 감사하겠습니다...

    2015.10.12 22:17 [ ADDR : EDIT/ DEL : REPLY ]
  9. 안녕하세요 블로그보다가 너무 좋아서 댓글남기게 되었습니다. 당신의 유지를 본받아 닉네임도 너를위한노래방으로 만들었어요. 먼발치에서 당신만을 응원할께요

    2016.01.22 05:24 신고 [ ADDR : EDIT/ DEL : REPLY ]

Quadrotor20132013. 12. 13. 19:15

쿼드의 핵심인 센서와 보드에 대해 다뤄보겠습니다.

 

일반적으로 RC하시는분들은 제어보드를 FC보드(Flight Control Board)라고 하더라구요. 갑자기 생각난건데 처음 쿼드만드시는 분들은 용어가 생소해서 고생하실 겁니다.. 프롭이니 리포배터리니 통돌이모터 프롭밸런서 등등 이런 단어를 알아야 검색도 하고 공부도 하는데 모르면 난감해요 ㅠ


제어보드의 종류는 많습니다. 아두이노 같이 빵판처럼 온갖 프로그램을 올릴 수 있는 보드에도 제어 소스만 올리면 제어가 가능하니까요. 쿼드콥터 제조 회사나 커뮤니티에서 만들어 지는 것 같습니다. AeroQuad, MultiWii 등 오픈되어있는 소스도 있구요, 이 오픈소스들을 그대로 보드에 올려서 사용하려면 해당 소스에 맞는 하드웨어에 올려야합니다. (센서나 하드웨어사양이 충족되어야 한단 소리입니다)


제어보드의 사양은.. 당연한 소리겠지만 빠르면 빠를수록 좋습니다. 제어 알고리즘을 돌리는데 1초가 걸린다면 전혀 쓸모없는게 되어버리니까요. 

뜨기 위한 보드의 제어 주기는 최소 5ms는 되어야 뜰까말까입니다. 10ms로 하면 시소제어는 되는데 전혀 뜨질 않고, 5ms로 하면 불안정하게 뜨고, 3ms로 하니까 나름 안정적으로 뜨는것 같습니다. 제가 직접 겪은 이야기입니다 ㅠ 이 글을 읽는 여러분은 이런 고생 겪지 않길 바랍니다.


이 제어 주기라는 것은 센서와 깊은 연관이 있습니다. 보드가 아무리 빨라봤자 센서의 최대 샘플링 간격이 1초라면 보드 제어주기는 1초로 맞춰질수밖에 없기 때문입니다. 센서 구매시 잘 선택하시길 바랍니다. 제 경우는 최대 10ms의 속도를 가지는 50만원짜리 센서를 가지고 제어를 해 왔는데.. 지금 보면 되지도 않는 하드웨어 사양을 가지고 엄청 고생한거네요. 50만원짜리 고급 센서보다 9천원짜리 MPU6050이 더 빠른데 말이죠. 



위 표는 MPU6050의 사양입니다. 밑의 Update rate를 보시면 자이로는 최대 0.125ms, 가속도는 최대 1ms 이네요. 왜 범위로 되어있냐면~ MPU6050센서 내부의 레지스터를 조작해서 LPF를 쓸 수 있게 되어있는데, 그 LPF설정에 따라 유동적이기 때문이라는 생각이 드네요.

아무튼, 센서마다 이런 사양이 있으니까 꼭 참고해서 결정하시기 바랍니다.


MicrocontrollerATmega2560
Operating Voltage5V
Input Voltage (recommended)7-12V
Input Voltage (limits)6-20V
Digital I/O Pins54 (of which 15 provide PWM output)
Analog Input Pins16
DC Current per I/O Pin40 mA
DC Current for 3.3V Pin50 mA
Flash Memory256 KB of which 8 KB used by bootloader   
SRAM8 KB
EEPROM4 KB
Clock Speed16 MHz

위 표는 제어보드인 아두이노 Mega2560의 사양입니다. 메인 클럭 주파수가 16MHz인데, 이걸 가지고 제어 루프의 주기를 계산하기에는 좀 막연하네요. 빠르면 빠를수록 좋긴 한데 쓸데없이 빠른건 굳이 필요 없을테니까 잘 고르시기 바랍니다. 


아두이노의 16MHz는 실시간 영상처리하기에는 턱없이 부족한 주파수인데요, 700MHz이상가는 라즈베리파이를 사용하면 굳이 저처럼 휴대폰을 달지 않고도 영상처리를 할 수 있을거 같다는 생각을 요새 하고 있는 중입니다. 근데 라즈베리파이는 불안정하다는 이야기가 들리기도 하네요.


센서와 보드의 통신 환경도 결정할때 고려해야할 요소 중에 하나인데요, 센서 표를 보시면 인터페이스가 I2C방식이라도 되어있습니다. 저는 운좋게 아두이노 보드에서 I2C전용 핀과 통신용 라이브러리를 제공해서 쉽게 통신할 수 있었는데요. 만약 다른방식이고 보드가 그 방식을 지원하지 않는다면 아날로그 신호를 분석해서 통신을 구현해야할 수도 있습니다. 저는 그렇게까지 하고싶진 않았는데 다행히 보드가 지원해줬네요.. 참고로 아두이노는 I2C통신과 시리얼통신을 지원합니다.


I2C방식(TWI통신이라고도 함)에 대한 자세한 내용은 제 블로그(http://hs36.tistory.com/29)를 참고하시구요 


mpu6050와 통신하는 라이브러리와 예제도 첨부하겠습니다.

MPU6050.zip

 

그밖에 각종 I2C를 사용하는 장치들과 아두이노간 통신 라이브러리는

https://github.com/jrowberg/i2cdevlib/tree/master/Arduino

참고하시면 되겠습니다~ 














Posted by 너를위한노래

댓글을 달아 주세요

  1. 안녕하세요 이번에 4학년이 되는 컴퓨터 학과 학생인데 저희팀도 이번에 졸작으로 아두이노를 이용해
    쿼드콥터를 만드는것을 선정했는데 어떤것부터 해야할지 갈피를 못잡아 문의드립니다.
    아두이노에 대해서는 평소 교수님과 연구실 자체에서도 배우는 지라 각종 엑츄에터 장비와 센서는 다뤄봤습니다.
    저희가 생각하는 것은 블루투스 통신을 이용해 아두이노를 띄우고 나아가 gps모듈을 장착해서 해당 지점을 찍고 돌아오는 것을 목표로 하고 있는데 첫시작이 너무 힘드네요.. ㅜㅜ
    대략 블로그에 관한 글을 전부 읽어보았지만 아직 부품에 대해서는 어떤 종류의 프레임을 쓸지 그에 따른 모터나 프롭등을 정하지 못하여서 도움을 청하고자 문의드렸습니다.
    읽어주셔서 감사하고 꼭 답변 해주시면 정말 고맙습니다.

    2014.03.11 19:13 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 쿼드에 뭔가 장비를 실으실게 아니라면 320mm~350mm프레임을 쓰시는게 좀더 나을것 같습니다. 저는 450mm썼는데 생각보다 크기도 크고 무게도 나가더라구요. 320mm 쓰실거면 모터는 제가 쓴거랑 비슷한 크기와 성능으로 쓰시면 될거 같고~ 프롭은 10인치 말고 좀더 작은거 쓰시면 될거 같아요 8인치인가.. 여러 사이트 돌아다니면서 정보 수집하는걸 권해드리고싶네요~!

      2014.03.14 15:18 신고 [ ADDR : EDIT/ DEL ]
  2. Alex

    안녕하세요~! 저도 졸업작품으로 아두이노를 이용해서 쿼드콥터 제작을 계획하고 있는데요.
    우선 블로그에서 좋은 정보를 많이 올려주셔서 감사드립니다. 많은 도움 되고 있습니다.^^
    그런데 아두이노와 함께 사용하는 센서 관련해서 질문이 생겨 이렇게 댓글을 답니다.
    위에서 말씀하신대로 멀티위나 aeroquad에 맞는 하드웨어를 달고 함께 제공되는 Software를 사용해 기체를 쉽게 제어 할 수 있다라고 알고 있는데요, 만약 mpu6050 같은 센서를 직접 달아서 사용하면 이에 맞는 software는 모두 다 직접 코딩해야하나요?
    예를 들어, 기체 제어나, 안정화 알고리즘, 칼만필터 이런 것들을 직적 코딩하여 아두이노 보드에 올리는 것이 맞는지..?
    이렇게 한다면 너무 어렵지 않을 까요? 혹시 해보셨다면 어떠한 방법을 추천하는지 궁금합니다.
    그리고 이에 관련된 오픈 소스나 참고할 만한 것이 있으면 알려주시면 감사하겠습니다.

    2014.03.19 00:22 [ ADDR : EDIT/ DEL : REPLY ]
  3. rktkwlak

    안녕하세요. 블로그통해 많은 도움 받고있습니다.!!
    참고해가며 쿼드 제작중인데요 진동을 잡는게 정말 어렵네요 ㅜㅜ
    혹시 방진처리는 어떻게 하셨나요??
    그리고 mpu6050레지스터로 lpf사용하는 방법을 알 수 있을까요?
    글을 전부 읽어봤는데요 혹시 LPF사용하면 반응이 많이 느린가요??

    2015.02.01 01:37 [ ADDR : EDIT/ DEL : REPLY ]
    • 방진은 방진 댐퍼를 사서 센서 보드와 프레임 사이를 연결했습니다~ 근데 별로 효과는 없어보이더라구요. LPF사용법은 MPU6059.h의 LPF관련 해서 define되어있는 상수를 찾으신 다음 MPU6050.cpp에서 해당 상수를 검색해보시면 금방 아실 수 있을거예요~ LPF 가중치 정도에 따라 많이 느려질 수 있으니까 가중치를 바꿔보시면서 테스트해보세여

      2015.02.13 15:21 신고 [ ADDR : EDIT/ DEL ]
    • rktkwlak

      넵 답변 정말 갑사합니다!!!

      2015.02.17 03:15 [ ADDR : EDIT/ DEL ]
  4. 드론

    안녕하세요 저희도 아두이노로 드론을 만들고 있는데요
    정말 큰도움이 되고 있어 감사 드립니다
    다름이아니라 같은 mpu6050을 사용하고 있는데 위의 소스를 사용하면 가속도와 자이로 값이
    수평일때
    a/g: 288 44 14224 -744 148 -412
    a/g: 392 332 14540 -448 596 -601
    a/g: 104 888 15324 -599 322 -86
    a/g: 216 -32 15276 248 -544 158
    a/g: 84 -448 14684 -149 -950 -404
    a/g: 348 328 14068 -331 -498 -754
    a/g: 88 800 14052 -237 48 -143

    이런식으로 예상하지 못한 값이 나옵니다. 이러한 값이 뜻하는 것이 뭔지 잘모르겠네요 ㅠㅠ
    죄송하지만 이 값에 관하여 설명좀 부탁 드려도 될까요?

    2015.08.07 13:49 [ ADDR : EDIT/ DEL : REPLY ]
    • 잘 나오고 있네요~!
      왼쪽부터 차례대로 가속도센서 x, y, z, 자이로센서 x, y, z 값이 출력되는 것 같습니다. 맞나요?
      먼저, 가속도센서는 이론적으로는 0, 0, 16384값이 출력되어야 합니다(구매 후 레지스터를 안건드렸을 경우). 하지만 전기적인 노이즈가 섞여있고, 수평이라고 하셨지만 땅바닥이 완전한 수평이 아니기에 약간의 치우침(바이어스)과 노이즈로 시시각각 변하는 값이 출력되게 됩니다.
      그리고 자이로센서는 움직이지 않을 경우 0, 0, 0이 출력되어야 정상이지만, 센서 공정상(?) 바이어스가 포함되어있기 때문에 0이 아닌 값이 출력되는게 일반적이고, 역시 약간의 노이즈로 인해 변화하는 값이 출력됩니다.
      두 센서 모두 -32768~32768의 값을 출력시킬 수 있으니 몇 백정도의 값은 바이어스와 노이즈로 보시면 될 거 같네요.
      출력된 값은 데이터시트에 나와있는 정보를 토대로 스케일링 하셔서 사용하시면 됩니다~!
      제 블로그(http://hs36.tistory.com/18)를 참고하시면 도움이 될 듯 하네요.

      2015.08.07 14:06 신고 [ ADDR : EDIT/ DEL ]
    • 공대

      MPU6050을 Atmega128로 처리해서 각도를 계산하는데, 제어 주기가 약 7ms 정도 되더군요.. 128에서 상보필터를 통해 PID계산을 하는데 float 연산이 많아서(부동소수점 연산) 계산 속도가 느린것 같습니다. 혹시 처리 속도가 어떻게 되시나요? 혹시 DMP기능을 이용하시는건지..?

      2015.12.01 23:07 [ ADDR : EDIT/ DEL ]
  5. K_SSUN

    안녕하세요 이번에 대학교내에서 드론으로 영상처리관련 프로젝트를 진행하게되었는데요
    프로젝트 내용이 실시간으로 드론이 촬영한 영상을 받아와야되는데 지원받은 물품은 드론 부품과 mega2560입니다
    찾아보니 쿼드콥터는 uno로 많이 하시던데 mega나 uno로는 실시간으로 영상을 받아오기가 무리일까요?

    2016.03.18 18:40 [ ADDR : EDIT/ DEL : REPLY ]
    • Mega나 Uno의 속도로는 영상처리는 무리일 것 같습니다.. 해상도에 따라 다르겠지만 680*480은 무리일 것 같네요 ㅜ

      2016.03.23 15:42 신고 [ ADDR : EDIT/ DEL ]

Quadrotor20132013. 11. 4. 17:09

9개월간의 대장정이 끝났습니다~


맨 처음에 쿼드를 만들겠다고 하나 둘씩 알아보던게 엊그제같은데.. 시간이 벌써 이렇게 지났네요 ㅋ


생각해보면 기획 당시에는 너무 막연했던거 같아요 센서 융합만 되면 쿼드 제어는 식은죽 먹기라고 생각했거든요


한번 지난 9개월간 어떤 과정이 있었는지 정리해 볼겸 나열해 보겠습니다.


처음에.. 아두이노로 만들겠다고 생각을 했죠 그런데 요요보드가 눈에 띄어서 요요보드를 구매했습니다. 그리고 디바이스마트(개인적으로 매우 싫어합니다,, 이것들이 배송이면 배송 사후관리면 관리 제대로 할줄 아는게 없어요)에서 쿼드 프레임과 모터 세트를 샀죠. 


그당시에는 모터가 BLDC모터라는것도 모르고 변속기가 필요하다는것도 몰랐습니다. 모터가 도착해보니 선이 세개? 이건 뭐지? 하면서 알아보니 BLDC모터더라구요. 그리고 변속기가 필요하다는것도 그 후에 알았습니다. 그래서 변속기를 주문 하고 그 사이에 센서를 테스트 했습니다.


센서는 연구실에 돌아다니는 아날로그 가속도센서 달랑 하나만 가지고 테스트 했죠. 기울이니까 값이 달라지길래 와~ 이거면 충분하겠는데? 이랬습니다 ㅋㅋ 많이 기울이면 값이 많이 바뀌니까 그만큼 모터 속도만 증가시켜주면 되겠지~ 라고 생각했어요. 처음 접하시는분들이 대부분 이럴겁니다.


그런데 가속도센서를 좀 더 조사하다가 병진운동에 취약한 사실을 알게됬습니다. 센서를 기울였을때 하고 옆으로 이동시켰을때 값이 같다는걸 발견하고 이거 하나로는 안되겠다 싶더라구요 그래서 연구실선배한테 물어봤는데 칼만필터를 이용해서 가속도 자이로센서를 융합하면 그런걸 커버할 수 있다고 하더라구요. 그래서 책보고 칼만필터를 공부하고 구현했습니다.


여기까지 형상은 가속도자이로센서-요요보드-갤럭시s3 이렇게 이어져 있고 칼만필터나 PWM출력 조정 모두 폰에서 이루어 지고 있었습니다. 요요보드하고 센서 입출력 하기위해 TWI통신(I2C)구현하는것도 뼈빠지게 힘들었고 ㅠ 요요보드하고 폰하고 연결하는 어플 개발하는것도 고생했습니다.. 보드가 비주류다 보니까 인터넷에 공개된것도 별로 없고 있다고 해도 죄다 영어라 힘들더라구요 ㅠㅠ 그렇게 구축해놨는데 요요보드가 두번 고장나서 포기하고 아두이노로 갈아 탔습니다.


아두이노는 MPU6050과 연결은 쉬웠지만 휴대폰하고 연결하는게 매우 고생스러웠슴다.. 아두이노측에서는 시리얼통신만 하면 돼서 쉬운데 안드로이드측에서 보내고 받기 힘들어요. 그렇게 궁리를 하다가 usbOTG라는 젠더를 알게 돼서 구매 후 구글링을 통해 아두이노와 안드로이드간의 통신을 구현했습니다. 근데 baudrate가 9600밖에 안되더라구요.. 이때까지만 해도 모든 연산이 안드로이드폰에서 수행됬기 때문에 느린 속도는 큰 문제였습니다. 센서와 아두이노 사이의 통신, 아두이노에서 폰으로 센서 데이터 보내고 폰에서 이걸 연산한 다음 다시 보드로 pwm수치를 보내고 보드는 그걸 가지고 pwm출력을 하고.. 지금 생각해보면 진짜 번거롭고 쓸데없는데 시간을 낭비했네요 ㅠ 그 당시에 교수님이 연산을 보드에서 수행하라고 말한 이유가 있었어요.. 


그래서 연산과정을 보드로 옮기기 시작했습니다. 이 때 센서도 바꿨네요. mpu6050에서 mysen-L센서로 바꿨습니다. mysen-L은 내부에서 roll, pitch, yaw값을 계산한 후 시리얼 통신으로 결과값만 넘겨줍니다. 센서 융합을 해주는 셈이죠. 그리고 샘플링타임도 100Hz였구요. 이게 충분히 빠른건줄 알았습니다.ㅠ 바꾼 센서의 값을 통해 쿼드 날개의 속도를 조절해주는 제어를 해봤습니다. 지금 보면 P제어만 수행한거네요.ㅋ 제어가 잘 안되죠 당연히.. 그래서 쿼드 제어를 조사하기 시작했습니다. 네이버의 쿼드콥터 자작카페를 많이 참고 했네요. 그리고 교수님이 말씀하신 논문도 찾아보고 해석하고 공부하다보니 PID제어가 필요하다는걸 알게 되었습니다. PID제어기를 아두이노에 구현하고 1축 지그(시소놀이)를 만들어서 계속 테스트했습니다. 센서 노이즈와 싸우기도 하고 제어 주기를 줄여도보고 늘려도 보고 진동에 따른 오차를 잡기위해 밤낮없이 고생했던 기억이 있네요. mySen-L센서 자체가 진동에 민감하게 설계되었고 최대 샘플링타임이 100Hz라 진동을 잡기위해 LPF나 이동평균필터를 쓰자니 반응이 너무 느리고, 반응을 빠르게하기위해 필터를 안쓰자니 진동때문에 D제어가 너무 불안정하고.. 이걸 조절하기위해 진짜 엄청난 시간과 노력을 쏟아부었네요 ㅠ 전 100Hz면 충분히 뜰거같았어요 근데 쿼드콥터 자작 카페 글을 읽다보니까 300Hz는 되어야 제어가 된다 라고 하더라구요.. 근처에 이런걸 해본사람이 한마디 해줬으면 훨씬 수월했을텐데.. ㅠ 센서의 한계가 100Hz니까 이 센서 말고 다시 MPU6050으로 돌아왔습니다. 이거는 1000Hz가 넘더라구요. 이제 가속도 자이로 센서를 융합해서 roll, pitch, yaw를 구해야 하는데,


아두이노로 칼만필터를 옮겨봤지만 돌아가질 않아서(이유는 불명.. 부동소수점연산이나 행렬연산이 잘 안됐었는지.. 형변환이 잘 안됐었는지 모르겠네요) 다른 융합방법을 알아보다가 상보필터라는걸 알았습니다. 그리고 그걸 공부하고 구현한 다음 필터를 쿼드에 맞게 설계및 조정했습니다. 이것 또한 PID게인값을 조절하는거라서 많은 테스트 후에 쿼드만을 위한 상보필터를 구현했죠. 기울어진 정도는 시간지연 없이 바로 나오고 모터 진동의 영향도 거의 안받게 설계 했습니다. 그리고 이 값을 이용해서 PID로 자세제어를 하니 뜨긴 뜨더라구요. 그리고 지자기계를 이용해서 yaw축을 제어하려고 했는데, 왜인지 너무 불안정하더라구요.. 자꾸 틀어지고 특히 0에서 360도로 넘어가는 그 순간이 불안하기도 했구요. 그리고 알아보니 주변 환경에 매우 민감하다고 하더라구요.. 그래서 과감히 지자기계를 버리고 자이로센서값을 누적해서 yaw제어를 하니까 아주 잘됐습니다. 오차가 쌓이긴 하겠지만 생각보다 거의 없더라구요. 모터가 안돌아가는 상황보다 돌아갈때 자이로 적분 오차가 덜 누적되는 경향이 있었습니다.


그리고 이제 무선으로 제어하기 위해 장착된 폰과 조종기 폰의 통신을 만들어야하는데, 처음엔 wifi-direct로 만드려고 했습니다. 근데 이게 나온지 얼마 되지 않은 기술이라 그런지 정보가 얼마 없더라구요.. 예제도 달랑 하나 있는데 그대로 실행시켜봐도 잘 안돌아가고.. 그래서 결국 블루투스로 구현했습니다. 무선 환경 갖추고 무게중심 맞춰주고 실내에서 띄우려고 했지만 이게 조종도 어렵고 마음대로 가지도 않고.. 


실내에서 안되는거같아서 실 외로 나가니까 그나마 좀 잘 날아서 동영상 찍고 졸작 준비를 했습니다.


조종이 잘 안됬던게 d게인값이 너무 커서 그런게 아닐까~ 하는 생각이 드네요.


그 동안 더 자잘한 문제도 많고 힘든 과정도 많았지만 대충의 맥락은 이상이네요.. ㅋ 정말 많은걸 배웠습니다. 센서로 현실 물리량을 측정해서 현실 물리량을 제어해 내니까 어려웠지만 보람도 있고 공부도 많이 되었습니다.


최초 목적은 쿼드는 기본적으로 쉽게 날게 하고 폰으로 영상처리하는게 주 목적이었지만 쿼드 제어가 주 목적이 되어버렸어요 ㅠ 좀 아쉽지만 그래도 많이 배웠고, 제가 하고싶은 공부를 했으니 후회는 없습니다 ㅋ


그리고 포기하고 싶은때도 있었지만 포기 안하고 꿋꿋하게 해 낸 제가 자랑스럽기도 하네요 ㅋ 


다음 포스팅부터 당분간은 쿼드 만들기에 필요한 기초 지식, 제가 겪은 경험을 바탕으로 한 조언을 해볼 예정입니다. 자작하시는 분들에게 도움이 됐음 좋겠네요.


Posted by 너를위한노래

댓글을 달아 주세요

  1. 날마

    안녕하세요 저도 쿼드콥터를 만들고있는데요 yaw때문에 작업이 멈추었습니다 ㅠ
    자이로센서만으로 yaw를 측정하셨다고 하셨는데 초당 몇도정도 각도의 차이가 나나요??
    저는 가만히 놔두면 초당 거의 1도정도 차이가나서.... 지자기센서만 이용해서 yaw를 측정하려하니
    roll이나 pitch로 회전시키면 yaw의 값도 변해서 지자기센서는 사용을 못하겠더라구요 ㅠ

    2014.03.06 22:40 [ ADDR : EDIT/ DEL : REPLY ]
    • 쿼드콥터의 모터를 작동하기 전에 정지상태의 자이로센서 데이터를 각 축마다 N개 추출합니다. 그리고 그 합을 N개로 나눈 a를 각 축의 출력값에 매번 빼주면 드리프트를 줄일 수 있습니다. 저는 N을 1000으로 했네요. 그럼에도 드리프트는 존재하는데 이걸 줄이는 방법으로 HDR등이 있겠습니다~ 이 내용에 관해 곧 포스팅할 예정입니다.

      2014.03.14 14:51 신고 [ ADDR : EDIT/ DEL ]
  2. 비밀댓글입니다

    2014.03.25 22:47 [ ADDR : EDIT/ DEL : REPLY ]
  3. 방향

    아두이노랑 mpu6050 사용해서 쿼드콥터 구현하려는 학생입니다
    BLDC 모터 구동이랑 MPU6050센서값 읽는 콘솔창 까지띄운것 까지는 완료한 상태인데
    그 뒤로 1주일째 진전이 없는 상태입니다........
    센서값을 적용해서 PID 소스코딩을 해야되는데
    혹시 공부하는데 도움이 많이됬던 서적이나 자료 좀 알려 주실수 있나요?

    2015.07.21 23:02 [ ADDR : EDIT/ DEL : REPLY ]
  4. 초보자가 많은 도움이 되었습니다.
    고맙습니다.

    2015.09.28 10:17 신고 [ ADDR : EDIT/ DEL : REPLY ]
  5. 중얼거북이

    정말대단하시네요 .... 글잘봤습니다.

    2017.03.06 09:40 [ ADDR : EDIT/ DEL : REPLY ]
  6. 감자

    스스로 드론을 제작해보려고 참고할 만한 블로그 찾는 중이었는데요

    좋은 정보 감사합니다.

    2017.09.19 18:29 [ ADDR : EDIT/ DEL : REPLY ]

Quadrotor20132013. 4. 22. 12:18

음... 이번이 두번째네요 보드가 고장난거는..

 

한두푼도 아니고 왜 이러는지... ㅠ

 

첫번째꺼는 쿼드콥터의 BLDC모터랑 전원을 같이 써서 고장 났다고 쳐요, 두번째꺼는 아예 배터리도 따로 쓰고 메뉴얼의 전압대로 맞춰서 썼는데 왜 잘 사용하다가 갑자기 그러냐고요 ㅡㅡ

 

IOIO보드는 좋은 보든데.. 쿼드콥터 하실때는 사지 않으시길 추천드립니다.. ㅠ 두번째도 고장나니까 회로 자체가 불안한게 아닌가 하는 생각도 들고..

 

이왕 이렇게 된 김에 어떻게 할까.. 고민하다가 제가 가지고 있는 아두이노 Mega 2560 보드를 사용할 수 있을거같아서 필요한 케이블 주문해 놨습니다.. 이제 포스팅에 아두이노 글도 올리겠네요 ㅎ

 

근데 제가 사용하는 mpu6050안에 LPF가 내장되어있다는데 이거 쓰려면 아두이노가 편하더라구요 LPF써서 잘되면 좋을텐데.. ㅋ

 

위기가 기회가 될지도 모르겠습니다 ㅋㅋ

Posted by 너를위한노래

댓글을 달아 주세요

  1. 안녕하세요.
    사용하신 보드가 안드로이드 IOIO 'OTG' 이신지요?
    저도 장난감 만들고 있는중 보드가 나가버려서 검색해 봤더니 Voltage Regulator에 문제가 있다네요.
    https://groups.google.com/forum/#!searchin/ioio-users/sparkfun/ioio-users/1RCdDQkSJvo/_FIzyDw9Wt8J

    2013.09.01 16:44 [ ADDR : EDIT/ DEL : REPLY ]
    • 아.. 이럴수가.. 저는 그것도 모르고 왜 안되는지 엄청 고생했는데.. 구매한 곳에 문의해 봐야겠습니다.ㅠ 저는 그냥 ioio보드지만 같은 이유일거라 생각됩니다. 정보 감사드려요~

      2013.09.07 17:02 신고 [ ADDR : EDIT/ DEL ]