이전에 포스팅한 Bixler 무인기를 자동비행으로 날려보았다.

제작 과정은 다음을 참조 http://kyubot.tistory.com/79?category=566605


비행 장소는 아래 그림과 같이 암사동 광나루 드론 공원이다. 

이번에는 이륙부터 경로비행 그리고 착륙까지 완전 자동비행으로 시도해보았다.


비행전 점검


자동비행으로 비행하기 전에 반드시 수행해야 하는 절차는 각 조종면이 움직임에 대해 올바로 반응하는지 확인하는 것이다.

비행기에 전원을 넣고 Stabilzation 모드에서 기체를 회전시켜 실제 조종면이 아래 그림처럼 동작하는지 확인해야 한다.

만약 반대로 움직이게 되면 비행기는 자동모드로 넘어가자마자 곤두박질 칠 것이다.


경로점 설정하기


바람 방향을 고려하여 북쪽으로 이륙 후 2차례 홀딩 패턴 비행을 한 다음 접근 및 착륙하는 간단한 미션을 설정하였다.



언제부터인지 모르겠으나 1.8.1 버전에서는 처음 경로를 설정하였는데 착륙 진입(landing approach) 경로점과 최종 착륙지점(Landing point)까지 landing flare (최종 접근 지점에서 부드러운 착지를 위해 고개를 들어올리는 기술)를 진행하기 위한 여유 거리, 방향 및 고도가 필요하다는 경고를 준다. 이 경고를 무시하면 자동 비행 자체가 진입이 안됨.


내용 추가

고정익 항공기의 착륙


착륙과 관련하여 PX4 에서 설명한 자료(https://docs.px4.io/en/flying/fixed_wing_landing.html)에 따르면 고정익 비행기의 착륙 로직은 아래 그림과 같은 2가지 단계로 이루어진다.

1. 먼저 착륙 접근 단계에서 고정익 비행기는 고정된 착륙 접근 각도(FW_LND_ANG)에 따라 진행한다.

2. 플레어 고도(FW_LND_FLALT)에 다다르면 플레어 경로(FW_LND_HVIRT에 설정된 커브)를 따라 착륙한다.


플레어 랜딩 고도는 고정익 항공기가 실제 지상으로 "간주"하는 고도에 대한 상대적인 고도이다.

착륙 모드에서 지면 고도는 알 수 없으므로 비행체는 그것을 해면고도(0m)로 사용한다. 대체로 지면이 해수면보다 높으므로 비행기는 첫번째 단계에서 착륙하게 된다(플레어 고도에 도달하기 전에 지면에 닿게 됨)


만약 비행기에 지면 거리를 측정할 수 있는 센서가 장착되어 있다면 위 그림과 같은 단계로 착륙하게 될 것이다.


착륙은 다음 파라미터에 따라 영향을 받는다.


파라미터 

설명

 FW_LND_ANG

플레어 전단계까지 적용되는 착륙 접근 각도

 FW_LND_HVIRT

 플레어 경로를 산출하기 위한 가상의 수평 라인/고도

이 값은 플레어 경로 커브가 점근적으로 사용하는 지면 고도이다.

 FW_LND_FLALT

 착륙 플레어 고도(착륙 고도에 대한 상대 고도)

 FW_LND_TLALT

 착륙 쓰로틀 제한을 적용하는 고도(착륙 고도에 대한 상대고도) 기본값 -1.0은 출력 제한을 플레어 고도의 2/3 지점에서 적용하기 시작한다.

 FW_LND_HHDIST

 착륙 헤딩을 고정하는 수평 거리

 FW_LND_USETER

 착륙 단계에서 추정된 지면 거리(GPS에서 나오는 지면 고도)를 사용한다.

이 기능은 기본적으로 Off된 상태로 경로점이나 리턴 고도(또는착륙 지점에 대한 가상의 해면 고도)가 사용된다.

FW_LND_FL_PMIN

플레어 시 최소 피치 각도. 양의 값은 FW_LND_TLALT에 도달했을 때 기수가 들림을 의미한다.

FW_LND_FL_PMAX

플레어 시 최대 피치 각도. 위와 동일

FW_LND_AIRSPD_SC

착륙중에 적용되는 최소 에어스피드 스케일 팩터 혹은 게인. 이 값을 비행기의 최소 비행속도에 곱하여 착륙 접근시에 목표 속도로 설정한다.

FW_AIRSPD_MIN x FW_LND_AIRSPD_SC



GeoFence 설정하기


안전을 위해 비행 경로 바깥으로 가상의 비행금지 구역을 설정한다.

파라미터 설정의 GF_ACTION  항목에서 Fence를 침범했을 때 경고만 줄지, 제자리에 있을지, 홈으로 돌아올지, 자폭(?)할지를 설정할 수 있다.




또한 시동걸기에서 자꾸 mag0 inconsistent 에러가 떠서 COM_ARM_MAG 파라미터를 0.15에서 0.25로 증가시켜주었다.

mag0 inconsistent 에러는 지자기 센서의 캘리브레이션 값이 나머지 mag 센서의 값과 차이를 보이는 경우를 의미하는데 gps센서에 장착된 컴파스 센서가 약간 틀어져서 나타나는 현상인듯 하다.


비행 결과


이륙은 ARM후 비행기를 이륙자세로 만들고 비행모드를 mission으로 변경한 다음 Throttle을 최대로 올리면 진행된다. 바로 모터가 돌지는 않는데 이때는 비행기를 살짝 흔들면 이륙 상태로 인식하는거 같다. 자세한 이륙 방법은 문서를 좀더 찾아봐야할듯.


추가됨

고정익 비행기의 이륙


PX4에 설명된 비행기의 이륙과정을 정리하면 다음과 같다.


비행기는 사출기/핸드런치 모드 또는 활주로 이륙 모드에서 현재 헤딩에 따라 이륙한다.

기본 모드는 사출기/핸드런치 모드이며 RWTO_TKOFF 파라미터에 따라 활주로 모드로 변경할 수 있다.

사출기/핸드런치 모드에서 비행기는 최대 출력으로 상승한다(약 2초간 RWTO_MAX_THR에 설정된 값 까지)

고도 에러가 FW_CMLBOUT_DIFF 보다 작으면 통상적인 항법으로 진행한다.

참고: 런치 디텍터(launch detector)가 특정한 조건을 만족시켜야 위에 언급한 절차가 수행될 수 있다. 사출기 런치의 경우 특정 가속도가 충족되어야 한다.

활주로 이륙 모드는 다음 단계를 따라 진행한다:

 1. Throttle ramp: 이륙 최소 속도(Minimum airspeed for takeoff = FW_AIRSPD_MIN x RWTO_AIRSPD_SCL)에 도달할 때까지 활주로에 고정(Clamp) 됨(피치, 롤, 헤딩 고정)

 2. Take off: 비행기 고도 > 항법 고도(RWTO_NAV_ALT)가 될때까지 피치를 상승시킴

 3. Climbout: 지면 고도(Altitude above gound level) > FW_CLMBOUT_DIFF 를 만족할때까지 상승. 이 단계에서 롤과 헤딩 고정 제한은 풀리게 된다.


이륙은 다음 설정 항목에 따라 영향을 받는다.


파라미터 

설명

 RWTO_TKOFF

 랜딩기어를 사용한 활주로 이륙. 기본값은 해제.

 RWTO_MAX_THR

 활주로 이륙 시 최대 출력.

 FW_CLMBOUT_DIFF

 Climbout 고도 차이.

 FW_AIRSPD_MIN

 최소 대기속도. 이보다 낮은 속도에서 TECS 제어기는 대기속도를 높이기 위해 보다 적극적으로 개입할 것이다.

 RWTO_AIRSPD_SCL

 이륙을 위한 대기속도 스케일 팩터. 대기 속도가 FW_AIRSPD_MIN x RWTO_AIRSPD_SCL 값에 도달하면 피치를 증가시키게 된다.

 WTO_NAV_ALT

 어느정도의 롤을 허용할 수 있는 지면 고도 (AGL).
RWTO_NAV_ALT 값에 도달하기 전까지 비행기는 수평(level)상태를 유지하며 러더만을 사용하여 현재 헤딩을 유지한다.(see RWTO_HDG). FW_CLMBOUT_DIFF > 0 인 경우 이 값은 반드시 FW_CLMBOUT_DIFF 보다 작아야 한다.


아래 동영상을 통해 PX4가 자동으로 착륙하는 모습을 잘 볼 수 있다.



처음에 이륙하자마자 비행기가 왼쪽으로 기우는 현상이 발생하였다. 되도록이면 다음 경로점 방향으로 던진다고 했는데 왜 이런 현상이 나타났는지는 좀더 분석이 필요할 듯.


마지막 착륙 접근에는 착륙지점에서 180m 거리에 최종 접근 지점을 설정하고 고도를 약 18미터 정도로 설정하였는데 예상보다 너무 낮은 고도였는지 착륙지점 근처의 높은 나무를 피할 수 없을꺼 같아서 아쉽지만 자동조종을 해제하고 수동으로 착륙하였다. 


사실 180미터 거리에 18미터 고도면 대략 6도 강하각이므로 그렇게 완만한 어프로치는 아닌데 다음에는 강하각을 더 크게 설정하거나 landing target을 좀더 뒤로 보내야할꺼 같다. 


비행 결과는 다음과 같다.

px4 비행로그 분석 사이트 (https://review.px4.io/upload)에 업로드한 비행 결과는 아래와 같다. 

자세한 비행 결과는 다음 링크에서 확인이 가능하다. (https://review.px4.io/plot_app?log=04d917f6-eeec-4d47-a1b2-95513b961a08)

보라색으로 표시된 선이 자동비행 경로이고 파란색 선은 manual 혹은 stabilized 모드를 의미한다.






최근에 업데이트된 px4 log 는 이렇게 입체적인 비행궤적도 표시해주고 각 해당 경로의 비행 자세와 조종기 입력도 관찰할 수 있다.



2018/12/2 최초 문서 발행됨.

2018/12/6 비행전 점검, 착륙접근에 관한 내용 추가

+ Recent posts