드론

1-7 YMFC-3D_V2 비행제어 코드 Binding Arming Disarming 코드분석

coding art 2017. 10. 24. 13:57
728x90



드론에 배터리를 직접 연결 후 삐리릭∼ 벨 소리가 완료 되면 수신기 RX701의 LED 가 주위에 바인딩(binding) 해야 할 송신기를 찾으면서 빠르게 점멸한다. 이때 DEVO 7을 on 하도록 한다. RX701 수신기가 DEVO 7 송신기를 찾아 바인딩이 완료되면 LED가 빠른 깜빡임을 멈추고 LED on 상태로 넘어가게 된다.
하지만 송수신기 종류에 따라서 예를 들면 FLYSKY 경우에는 송신기를 먼저 on 한 후에 배터리를 연결하는 경우도 있을 수 있다. 참고하기 바란다.

위 사진에 의하면 좌측 THROTTLE/YAW 스틱이 THROTTLE 1500  이상 YAW 1500에 위치하고 있다. 이러한 상태에서 직접 리튬폴리머 배터리를 연결 후 삐리릭∼ 벨 소리가 완료 되면 수신기 RX701의 LED 가 주위에 바인딩(binding) 해야 할 송신기를 찾으면서 빠르게 점멸한다. 하지만 이때 DEVO 7을 on 하더라도 바인딩이 이루어지지 않는다. 끄르륵하는 갈매기 소리와 같은 처절한 소리를 들을 수 있다. 그 이유는 스틱이 THROTTLE 1000 YAW 1500 시작 점에 위치하지 않기 때문이다. 스틱을 이 위치로 가져 오는 순간에 binding 이 되는지 관찰해 보자. 필요하다면 동일한 실험을 반복해 보기 바란다.

 while( express  )  {
 ⚫⚫⚫
 }

while 문의 express 는 쓰로틀 신호 변수인 receiver_input_channel_3, 간략하게 r_3 와 YAW 신호 변수인 receiver_input_channel_4, 간략하게 r_4에 관한 조건으로 주어진다. 즉 r_3<990 이든지 r_3>1020 이던지 r_4<1400  셋 중의 하나를 참으로 만족하면 ⚫⚫⚫를 무한 반복 실행하게 된다.

배터리 연결 후 DEVO 7을 on 했을 때 위 사진의 위치라면 r_3>1020 을 만족하므로 express 가 참(True) 조건을 만족하지만 끄르륵하는 DEVO 7으로부터 갈매기 소리와 같은 처절한 소리를 들을 수 있는데 binding 이 되지를 않는다. 하지만 스틱을 THROTTLE:1000 YAW:1500  위치로 내리면 binding 이 이루어지고 정확하게 r_3 = 1000 이 됨과 동시에 express 가 거짓(False)으로 바뀌면서 while  문을 끝냄과 동시에 그 다음 명령으로 넘어 가게 된다.


한편 THROTTLE/YAW 스틱이 THROTTLE 1000  YAW 1400 미만에 위치하고 사진의 경우를 고려해 보자. 스틱의 복원력이 있으므로 테이프를 사용하여 강제로 YAW 1400 미만의 위치에 고정해둔 사례이다.

while 문 express 의 3개의 조건 중 r_4<1400 조건 하나를 만족하면 참(True)이므로 ⚫⚫⚫를 무한 반복 실행하게 된다. 배터리 연결 후 DEVO 7을 on 했을 때 위 사진의 위치에서 즉각 binding 이 됨을 확인할 수는 있으나 express 가 참(True)이므로 while 문을 무한 반복하게 된다. 하지만 THROTTLE/YAW 스틱을 THROTTLE 1000  YAW 1500 으로 복원시키면 while문의 espress 의 3가지 조건 중 어느 하나도 만족시키지 못하므로 즉 거짓(False) 가 되므로 while  문을 끝냄과 동시에 그 다음 명령으로 넘어 가게 된다.

이 2 실험에서 THROTTLE/YAW 스틱이 THROTTLE = 1000 의 위치에 있으면 언제든지 binding 이 된다는 결론을 얻을 수 있다.

아래의 YMFC-3D flight controller 코드는 setup 과정에서 무선 송신기가 보내는 채널 입력을 수신하여 바인딩 하는 초기 과정 루틴이다.

그림에서 청색 박스 친 while 문이 뜻하는 바는 쓰로틀 입력 신호가 990 이하이거나 1020 이상이거나 또는 YAW 입력 신호가 1400 이하인지를 체크해 보는 것이다.
다시 말하자면 처음 시작 단계에서 좌측의 스틱이 정확하게 중앙 하단에 있는지 아니면 어긋난 위치에 있는지를 점검하는 것이다. 스틱이 YAW 방향으로는 스프링 복원력이 있으나 쓰로틀 방향으로는 복원력이 없어 임의의 위치에 가 있는 경우가 많다. 즉 쓰로틀이 1020  이상이라면 안전을 위해서 binding 이 안된다는 점에 유의하자.
참고로 사실 990 미만은 일어나지 않지만 송신기 세팅에서 뭔가 잘못된 경우이므로 원인 규명이 필요할 듯하다..


일단 송신기의 스틱이 정확하게 중앙 하단에 있지 않을 경우를 체크하면 지속적으로 while 문을 빠져 나오지 못하고 인터럽트 상태하에서 수신기로부터의 데이터 입력을 받아 체크하며, LED를 깜빡이면서 loop를 돌게 된다. 하지만 드론

시동 및 이륙을 위해 정확하게 쓰로틀 스틱 위치를 중앙하단에 위치시키게 되면 자연스럽게 while 문을 만족하지 않게 되므로 빠져나와 Start  변수를 0으로 두고 그 다음 명령으로 이동하게 된다.
사진과 같이 r_3<1060 이면서 r_4<1050 이 동시에 성립하여 참(True)이 되면 start=1 이 실행 설정되면서 다음 명령으로 넘어 간다.

start=1 이 설정된 상태에서 스틱을 움직여 중앙으로 돌아오면 r_3<1060 조건과 r_4>1450  조건

이 참(True)으로 만족되므로 strat=2를 설정 실행하고 ⚫⚫⚫를 실행하게 된다. 이 단계가 바로 Arming 단계이다.

그런데 만약 start=2 인 상태에서 스틱을 오른쪽으로 밀어붙여 r_3<1050 이면서 r_4>1950  조건을 만족 시킨다면 아는 Disarming 작업을 실행시키는 명령으로서 다시 start=0 을 설정 실행하므로 루프를 다시 돌아 Arming  적업을 다시 수행해야 할 것이다.

DEVO 7  송신기를 사용한 YMFC-3D_V2 드론 시험 비행 경험에 의하면 이륙 후에 정상적인 조종이 어려운 상황이 발생하였다. 예를 들자면 피치 스틱을 사용하여 전진 후 후진을 시켜보면 전진 하다가 피치 스틱을 중앙 위치로 가져오면 어느 정도 감속이 되어 방향을 바꾸어야 하는데 전혀 감속이 되지 않으며 스틱 중앙 위치에서 후진으로 훨씬 스틱을 당겨야 돌아온다. 돌아오는 상태에서 피치 스틱을 중앙으로 가져가면 어느 정도 감속이 되면서 되돌아갈 준비가 되어야 하는데 그렇지 못하며 제어가 되지 않는다는 느낌이 강하게 든다.  즉 피치 스틱 조종에 있어서 중앙 값이 완전히 변해 버린 상태로 판단된다.

DEVO 7 좌우 스틱의 중앙 값이 바뀌어 버리는 문제를 해결하기 위해 차라리 스틱 값 변환이 없는 YMFC-3D 코드를 수정하여 문제를 해결해 보기로 한다.