ROS 강좌 120 WebCamera 매개변수를 지정하여 시작합니다.
환경
이 기사는 다음 환경에서 작동합니다.
품목
값
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를 지정합니다. 위의 출력을 보면 형식은 YUYV
와 MJPG
하지만 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.rulesSUBSYSTEMS=="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 강좌의 목차에 대한 링크
Reference
이 문제에 관하여(ROS 강좌 120 WebCamera 매개변수를 지정하여 시작합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/srs/items/69210692d7f3f56ccfc8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
마지막으로 웹캠을
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를 지정합니다. 위의 출력을 보면 형식은 YUYV
와 MJPG
하지만 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.rulesSUBSYSTEMS=="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 강좌의 목차에 대한 링크
Reference
이 문제에 관하여(ROS 강좌 120 WebCamera 매개변수를 지정하여 시작합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/srs/items/69210692d7f3f56ccfc8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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 카메라를 찔린 상태에서
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 강좌의 목차에 대한 링크
Reference
이 문제에 관하여(ROS 강좌 120 WebCamera 매개변수를 지정하여 시작합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/srs/items/69210692d7f3f56ccfc8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
cd ~/catkin_ws
catkin_make
실행
참고
libuvc_camera
목차 페이지 링크
ROS 강좌의 목차에 대한 링크
Reference
이 문제에 관하여(ROS 강좌 120 WebCamera 매개변수를 지정하여 시작합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/srs/items/69210692d7f3f56ccfc8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
libuvc_camera
목차 페이지 링크
ROS 강좌의 목차에 대한 링크
Reference
이 문제에 관하여(ROS 강좌 120 WebCamera 매개변수를 지정하여 시작합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/srs/items/69210692d7f3f56ccfc8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(ROS 강좌 120 WebCamera 매개변수를 지정하여 시작합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/srs/items/69210692d7f3f56ccfc8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)