카메라 온보드 ExposureAuto/GainAuto가 항상 풀프레임을 측광해서 하늘이
있으면 바닥이 어두워지는 문제(camera_exposure_design_notes.md 4절)를
풀기 위해 hik_camera_node.cpp에 4가지 기능을 추가했다.
- gain_auto: 기존에는 GainAuto가 코드에서 항상 강제 Off였는데, 이제
온보드 Continuous 자동 게인을 켤 수 있음
- use_software_ae + ae_roi_top_ratio: SDK에 측광 전용 ROI 노드가 없어
(캡처 크롭용 AOI만 있음, 확인 완료) 온보드 auto를 끄고 프레임 하단
일부만 퍼센타일로 측광해 ExposureTime/Gain을 직접 계산해 적용
- 우선순위: 밝게 할 땐 노출을 상한까지 먼저 늘리고 그다음에만 게인
사용, 어둡게 할 땐 반대로 게인을 먼저 줄이는 순서를 명시적으로 구현
(게인은 노이즈 비용이 있어 항상 마지막 수단)
- sync_role(master/slave) + ae_exposure_time_us/ae_gain_db 토픽: 가운데
카메라를 master로 지정하면 그 카메라의 실제 적용 노출/게인(SDK가
매 프레임 주는 값)을 나머지 slave 카메라들이 그대로 따라가도록 함
새 파라미터는 전부 기본값이 기존 동작을 유지하도록 해서 기존 배포
설정과 하위호환된다. package.xml에 std_msgs 의존성 추가, README에
전체 파라미터 설명 반영. 로봇 PC에서 colcon build 검증 필요 — 특히
AutoGainLowerLimit/AutoGainUpperLimit 노드명은 기존 Exposure 쪽과
같은 명명 규칙일 것으로 가정하고 썼을 뿐 실기기로 확인된 값은 아님.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
1차 현장 테스트(f/5.6, Auto Exposure/Gain) 결과 실내에서 이미지가 밝게
나오는 문제를 확인, 조리개·초점 조절 작업을 위해 3대(cam1/2/3) 모두
exposure_auto를 false로 바꾸고 노출/게인을 수동 고정값으로 전환했다.
화이트밸런스도 조리개/초점 조절 중 색 보정이 판단을 방해하지 않도록
balance_ratio R/G/B를 1024(중립)로 꺼 두었다. 기존 cam1-cam2 겹침
기준 값은 주석으로 남겨 나중에 3대 겹침 매칭을 다시 잡을 때 참조한다.
.gitignore에 .obsidian/ 추가 (doc/ 폴더를 Obsidian vault로 여는 로컬
설정 파일이 저장소에 섞여 들어가는 것을 방지).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Design notes for multi-camera + LiDAR SLAM exposure tuning, plus a
question/answer pair that verifies the notes' assumptions (gain ceiling,
lens sweet spot, blur budget, 12-bit raw capture) against the actual
MV-CS016-10UC camera and VM0420MP5 lens datasheets and the driver source.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Hikvision MV-CS016-10UC ROS2 driver used for the dual/triple camera rig:
hardware-triggered acquisition, per-camera exposure/gain/white-balance
params, and self-calibrating device-clock timestamping (anchored to the
shared LiDAR/GPS clock domain via /timeshare) to keep image timestamps
tightly synced across cameras during motion. Includes the vendored
Hikvision MVS SDK (hikSDK/) needed to build.