Extrinsic Calibration
- 카메라의 위치, 자세 추정
- 월드 좌표계 -> 카메라 좌표계, 카메라 좌표계 -> 월드 좌표계를 이해하기 위한 과정이다
- 카메라가 실제로 존재하는 3차원 공간에 대한 정보를 다룬다
- extrinsic calibration은 환경과 조건에 따라 목적과 방법이 달라진다
- 다양한 방법론을 배우고, 자신에게 주어진 환경에 맞는 고유한 방법을 찾아야한다
- computer vision을 활용한 자율주행 분야에서 extrinsic calibration 은 두 가지 활용 방법을 위해 extrinsic calibration을 수행한다
- sensor fusion을 위한 정보로 활용
- perception application을 위한 정보로 활용
자율주행 차량에서의 extrinsic calibration
- 자율주행 차량은 모든 정보를 자동차 좌표계에 정보를 통일한다
- 일반적으로 자동차 좌표계는 후륜 구동축의 중심 지면을 원점으로 한다
- 자율주행 차량에 장착되는 센서는 그 종류가 매우 다양하다
- 각 센서의 장착 위치가 다르고 사용하는 좌표계가 다르기 때문에 이를 통합하는 과정이 필요하다 (sensor fusion의 영역)
- 카메라 : 카메라 좌표계를 따른다
- LiDAR : LiDAR 좌표계를 따른다
- GPS, IMU : 각 센서의 좌표계를 따른다
- 따라서 vehicle coordinate를 기준으로 카메라의 장착 위치와 자세를 파악해야한다
- 카메라와 기준 자동차 좌표계 간의 관계를 extrinsic calibration이라고 한다
- 보드의 origin (0,0,0)에서부터 얻어낸 R, t vector는 해당 평면과 카메라의 관계를 의미한다
- 하지만 3차원 공간을 projection 하게 된다면 origin은 평면이기 때문에 3차원 공간에서 무수히 많은 R, t가 존재하게 된다
- 카메라가 존재 하는 공간은 3차원이기 때문에 extrinsic calibration의 origin을 보드로 설정하기 어렵다
- 따라서 objpoints의 origin을 어느 한 점으로 설정하고 카메라 calibration을 수행하면 해당 origin으로부터의 카메라 R vector, t vector를 얻을 수 있다
- 아래의 그림은 실제 extrinsic calibration 하는 과정이다
- origin을 후륜 구동축의 중심으로 설정한다
- objpoints인 (X,Y,Z)와 imgpoints인 (x, y)를 calibration하면 origin에 대한 카메라의 R, t vector를 구할 수 있다
- extrinsic은 R, t vector를 구하는 것이 가장 중요하다
extrinsic calibration 구현
- extrinsic calibration을 할 때 intrinsic matrix(체스보드를 원점으로 해서 계산)는 이미 알고 있는 경우가 많다
- cv.solvePnP() 함수 사용
- intrinsic matrix인 mtx, dist를 필요로 한다
retval, rvec, tvec = cv.solvePnP(objpoints, imgpoints, mtx, dist)
- PnP = Perspective-n-Point
multi calibration pattern 사용
- multi camera calibration의 경우 pattern들이 고정되어 있는 경우가 많다 (calibration room)
- calibration pattern 사이의 rvec, tvec를 계산해놓으면 카메라에서 촬영한 다수의 pattern들의 imagepoints로 카메라의 자세를 파악할 수 있다
- 즉, 카메라가 1번과의 R,t를 구하면 주변의 모든 pattern과의 관계를 알 수 있다
- 1번을 찍어서 추정한 주변의 결과 오차, 2번을 찍어서 추정한 주변의 결과 오차 등을 최소한 하는 R, t를 계산하면 미리 지정한 특정한 위치로의 R,t를 추정할 수 있다
mobileye
- mobileye와 같이 높이와 거리를 통해서도 응용이 가능하다
- 차량의 미드쉴드(차량의 전면 유히창의 중앙) 중심에 최대한 가깝고 상단에 카메라를 설치한다
- 차량의 모델에 따라 차량과 보드의 위치, 카메라의 위치가 달라진다
AURCO 마크 사용
- 다수의 calibration pattern 사용
- 패턴이 가지고 있는 고유의 ID가 다르다
- 각각의 패턴과의 Rt를 계산하여 사용한다
Sensor Fusion (camera-LiDAR calibration)
- 카메라
- 환경에 대한 2차원 이미지 데이터를 얻을 수 있어서 객체를 식별할 수 있다
- 깊이감, Z축이 소실되어 있다
- LiDAR
- X, Y, Z 값을 알 수 있다
- semantic 정보가 소실되어 있다
- 카메라 + LiDAR
- 카메라를 통해 객체를 찾고 LiDAR를 통해 정확한 x,y,z (depth)를 알 수 있다
- LiDAR에서 camera로 가는 R,t matrix를 구하는 것이 핵심이다
- LiDAR에 기준 좌표계가 있다고 가정한다
- 3D object point와 2D image point를 얻는 것이 중요하다
- 무수히 많은 방법이 존재한다
- 대표적으로 2가지 방법이 있다
- LiDAR는 가로선 형식으로 나타나기 때문에 직사각형 형식의 패턴은 LiDAR와의 높이를 알기 어렵다
- 따라서 원형, 마름모와 같은 패턴을 사용한다
방법1 (원) | 방법2 (마름모) |
---|
| |
- 구멍이 있는 calibration pattern을 사용하여 camera, LiDAR 모두 원을 찾아 objpoints와 imgpoints를 만드는 방법 | - LiDAR에서 마름모 shape의 꼭짓점을 검출하고 camera의 marker detection과 shape의 실제 크기 정보를 활용하는 방법 |
- LiDAR가 원을 통과하면 그 끝 좌표들이 나오는데 그 좌표들의 평균은 원의 중심을 의미한다 | - 마름모 박스의 꼭짓점을 통해 objpoints, imgpoints 쌍을 만든다 |
- LiDAR에서 구한 원의 중심과 camera에서 구한 원의 중심을 objpoints, imgpoints 쌍으로 만든다 | - LiDAR도 검은색, 흰색은 intensity로 구분할 수 있다 |
- 얻어낸 objpoints, imgpoints로 PnP를 풀면 LiDAR -> camera의 rvec, tvec를 계산할 수 있다
- LiDAR 데이터와 함께 projection하면 image 위에 LiDAR 데이터를 올릴 수 있다
- 단, 여기서 얻어낸 rvec, tvec를 가지고 이미지 데이터로 3차원 공간 정보를 복원할 수 없다
- camera - LiDAR calibration에서 중요한 점은 이미지 해상도와 겹침을 활용하여 불필요한 정보를 제거하는 것이다
- 해당 위치에 존재하는 LiDAR 데이터가 실제 image와 겹치는 영역이다
- 투영의 특성상 반대 방향의 데이터도 이미지 평면에 투영이 가능하기 때문에 LiDAR 데이터에서 걸러주는 것이 중요하다
- camera에서는 안보이지만 LiDAR에서는 보이는 데이터의 경우 iamge 영역에 잘못 투영될 수 있다
- camera에서 인식하고 있는 객체인지 확인하여 제거하는 것이 중요하다
- 예를 들면 거리가 가까운 것을 선택한다