Main Content

accelcal

가속도계에 대한 파라미터 보정

R2023b 이후

설명

예제

[A,b] = accelcal(D)는 보정되지 않은 가속도계 측정값을 보정 데이터 D를 기반으로 수정하는 데 사용되는 행렬 A와 벡터 b를 반환합니다.

Ab를 구한 후, C=U*A+b를 사용하여, 보정되지 않은 데이터 U로부터 보정된 데이터 C를 구합니다. 여기서 U는 M×3 행렬이고 U의 각 행은 보정되지 않은 가속도계 측정값입니다.

[A,b] = accelcal(XUP,XDOWN,YUP,YDOWN,ZUP,ZDOWN)가속도계 보정 방향에 설명된 6개 보정 방향에서의 측정 데이터를 지정합니다.

[A,b] = accelcal(___,Gravity=g)는 지구 중력 상수 g의 값을 지정합니다.

예제

모두 축소

측정 데이터를 생성하기 위한 imuSensor 객체를 만듭니다. 기본적으로 객체의 기준 프레임은 NED(북쪽-동쪽-아래쪽) 프레임입니다. 측정값에 상수 편향과 랜덤 잡음이 포함되도록 가속도계 파라미터를 지정합니다.

accelParams =  accelparams(ConstantBias=[.1 .2 -.1],...
    NoiseDensity=1e-2*ones(1,3));
imu = imuSensor(Accelerometer=accelParams);
disp(imu.ReferenceFrame)
NED

6개 보정 방향에 대한 오일러 각을 정의하고 이를 쿼터니언으로 변환합니다.

orients = [...
    0 90 0 % xUp
    0 0 -90 % yUp
    0 180 0 % zUp
    0 -90 0 % xDown 
    0 0 90 % yDown    
    0 0 0]; % zDown
quats = quaternion(orients,"eulerd","ZYX","frame");
N = numel(quats);

외부 가속도와 각속도가 모두 0이라고 가정합니다. IMU 센서를 시뮬레이션하여 보정 측정값을 구합니다.

exAcc = zeros(N,3);
angVel = zeros(N,3);
D = imu(exAcc,angVel,quats)
D = 6×3

   -9.6490    0.2225   -0.1925
    0.0146   -9.5593    0.0153
   -0.0210    0.1928   -9.9271
    9.9363    0.1840   -0.0210
    0.0008    9.9094   -0.0655
    0.2828    0.1528    9.7232

accelcal 함수를 사용하여 보정 파라미터를 구합니다.

[A,b] = accelcal(D)
A = 3×3

    1.0018    0.0019   -0.0087
    0.0006    1.0078    0.0041
   -0.0154    0.0020    0.9986

b = 1×3

   -0.0956   -0.1852    0.0779

보정 측정값을 사용하여 보정 파라미터를 확인합니다.

DCali = D*A+b
DCali = 6×3

   -9.7587    0.0199   -0.0298
   -0.0872   -9.8187    0.0534
    0.0365   -0.0111   -9.8339
    9.8589    0.0196   -0.0284
   -0.0875    9.8012    0.0535
    0.0380   -0.0109    9.7852

무작위 방향을 만들고 가속도계 측정값을 구한 다음 측정값을 보정합니다.

M = 10;
randomQuats = randrot(M,1);
U = imu(zeros(M,3),zeros(M,3),randomQuats);
C = U*A+b
C = 10×3

    9.1400    3.5374   -1.3008
   -7.1185   -6.8126   -0.7088
    7.1372   -6.8065   -0.5943
   -7.9362    1.5605    5.6203
    7.4397   -2.3143   -6.2363
    7.0758   -4.0794   -5.7321
    3.1250   -5.4306    7.2655
    0.8261   -9.7286    1.3509
    0.8486    2.8606   -9.2705
   -2.4922    8.5000   -3.9532

입력 인수

모두 축소

가속도계의 6개 보정 방향에서의 측정값으로, N×3 행렬로 지정됩니다. 여기서 N은 총 측정값 개수입니다. 이 행렬의 각 행은 가속도계 보정 방향에 설명된 가속도계의 6개 보정 방향 각각에서 측정된 측정값입니다. 최상의 결과를 얻으려면 행렬이 모든 6개 방향에 대해 같은 개수의 측정값을 가져야 합니다.

함수는 기본적으로 D의 데이터를 해석할 때 9.81m/s2과 1 중에서 데이터의 노름 평균에 더 가까운 값을 지구 중력 상수 g의 값으로 가정합니다.

데이터형: single | double

가속도계의 x-up 방향에서의 측정값으로, N1×3 행렬로 지정됩니다. N1은 총 x-up 측정값 개수입니다. 행렬의 각 행이 하나의 가속도계 측정값입니다. x-up 방향의 정의는 가속도계 보정 방향 섹션을 참조하십시오.

데이터형: single | double

가속도계의 x-down 방향에서의 측정값으로, N2×3 행렬로 지정됩니다. N2는 총 x-down 측정값 개수입니다. 행렬의 각 행이 하나의 가속도계 측정값입니다. x-down 방향의 정의는 가속도계 보정 방향 섹션을 참조하십시오.

데이터형: single | double

가속도계의 y-up 방향에서의 측정값으로, N3×3 행렬로 지정됩니다. N3은 총 y-up 측정값 개수입니다. 행렬의 각 행이 하나의 가속도계 측정값입니다. y-up 방향의 정의는 가속도계 보정 방향 섹션을 참조하십시오.

데이터형: single | double

가속도계의 y-down 방향에서의 측정값으로, N4×3 행렬로 지정됩니다. N4는 총 y-down 측정값 개수입니다. 행렬의 각 행이 하나의 가속도계 측정값입니다. y-down 방향의 정의는 가속도계 보정 방향 섹션을 참조하십시오.

데이터형: single | double

가속도계의 z-up 방향에서의 측정값으로, N5×3 행렬로 지정됩니다. N5는 총 z-up 측정값 개수입니다. 행렬의 각 행이 하나의 가속도계 측정값입니다. z-up 방향의 정의는 가속도계 보정 방향 섹션을 참조하십시오.

데이터형: single | double

가속도계의 z-down 방향에서의 측정값으로, N6×3 행렬로 지정됩니다. N6은 총 z-down 측정값 개수입니다. 행렬의 각 행이 하나의 가속도계 측정값입니다. z-down 방향의 정의는 가속도계 보정 방향 섹션을 참조하십시오.

데이터형: single | double

지구 중력 상수로, 양의 스칼라로 지정됩니다 이 인수를 지정하지 않으면 함수는 9.81m/s2과 1 중에서 D에 있는 데이터의 노름 평균에 더 가까운 값을 지구 중력 상수 g로 가정합니다.

예: 9.807

데이터형: single | double

출력 인수

모두 축소

보정 행렬로, 3×3 행렬로 반환됩니다.

데이터형: single | double

보정 오프셋 벡터로, 1×3 벡터로 반환됩니다.

데이터형: single | double

세부 정보

모두 축소

가속도계 보정 방향

가속도계 보정을 위한 측정 데이터를 구하려면 가속도계 측정 프레임(X-Y-Z)의 방향을 이 다이어그램에 표시된 6개 방향 중 하나와 맞춥니다. 예를 들어 x-up 측정값을 구하려면 첫 번째 그림처럼 가속도계 측정 프레임의 양의 X 방향을 중력의 반대 방향으로 정렬합니다.

Six calibration orientations

가속도계에 보정 오류가 없고 그림과 같이 측정 프레임이 완벽하게 정렬되면 다음 표에 나와 있는 이상적인 측정값을 구할 수 있습니다.

방향aXaYaZ
X-Up-g00
X-Down+g00
Y-Up0-g0
Y-Down0+g0
Z-Up00-g
Z-Down00+g

표에서 aX, aY, aZ는 각각 X 가속 성분, Y 가속 성분, Z 가속 성분입니다. g는 로컬 지구 중력 상수입니다.

참고 문헌

버전 내역

R2023b에 개발됨

참고 항목

| |