본문 바로가기

쓰기

ROS(Robot Operating System) 개념과 활용
2015.08.09 00:56

ROS(Robot Operating System) 개념과 활용 - 7. USB 카메라 사용하기

조회 수 6775
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

 ROS는 여러 가지 이미지 관련 패키지를 제공하고 있습니다. 특히 OpenCV 연동 기능을 제공하기 때문에 다양한 영상 처리 알고리즘을 적용할 수 있다는 장점이 있습니다. 이미지와 영상을 얻기 위해서는 이미지를 얻는 센서가 필요한데, ROS가 주로 PC나 SBC 위에서 구동되기 때문에 USB 카메라를 이용하게 됩니다. 이번에는 USB 카메라와 관련 패키지를 이용해서 영상 데이터를 얻은 다음 이미지 출력 노드를 이용해 영상을 확인해 보도록 하겠습니다.


 카메라는 표준형 USB 카메라이면 전부 사용 가능합니다. 저는 연구실에 있던 로지텍 C920 웹캠을 사용하였습니다.


`logitech c920.jpg



Logitech C920 USB 웹캠


예전에 USB <-> UART 변환 모듈을 사용했을 때처럼 USB 카메라도 이미지 노드에게 카메라가 어떤 디바이스 파일로 연결되어 있는지 알려주어야 합니다. 카메라는 일반적인 USB 장치와 달리 video device로 바로 잡히기 때문에 다른 명령어를 써서 확인해야 합니다.


$ ls -ltr /dev/video*


제 경우에는 카메라가 /dev/video0로서 연결되어 있다고 출력되었습니다. 이 파일을 알아 두었다가 카메라 인터페이스 노드 parameter 설정 부분에 기입해 주시면 됩니다.


 인터페이스 패키지는 Bosch에서 제공하는 표준 USB 카메라 인터페이스 패키지인 usb_cam을 이용하였습니다. usb_cam 패키지의 usb_cam 노드는 이미지 정보를 sensor_msgs::image 타입으로 publish합니다. 우선 패키지를 ~/catkin_ws/src 디렉토리 아래에 다운로드 합니다. 패키지 주소는 아래와 같습니다.


https://github.com/bosch-ros-pkg/usb_cam


그 다음 노드 parameter를 수정합니다. 노드가 외부 설정을 필요로 하는 경우 사용자의 환경에 맞게 이를 설정해 주어야 합니다. 노드를 단독 실행하는 경우엔 rosrun 명령어를 사용할 때 parameter를 같이 입력해 주는 식이지만 여기서는 별도 설정 파일을 수정합니다. usb_cam/launch/ 디렉토리의 usb_cam-test.launch 파일을 연 뒤, 'video_device' 값을 앞서 확인하였던 카메라 연결 파일로 수정합니다. 초기값이 'dev/video0'로 설정되어 있기 때문에 이번에는 따로 변경할 필요는 없었습니다. 카메라 연결 파일 설정 외에 다른 parameter들은 usb_cam 패키지 페이지에서 확인이 가능합니다(http://wiki.ros.org/usb_cam). 그 다음으로 usb_cam-test.launch 파일 내에서 image_view 노드에 해당하는 부분을 보면 'image' 토픽을 실제 이미지 토픽으로 remap해야 한다고 나와 있습니다. 따라서 파일 내의 'image' 토픽으로 설정된 부분을 usb_cam 노드에서 사용하는 토픽인 "/usb_cam/image_raw"로 수정해 줍니다.


 이런 식으로 parameter를 파일 형태로 수정할 수 있는 것은 복수의 노드를 실행시키는 roslaunch 명령어를 사용하기 때문입니다. roslaunch는 노드를 개별적으로 실행하는 rosrun과 달리 여러 개의 노드를 동시에 실행시킬 수 있습니다. 로봇을 구동할 때에는 여러 개의 노드가 구동되기 때문에 이를 일일히 실행시키지 않고 한 번에 실행시키는 것이 편리합니다. 특히 roslaunch는 상호 의존적인 노드들을 동시에 실행시킬 때 유용합니다. usb_cam-test.launch 파일의 경우에도 usb_cam_node와 더불어 image_view 패키지의 image_view 노드 실행 파일을 동시에 열도록 되어 있습니다. roslaunch는 노드를 동시에 실행시키면서 각 노드 별 parameter를 설정하는 것도 가능합니다. 각 노드에 설정해야 할 parameter가 많은 경우 이를 매번 입력할 필요 없이 한번에 설정이 가능한 장점이 있습니다. roslaunch는 미리 만들어 둔 launch 파일을 실행시켜 동작시키며 launch 파일은 XML 형식에 .launch 확장자로 되어 있습니다.


 launch 파일 설정을 마친 뒤에는 노드를 빌드하고 launch 파일을 실행시킵니다.

$ cm                                                                   -> 노드 빌드

$ roscore                                                            -> 마스터 구동

$ roslaunch usb_cam usb_cam-test.launch       -> launch 파일 실행

$ rosrun rqt_graph rqt_graph                            -> rqt_graph 노드 실행. 이 부분도 launch 파일 내에 넣어서 한 번에 실행시켜 보시길 바랍니다.


`camera.jpg

usb_cam 노드를 통해 전달된 이미지 메시지가 image_view노드를 통해 화면 상에 출력되는 모습


 이번 예시에서는 image_view를 통해 화면 상에 영상을 출력하는 것까지 보여 드렸습니다. 예전에 말씀드렸듯 메시지의 형태는 사전 정의되어 있으며 usb_cam 노드에서 사용하는 이미지의 전달 방식도 미리 정의된 sensor_msgs::image로 전달됩니다. 다른 노드에서도 이러한 형태로 이미지를 전달하거나 받는 경우가 많으며, 그 예시 중 하나로 ROS 메시지를 OpenCV에서 사용하는 이미지로 변환하는 cv_bridge 패키지도 sensor_msgs::image 형태의 토픽을 받도록 되어 있습니다. 따라서 이번에 사용한 usb_cam 노드를 활용하면 차후에 다른 영상 관련 노드를 사용할 때 이미지를 손쉽게 전달할 수 있을 것입니다.


  1. ROS(Robot Operating System) 개념과 활용 - 11. rosserial 알아보기

    ROS가 적용되는 시스템에선 연산을 위한 상위 제어기와 하드웨어 제어를 위한 하위 제어기가 각각의 역할을 수행하는 경우가 많습니다. 상위 제어기는 보통 PC나 OBC(One Board Computer)를 사용하게 되는데, 하위 제어기와 통신할 때 가장 흔하게 사용되는 ...
    Date2016.03.28 CategoryROS(Robot Operating System) 개념과 활용 By박정현 Views7539
    Read More
  2. ROS(Robot Operating System) 개념과 활용 - 10. CMakeLists.txt 파헤치기

    CMakeLists.txt는 빌드 설정에 관련된 매우 중요한 파일이지만 주석의 압박과 익숙하지 않은 사용법 때문에 매번 대충 작성했던 경험이 있습니다. 관련 가이드를 찾아 보니 생각보다 간단한 규칙으로 되어 있어서 다른 내용을 진행하기 전에 미리 짚고 넘어가...
    Date2016.03.05 CategoryROS(Robot Operating System) 개념과 활용 By박정현 Views8436
    Read More
  3. ROS(Robot Operating System) 개념과 활용 - 9. Dynamic reconfigure를 이용한 실시간 node parameter 업데이트

    오랜만의 ROS 강좌 업데이트입니다. 거의 반년 전 쯤에 해 보았던 내용이지만 이런 저런 바쁜 일들에 밀려 이제서야 업데이트를 하게 되었습니다. 본 코너인 ROS 개념과 활용에서는 나머지 기본적인 내용들을 다루고 최종적으로 간단한 제어 예제까지 수행할 ...
    Date2016.02.24 CategoryROS(Robot Operating System) 개념과 활용 By박정현 Views3852
    Read More
  4. 밸런싱 로봇 만들기 - 2. I2C로 IMU(MPU 6050)와 통신하기

    이번 포스팅은 밸런싱 로봇에서 사용하는 유일한 센서인 IMU(Inertial Measurement Unit) - MPU6050과의 통신에 대한 것입니다. 준비물 : 앞의 포스팅에서 만든 하드웨어, 컴퓨터와 UART통신을 하기 위한 UART통신모듈(테스트용), CodeVision AVR 센서와 통신...
    Date2015.08.16 Category밸런싱 로봇 By한종인 Views4087
    Read More
  5. ROS(Robot Operating System) 개념과 활용 - 8. roslaunch 사용과 launch 파일 작성하기

    저번에 USB 카메라를 이용하면서 usb_cam-test.launch 파일을 실행시켜 보았습니다. usb_cam-test.launch 파일을 실행시키면 USB 카메라와 직접적으로 상호작용하는 '/usb_cam' 노드와 '/usb_cam/image_raw' 토픽을 받아 화면에 출력하는 '/image_view' 노드...
    Date2015.08.13 CategoryROS(Robot Operating System) 개념과 활용 By박정현 Views17572
    Read More
  6. ROS(Robot Operating System) 개념과 활용 - 7. USB 카메라 사용하기

    ROS는 여러 가지 이미지 관련 패키지를 제공하고 있습니다. 특히 OpenCV 연동 기능을 제공하기 때문에 다양한 영상 처리 알고리즘을 적용할 수 있다는 장점이 있습니다. 이미지와 영상을 얻기 위해서는 이미지를 얻는 센서가 필요한데, ROS가 주로 PC나 SBC ...
    Date2015.08.09 CategoryROS(Robot Operating System) 개념과 활용 By박정현 Views6775
    Read More
  7. ROS(Robot Operating System) 개념과 활용 - 6. rqt를 이용한 데이터 모니터링

    ROS는 로봇으로부터 얻을 수 있는 데이터를 쉽게 확인하고 관리할 수 있도록 rqt라고 하는 모니터링 도구를 제공합니다. rqt는 GUI 개발에 쓰이는 Qt framework 기반의 ROS software framework입니다. rqt는 우리가 지금까지 노드간 관계를 확인할 때 써 오던...
    Date2015.08.08 CategoryROS(Robot Operating System) 개념과 활용 By박정현 Views7049
    Read More
  8. ROS(Robot Operating System) 개념과 활용 - 5. 바닥부터 node 작성하기

    지금까지는 기존에 있던 패키지 노드를 수정하여 사용해 왔습니다. 이번에는 노드를 아예 처음부터 새로 작성하는 법에 대해 알아보겠습니다. 또한 노드 내부에서 사용되는 ROS의 기본 구조에 대해서도 간략히 짚고 넘어가도록 하겠습니다. 노드 작성법을 간...
    Date2015.07.26 CategoryROS(Robot Operating System) 개념과 활용 By박정현 Views33231
    Read More
  9. ROS(Robot Operating System) 개념과 활용 - 4. ROS node를 이용하여 direct serial 통신하기

    ROS 노드들은 TCP/IP 프로토콜의 메시지 통신을 기반으로 데이터를 주고 받습니다. 하지만 대다수의 센서들과 MCU의 통신은 일반적인 serial 프로토콜을 이용해 통신을 하는 경우가 많습니다. 여러 용도로 편리하게 사용되는 UART 통신 또한 그러한 방식입니...
    Date2015.07.07 CategoryROS(Robot Operating System) 개념과 활용 By박정현 Views10403
    Read More
  10. 밸런싱 로봇 만들기 - 1. 하드웨어 구성

    안녕하세요? 오늘부터 "밸런싱로봇 만들기"를 포스팅할 P.M.한종인 입니다. 밸런싱 로봇 하드웨어를 제작하기 위해서는 다음과 같은 몇 가지 준비물이 필요합니다. 준비물 : 부품, 회로도, 인두, 땜납, 테프론 래핑 와이어(얇은 배선용 전선), 일반전선, 멀티...
    Date2015.07.03 Category밸런싱 로봇 By한종인 Views2692
    Read More
Board Pagination Prev 1 2 Next
/ 2