[PX4 튜닝 시리즈 7] 착륙 감지기 설정 (Land Detector Configuration): 완벽한 비행의 마무리를 위한 필수 가이드

항공우주공학과 자율비행 드론을 연구하시는 대학생, 대학원생, 그리고 연구원 여러분, 안녕하십니까!

어느덧 길고 길었던 PX4 튜닝 가이드의 마지막 장에 도달했습니다. 우리는 [시리즈 1]부터 [시리즈 6]까지, 기체의 물리적 진동을 잡고, 고주파 로깅을 통해 필터를 최적화하며, 수동/자동 PID 튜닝을 거쳐 우아한 S-Curve 궤적을 그리는 비행 최적화까지 모두 마쳤습니다. 이제 여러분의 기체는 공중에서 그 어떤 드론보다도 완벽하게 동작할 것입니다.

하지만, 비행의 진정한 완성은 ‘안전한 착륙’에 있습니다. 아무리 공중에서 완벽한 제어 성능을 보여주더라도, 착륙하는 순간 기체가 땅에 닿았다는 것을 스스로 인지하지 못하면 끔찍한 일이 발생합니다. 바닥에 닿았음에도 제어기가 계속해서 자세를 맞추려다 모터 출력을 높여 기체가 바닥에서 뒤집어지거나(Flip-over), 반대로 공중에서 하강하는 도중 착륙했다고 착각하여 모터를 꺼버려 추락할 수도 있습니다.

이러한 불상사를 막기 위해 PX4에는 **착륙 감지기(Land Detector)**라는 매우 중요한 동적 상태 모델이 존재합니다. 오늘 시리즈 7에서는 드론이 지면에 접촉하는 순간부터 시동이 꺼질 때까지의 상태를 판단하는 착륙 감지기의 원리와, 이를 완벽하게 세팅하기 위한 핵심 파라미터 튜닝에 대해 깊이 있게 알아보겠습니다.


1. 착륙 감지기(Land Detector)의 3단계 상태 머신 이해하기

착륙 감지기는 단순히 ‘땅에 닿았다/아니다’를 0과 1로 판단하지 않습니다. 센서 노이즈나 일시적인 돌풍으로 인한 오작동을 막기 위해, 기체는 **세 가지의 엄격한 상태(States)**를 순차적으로 통과해야만 최종적으로 ‘착륙 완료’ 판정을 받게 됩니다.

각 상태로 넘어가기 위한 조건들은 최소 300ms(0.3초) 동안 지속적으로 유지되어야 합니다. 만약 거리 센서(Distance sensor)가 장착되어 있지만 측정 범위를 벗어나 데이터를 알 수 없는 상황이라면, 오판을 막기 위해 이 대기 시간은 3배(0.9초)로 늘어납니다. 단 하나의 조건이라도 충족되지 않으면 착륙 감지기는 즉시 이전 상태로 돌아갑니다.

1단계: 지면 접촉 (Ground Contact)

기체가 땅에 닿았을지도 모른다고 의심하는 첫 번째 단계입니다.

  • 수직 움직임 없음: 수직 속도가 LNDMC_Z_VEL_MAX 파라미터에 설정된 값 이하인가?
  • 수평 움직임 없음: 수평 속도가 LNDMC_XY_VEL_MAX 이하인가?
  • 낮은 추력: 현재 출력 중인 추력이 일정 수준(최소 추력 + 호버링 추력과 최소 추력 차이의 30% 또는 60%) 이하인가?
  • 하강 의도(Intent to descend): 고도 제어 모드일 경우, 기체가 실제로 고도를 낮추려는 목표(Setpoint)를 가지고 있는가? (단순히 고도를 유지하다가 일시적으로 속도가 0이 된 것과 구분하기 위함)
  • 거리 센서(옵션): 거리 센서가 있다면 지면과의 거리가 1m 이하인가?

👉 제어기의 반응: 이 상태가 감지되면, 위치 제어기(Position Controller)는 기체가 땅에서 미끄러지지 않도록 X, Y축 방향의 수평 추력 벡터를 0으로 강제 설정합니다.

2단계: 착륙 추정 (Maybe Landed)

지면 접촉이 확인된 후, 기체가 완전히 안정화되었는지를 검사하는 단계입니다.

  • 이전 조건 충족: Ground Contact의 모든 조건이 여전히 참인가?
  • 회전 없음: 기체의 회전 각속도가 LNDMC_ROT_MAX 이하인가?
  • 더 낮은 추력: 추력이 Ground Contact 때보다 더 낮은 수준(최소 추력 + 차이의 10%)에 도달했는가?
  • 자유 낙하 아님: 기체가 자유 낙하(Freefall) 중이 아닌가?

👉 제어기의 반응: 이 상태가 감지되면, 위치 제어기는 전체 추력 벡터 자체를 0으로 만들어 버려 모터가 최소한으로만 돌게 합니다.

3단계: 착륙 완료 (Landed)

  • Maybe Landed 상태의 모든 조건이 충족되고 지속되면 최종적으로 기체는 Landed(착륙 완료) 상태로 전환됩니다.

2. 치명적인 파라미터: 호버 스로틀(MPC_THR_HOVER)의 중요성

착륙 감지기 튜닝에서 초보 연구원들이 가장 많이 하는 치명적인 실수가 바로 호버 스로틀(MPC_THR_HOVER) 값을 기본값인 50%(0.5)로 방치하는 것입니다.

최근의 FPV 레이서나, 무거운 탑재물(Payload)을 아직 장착하지 않은 대형 연구용 짐벌 드론은 힘이 매우 좋아서 스로틀을 30~35%만 올려도 호버링을 합니다. 그런데 MPC_THR_HOVER가 여전히 50%로 설정되어 있다면 어떤 일이 벌어질까요?

⚠️ 공중 착륙 오작동 (Mid-air Twitching) 현상 발생 여러분이 위치 모드(Position mode)나 고도 모드(Altitude mode)에서 기체를 하강시키기 위해 스틱을 내리면, 기체는 고도를 낮추기 위해 모터 출력을 35%에서 15~20% 수준으로 크게 떨어뜨립니다. 이때 비행 제어기(FC)는 자신의 호버링 기준이 50%라고 생각하고 있기 때문에, “어라? 현재 출력이 20%밖에 안 되네? 게다가 지금 하강 의도(Intent to descend)도 있잖아! 이건 지면에 닿은(Ground Contact) 상태야!”라고 잘못 판단해버립니다.

착륙 감지기가 공중에서 Ground Contact나 Maybe Landed를 발동시키면, 기체는 안전을 위해 순간적으로 모터 출력을 0에 가깝게 줄여버립니다. 기체가 툭 떨어지며 고도 오차가 커지면, 제어기는 화들짝 놀라 다시 모터 출력을 급격히 높입니다. 그 결과 공중에서 내려올 때마다 기체가 부르르 떨며 꿀렁거리는 ‘트위칭(Twitch)’ 현상이 발생하게 됩니다.

✅ 해결책: 따라서 고도 제어의 정확성을 높이고 착륙 감지기의 오작동을 막기 위해서는, 비행 로그를 확인하여 여러분의 기체가 실제로 호버링할 때 사용하는 스로틀 값(예: 35%면 0.35)을 MPC_THR_HOVER에 정확하게 입력해 주어야 합니다.

Bash
# 예제: 파워가 좋은 연구용 기체의 파라미터 수정
MPC_THR_HOVER = 0.35  # 실제 기체가 호버링하는 스로틀 값으로 변경 (기본값 0.50)

3. 착륙 시 유용한 파라미터 세부 튜닝 (QGroundControl)

호버 스로틀을 정확히 맞췄다면, 이제 QGroundControl(QGC)의 Parameter 메뉴에서 추가적인 착륙 관련 파라미터들을 연구실 기체의 특성에 맞게 다듬어 줄 차례입니다. 멀티콥터의 착륙 감지기 관련 파라미터는 모두 LNDMC_ 라는 접두사로 시작합니다.

① 속도 제약 조건 튜닝 (LNDMC_Z_VEL_MAX, LNDMC_XY_VEL_MAX)

만약 바람이 아주 강하게 부는 날이거나, 기체에 장착된 GPS나 광학 흐름(Optical Flow) 센서의 노이즈가 심하다면, 기체가 땅에 닿아 가만히 서 있음에도 불구하고 센서 상으로는 초당 0.5m씩 움직이는 것으로 측정될 수 있습니다. 이 경우 기체는 자신이 땅에 닿았다는 것을 인식하지 못해 시동을 끄지 않고 계속 모터를 돌리게 됩니다. 땅에 닿았음에도 착륙 판정이 너무 오래 걸린다면 아래의 임계값을 살짝 높여주십시오.

  • LNDMC_Z_VEL_MAX : 수직 속도 최대 허용치
  • LNDMC_XY_VEL_MAX : 수평 속도 최대 허용치

② 자율 착륙 하강 속도 (MPC_LAND_CRWL)

임무(Mission)를 수행하거나 Return to Launch(RTL)로 자동 착륙을 할 때, 기체가 지면에 거의 다 와서(거리 센서가 감지할 수 있는 높이에서) 지면과 충돌하기 직전 마지막으로 적용되는 매우 느린 수직 하강 속도입니다. 연구용 고가 장비가 장착되어 있어 바닥에 닿는 충격을 최소화해야 한다면 이 값을 낮춰주십시오. 단, 이 값은 반드시 LNDMC_Z_VEL_MAX 보다는 커야 착륙 감지가 정상적으로 이루어집니다.

③ 최소 스로틀 (MPC_THR_MIN)

비행 중 스틱을 완전히 내려도 모터가 꺼지지 않고, 기체가 자세를 제어하며 통제 하에 안정적으로 하강할 수 있도록 보장하는 전체 시스템의 최소 스로틀 값입니다.

④ 자동 시동 꺼짐 (COM_DISARM_LAND)

안전사고를 방지하기 위해 가장 중요한 파라미터 중 하나입니다. 착륙 감지기가 최종적으로 ‘Landed’ 상태를 선언하면, 시스템이 자동으로 시동(Disarm)을 끕니다.

  • 이 파라미터는 기체가 착륙한 후 몇 초 뒤에 모터를 끌 것인지를 결정합니다.
  • 기본값은 보통 2초 내외로 설정되어 있으며, 만약 이 자동 기능을 끄고 싶다면 값을 -1로 설정하면 됩니다. (하지만 수동으로 시동을 끄는 것을 잊어버리는 불상사를 막기 위해 기본값 사용을 강력히 권장합니다).
Bash
# 예제: 안정적인 착륙을 위한 파라미터 추천 설정
LNDMC_Z_VEL_MAX = 0.50    # 센서 노이즈를 고려한 수직 속도 임계값
LNDMC_XY_VEL_MAX = 1.0    # 센서 노이즈를 고려한 수평 속도 임계값
MPC_LAND_CRWL = 0.3       # 지면 도달 직전 아주 부드러운 하강 (0.3 m/s)
COM_DISARM_LAND = 2.0     # 착륙 감지 후 2초 뒤 자동 시동 꺼짐

마치며: [PX4 튜닝 시리즈] 대단원의 막을 내리며

대학생, 대학원생, 그리고 연구원 여러분, 대단히 수고 많으셨습니다.

오늘 우리는 비행의 마지막 퍼즐인 **착륙 감지기(Land Detector)**의 상태 머신 원리를 이해하고, 하강 시 발생하는 미스터리한 트위칭 현상의 원인이 MPC_THR_HOVER에 있다는 것을 파헤쳐 완벽하게 해결해 내었습니다.

이로써 기체의 프레임 조립부터 시작해, 하드웨어 진동 억제, 센서 필터 튜닝, PID 속도/자세 제어기 최적화, S-Curve 기반의 궤적 생성, 그리고 오늘 자동 착륙 감지 시스템까지 무인항공기 제어 공학의 처음과 끝을 모두 섭렵하셨습니다.

여러분이 랩실에서 밤을 새우며 고민하던 수많은 비행 문제들이, 이 7편의 시리즈를 통해 조금이나마 논리적으로 해석되고 해결되었기를 진심으로 바랍니다. 이제 여러분의 드론은 단순한 장난감이나 기계가 아니라, 여러분의 연구와 임무를 한 치의 오차 없이, 그리고 가장 안전하게 수행할 완벽한 비행 플랫폼으로 재탄생했습니다.

하늘은 넓고 여러분이 개척할 연구 분야는 무궁무진합니다. 그동안 **[PX4 튜닝 시리즈]**에 보내주신 관심과 열정에 깊이 감사드리며, 여러분의 다음 논문과 비행 테스트에 무한한 성공과 안전이 함께하기를 기원하겠습니다. 감사합니다!


Author: maponarooo, CEO of QUAD Drone Lab

Date: March 14, 2026

Similar Posts

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다