한 시각에 모았다고 같은 종류의 값이 되지는 않는다
카메라 픽셀, LiDAR점, IMU각속도, 엔코더 증가량과 GNSS위치는 서로 다른 질문에 답한다. 정합은 이 자료를 비교/결합할 때 필요한 공간·시간·측정 의미를 맞추는 일이다. 융합은 그런 관측과 모델을 이용해 상태를 추정하는 일이다. 잘못된 축/단위의 값을 평균 내거나 공분산을 조정한다고 입력 계약이 맞아지지는 않는다.
M14.01에서 내부/외부 보정을 구분했다. 보정은 관계를 추정/검사하는 과정이며, 여기서는 제공된 보정값을 자료에 적용하고 유효성을 점검한다. 파일에 변환 숫자를 적는 것과 실제 장착 관계가 맞는다는 검증은 구분한다. 다음의 센서별 입력표부터 작성하면 어떤 양이 어떤 프레임/시각에 있는지 추적하기 쉽다.
| 센서 | 직접 읽는 양의 예 | 먼저 확인할 계약 |
|---|---|---|
| 카메라 | 영상/특징의 픽셀 | 해상도·raw/정렬·내부행렬·노출시각 |
| LiDAR | 센서좌표의 공간점 | 길이단위·축·유효값·스캔/점별시각 |
| IMU | 각속도·가속도·제공된다면 자세 | 센서축·단위·중력/기준방향·보정/미제공표시 |
| 엔코더 | 카운트/회전 증가량 | 축/기어비·부호·시각간격·유효값 |
| GNSS | 경위도·높이·품질 | 지리기준·degree/m·안테나위치·fix상태/공분산 |
모든 센서가 로봇 위치XYZ를 직접 측정하는 것은 아니다. IMU자세나 wheel odometry처럼 드라이버가 이미 가공한 값은 원시관측·모델·오차 원천도 함께 확인한다. 같은 원자료에서 나온 위치와 속도를 독립 센서 두 개처럼 취급하면 정보가 중복될 수 있다.
변환 방향을 고정한 뒤 공간점만 영상에 투영한다
카메라optical을 C, LiDAR프레임을 L이라 하자. 변환은 p_C=R_CL p_L+t_CL로 정의한다. R_CL은L축으로 적은 벡터를C축으로 표현하고, t_CL은L원점의C좌표다. 실제 LiDAR가body축이라면 optical축으로의 회전도 포함해야 한다. 이름만 camera로 바꾸거나 카메라 내부행렬K를 공간 회전처럼 쓰지 않는다.
손계산에서는 두 프레임이 모두x오른쪽/y아래/z앞인 평행축이라고 명시한다. R_CL=I, t_CL=(0.1,0,0)m다. p_L=(0.4,0.2,2)m라면 p_C=(0.5,0.2,2)m다. 카메라의 f_x=f_y=400px, 주점(320,240)px인 왜곡 없는 영상에서 u=400×0.5/2+320=420px, v=400×0.2/2+240=280px다. 입력점과 변환 이동이 모두m이므로 단위도 맞는다.
이번 카메라의 전방점 조건은 Z_C>0이다. Z_C=0은 투영의 나눗셈을 할 수 없고 음수는전방조건밖이다. 실제영상에서는 u/v가영상범위안인지, 관측시각/가림과 해당표면의대응이맞는지도확인한다. 투영좌표가안에있다고카메라가그점을봤다는보장은없다. 앞물체가가렸을수도있다.
t_CL의 부호를 반대로 넣으면 x_C=0.3m가 되어 u380px가 나온다. 같은K인데40px가 달라진다. 외부변환의 방향을 고치기 전에 K를 임의로 조정해 겹쳐 보이게 하면 원인을 숨길 수 있다. 전/후방·거리와 영상영역이 다른 독립 대응에서 함께 검사한다. 여기의 투영은 합성값이며 실제보정정확도실험이 아니다.
정적 장착 관계와 관측 시각은 별도다
카메라-LiDAR가 단단히 고정되어 있으면 두 센서 사이의 외부변환은 정적으로 둘 수 있다. 로봇과world의 관계는 움직임에 따라 변한다. 다른 시각의 자료를world로 옮길 때는 각 취득시각의 로봇자세가 필요하다. 최신TF가 존재한다는 사실과 해당시각의TF가 유효하다는 사실도 구분한다.
같은 시계로 보정된 카메라 취득시각10.000초와 LiDAR취득시각10.050초라면 차이는0.050초다. 단순히 같은 방향의 상대 이동속도가2m/s로 일정하다면 그동안의 차이는0.10m다. 이 계산은 시간 불일치의 크기를 보여 주며 모든점의좌표에0.1m를더하라는보정알고리즘은아니다. 회전·움직이는물체·스캔내점별시각이있으면각자료의모형이필요하다.
수신시각이 가깝다고 취득시각이 같은 것은 아니고, 숫자가 비슷해도 다른 시계일 수 있다. 원래 타임스탬프·시계식별자·수신시각·변환개정과 유효범위를 보존한다. 가까운 메시지를 골랐다는 이유만으로 움직이는 점의동일시각정합을완료했다고쓰지않는다. 상세한시계보정·멀티레이트/보간은M14.03으로연결된다.
IMU의 축·중력·미제공 값을 읽는다
ROS Jazzy Imu 공식 정의는 각속도rad/s,가속도m/s²를 명시한다. 센서가degree/s나g로 내보낸다면 ROS자료로해석하기전에변환계약이필요하다. 센서장착회전은벡터의성분을바꾸며, 위치점을옮길때처럼가속도/각속도벡터에장착이동t를그대로더하지않는다.
예를 들어 IMU의+x축이base의+y축을 향하고 +y축이base의−x축을 향하는 z축90도장착이라면 IMU각속도(1,0,0)rad/s는base(0,1,0)rad/s다. 축변환없이x값1을그대로base회전속도라고읽으면다른회전이다. 자세는어느기준방향에대한orientation인지도필요하므로, 벡터세성분변환을그대로자세변환전체로일반화하지않는다.
가속도의 중력 포함/제거 여부와 관성/지리 방향 규약도 확인한다. 정지했다고 반드시모든가속도성분이0인것은아니다. 회전중에는센서부착위치가달라가속도가다를수도있다. robot_localization 저자 준비자료는 센서메시지/축/장착/부호와공분산의일관성을확인하도록안내한다. 특정패키지설정을무검증으로옮기기보다사용중인드라이버/메시지계약을대조한다.
Imu메시지에서 어떤추정의공분산첫원소−1은그추정이제공되지않음을표시한다. 공분산전체0은공분산미상이라는규약이다. 따라서orientation_covariance[0]=−1인orientation을정확한자세로사용하거나전체0을무오차센서로읽으면안된다. 상태/가용성검사와신뢰도모델은분리한다. 불확실성의축변환과가중치는M14.04에서이어다룬다.
엔코더는 바퀴 회전이고 GNSS는 안테나 위치다
반지름r=0.1m인바퀴가Δt=0.1초동안Δθ=0.2rad회전했다고하자. 이상적인구름가정의바퀴이동은s=rΔθ=0.02m,속도s/Δt=0.2m/s다. 카운트가주어졌다면회전당카운트·기어비·부호로각도부터환산한다. 두바퀴차량의base속도/회전은좌우바퀴와차량기하모델이필요하다. 이한바퀴속도를바로로봇world속도로부르지않는다. 슬립·들린바퀴·반지름오차도남는다.
ROS Jazzy NavSatFix 공식 정의는 경위도degree와WGS84타원체기준높이m를구분한다. 지리좌표를로컬Cartesian의m좌표와직접빼지않는다. 변환시지리기준/원점·축/높이기준을명시한다. 해당메시지의위치공분산은ENU성분이며frame_id만보고위경도값이그프레임의XYZ라고추정하면안된다. fix상태와고도NaN도확인한다.
안테나와base원점은다를수있다. 이미같은worldCartesian으로변환된안테나x가10m이고,base와world축이평행하며안테나가base보다+x방향0.5m에있다면base위치는9.5m다. 장착오프셋(lever arm)을생략하면안테나위치를로봇중심위치로오해한다. 로봇이회전하면오프셋도world로회전해빼야한다. 실제경위도변환을수행한예제가아니라제공된로컬좌표의장착점계산이다.
정합을 통과한 뒤에도 독립 정보인지 확인한다
센서별로 측정량/단위·축/방향·장착위치·취득시각과시계·보정개정·유효상태·공분산의의미를기록한다. 누락TF/시각범위밖변환·미제공추정·NaN이나오면원자료와제외이유를남긴다. 원점0이나최근값으로조용히대체해새관측처럼쓰지않는다. 유효한센서가적어진사실도기록한다.
서로다른센서라도같은IMU를이미사용한wheel/visual추정결과끼리는오차가상관될수있다. 불확실성을독립으로가정해다시결합하면확신만과해질수있다. 또한같은장면의픽셀겹침을맞춘자료와검사자료로함께쓰면독립검증이아니다. 정적/직진/회전,다른거리/영상영역등의기록을나누고어떤조건에서맞고어디서실패했는지비교한다.
기존응용교재4.2/4.3의좌표/TF파이프라인을읽을때이센서계약을함께적용한다. 이단위의계산이실제멀티센서보정·EKF융합·주행안전을검증한것은아니다. 다음M14.04는입력이맞다는가정아래관측모델/공분산으로상태를갱신하는문제를다룬다.