Commit Graph

8 Commits

Author SHA1 Message Date
Dongubak 0e98a96db2 자동 게인, ROI 제한 측광, 노출/게인 우선순위, 마스터-슬레이브 동기화에 이어
파라미터 조절 패널(hik_camera_panel) 패키지 추가

(이전 커밋 6eeb6a8 요약)
카메라 온보드 ExposureAuto/GainAuto가 항상 풀프레임을 측광해서 하늘이 있으면
바닥이 어두워지는 문제(camera_exposure_design_notes.md 4절)를 풀기 위해
hik_camera_node.cpp에 gain_auto(온보드 자동 게인), use_software_ae +
ae_roi_top_ratio(ROI 제한 소프트웨어 측광 — SDK에 측광 전용 ROI 노드가 없어
직접 구현), 노출 우선/게인 최후수단 순서, sync_role(master/slave) 기반
노출·게인 동기화를 추가했었다.

(이번 커밋 — 패널 기능 추가)
- hik_camera_node.cpp: dynamicParametersCallback()이 gain_auto_max_db,
  ae_roi_top_ratio, ae_target_percentile, ae_target_dn,
  ae_saturation_percentile, ae_saturation_dn, ae_step_gain을 런타임에도
  받아들이도록 확장했다. 기존엔 이 파라미터들이 시작 시에만 반영되고
  ros2 param set으로는 "Unknown parameter"로 거부되던 것을 고쳤다 — 패널에서
  슬라이더로 조절하려면 반드시 필요한 변경.
- 새 패키지 hik_camera_panel (ament_python, python_qt_binding 기반): cam1/cam2/
  cam3 탭으로 구성된 GUI. 노출/게인/ROI 등 파라미터를 슬라이더 또는 직접 숫자
  입력으로 실시간 조절할 수 있고, /<camera_name>/image를 구독해 ROI(측광 제외
  상단 비율) 경계선을 이미지 위에 오버레이로 보여준다. sync_role/
  sync_master_camera_ns는 노드 시작 시에만 반영되는 값이라 조회 전용으로 막아
  뒀다. 노출/노출상한/하한처럼 범위가 넓은(15us~100ms) 값은 슬라이더를 로그
  스케일로 매핑했다.

새 파라미터는 전부 기본값이 기존 동작을 유지하도록 해서 하위호환된다.
개발 PC(macOS)에는 ROS 2/python_qt_binding이 없어 문법 검사와 슬라이더↔값
변환 로직의 순수 파이썬 라운드트립 테스트만 돌려봤다 — 실제 rclpy 파라미터
서비스 호출, Qt 위젯 동작, 이미지 렌더링은 로봇 PC에서 검증 필요.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-17 00:04:03 +09:00
Dongubak 5a587b0149 cam2를 마스터, cam1/cam3를 슬레이브로 하는 노출·게인 동기화 설정, README 한글화
camera_params_cam1/2/3.yaml에 새로 추가된 sync_role/gain_auto/use_software_ae/
ae_* 파라미터를 실제로 채워넣었다. cam2(가운데)는 sync_role: "master"로 두고
게인 자동조절·소프트웨어 ROI 측광 관련 파라미터를 미리 선언해뒀다(조리개/초점이
아직 확정 전이라 gain_auto/use_software_ae 자체는 꺼둔 상태 — 값만 준비).
cam1/cam3는 sync_role: "slave" + sync_master_camera_ns: "cam2"만 추가했다
(슬레이브에서는 나머지 AE 파라미터가 무시되므로 넣지 않음). 이 상태만으로도
cam2의 실제 적용 노출/게인이 방송되어 3대가 항상 같은 값을 쓰게 된다.

README.md를 영어에서 한글로 전면 재작성하고, 마스터 off/on에 따라 슬레이브가
고정값을 쓰는지 실시간으로 추종하는지에 대한 동작 요약을 추가했다.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-17 00:03:42 +09:00
Dongubak 6eeb6a8297 자동 게인, ROI 제한 측광, 노출/게인 우선순위, 마스터-슬레이브 동기화 추가
카메라 온보드 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>
2026-08-16 23:32:29 +09:00
Dongubak 539a97f3b4 카메라 3대 노출/게인 수동 고정 및 화이트밸런스 오프로 재설정
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>
2026-08-16 23:32:09 +09:00
admin fcbfb987fa Merge pull request 'Add camera exposure design notes and Q&A grounded in actual hardware specs' (#1) from docs/camera-exposure-review into main
Reviewed-on: http://210.113.91.65:3000/gardentech/fori_camera_ws/pulls/1
2026-08-13 22:30:17 +09:00
Dongubak b1a38f36a3 Add camera exposure design notes and Q&A grounded in actual hardware specs
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>
2026-08-13 22:24:04 +09:00
hjkim b56d870658 Add hik_camera_ros2_driver (renamed from camera2_ws to fori_camera_ws)
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.
2026-08-07 14:27:24 +09:00
admin 6129d2537b Initial commit 2026-08-07 14:21:39 +09:00