ROS에서 Basler카메라를 사용하는 방법을 정리하고자한다.
단 이 포스트의 경우 OpenCV를 설치하여 구동하고자 하다 실패한 뒤 Basler API를 통해 구현한 자료이다.
OpenCV 설치 없이 Basler API가 먹히는지는 따로 시도해보지 않았으나 아마 높은 확률로 구동되지 않을것이다. 따라서 이전 시도에서 설치했던 OpenCV관련 내용은 추가 하겠으나 이중 일부는 설치할 필요가 없는 내용일 것임은 확인해야 할 것이다.
OpenCV 설치하기
OpenCV는 Open Source Computer Vision의 약자로 인텔에서 개발한 영상관련 프로그래밍 라이브러리이다.
윈도우 리눅스 등 환경에서 사용이 가능하며 Tensorflow, Pytorch등 다양한 딥러닝 툴에도 지원이 가능한 툴이다.
Balser카메라 이외에도 다양한 카메라를 다른 어플리케이션에서 사용할 수 있도록 해주는 툴로 널리 사용되고 있다.
아래의 명령어는 ros내에서 OpenCV를 통해 usb 카메라를 사용하기 위한 패키지들을 다운받는 명령어인데 Basler 카메라가 usb로 연결이 가능하나 usb 카메라로 인식이 안되고 있기 때문에 실패했다. 하지만 뒤에서 사용할 API가 OpenCV를 사용하기에 설치는 필요하다. (아마 usb-cam 패키지는 필요가 없을 듯 하나 일단은 설치하도록 했다)
sudo apt-get install ros-melodic-opencv*
sudo apt-get install ros-melodic-usb-cam
sudo apt-get install ros-melodic-cv-bridge
sudo apt-get install ros-melodic-cv-camera
원래는 이상태로 usb 카메라 관련 예제를 실행하려 했으나 실패했고 이후 Balser에서 직접 제공하는 API를 발견해 이를 사용하고자 했다.
Basler 카메라 API 설치하기
우선 API에 대한 정보는 여기서 확인할 수 있다. https://github.com/basler/pylon-ros-camera
API의 설치는 아래를 통해 할 수 있는데
cs
git clone https://github.com/basler/pylon-ros-camera
sudo sh -c 'echo "yaml https://raw.githubusercontent.com/basler/pylon-ros-camera/master/pylon_camera/rosdep/pylon_sdk.yaml" > /etc/ros/rosdep/sources.list.d/30-pylon_camera.list’
rosdep update
sudo rosdep install --from-paths . --ignore-src --rosdistro=$ROS_DISTRO -y
cd ~/catkin_ws && catkin_make clean && catkin_make && source ~/.bashrc
명령어에 대하여 간단하게 설명하자면
cs는 ros 설치 포스트에서 설정한 단축 명령어로 /catkin_ws/src로 진입하는 명령어이며
git clone은 git에 올라온 설치파일들을 가져오는 명령어이다. pylon-ros-camera는 우리가 설치할 API가 올라온 github경로이다.
그 다음은 pylon API를 source내에 추가하는 명령어이며 rosdep을 통해 업데이트 해줄 수 있으며 그 뒤 명령어는 종속성(dependencies)를 추가해주는 코드이다.
마지막 줄은 빌드하는 코드인데 이때 높은 확률로 에러가 발생할 것이다.
에러의 발생 내용은 요약하면 OpenCV의 경로문제인데 이는 대부분 OpenCV의 버전에 따라 OpenCV경로의 이름이 다르기 때문이다. 이를 해결하는 방법을 설명하겠다.
우선 에러의 내용을 잘 읽어봐야한다. 필자의 경우 'image geometry'에 대한 error가 발생했는데 이를 예시로 들면
pkg-config --modversion opencv
까지만 입력한 뒤 tab을 연타해 opencv의 버전을 확인한다.
필자의 경우 opencv의 버전이 4버전으로 경로가 opencv4 폴더 내에 생성되어 있는데 opencv 폴더 내의 경로를 찾기에 에러가 발생한 것으로 보인다.
이때 opencv의 경로를 찾기 위해 아래의 코드를 입력하면 경로를 정확히 알 수 있는데 이 코드를 그대로 따라하지 말고 위에서 얻은 경로의 이름으로 변경해 적용하자.
pkg-config --cflags opencv4
코드를 입력한 결과는 위와 같을것인데, 이를 통해 경로를 확인할 수 있다.
이후 아래를 통해 문제가 된 부분의 cmake파일에 진입한 뒤 경로를 수정해 주면 된다.
cd /opt/ros/melodic/share/image_geometry/cmake
sudo gedit image_geometryConfig.cmake
파일의 내용이 매우 긴데 해당부분을 찾아 바꾸어 주어야 한다. 필자의 경우 단순히 opencv를 opencv4로만 바꾸어 주면 되는 경우였다.
이후 아래의 코드를 통해 source를 업데이트 해주고 다시 cm을 진행하면 된다.
source ~/.bashrc
이 error는 한가지 요소에만 생기는 것이 아닌 여러 요소에 생길 수 있다.
cm 진행 이후 'image_geometry'의 문제는 해결되었으나 다른 요소에 대하여 문제가 발생할 수 있는데 그렇다면 위에서 해당 요소로만 바꾸어 내용을 반복하면 된다. 필자의 경우 opencv 설치 이후에 3개 정도의 요소에 대하여 문제가 발생했으며 API설치 이후 2개의 문제가 발생했던것으로 기억한다. 물론 모두 위의 작업을 동일하게 진행하여 해결했다.
cm을 통해 문제가 발생하지 않았다면 제대로 설치가 되었나 확인을 해주어야 한다.
roslaunch pylon_camera pylon_camera_node.launch
위의 코드를 통해 카메라 api node를 실행할 수 있다.
물론 카메라 실행 후 터미널에 글씨만 출력되기에 카메라 작동 자체는 확인하기 어렵다.
카메라 작동의 확인은 rqt를 통해 쉽게 확인할 수 있는데
다른 터미널 창을 열러 rqt를 입력하고 rqt창의 상단에서 RQT Plugin --> Visualization --> image view를 추가하고 pylon_camera_node/image_raw를 선택해 확인할 수 있다.
카메라를 통해 화면을 찍은 모습이다. 이를 통해 카메라의 작동 자체는 확인할 수 있었다.
기본 출력이 흑백이라 이런식으로 출력이 되기는 하는데 이를 원하는대로 설정하는 방법은 다음 포스트에서 설명하겠다.
'Jetson > Jetson ROS' 카테고리의 다른 글
[Jetson ROS] 5-2. ROS에서 Basler 카메라 사용하기 (2) (0) | 2021.01.03 |
---|---|
[Jetson ROS] 4. ROS에서 python3 사용하기 (0) | 2021.01.03 |
[Jetson ROS] 3. ROS package (0) | 2020.12.23 |
[Jetson ROS] 2. ROS catkin workspace (0) | 2020.12.23 |
[Jetson ROS] 1. ROS 설치 및 초기 설정 (0) | 2020.12.19 |