관리 메뉴

개발자비행일지

드론, 제어관련 배경 내용 본문

▶ Ardupilot

드론, 제어관련 배경 내용

Cyber0946 2020. 4. 7. 18:06

Drone의 가속도 센서는 x, y, z 각 축에 중력이 미치는 영향을 독립적으로 판단해서, 모터의 회전수를 조정해서 수평을 맞춘다.

è  가속도 센서를 사용하게 됨에 따라서 가지는 장점은 변화하는 값의 오차가 누적되지 않는다. 라는 점이다.

è  하지만, 가속도 센서는 노이즈, 이동 , 진동에 취약하다.

è  이를 보안하기 위해 자이로 센서와 함께 사용한다.

 

Drone의 자이로 센서는 각속도를 측정하는 센서이다. 다시 말해 센서를 중심으로 같은 시간에 얼마의 각도로 돌아갔는지를 측정한다. 그 각속도 값을 누적하면 물체가 x,,z 축 방향으로 얼마나 기울어져 있는지와 기울어진 쪽의 방향을 알 수 있다.

 

드론에서는 가속도 센서와 자이로 센서정보를 적분하여 모터의 회전량을 계산한다. 장점으로는 독립적으로 모터를 제어하기 때문에 원하는 만큼 롤, 피치, 요잉 회전을 시킬 수 있지만, 적분하는 과정에서 센서의 노이즈로 인하여 오차가 생기고 계속하여 누적된다.

이 현상을 드리프트 라고 한다.

 

드론의 IMU 라이브러리 함수의 개략적인 구성(아두이노버전)

1.     사용할 가속도/자이로 센서의 초기화가 이루어지는 함수

2.     가속도/자이로 센서의 각 축(X, Y, Z)의 데이터를 읽어오는 함수이다.

3.     ACC_getADC() 각속도 센서의 각 축의 Raw Data I2C 통신으로 받아와 배열에 저장하는 함수

4.     우리가 롤, 피치, 요잉을 제어하는데 필요한 데이터로 변환해서 각각의 변수에 할당해 준다.

5.     자이로의 값을 I2C 통신으로 받아와 배열에 저장하는 함수

6.     자이로 값을 롤, 피치, 요잉을 제어하는데 필요한 데이터로 변환해서 각각의 변수에 할당해 준다.

è  여기서 4번과 6번에서는 가속도센서의 가공된 데이터와 자이로센서의 가공된 데이터가 공통의 변수에 할당된다.

è  이 부분 분석할 플랫폼도 동일한지 확인 필요

è  경과한 시간을 변환해주는 함수들의 주파수에 따라 분해능이 달라진다.

è  설계된 로직이 실행된 다음, 센서의 값을 받아오기 때문에 +a의 실행에 따른 jitter가 발생한다.

 

필터링

è  드론은 기울어진 방향과 정도, 회전 정도를 알아야 드론의 수평상태를 맞추거나 움직임을 제어할 수 있다. 이를 위해 각속도/자이로 센서 보드가 별도로 장착되어 있다. 각속도/자이로 센서를 통해 드론의 상태를 확인 할 수 있는데

è  드론시스템은 센서에서 받아온 데이터를 데이터 처리 및 필터링을 걸친 다음의 값을 가지고 드론의 상태를 확인한다.

필터링은 신호 중에서 원하는 정보를 뽑아내는 것을 말한다.

필터로 할 수 있는 작업은 크게 3가지이다.

1.     smoothing

è  측정된 데이터를 이용하여 현재의 출력 값을 결정하는 방법이다.

2.     prediction

è  Forward predictionBackward prediction이 있다. 전자는 과거의 정보로 어떤 상태가 발생할지 말지를 예측하는 것이고, 후자는 그 반대이다.

3.     Linear filtering

è  wiener filter :  영상처리나 뇌파 분야에서 이 필터를 많이 사용하며, 신호의 통계적인 특성들을 알고 있을 때 적합하다. mean square 기반으로 대상 신호와 내가 만든 모들 간의 격차를 최소화하기 위한 시도이다. Non-stationary signal에 적용하기 부적절하다.

è  Kalman filter : 가속도 센서와 자이로 센서의 출력을 융합하는데 주로 쓰인다. signaltrend를 잘 따라 갈 수 있도록 해주는 filter이다. 추정 값을 쓸 수 있는 모델링 된 식이다. reference signal이 필수적이다.

 

드론이 비행하기 위해서는 4가지 힘이 요구된다.

1.     양력

2.     추력

3.     항력

4.     중력

è  여기서 드론의 모터 회전수는 PulseWidthModulation 방식으로 제어 되는데 제어하는 모터의 위치와 회전수에 따라 드론의 이동방향이 결정된다.

 

 전진 (Pitch Forward)

뒤의 프로펠러의 회전수가 높아지면 기체가 앞으로 기울어 지면서 앞으로 이동한다.

후진 (Pitch Backward)

드론이 후진하기 위해서는 2,4 프로펠러의 회전수를 높이면 기체가 뒤로 기울어 지면서 뒤로 이동하게 된다.

오른쪽(Roll Right)

드론이 오른쪽으로 이동하기 위해서는 좌측의 3,4  프로펠러의 회전수를 높이면 기체가 오른쪽으로 기울어지면서 우측으로 이동하게 된다.

왼쪽(Roll Left)

드론이 왼쪽으로 이동하기 위해서는 다음 그림과 같이 1, 2 프로펠러의 회전수를 높이면 기체가 왼쪽으로 기울어지면서 좌측으로 이동하게 된다.

좌회전 (Anti-Clockwise)

반시계 방향으로 회전하는 1, 4번 모터의 회전수를 2,3번 모터보다 높게 설정해주면 좌회전한다.

우회전(Yaw-Clockwise)

드론이 제자리에서 우회전하기 위해서는 시계방향으로 회전하는 2,3 프로펠러의 회전수를 높이면 기체가 시계방향으로 우회전한다.

 

상승(Ascend)

전체 모터의 회전수를 증가시키면 상승한다.

 

하강(Descend)

전체 모터의 회전수를 감소 시키면 하강한다.

 

지자기 센서

드론의 방향을 확인하는데 사용되는 센서이다. 지자기 센서는 나침반과 같이 자북을 거의 정확히 추정할 수 있기 때문에 현재 드론의 방향을 알 수 있다. 지자기 센서는 장비의 하단에 장착되어 있다.

è  지구의 자기장을 측정하는 센서로서 지구의 자기장의 방향을 직접 알 수 있을 분 아니라 진동주기로부터 크기를 알 수 있다. 측정 단위는 마이클 테슬라이다.

 

지자기 센서는 Hall Effect에 의한 감응을 기초로 한다.

è  직교하는 전도체 내의 전류와 자기장에 의해 전자가 편향되면서 도체 양단에 전압이 발생하는데, 이는 선형 값이므로 저전압을 측정하면 현재 입자 된 자기장의 크기를 알 수 있다.

센서의 종류

è  3축 지자기 센서 : 휴대폰에 많이 들어간다. 나침반 기능이 대표적인 예

è  지자기 이미징 센서, 홀센서와 비슷한 원리로 반송되는 값의 편향을 계측하는 것이다.

지자기 센서 처리 하는 라이브러리 로직

1.)    지자기 센서의 초기화를 위한 함수, I2C 통신을 위한 주파수를 설정하고, reset() 함수를 호출하여 초기화를 진행한다.

2.)    지자기 센서의 값을 읽어오는 함수이다.

3.)    지자기 센서를 교정모드로 설정하는 함수이다.

è  x,y,축의 최소/최대 값의 범위를 지정한다. 

4.)    지자기 센서를 교정하는 함수이다.

è  최소/최대 값을 비교하여 현재 읽어온 값을 현재의 값으로 변경한다.

5.)    지자기 센서의 교정 모드를 종료하는 함수이다.

6.)    지자기 센서를 리셋하는 함수이다.

 

기압계 센서

기압고도를 이용해 고도를 측정하는 원리

I2C(Inter Intergrated Circuit) 통신 프로토콜을 통해서 데이터를 추출할 수 있다.