드론 이동 · 학습

실행 조건

이 실습은 좌표 시뮬레이션입니다. 실제 비행으로 확장할 때는 제공 장비의 좌표계·단위와 명령 응답 방식을 별도로 대조합니다.

이번에 배울 내용

앞·옆 이동의 기준이 회전 후에도 같다고 생각하면 Path가 어긋납니다. Coordinate Frame을 계산으로 먼저 확인합니다.

전체 흐름

영상·입력 사건 → 좌표·유효성 검사 → 제한된 명령 → Path·실패 확인

Body Frame과 World Frame

기체의 앞쪽을 x, 왼쪽을 y로 정하면, yaw 회전 뒤의 전진은 World Frame에서 다른 방향이 됩니다. yaw=90°일 때 동체 전방 이동은 세계 y 방향으로 이어집니다.

회전과 이동의 순서는 일반적으로 바꿔도 같지 않습니다.

Path와 오차를 함께 보기

명령 Path가 맞더라도 이동 거리 오차가 누적되면 도착점이 달라집니다. 먼저 모의 Path에서 좌표·단위·회전 부호를 확인한 뒤 여러 오차 조건의 도착점 분포를 봅니다. 실제 비행 명령은 이 계산과 별도로 검증합니다.

MATLAB과 Python의 Tello 명령 비교

기존 MATLAB 자료는 Ryze Tello 지원 패키지를 사용합니다. Python에서는 DJITelloPy로 같은 동작을 표현할 수 있습니다.

MATLAB의 거리 인자는 m, Python move_forward의 인자는 cm이며 회전 API의 단위와 방향도 확인해야 합니다.

예: 0.5 m 전진은 MATLAB의 moveforward(r,‘Distance’,0.5)와 Python의 tello.move_forward(50)에 대응합니다. 이 호출은 비행 중인 기체에 보내는 명령이므로 기본 예제에서는 명령 목록과 단위 변환만 확인합니다.

풀이 예제

시작 위치 (0,0) m, yaw=0°. 전방은 body +x, 오른쪽은 body -y, yaw는 반시계방향입니다. 제공 commands 5개를 사용합니다.

import math
import numpy as np
import matplotlib.pyplot as plt
# world x: 처음의 전방, world y: 처음의 왼쪽, yaw: 반시계방향 degree
commands=[('forward',1.),('right',.5),('yaw',90.),('forward',1.),('right',.5)]
pos=np.array([0.,0.]);yaw=0.;trace=[pos.copy()]
def body_to_world(dx,dy,yaw_deg):
    a=math.radians(yaw_deg)
    return np.array([[math.cos(a),-math.sin(a)],[math.sin(a),math.cos(a)]])@np.array([dx,dy])
# 예: yaw=90에서 전방 1 m의 world 변위
print(body_to_world(1,0,90))
[6.123234e-17 1.000000e+00]

공식 문서·데이터

참고 예제

추가 예제 보기

참고 자료