본문 바로가기
Sensor/Sensor fusion

[Sensor fusion] ros환경 LiDAR와 Camera calibration - 1

by Gnaseel 2020. 11. 9.
728x90
반응형

gnaseel.tistory.com/44?category=0

 

[Sensor fusion] Camera - Lidar 퓨전

이전에 카메라와 라이다를 연동하여 진행하던 포스트가 있었는데, 알고있는 지식의 양이 너무 한정적이기 때문에 제대로 설명할 수 없었다. 그 후 스스로의 부족함을 카메라와 라이다를 퓨전하

gnaseel.tistory.com

위 최신 링크가 더 이론적이며 유용함.

 

-----------------------------------------------------------

 

센서퓨전을 공부하다보니 앞으로 내가 연구할 분야라면 개발경험을 쌓는 것도 좋은 경험이 될것 같았고, 았

오랜만에 코딩하며 개발하고 싶어서 센서퓨전에 관한 프로젝트를 진행하기로 결정했다.

라이다와 카메라를 퓨전해서 물체를 인식하는 전반적인 과정에 대한 프로젝트가 될것이다.

 

목표

1. 카메라, 라이다에서 각각 모델을 만든 후 하나의 모델로 퓨전

2. 실제 도로를 주행하며 실시간으로 주변 객체들을 Tracking

 

개발 환경

LiDAR - Velodyne

Camera - 스펙 미정

OS - Ubuntu 18.04 & ROS melodic

 

개발 순서

1. Camera, LiDAR Calibration

2. Object Instantiate + Classification data (Camera)

3. Object Instantiate + Dimension, Distance data (LiDAR)

4. Model Fusion

5. Experiment

6. Conclusion

 

 

 

 

3D라이다와 카메라를 퓨전하려면 우선 센서를 calibration하는 작업이 필요하다.

Calibration을 간단하게 설명하자면 서로의 좌표계를 맞추는 행위이다.

 

 

우리는 저 행렬 H를 구해야한다

라이다는 3차원 데이터를 출력해주고, 카메라는 프로젝션된 2차원 데이터를 출력해주기 때문에 서로의 좌표계를 일치시켜줘야 서로가 출력한 모델을 연관시킬 수 있다.

 

직관적으로 설명하자면, 라이다에서 x,y,z에 위치한 객체에 대해서 모델을 만들었을 때 이 모델은 카메라에서 u,v에 위치할 것이다.

이 때 A=(x,y,z)와 B=(u,v)사이의 관계를 파악하는 것, 즉 A와 B사이의 행렬변환을 구하는 것이다.

빨간색의 포인트 군집이 검정색 포인트 군집이 되기위해 어떤 변환을 거쳐야 하는가?

이 변환 H는 회전변환R과 평행이동 t로 이루어져있다.

 

위 식은 일반적으로 현실의 물체가 카메라 이미지의 어느 위치에 사영되는지 구하기 위해 사용되는 수식이다.

3차원의 물체가 2차원으로 변하는 과정이라고 생각하면 쉽다.

 

f와 v는 각각 카메라의 초점과 주점으로, 카메라 내부에서 이미 정해져있는 상수값이고 우리가 얻어야하는 값은 회전변환 R과 평행이동 t이다.

 

이 때 R과 t를 구하는 방법은 여러가지가 있다.

머신러닝을 활용할 수도 있고, 각종 최적화 함수를 사용할 수도 있지만 가장 간편한 방법은 Singular value decomposition(특이값분해)를 사용하는 것이다.

 

 

우리의 작업을 더 쉽게 설명하자면 3차원 좌표를 사영시킨 후 2차원 좌표로 만들어 기존의 2차원 좌표와 비교하는 작업이다.

 

첫 번째 식은 사영시킨 좌표(Pi)를  변환한 후 기존좌표(Pi')과의 오차를 구하는 수식이다.

저 E값을 최소로 하는게 우리의 목표다.

 

이 때 가장 큰 문제는 2개의 변수(R, t)를 풀기위한 식이 1개라는 것인데, 그것은 SVD를 통해 해결할 수 있다.

두 좌표군을 곱연산한 후 SVD하면 U,Σ,V를 구할 수 있는데 이 때 V와 U의 전치행렬을 곱연산한 행렬이 R이 된다.

증명논문 링크

 

A method for registration of 3-D shapes - IEEE Journals & Magazine

 

ieeexplore.ieee.org

벡터집단을 근사시키는 R과 t를 구하는 이 문제는 Orthogonal procrust problem이라고 불린다.

위 논문은 인용수 19850의 바이블같은 논문이니 읽어보면 매우 도움이 많이된다.

 

자 그렇다면 위 이론들을 실제로 적용해보자.

 

센서들의 모습이 담기진 않았지만, 라이다 위에 카메라를 얹어서 동시에 촬영했다.

여담이지만 검은색 판자를 공중에 띄워놓는게 너무 힘들었다. 스카치 테이프로 돌돌말았는데, 메달곳이 없어서 위층 난간에서부터 테이프를 풀며 늘어뜨렸다.

 

이제 우리는 라이다에 잡힌 저 사각형을 사영시킨 후 카메라의 사각형으로 바꿔주는 행렬을 구해야한다.

우선 각각의 센서로부터 코너값을 찾아보자.

 

해리스코너 원본

해리스코너 검출기로 코너를 구했다.

 

 

 

 

 

 

 

 

 

 

 

 

코너가 너무 많이 구해져서 크롭필터로 적당히 정리한 후 남아있는값을 출력했다.

 

 

 

 

 

 

 

 

 

 

카메라에서 4개의 좌표를 구할 수 있었다. 이제 라이다에서도 같은 작업을 반복한 후, SVD를 통해서 R과 t를 구하면 된다.

 

하지만 나는 큰 문제에 봉착했다.

 

 

라이다가 가지고있는 고질적인 해상도 문제때문에 위 사진같은 데이터가 얻어졌기 때문이다.

위 데이터에서는 point의 최대 최소 값들이 코너를 의미하지 않기 때문에 데이터를 그대로 사용할 수 없다.

 

그래서 이 문제를 해결하기 위해 여러 논문을 뒤져봤는데, 직육면체에서 RANSAC을 반복하며 7개의 꼭지점을 찾거나,

삼각형을 통해서 코너를 구한다고 한다.

 

삼각형은 위 빨간색처럼 해상도가 낮아도, 라인과 라인사이의 감소폭을 통해서 변의 기울기를 알 수 있고, 두 변이 곧게 뻗었을 때 겹치는 부분을 코너로 예측할 수 있다.

 

 

정확한 데이터를 사용해서 실험에 응해야하지만, 저 파라미터값은 나중에 얼마든지 다시 세팅을 할 수 있으므로 나중에 삼각형을 통해서 다시 진행하기로 하고 우선 변환행렬을 구한 후 다음 작업을 진행할 계획이다.

 

행렬의 계산은 다음 포스트에서 진행하고, 그 다음 포스트부터는 camera 를 통한 Object Classification을 진행하겠다.

아직 구체적인 아키텍처는 정하지 않았지만 yolo v4를 사용할 것 같다.

반응형

'Sensor > Sensor fusion' 카테고리의 다른 글

[Sensor fusion] Camera - Lidar 퓨전  (13) 2021.03.23