일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 강화학습
- blackfly
- ubuntu
- AI Olympics 러닝
- AI올림픽
- message_filters
- AI olympic
- cuDNN
- sensor fusion
- ros2 docker
- s24
- docker
- 강화학습프로젝트
- Ros
- 메시지필터
- 갤럭시s24
- lidar-camera
- 센서퓨전
- IJCAI-ECAI
- 자율주행카메라
- 블랙플라이
- AI Olympics 레슬링
- ubuntu22.04
- Humble
- ROS2
- foxy
- 센서데이터
- 자율주행
- AMZ
- PPO알고리즘
- Today
- Total
나름 공부하는 일상
일단 시도해 보는 카메라-라이다 센서퓨전 #2 본문
해당 포스팅에서는 3D 바운딩 박스를 만들기 위한 LiDAR 전처리 코드에 대한 간략한 설명과 카메라 캘리브레이션에 대한 내용이 있습니다.
[환경]
ros: ros2 foxy
ubuntu: ubuntu20.04
[이전 글]
2024.02.07 - [IT 개발/카메라-라이다 센서퓨전이 하고 싶다] - 일단 시도해 보는 카메라-라이다 센서퓨전 #1
4. LiDAR 코드(lidar_pre.cpp)
해당 코드에서는 우리가 경험적으로 찾은 값을 통해 LiDAR가 러버콘과 유사한 크기 객체를 찾아 하나의 클러스터로 만들고 클러스터를 최대로 감쌀 수 있는 바운딩 박스를 만드는 과정을 수행한다. 내 블로그에 자주 나오는 우디 친구의 깃허브를 보면 위 코드에 대해 알아볼 수 있다. 링크는 다음과 같다. [lidar_pre.cpp 링크]
5. 지옥의 캘리브레이션
4번 과정에서 찾은 바운딩 박스를 2D 픽셀 좌표로 변환하기에 앞서 카메라 내부/외부 파라미터, 캘리브레이션이라는 용어와 친해질 필요가 있다.....
아래 그림으로는 잘 모르겠지만, 3차원 P의 좌표는 이미지에 투영되기 위해 다양한 요인에 영향을 받아 2D 좌표로 변환된다. 다양한 요인에는 카메라 자체에 있을 수도 있고 외부적인 요인이 있을 수도 있다. 카메라 자체의 요인인 내부요인에는 초점거리, 주점, 비대칭 계수와 같은 요소가 있으며, 외부요인에는 예를 들어 카메라와 라이다 사이의 회전 정도, 틀어진 정도, 등과 같은 요인이 있다. 만일 위에서 말한 요인들에 해당하는 모든 값들을 알 수 있다면, 아마 2D-3D, 3D-2D변환 모두가 가능할 것으로 보인다.
계속해서 아래 변환식을 보면, 3차원 정보에 두 개의 행렬을 곱했더니 2차원 값이 되는 것을 확인할 수 있다. 이때 각각의 행렬은 내부파라미터에 관한 값, 외부파라미터에 관한 값을 나타내고 있다. 이를 통해 우리는 아래 2개의 파라미터 값만 찾을 수 있다면 라이다의 좌표를 픽셀 좌표로 변환할 수 있다는 사실을 알 수 있다.
여기까지의 가정을 통해 우리는 어떻게 내부/외부 파라미터를 효과적으로 찾을 수 있을까 고민하였고, Matlab을 이용하기로 했다.
그리고 참고로 위의 모든 내용은 아래 다크프로그래머님 블로그에 나와있으니 자세한 내용은 아래에서 보길 추천한다.
https://darkpgmr.tistory.com/32
카메라 캘리브레이션 (Camera Calibration)
카메라 캘리브레이션 (camera calibration)은 영상처리, 컴퓨터 비전 분야에서 번거롭지만 꼭 필요한 과정중의 하나입니다. 본 포스팅에서는 카메라 캘리브레이션의 개념, 카메라 내부 파라미터, 외
darkpgmr.tistory.com
6. 내/외부 파라미터 찾기(with Matlab)
내부/외부 파라미터를 찾기 위해 캘리브레이션을 진행해야 하는데, 이를 위해서는 아래처럼 생긴 체커보드가 필요하다. 정말 체커보드 관련해서도 일화가 많다.. 종이 체커보드, 스티로폼 체커보드, 나무 체커보드, 철판 체커보드에 이르기까지 여러 번의 시도 끝에 역시 비싼 철판 체커보드가 가장 높은 정확도를 보여줬고, 체커보드에는 돈을 아끼면 안 된다는 사실을 알게 되었다.
내부 파라미터 찾기
먼저 내부 파라미터를 찾기위해 체커보드가 찍힌 이미지가 필요하다.
[권고사항]
- 이미지 해상도는 본인이 앞으로 사용할 해상도를 정해 사용하는 것이 좋다.
- 체커보드를 이미지 구석구석에 배치해야 더 나은 결괏값을 얻을 수 있다.
Step1. 먼저 내부 파라미터를 찾기 위해 아래 Matlab에서 Camera Calibrator 앱을 실행한다.
Step2. 이후 Camera Calibrator 앱에서 Add Images를 통해 체커보드와 함께 있는 사진들을 추가한다.
Step3. 현재 가지고 있는 체커보드에 대한 정보를 입력하고 Ok를 누른다.
Step4. 우측의 Reprojection Error를 보며 특정 이미지가 너무 높은 값을 가지고 있다면 없애주고 Calibrate를 진행해 준다.
Step5. Calibration 결과 내보내기
Step6. Workspace에서 Calibration 결과 확인하기. 결과에서 주목할만한 값은 방사왜곡에 해당하는 RadialDistortion값과 내부 파라미터 행렬과 같은 형태를 지닌 K값이다.
[내부파라미터 최종]
위 6단계를 거쳐 아래의 값들을 도출해 낼 수 있고, 테스트용 이미지라 값이 정확하진 않지만 내부 파라미터에 해당하는 값과 K값의 형태가 같음을 알 수 있다. 추가로 방사왜곡값인 RadialDistortion의 경우 OpenCV의 함수를 통해 보정할 수 있다.
외부 파라미터 찾기
외부 파라미터도 내부파라미터를 구한 것처럼 구하면 된다. (혹시나 궁금한 사항이 있다면 댓글로 남겨주세요)
https://kr.mathworks.com/help/lidar/ug/get-started-lidar-camera-calibrator.html
Get Started with Lidar Camera Calibrator - MATLAB & Simulink - MathWorks 한국
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다. 명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
kr.mathworks.com
[2024.07.08 추가]
https://github.com/koepm/save_jpg_pcd.git
GitHub - koepm/save_jpg_pcd
Contribute to koepm/save_jpg_pcd development by creating an account on GitHub.
github.com
위 코드를 이용해서 jpg와 pcd 파일을 캡처할 수 있습니다.
파라미터 찾기 결론
위 과정을 거쳐 찾아진 내/외부 파라미터를 변환식에 맞게 곱해주면 끝!
사실 외부 파라미터를 찾을 때, 새로운 패키지 하나를 만들었다. 이름하여 "save_jpg_pcd"!
해당 패키지를 통해 카메라와 라이다 데이터를 동기화하여 동시에 저장하였고, 아마 이 같은 과정들이 합쳐서 더 나은 결괏값을 도출할 수 있었던 것 같다. 암튼 변환식을 적용한 코드는 또 우디 친구 깃허브에서 확인할 수 있다. [lidar-camera-calibration]
다음 글
2024.02.07 - [IT 개발/카메라-라이다 센서퓨전이 하고 싶다] - 일단 시도해 보는 카메라-라이다 센서퓨전 #3
일단 시도해보는 카메라-라이다 센서퓨전 #3
해당 포스팅에서는 카메라 문제와 데이터 동기화 문제의 해결 과정을 포함하고 있습니다. [환경] ros: ros2 foxy ubuntu: ubuntu20.04 [이전 글] 2024.02.07 - [IT 개발/카메라-라이다 센서퓨전이 하고 싶다] -
narmstudy.tistory.com
'IT 개발 > 센서 데이터 다루기' 카테고리의 다른 글
일단 시도해 보는 카메라-라이다 센서퓨전 #3 (24) | 2024.02.07 |
---|---|
일단 시도해 보는 카메라-라이다 센서퓨전 #1 (1) | 2024.02.07 |
Velodyne LiDAR를 살짝 기울여 보자 (1) | 2024.02.06 |
ROS2에서 FLIR BlackFly S 카메라 사용하기 #2 (1) | 2024.01.13 |
ROS2에서 FLIR BlackFly S 카메라 사용하기 #1 (0) | 2024.01.13 |