본문 바로가기

Jetson/Jetson ROS

[Jetson ROS] 5-2. ROS에서 Basler 카메라 사용하기 (2)

 이전 포스트에서 Basler카메라의 설치방법을 올렸었다. 이번 포스트에서는 rosservice명령어를 통해 몇가지 영상 설정을 변경하는 방법을 설명하고자 한다.

 

 rosservice는 ros 내에서 subscribe되고 있는 메시지에 대하여 다른 노드에서 보내는 것이 아닌 터미널에서 사용자가 직접 메세지를 보내는 방법이라고 생각하면 좋을 것이다.

 우선 아래의 명령어를 통해 rosservice로 사용 가능한 메세지들을 확인해 보면 다음과 같다

 

rosservice list

 

 이 명령어 중 카메라에 따라, 혹은 api에서 호환이 안되는 명령어들이 있는데 이는 사용자가 직접 확인해 보는것이 좋을 것이다. 각 요소에 대한 내용을 https://github.com/basler/pylon-ros-camera를 참고해 보는것을 추천한다.

 

 rosservice를 통해 메세지를 보내는 방법은 아래의 코드와 같다.

 

rosservice call /pylon_camera_node/[설정요소] "세부설정내용: '설정값'"

//예시
rosservice call /pylon_camera_node/set_image_encoding “value: ‘mono8’”

 

윗줄은 기본적인 form이며 아랫줄은 set_image_encoding에 대한 예시이다. 

 

필자가 사용해서 확인해본 예시를 몇가지 정리해 보겠다.

 

set_roi : ROI는 range of interest의 약자로 원하는 부분에 대해서만 보겠다 라고 생각하면 편할 것이다. 

원하는 지점을 설정하기 위해 x-y위치와 영상위치에 대한 너비와 높이를 입력하도록 되어 있다.

 

rosservice call /pylon_camera_node/set_roi “target_roi: {x_offset: 0, y_offset: 0 height: 3288, width: 4608, do_rectify: False}”

 

 주의할 점이라면 카메라의 최대 픽셀의 수보다 offset 및 너비/높이의 값의 합이 클 경우 당연히 카메라 측정범위 값을 넘어서기 때문에 문제가 생길수 있다는 점이다. rectify의 경우 사진에 대한 교정의 데이터로 보이나 True로 변경시 계속 에러가 발생해 정확한 사용은 알기 어려웠다.

 

 

set_image_encoding : 화면 인코딩 방식이다. 기본 흑백 화면을 RGB 등으로 바꿀수도 있다. 필자의 경우 mono8 / bayer_bggr8 / bayer_bggr16 이 세 수치에 대해서만 작동함을 확인했지만 카메라에 따라 달라질 수 있는듯 하다.

rosservice call /pylon_camera_node/set_image_encoding ‘bayer_bggr8’ 
rosservice call /pylon_camera_node/set_image_encoding ‘mono8’

 

set_gamma : 화면의 명도 보정이다. 기본 1값으로 되어 있으며 0~3.999 까지의 값이 작동하는 것을 확인했다.

rosservice call /pylon_camera_node/set_gamma “value: 1.0” 

 

 

 필자가 사용해본 모든 요소들에 대하여 추가해보려 했으나 사실상 의미가 없다고 판단해 여기까지만 작성하도록 했다.   값의 입력 방식은 위의 예시에서 명령어만 바꾸면 되며 명령어에 대해선 카메라마다 작동하는 명령어가 다르고 명령어에 대하여 설명하자니 프로그램 내용보단 영상에 대한 자료가 될것 같아 의미가 없을 것이다. 

 

사용 목적에 따라 원하는 명령어를 찾아 직접 변경해보는 것이 좋을 것이다.