본문으로 건너뛰기

M09.03 · 카메라·깊이·LiDAR·IMU 센서 구성

단위별 목표·권장 선수와 자료 준비 상태를 확인하고, 공개된 본문과 활동을 읽고 준비 상태를 확인할 수 있습니다.

전체 커리큘럼

학습 안내

본문을 읽고 장비 없는 기본 실습·세 확인 문제와 해설로 이해를 확인하세요.

예상 학습 시간: 미정. 이 페이지 방문이나 자료 열람으로 완료·숙달을 자동 부여하지 않습니다.

현재 경로·이전·다음 단위 확인 ↓

학습 목표

  • 센서별 관측량과 system·장착/frame·단위/주기·노이즈/범위의 구성 계약을 설명한다.
  • 합성 camera/depth의 점/거리와 LiDAR 좌표·원시 영상 데이터량을 계산한다.
  • 설정과 실제 표본의 시각/유효성·공분산/IMU 해석을 구분해 구간별 검증/실패 진단을 설계한다.

아래 설명·실습·문제로 각 학습 목표를 확인하세요.

권장 선수

M03의 센서, M05의 ROS와 M08 모델·M09.01/02를 연결한다. optical depth/range·scan 각도와 IMU specific force를 본문에서 보충한다. 기준은 Jazzy/Harmonic이며 기본은 합성 설정/표본의 종이 계산이다. 실제 렌더링/Gazebo·센서/ROS 실행은 하지 않는다. 이미 알고 있다면 직접 열어볼 수 있습니다.

설명 필수

세 목표에 대응하는 검수된 설명·예제를 읽습니다.

어떤 값을 어느 좌표와 시각으로 얻는지 적는다

같은 로봇에 센서를 달아도 센서 이름만으로 입력이 완성되지 않는다. parent link와 장착 pose, 관측 frame과 취득 시각, 형식/단위·주기, 유효 범위와 노이즈를 함께 정한다. 카메라는 영상의 색/밝기 표본, 깊이 센서는 광학 거리 정보, LiDAR는 정한 광선 방향의 거리 표본을 만든다. IMU는 각속도와 가속도계에 해당하는 관측을 제공하며 방향 필드의 출처/기준도 확인한다.

설정 파일의 센서와 실행 중 센서를 갱신하는 system, Gazebo Transport 출력과 ROS 변환 경로는 다른 구성이다. Harmonic 센서 문서는 IMU system과 렌더링 센서 system의 예를 구분한다. 예를 들어 gpu_lidar 예제는 Sensors system의 렌더 엔진 설정을 사용한다. sensor 태그/GUI 표시만 있고 필요한 시스템이 없으면 기대한 자료를 얻지 못할 수 있다. 기본 활동은 이 구성을 읽는 것이며 GPU/시뮬레이터를 실행했다고 하지 않는다.

SDFormat의 sensor 정의에서 type, pose와 topic, update_rate 같은 항목을 확인한다. 지원 type과 실제 backend/센서별 지원 항목은 버전에 맞춰 검토한다. 이 모듈은 Harmonic을 기준으로 하고 Classic의 plugin/태그를 그대로 복사하지 않는다. 모델 자산/장착/센서·bridge의 정확한 버전도 기록한다.

camera link와 optical frame을 구별한다

로봇의 link frame은 x 전방/y 왼쪽/z 위를 사용할 수 있지만 camera optical frame은 x 오른쪽/y 아래/z 전방 규약을 사용한다. 둘의 이름만 바꿔도 좌표가 회전되는 것은 아니다. bridge의 header frame_id를 덮어쓴다고 표본 값의 기하가 올바르게 변환되었다고 가정하지 않는다. 장착 변환과 렌더링/메시지의 실제 좌표 규약을 확인한다.

왜곡 보정된 pinhole 영상에서 fx/fy는 pixel 단위 초점 거리, cx/cy는 주점, u/v는 관측 pixel 위치다. 이 내부 파라미터를 K라고 부른다. depth Z는 optical z축 성분(m)으로 주어진다고 가정하며 광선 방향의 range와 다르다. 점 좌표는 다음과 같다.

X=(u−cx)Z/fx,Y=(v−cy)Z/fy,pC=(X,Y,Z).X=(u-c_x)Z/f_x,\qquad Y=(v-c_y)Z/f_y,\qquad p_C=(X,Y,Z).

fx=fy=400, cx=320/cy=240, u=400/v=240, Z=2 m면 X=0.4/Y=0이라 p_C=(0.4,0,2) m다. 광선 range는 sqrt(0.4²+2²)≈2.0396 m다. Z와 range를 바꾸어 쓰면 역투영 위치가 달라진다. 해상도/crop·왜곡/실제 K가 바뀌면 이 식에 옛 값을 그대로 쓰지 않는다. 한 점의 깊이가 물체의 전체 자세나 파지 가능성을 의미하지도 않는다.

원시 자료 크기는 형식과 복사/주기를 포함한다

합성 RGB 영상이 640×480, pixel당 uint8 3성분이고 행 padding/압축이 없다고 하자. 한 장은 640×480×3=921,600 byte다. 10 Hz에서 원시 payload는 9,216,000 byte/s=9.216 MB/s다. 여기의 MB는 100만 byte다. float32 한 성분의 같은 크기 depth 영상은 한 장 1,228,800 byte·10 Hz에서 12.288 MB/s다. 둘의 원시 합은 21.504 MB/s다.

실제 메시지 header/행 stride와 전송 오버헤드, 압축/복사·큐/시간창은 별도다. uint16 depth를 쓰면 단위 scale/무효 코드와 성분당 byte가 다르므로 float32 표를 그대로 적용하지 않는다. 색 채널/배열 shape와 실제 소비하는 전처리 출력도 따로 기록한다. 토픽의 이름만 image라고 입력 계약을 확정할 수 없다.

update_rate=10 Hz의 목표 모형 간격은 0.1 s다. M09.01의 고정 physics step이 1 ms라면 100 step에 해당하지만 렌더/발행/전송·소비 시점은 별도다. 설정 주기와 실제 stamp 간격·수신 지연/관측 나이를 나누어 확인한다. pause 중 남은 마지막 영상은 새 취득 표본이 아니다.

LiDAR는 각도와 거리의 짝이다

평면 scan frame을 x 전방/y 왼쪽/z 위로 정한다. θ_i는 +x에서 +y 방향으로 재는 i번째 광선 각도(rad), r_i는 그 광선의 range(m)다. 이번 합성 scan은 같은 순간에 얻은 세 유효 광선이며 motion distortion과 수직 scan은 제외한다.

xi=ricos⁡θi,yi=risin⁡θi.x_i=r_i\cos\theta_i,\qquad y_i=r_i\sin\theta_i.

각도 −π/4, 0, +π/4에 range가 각각 √2, 2, √2 m라면 점은 (1,−1),(2,0),(1,1) m다. 세 값이 모두 2 m인 것처럼 처리하거나 왼쪽/오른쪽 순서를 바꾸면 장애물 형상이 달라진다. 실제 메시지의 각도 시작/증분·개수와 frame, 취득/scan 시간도 확인한다. samples와 resolution 설정의 조합이 실제 배열 길이에 어떻게 반영되는지도 대상 센서 문서/출력으로 검증한다.

최소/최대 range 바깥이나 비유한 값·no-return은 해당 센서/형식의 규칙에 따라 유효 mask와 분리한다. no-return을 무조건 원점의 장애물이나 관측한 빈 공간으로 바꾸지 않는다. 얇은 물체/가림과 반사·렌더링 모형의 한계가 있을 수 있다. 범위/노이즈를 이상적으로 설정했다고 실제 LiDAR의 모든 오류를 재현한 것은 아니다.

IMU의 가속도와 중력·공분산을 해석한다

가속도계의 specific force는 중력과 운동이 연결된 관측이다. 세계 중력이 g_W=(0,0,−9.81) m/s², 센서가 세계와 정렬되어 정지한 이상 예에서는 운동 가속도 0에서 중력을 뺀 z 관측이 +9.81 m/s²가 된다. 센서가 기울면 중력 성분도 다른 축으로 섞인다. 모든 자세에서 z에 9.81을 단순히 빼는 방식은 맞지 않으며 방향/변환과 바이어스·노이즈를 함께 고려한다.

gz-sensors 8의 ImuSensor 구현은 sensor frame으로 변환한 중력의 기여와 노이즈 처리를 보여 준다. 자유낙하 이상 예처럼 운동 가속도가 중력과 같으면 specific force가 0일 수 있으므로 관측 0을 곧바로 정지로 읽지 않는다. 방향 필드도 시뮬레이터 상태에서 만든 값인지 실제 추정기의 결과인지 구분한다. IMU만으로 모든 운동/중력을 완벽히 분리한 것은 아니다.

Jazzy sensor_msgs/Imu 정의는 가속도 m/s²·각속도 rad/s와 공분산 규약을 명시한다. 전부 0인 공분산은 모른다는 뜻으로 해석하고, 특정 추정이 없을 때 첫 공분산 원소 −1의 규약을 확인한다. noise=0이라는 합성 설정과 실제 센서의 완벽한 정확성을 동일시하지 않는다. 노이즈 표준편차와 분산·바이어스와 반복 잡음도 나누어 기록한다.

구성/표본/소비를 한 구간씩 확인한다

센서가 보이지 않으면 먼저 model/link와 sensor type/pose, 필요한 system/렌더 엔진과 실제 Gazebo topic을 조사한다. Gazebo 표본은 있는데 ROS에 없으면 bridge의 형식/방향·이름/QoS를 확인한다. 둘 다 있어도 잘못된 frame/단위·encoding과 오래된 stamp라면 소비 알고리즘의 입력으로 유효하지 않을 수 있다. 설정 하나로 원인을 단정하지 않고 관측된 구간과 미상을 구분한다.

기존 4.1 카메라 모델과 4.4 타임스탬프를 연결해 기하/시간을 확인하자. 아래 계산의 통과는 Gazebo 실행이나 실물 센서 검증의 성과가 아니다.

학습 범위와 한계

기본 설명·예제가 준비되었습니다. 기존 보충 자료의 범위와 구별하세요.

실습 필수

장비 없는 실습을 수행하고 관찰·계산 근거를 해설과 비교합니다.

입력은 본문의 K/pixel/depth, RGB/depth 형식·10 Hz와 세 scan, 정렬/정지 IMU 이상 예다. 추가 로그는 10 Hz 설정에서 stamp가 0/0.1/0.3 s이고 Gazebo 수신은 있으나 ROS 수신은 미상이다.

  1. 센서별 직접 관측량과 장착/frame·단위/주기·system/bridge 및 IMU의 이상 예를 설명하는 계약 표를 작성한다.
  2. camera 점/range와 원시 byte/s, 세 LiDAR 좌표를 계산하고 형식/동시 취득 가정을 적는다.
  3. 실제 stamp 간격·유효값/공분산·좌표와 구간별 증거를 확인할 검증/오류 진단을 설계한다.

관찰은 구성/의미, 숫자/가정, 표본/증거로 나눈다. 막히면 camera optical과 scan frame을 따로 그리고 byte/성분·주기를 다른 열에 적는다. 실제 센서/설치는 필요하지 않다.

0 / 8,000자 · 확인하면 이 브라우저에 저장

답안을 작성하고 확인하기를 한 번 선택하면 해설·판정 기준을 열어볼 수 있습니다.

학습 범위와 한계

기본 실습은 장비 없이 수행합니다. 실제 장비·GPU 실증을 완료했다는 뜻은 아닙니다.

평가·해설 필수

목표별 세 서술문항에 답하고 해설·판정 기준으로 자기검토합니다.

확인 문제 Q1

카메라 frame_id를 optical 이름으로 바꾸고 IMU z=+9.81을 받았다. 좌표 변환과 이동 가속도가 확인되었는가? 센서/장착·정지/중력·규약을 설명하라.

0 / 8,000자 · 확인하면 이 브라우저에 저장

답안을 작성하고 확인하기를 한 번 선택하면 해설·판정 기준을 열어볼 수 있습니다.

확인 문제 Q2

같은 K에서 u=320/v=280/Z=1 m면 점/range는 무엇인가? 별도 scan θ=π/2/r=2 m의 평면 좌표도 구하라.

0 / 8,000자 · 확인하면 이 브라우저에 저장

답안을 작성하고 확인하기를 한 번 선택하면 해설·판정 기준을 열어볼 수 있습니다.

확인 문제 Q3

센서 update_rate가 10 Hz/noise가 0이고 공분산도 모두 0이다. ROS에 마지막 표본이 남아 있다. 실제 센서 정확도/새 관측을 보장하는가? 필요한 시간/유효성·경로 검증을 적어라.

0 / 8,000자 · 확인하면 이 브라우저에 저장

답안을 작성하고 확인하기를 한 번 선택하면 해설·판정 기준을 열어볼 수 있습니다.

학습 범위와 한계

서술답안과 해설이 준비되었습니다. 자기검토와 학습 완료는 숙달 인증과 별개입니다.

참고 자료

학습 확인

실습과 세 문항의 답안을 해설과 비교한 뒤, 이 단위의 학습 완료를 직접 기록할 수 있습니다. 자기검토·학습 완료는 자동 채점이나 숙달 인증과 별개입니다.

실습1개·확인 문제3개의 답안을 저장하고 각각 자기검토를 기록하세요.

학습 이동

학습 단계 순서 · 공통 과정 이후 전문화 선택

전체 목차로 돌아가기 →

신규 활동의 답안은 이 브라우저의 통합 학습 기록에 저장합니다. 기존 화면의 답안·진도는 원래 키를 유지합니다. AI 강사는 현재 단위의 준비 상태·부족한 범위와 연결된 실제 자료를 참고합니다.