드론 이동

학습 목표

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

실행 조건

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

이동 명령의 좌표 확인

시작 조건

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

진행 방법

  1. 각 명령 후의 Body Frame에서의 Displacement·World Frame에서의 Displacement·누적 위치·yaw를 표에 한 행씩 기록하세요.
  2. body_to_world 함수를 사용해 예상한 위치를 코드와 비교하세요.
  3. XY Path에 명령 순서 번호와 축 단위를 표시하세요.

남길 결과

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))
# TODO: commands를 순서대로 해석하고 위치·yaw를 기록하세요.

결과 기록·자가 점검

명령:

Body Frame에서의 Displacement [m]:

World Frame에서의 Displacement [m]:

누적 (x,y) [m]:

yaw [deg]:

확인할 점

같은 목적지의 다른 Path

시작 조건

첫 명령열의 최종 위치를 목적지로 두고, yaw=0을 유지하는 world 축 정렬 Path를 새로 만듭니다.

진행 방법

  1. 직접 정한 두 번째 명령열을 명시하세요.
  2. 두 Path의 최종 위치 오차·총 이동 거리·회전 횟수를 비교하세요.
  3. 최단 거리와 실제 명령 수행 편의가 같은 기준인지 설명하세요.

남길 결과

# 첫 활동의 목적지와 body_to_world를 재사용합니다.
route2=[('forward',1.5),('left',.5)]
# TODO: 첫 활동의 최종 위치를 확인한 뒤 route2를 목적지에 맞게 수정하세요.

결과 기록·자가 점검

Path:

최종 위치:

목적지 오차 [m]:

이동 거리 [m]:

회전 횟수:

확인할 점

명령 오차를 넣은 Path

시작 조건

이동 길이에 각각 ±5% 오차를 넣습니다. seed=7, 반복 30회로 고정하고 yaw 오차는 0으로 둡니다.

진행 방법

  1. 각 반복에서 거리 명령만 perturb하고 최종 위치를 저장하세요.
  2. 최종 위치 산점도와 목적지 거리 오차의 평균·최댓값을 구하세요.
  3. 오차율을 0%,5%,10%로 바꾸어 결과를 비교하세요.

남길 결과

rng=np.random.default_rng(7)
length_errors=rng.uniform(-.05,.05,size=(30,4))
# TODO: yaw를 제외한 거리 명령에만 오차를 적용하세요.

결과 기록·자가 점검

오차율:

반복 수:

평균 위치 오차 [m]:

최대 오차 [m]:

확인할 점

공식 예제·데이터