ROS 학습 40탄: USB 카메라

#프로그래밍 ROS<USB 카메라>


개시하다


두 번째 참고서에 따르면 ROS(Robot Operating System)를 더 파악하기 위한 것이다.

컨디션


컴퓨터.
디바이스
raspberry pi 4 Model B
메모리
3.7 GiB
Graphics
V3D 4.2
OS
Ubuntu
Ubuntu
발포
20.4.2 LTE 64비트
내부 핵
Linux 5.4.0-1035-raspi aarch64
MATE
1.24.0
ROS
Distribution
noetic
USB 카메라
제조사
Buffalo
시리즈
BSWHD06M

필요한 드라이버 설치


USB 카메라로 포획된 'usb cam' 노드와 포획된 이미지를 표시하는 '이미지 뷰' 노드로 필요한 드라이버입니다.
install
sudo apt install ros-noetic-usb-cam
sudo apt install ros-noetic-image-view

노드 시작


우선 여러 노드 간에 데이터를 교환해야 하기 때문에 주 노드를 시작해야 한다.
mater 시작
roscore
usb-cam
rosrun usb_cam usb_cam_node
이 노드에서 카메라 포트 할당 기본값은 /dev/video0입니다.
usb-cam(포트 변경)
rosrun usb_cam usb_cam_node _video_device:=/dev/video1
또한raspberrypi에 USB 카메라만 설치된 경우/dev/video0이기 때문에 이 조작이 필요하지 않습니다.
/dev/video 탐색
ls /dev/video*
0 대신 와일드카드(*)를 사용하면 여러 비디오 포트가 있을 때 확인할 수 있습니다.
  • USB 카메라 연결 전
  • USB 카메라 연결 후
  • /dev/video0은 USB 카메라에 사용할 수 있을 것 같은데, 왜/dev/video1도 나오는지, 카메라 기능이 없는 상태에서/dev/video10이 존재하는지 이해할 수 없습니다.
    그리고 포획 이미지를 표시하는 노드를 시작합니다
    image-view
    rosrun image_view image_view image:=/usb_cam/image_raw
    
    이미지-view에서 어떤 포획 이미지를 표시할지 지정해야 합니다. 여기에서 하는 일은 다음과 같습니다: usb-cam에서 포획한 원시 데이터 (이미지) 는 usb-cam-node에서 보내고 이미지-view는 이 배포된 데이터를 구독하고 표시합니다.

    노드 매개변수 설정


    usb-cam, 이미지-view에 여러 개의 매개 변수가 존재하여 상세하게 지정할 수 있습니다. 이 매개 변수는 launch 파일을 사용하여 간단하게 지정할 수 있습니다. 다음은 이 launch 파일을 나타냅니다. 또한 각 매개 변수에 대한 설명은 launch 파일의 주석 형식으로 나타냅니다.
    usb_cam.launch
    <launch>
        <!-- usb_acmノードを実行する -->
        <node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen">
            <!-- カメラの指定 defaultは/dev/video0 -->
            <param name="video_device" value="/dev/video0"/>
            <!-- 画像の大きさ(横幅)の指定 -->
            <param name="image_width" value="640"/>
            <!-- 画像の大きさ(縦幅)の指定 -->
            <param name="image_height" value="480"/>
            <!-- 画像フォーマット設定 "mjpeg" or "yuyv" or "uyvy" -->
            <param name="pixel_format" value="mjpeg"/>
            <!-- fpsの指定 frame per second -->
            <param name="framerate" value="30"/>
            <!-- コントラストの設定(色設1) -->
            <param name="contrast" value="32"/>
            <!-- 明るさの設定(色設2) -->
            <param name="brightness" value="32"/>
            <!-- 彩度の設定(色設3) -->
            <param name="saturation" value="32"/>
            <!-- 自動フォーカス機能の設定 ブール値 -->
            <param name="autofocus" value="true"/>
            <!-- フォーカス位置の設定 -->
            <param name="focus" value="51"/>
        </node>
    
        <!-- image_viewノードを実行する -->
        <node name="image_view" pkg="image_view" type="image_view" respawn="false" output="screen">
            <!-- image_viewのimageトピックがimage_rawトピックをサブスクライブするように指定 -->
            <remap from="image" to="/usb_cam/image_raw"/>
            <!-- 画像の縦横比を自動で判定して表示 ブール値 -->
            <param name="autosize" value="true"/>
        </node>
    </launch>
    

    실행 결과


    no launch



    그림 창 뒤에서 조금 보이지만 터미널 (터미널) 은roscore,usb-입니다.cam_node, image_view_세 개의 노드를 이동하고 있습니다.

    launch



    터미널을 움직일 수 있고 미세한 변화를 할 수 있습니다. 여기서 대비도가 약간 큰 그림을 얻을 수 있습니다.

    감상


    한 마디로 하면 저는 ROS에서 카메라를 어떻게 사용하는지 배웠습니다. 이렇게 하면 ROS에서도 현실 세계의 이미지를 얻을 수 있습니다. OpenCV 등을 응용함으로써 이미지 처리도 가능하고 ROS의 가능성도 더욱 확대되었습니다.

    참고 문헌


    실용 로봇을 개발하기 위한 ROS 프로그래밍
    서전건, 삼전현, 강전호지, 원상요,
    나가사키 공준, 전향권, 담내양평, 대천일도,
    재등공
    삼북출판주식회사 발행

    좋은 웹페이지 즐겨찾기