반응형
회전을 계산하다보면 Heading은 0~360도로 썼다가 피치각은 -90~90도, 롤 각은 -180~180도로 사용하는 등.. 범위가 제각각이다. 심지어 시간에 비례하게 각도를 움직여주려고 하면 범위에 맞게 조정해야한다.
매번 만들다가 너무 귀찮아서 그냥 정리하려고 한다.
구현 언어는 MATLAB으로 되어있다.
0 ~ 360도로 warping
코드는 간단하다. mod 함수를 통해서 입력된 degree 단위의 각도를 0~360도 사이의 값으로 변환한다.
1
2
3
4
|
function y = warp_360(x)
mult = 360;
y = mod(x, mult);
end
|
cs |
-180~180도로 warping
위와 동일한 방식이나, mod 함수가 음의 범위는 따로 지원하지 않는 관계로 잠깐 shifting 시켰다가 가져온다.
1
2
3
4
|
function y = warp_180(x)
mult = 360;
y = mod(x + mult/2, mult) - mult/2;
end
|
cs |
-$\pi$ ~ $\pi$로 warping
1
2
3
4
|
function y = warp_2pi(x)
mult = 2 * pi;
y = (mod(x + mult/2, mult) - mult/2);
end
|
cs |
테스트한 코드는 다음과 같다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
clc;clear;
for i = 1 : 7200
t = i / (10 * 180 / pi);
t_line(i) = t;
a_line(i) = warp_2pi(t);
end
%
figure(1);
set(gcf,'Position',[100 100 900 400]);
subplot(133);
plot(t_line, a_line);
title('Behavior of function, warp 2pi()');
xlabel('Input degrees');
ylabel('Outputs');
xlim([0 13]);
xticks([3:3:13]);
% xticks(0:180:810);
% yticks(-270:90:270);
grid on;
|
cs |
테스트한 결과는 다음과 같다.
추가로 0~360도 범위의 값을 -180~180도 범위로 변경하고 싶으면 그냥 180도를 빼면 된다.
728x90
'G.N.C. > Basic' 카테고리의 다른 글
UTM <-> WGS84 변환 C 코드 (0) | 2024.04.21 |
---|---|
제어 공학 요약 - 선형 시스템 (0) | 2022.08.21 |
Cheat Sheet for dynamic equation of aircraft (0) | 2022.05.15 |
고장 진단 상황을 고려한 의사 역행렬을 이용한 조종면 재할당 (0) | 2022.02.13 |
구동기 한계를 가지는 가중 의사 역행렬 재분배 조종면 할당 (0) | 2022.02.08 |