반응형

PX4를 이용하여 고정익 무인기를 이륙시키는 과정에서, 다양한 과정과 매개변수가 사용된다. 본 글은 핸드런치 방식을 사용하는 무인기에 대해서 해당 과정과 변수들을 절차에 맞추어 정리하고자 한다.

 

본 글은 22년 11월 27일에 PX4 1.13.0 버전을 기준으로 작성되었습니다.

오픈소스인만큼, 코드 구성에 차이가 발생할 수 있습니다.

이 점 유의하시기 바랍니다.

 

전체 이륙 절차에 관여하는 모듈은 다음과 같다.

1. FixedwingPositionControl::Run() : 전체 유도제어 상태를 실행시킨다. (최상위)

1.1 FixedwingPositionControl::set_control_mode_current()

1.2. FixedwingPositionControl::control_auto_takeoff() : 자동 이륙 절차에 대한 유도제어 담당

1.2.1 LaunchDetector::update() : 이륙/비행 상태 확인

1.2.2 FixedwingPositionControl::tecs_update_pitch_throttle() : 종축 속력/고도 유도기

1.2.3 FixedwingPositionControl::_npfg() : 횡축 유도기, 비선형 경로추종 유도

1.2.4 FixedwingPositionControl::_l1_control() : 횡축 유도기, L1 유도

 

1.1 현재 비행 모드 설정 FixedwingPositionControl::set_control_mode_current()

1) 자동 비행이 가능한 상태(flag_control_auto_enabled)이면서 위치 제어가 가능한 상태(flag_control_position_enabled)

혹은 Offboard 제어가 가능한 상태 (flag_control_offboard_enabled)이면서 위치가 유효하면 (_position_setpoint_current_valid)

2) VTOL이 천이 상태가 아니라면,

현재 제어 모드 _control_mode_currentFW_POSCTRL_MODE_AUTO_TAKEOFF 으로 변경한다.

그런데 위치 제어 명령을 으로 FW_POSCTRL_MODE_AUTO_TAKEOFF 인가한게 아니라면 이륙 감지는 넘어간다. 왜냐하면 이미 비행중일 것이기 때문이다.

 

그래서 현재 제어모드 _control_mode_currentFW_POSCTRL_MODE_AUTO_TAKEOFF 이고 이륙 감지를 한다면 이륙 과정을 시작한다.

 

1.2 이륙 상태 LaunchDetector::state_

이륙 절차는 LaunchDetector::state_ 의 3가지 값에 따라서 결정된다.

LaunchDetector::state_ 설명
launch_detection_status_s::STATE_WAITING_FOR_LAUNCH 이륙 대기 중
launch_detection_status_s::STATE_LAUNCH_DETECTED_DISABLED_MOTOR 이륙이 감지되었으나, FW_LAUN_MOT_DEL 초 동안 모터는 잠깐 끈다.
launch_detection_status_s::STATE_FLYING 비행 중

 

1.3 이륙 감지 절차 LaunchDetector

1. launch_detection_status_s::STATE_WAITING_FOR_LAUNCH 상태에서

기수 방향으로 가속도를 FW_LAUN_AC_THLD 이상으로 (default 30m/s2)

가속도를 받는 상태가 FW_LAUN_AC_T 초 이상으로 지속됐을 때 (default 0.05 sec)

모터를 안 끄면 (FW_LAUN_MOT_DEL == 0)

-> launch_detection_status_s::STATE_FLYING 으로 전환한다.

모터를 잠깐 끄면 (FW_LAUN_MOT_DEL != 0)

-> launch_detection_status_s::STATE_LAUNCH_DETECTED_DISABLED_MOTOR 으로 전환된다.

 

 

2.1 자동 이륙 절차 FixedwingPositionControl::control_auto_takeoff()

자동 이륙 절차는 이륙 대기 속력 명령을 설정한 후, 이륙 감지 절차의 상태 LaunchDetector::state_에 따라서 다르게 동작한다. Flap 과 Spoiler는 끈다.

상태는 크게 이륙 대기 상태 (STATE_WAITING_FOR_LAUNCH)와 이륙이 감지된 상태 (STATE_LAUNCH_DETECTED_DISABLED_MOTOR, STATE_FLYING) 으로 나뉜다.

 

1) 이륙 대기 상태

자세 제어기의 적분기를 초기화하고

롤 각 명령을 0도, 

피치 각 명령FW_TKO_PITCH_MIN (default 10 deg)

쓰로틀 명령FW_THR_IDLE로 한다. (default 0%, 0)

 

2) 이륙이 감지된 상태

횡축 제어에 대해서,

비선형 경로추종 유도(_npfg())를 사용하면 롤 각 명령대기 속력 명령이 나온다.

L1 유도(_l1_control())를 사용하면 롤 각 명령이 나온다.

 

종축 제어에 대해서,

2.1) 이륙은 감지되었으나 모터를 끈 상태로 간다면 STATE_LAUNCH_DETECTED_DISABLED_MOTOR는 최대 이륙 쓰로틀 명령을 max_takeoff_throttleFW_THR_IDLE 로 한다. (default 0%, 0.0)

2.2) 비행 중 STATE_FLYING으로 전환된다면, 최대 이륙 추력 max_takeoff_throttleFW_THR_MAX 로 한다. (default 100%, 1.0)

그리고 나서 TECS(tecs_update_pitch_throttle())를 이용하여 피치 각 명령 추력 명령이 나온다.

 

이륙 절차와 절차 별 제어 명령 출력

 

 

PX4 공식 문서에 따르면 FW_CLMBOUT_DIFF 라는 매개변수를 통해서 고도 오차가 이 매개변수 값 이내로 들어오면 전환한다고 되어있으나, 코드 상으로는 그렇지 않다. 공식 문서가 늦은 것 같다.

 

이륙 들어가는건 알겠는데, 이륙하고 어디서 왜 전환됨..? 

 

관련 변수 정리

변수 명 기본 값 의미
FW_TKO_PITCH_MIN 10 이륙 최소 피치각
FW_TKO_AIRSPD -1.0 이륙 CAS 명령값
-1 이면 FW_AIRSPD_MIN을 따른다.
FW_AIRSPD_MIN 10 최소 CAS 명령값
FW_THR_MIN 0.0 최소 쓰로틀 명령값
FW_THR_IDLE 0.0 대기 쓰로틀 명령값
FW_THR_MAX 1.0 최대 쓰로틀 명령값

 

 

728x90

+ Recent posts