ROS 강좌 120 WebCamera 매개변수를 지정하여 시작합니다.

7454 단어 webcamROS

환경



이 기사는 다음 환경에서 작동합니다.


품목



CPU
Core i5-8250U

우분투
18.04

ROS
Melodic

웹캠
BSW200MBK


설치에 대한 자세한 내용은 ROS 강좌02 설치을 참조하십시오.
또한이 기사의 프로그램은 github에 업로드되었습니다. ROS 강좌 11 git 저장소을 참조하십시오.

개요



마지막으로 웹캠을 uvc_camera를 사용하여 시작했지만 이번에는 카메라의 성능을 발휘하기 위해 자세한 매개 변수를 지정하여 시작합니다.

uvc_camera 문제



uvc_camera 에서는 디폴트의 포맷으로 밖에 기동할 수 없습니다. 예를 들어 이번에 사용하는 웹캠 페이지를 보면 아래와 같이 30fps가 나온다고 쓰고 있습니다.



그러나 roslaunch cam_lecture cam_view.launch 로 시작한 image 토픽의 레이트를 rostopic hz /image_raw 로 조사해 보면 15Hz 정도밖에 나오지 않습니다. 이것은 드라이버 등의 소프트의 성능이 나쁜 것이 아니라 설정의 문제입니다.
USB 카메라를 연결하고 v4l2-ctl --list-formats-ext를 실행하면 다음과 같은 출력이 됩니다.

위 명령의 결과
ioctl: VIDIOC_ENUM_FMT
    Index       : 0
    Type        : Video Capture
    Pixel Format: 'YUYV'
    Name        : YUYV 4:2:2
        Size: Discrete 640x480
            Interval: Discrete 0.033s (30.000 fps)
        Size: Discrete 160x120
            Interval: Discrete 0.033s (30.000 fps)
        Size: Discrete 176x144
            Interval: Discrete 0.033s (30.000 fps)
        Size: Discrete 320x240
            Interval: Discrete 0.033s (30.000 fps)
        Size: Discrete 352x288
            Interval: Discrete 0.033s (30.000 fps)
        Size: Discrete 800x600
            Interval: Discrete 0.100s (10.000 fps)
        Size: Discrete 1280x720
            Interval: Discrete 0.125s (8.000 fps)
        Size: Discrete 1920x1080
            Interval: Discrete 0.200s (5.000 fps)

    Index       : 1
    Type        : Video Capture
    Pixel Format: 'MJPG' (compressed)
    Name        : Motion-JPEG
        Size: Discrete 640x480
            Interval: Discrete 0.033s (30.000 fps)
        Size: Discrete 160x120
            Interval: Discrete 0.033s (30.000 fps)
        Size: Discrete 176x144
            Interval: Discrete 0.033s (30.000 fps)
        Size: Discrete 320x240
            Interval: Discrete 0.033s (30.000 fps)
        Size: Discrete 352x288
            Interval: Discrete 0.033s (30.000 fps)
        Size: Discrete 800x600
            Interval: Discrete 0.033s (30.000 fps)
        Size: Discrete 1280x720
            Interval: Discrete 0.033s (30.000 fps)
        Size: Discrete 1920x1080
            Interval: Discrete 0.033s (30.000 fps)

USB 웹캠(UVC: USB Video Camera)에서 데이터를 추출할 때에는 format과 size를 지정합니다. 위의 출력을 보면 형식은 YUYVMJPG 하지만 size는 640x480 , 160x120 , 176x144 대응하고 있습니다. 반대로 다른 크기를 지정하여 웹캠을 시작할 수 없습니다.
또한 각 format과 size 쌍 뒤에 최대 Hz가 적혀 있습니다. 화상의 사이즈가 크면 데이터 사이즈가 커져 Hz가 나오지 않게 되어 버립니다. 위의 launch에서는 디폴트 설정으로 format은 YUYV로 siz는 640x480이 되어 있습니다.웹캠으로서는 30Hz가 나오는 것 같습니다만, 하나 위의 800x600이 10fps인 것을 보면 전송 용량이 빠듯한 것입니다. YUYV는 원시 형식이므로 전송 용량이 커집니다.
더 높은 Hz를 내기 위해서는 format을 MJPG로 할 필요가 있습니다. 이러한 세세한 설정을 하려면 320x240 를 사용해야 합니다.

lubuvc_camera 사용법



기기 확인



USB 카메라를 찔린 상태에서 352x288를 실행하면 다음과 같은 표시가 가능합니다. 위에서 두 번째 줄은 USB 카메라를 나타냅니다. vender id는 0458, device id는 708c입니다.
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 005: ID 0458:708c KYE Systems Corp. (Mouse Systems) Genius WideCam F100
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

확실히 800x600 라고 하면(자) 파일이 있는 것을 알 수 있습니다. libusb_camera는 1280x720가 아니라 이쪽을 잡으러 가는데 일반 사용자라면 permission이 없습니다.
crw-rw-r-- 1 root root 189, 260 Jan 24 17:33 /dev/bus/usb/003/005
1920x1080 에서 해결하지만 매번 명령을 칠 필요가 나오므로 udev를 쓰고 자동으로 permission이 붙도록 합니다.

udev 묘사



udev 파일을 설명합니다. 파일을 새로 만듭니다. libuvc_camera 라는 파일로 다음과 같이 작성합니다.

99-uvc.rules
SUBSYSTEMS=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="0458", ATTRS{idProduct}=="708c", MODE="0666"
lsusb , ll /dev/bus/usb/003/005 의 값은 lsusb 로 얻은 것을 넣어 주세요. 파일을 작성한 후 USB를 꽂습니다.

libuvc_camera 실행



아래의 launch를 실행하면 이미지가 큰 사이즈에서도 rate가 나옵니다. width, height, rate가 /dev/video0 명령으로 나온 것과 달리 시작할 수 없습니다.

cam_lecture/launch/cam_view_libuvc.launch
<?xml version="1.0"?>
<launch>
  <node pkg="libuvc_camera" type="camera_node" name="mycam">
    <param name="width" value="1280"/>
    <param name="height" value="720"/>
    <param name="frame_rate" value="30"/>
    <param name="video_mode" value="mjpeg"/>
  </node>
  <node name="image_view" pkg="image_view" type="image_view" >
    <remap from="image" to="/image_raw"/>
  </node>
</launch>

소스 코드



빌드


cd ~/catkin_ws
catkin_make

실행



참고



libuvc_camera

목차 페이지 링크



ROS 강좌의 목차에 대한 링크

좋은 웹페이지 즐겨찾기