주제 정보
- 유형: 자율주행 센서 캘리브레이션 툴박스 + 논문 — 이 블로그가 다루지 않았던 마지막 기초 계층. 카메라·라이다·IMU·레이다의 내부(intrinsic)·외부(extrinsic) 파라미터를 수동/자동/공장/온라인 4개 경로로 맞추는 오픈소스 모음
- 저장소: PJLab-ADG/SensorsCalibration (도구 이름 OpenCalib) — ⭐3,229 · 🍴705 · watcher 48 · 열린 이슈 145
- 소속/저자: Autonomous Driving Group, Shanghai AI Laboratory(상하이 AI 연구소) — Guohang Yan · Zhuochun Liu · Chengjie Wang · Chunlei Shi · Pengjin Wei · Xinyu Cai · Tao Ma 외 (총 13인, Yikang Li 지도)
- 라이선스/언어: Apache-2.0(LICENSE 파일 확인 — 상업적 사용 가능) · C++ · 저장소 468MB(예제 데이터 포함) · 태그 v0.1 / v0.2
- 활동: 생성 2021-12-09 · 최근 커밋 2024-06-17("modify the pcl version in lidar2camera") → 2024년 중반 이후 정적. GitHub Release는 없고 태그만 존재
- 논문: OpenCalib: A Multi-sensor Calibration Toolbox for Autonomous Driving — arXiv 2205.14087 (2022-05-27, v2 05-30, 16페이지·31개 그림, cs.RO·cs.CV) · 게재: Software Impacts 2022 (DOI 10.1016/j.simpa.2022.100393)
- 인용: Semantic Scholar 97회(영향력 있는 인용 5회) · Crossref 게재본 집계 74회 — 두 수치를 함께 표기한다
- 후속 논문(같은 저장소에 코드 포함): SensorX2car(2023 — 센서↔차체 좌표계 정렬) · 서라운드 카메라 자동 캘리브레이션(2023)
- 실행: Docker 이미지
scllovewkf/opencalib:v1하나로 바로 실행 (의존성: OpenCV 2.4 · Eigen 3 · PCL 1.9 · Pangolin)
핵심 내용
자율주행 스택에서 캘리브레이션은 가장 화려하지 않지만 가장 먼저 오는 단계다. 카메라 내부 파라미터가 틀리면 왜곡이 남고, 라이다↔카메라 외부 파라미터가 0.5도만 어긋나도 점군이 이미지에서 밀려 깊이 추정·박스 위치·BEV 격자가 전부 어긋난다. 논문의 표현대로 캘리브레이션은 "모든 자율 시스템과 그 센서들의 기반 블록(foundation block)"이며, 센서 융합을 하기 위한 전제 조건이다. OpenCalib은 이 전제를 한 저장소에서 4개 시나리오로 전부 제공한 최초의 통합 툴박스다.
- ① 수동(Manual) 도구 — 도로 현장에서 타깃 없이: 라이다 점군을 이미지에 투영해 두고 키보드로 6자유도(x·y·z 회전 / x·y·z 이동)를 조정하는 GUI를 제공한다. 지원: lidar2camera · lidar2lidar · lidar2imu · radar2camera · radar2lidar. 논문은 "특징이 뚜렷한 도로 장면(나무·표지판)일수록 결과가 좋다"고 한계까지 명시한다
- ② 자동(Automatic) 도구 — 타깃 없는(target-less) 정렬: lidar2camera / lidar2lidar / lidar2imu / surround-camera는 수동·자동 두 방식을 모두 제공하지만, 레이다 계열(radar2camera·radar2lidar)은 수동만 제공한다 — 툴박스의 커버리지가 균일하지 않다는 점이 README 표에 그대로 드러난다
- ③ 공장(Factory) 캘리브레이션 — 차량 생산 라인의 마지막 공정: 사륜 정렬 후 캘리브레이션 보드로 센서 간 자세를 계산한다. 보드 6종(체커보드 · 원형 · 수직 · AprilTag · ArUco · round-hole)을 지원하고, 라운드홀 보드는 카메라와 라이다를 동시에 잡는 패턴이다. 인식 프로그램에서 OpenCV 의존성을 제거해 다양한 환경에서 인식률을 높였다
- 결합 목적함수(논문의 실제 수식): 보드 기반 정련에서는 체커보드 코너 재투영 오차 Jboard와 라이다 홀 중심 재투영 오차 Jlidar를 α=1, β=60으로 가중 합산한다 — 체커보드 코너 수가 홀 수보다 훨씬 많아, 라이다-이미지 정렬 쪽 가중치를 60배로 키워 두 손실함수의 균형을 맞춘다
- ④ 온라인(Online) 캘리브레이션 — 주행 중 자동: 손에 보드를 들고 다니는 오프라인 방식 대신, 시스템 시작 시점이나 주행 중에 맞춘다. 제공 조합: camera2imu · lidar2imu · radar2carcenter (예: 라이다2IMU 도구는 기본 10초 구간부터 최대 60초까지 사용)
- SensorX2car — '센서 → 차체 좌표계'라는 별도 문제: 기존 연구는 센서끼리(sensor-to-sensor) 정렬에 집중했지만, 실제 차량은 센서와 차량 좌표계 자체가 어긋나 있다. 센서별 고유 단서(영상 특징 · 3D 라이다 점군 · GNSS/INS가 푼 pose · 레이다 속도)로 주행 중 수 분 내 회전을 맞추며, 카메라·라이다·GNSS/INS·밀리파 레이다 4종을 지원한다 — 논문은 이를 "최초의 오픈소스 센서→차체 캘리브레이션 툴박스"라고 주장한다
- 카메라 내부 파라미터 & 왜곡의 '정량' 평가: 렌즈마다 왜곡 정도가 달라 정성적 눈검사로는 부족하다는 문제의식에서, Tang의 calibration harp 방식(JOSA A 2012)을 자동화한 왜곡 측정 프로그램을 포함한다 — 보정 전/후 샘플 점을 비교해 숫자로 평가한다
- 벤치마크와 정직한 버전 표기: 캘리브레이션 성능을 정량 평가하려고 CARLA 기반 합성 데이터셋(정답 자세를 알 수 있음)을 도입했고, 논문은 공개 코드가 v0.1 버전이며 "앞으로 더 많은 SOTA 캘리브레이션 알고리즘을 추가하겠다"고 밝혔다
왜 유명한가 / 활용 가치
- ⭐3,229 — 이 블로그가 다룬 저장소 중 최상위권이면서 카테고리는 완전히 비어 있었다: 지금까지 49편의 자율주행 글에서 인지·예측·계획·시뮬레이터·데이터셋은 반복해 다뤘지만 캘리브레이션은 한 번도 없다(본문 검색 'calib' 0건). 즉 스택의 가장 아래층이 비어 있었다는 뜻이고, 그 자리의 사실상 표준이 이 저장소다
- 업계 실무의 '기본 툴박스'로 쓰인다: 자체 캘리브레이션 파이프라인을 만들 때 참조 구현으로 쓰이고, Docker 이미지(`scllovewkf/opencalib:v1`)로 배포돼 재현 장벽이 낮다. 수동 GUI·자동 알고리즘·공장 라인 도구·온라인 도구를 한 곳에 모은 프로젝트는 지금도 드물다
- 모든 인지·융합 모델의 '입력'을 만든다: BEVFormer·DETR3D·VoxelNet·CenterPoint는 카메라·라이다 외부 파라미터를 주어진 상수로 받는다. 그 상수가 틀리면 모델 성능이 아니라 측정 자체가 틀린 것이고, 정확도 하락 원인을 모델 탓으로 오진하게 된다. 데이터셋 논문(nuScenes·KITTI·Waymo Open Dataset)이 늘 캘리브레이션 품질을 함께 보고하는 이유다
- 라벨이 '학술 전용'이 아닌 Apache-2.0: 자율주행 연구 저장소는 학술 전용 라이선스가 흔하다(예: OpenCOOD/OPV2V는 UCLA Academic Software License). OpenCalib의 코드는 Apache-2.0이라 상업적 활용·사내 파이프라인 이식이 가능하다
- 시뮬레이터·협력주행 글과 이어진다: 벤치마크를 CARLA 합성 데이터로 만들었다는 점, 그리고 V2X 쪽에서 차량 간 좌표계 정렬이 필요하다는 문제는 OpenCOOD/OPV2V의 협력 인지와 정확히 같은 뿌리를 공유한다
- 한계(정직하게): ① 2024-06-17 이후 커밋 정지 — '활발한 유지보수'라고 쓰면 틀린다. 연구용 완결형 레퍼런스로 읽어야 한다 ② 레이다 계열은 수동 보정만 제공 ③ OpenCV 2.4·PCL 1.9 등 빌드 의존성이 오래돼 최신 환경에서는 Docker가 사실상 필수 ④ 문서가 영문·중문 혼재 ⑤ 릴리스 대신 태그(v0.1/v0.2)만 관리
시사점 및 결론
인식 모델의 정확도는 논문 표에서 0.1 mAP 단위로 경쟁하지만, 그 숫자가 성립하는 조건은 "센서가 올바른 좌표계에 있다"는 조용한 가정이다. OpenCalib은 그 가정을 코드·보드 패턴·목적함수·온라인 알고리즘으로 분해해 공개했다 — 자율주행 스택을 위에서 아래로 읽을 때 가장 먼저 만나야 하는 문서인데, 정작 논문 인용은 97회(Crossref 74회)로 인지 모델들에 비해 매우 작다. 기여도와 인용 수가 어긋나는 대표적 영역이다.
실무적으로 주는 교훈은 세 가지다. 첫째, 새 데이터셋·센서 조합을 받으면 먼저 캘리브레이션을 의심하라 — 성능이 안 나올 때 모델을 바꾸기 전에 확인할 항목이 외부 파라미터다. 둘째, 온라인 캘리브레이션은 선택이 아니라 요구사항이 되어간다 — 진동·온도·충격으로 자세는 주행 중 변하며, SensorX2car가 겨냥하는 '센서-차체 어긋남'은 정비·교체 후 매번 생기는 현실 문제다. 셋째, 이 분야의 남은 과제는 정량 평가다. 정답 자세를 아는 합성 데이터(CARLA)와 왜곡 정량 측정 같은 장치가 있어야 캘리브레이션 알고리즘끼리 비교가 가능해진다.
이 블로그의 자율주행 시리즈가 인지 → 예측 → 계획 → 시뮬레이션 → 데이터셋 → 안전(RSS) → 보안(적대적 공격) → 시나리오 표준(OpenSCENARIO) 순으로 넓혀온 끝에, 오늘은 가장 아래층인 센서 정렬을 채웠다. 위층의 논문을 읽을 때마다 "이 결과의 전제가 되는 캘리브레이션은 누가, 어떻게 보장했는가"를 한 줄 덧붙이는 습관 — 그것이 이 글의 실용적 결론이다.
원문: https://github.com/PJLab-ADG/SensorsCalibration · 논문: arXiv:2205.14087 (Software Impacts 2022, DOI 10.1016/j.simpa.2022.100393) · 차체 정렬: SensorX2car (arXiv:2301.07279) · 서라운드 카메라: arXiv:2305.16840
목록으로 돌아가기