Axis의 PTZ 카메라를 ROS에서 제어해 보았습니다.

3750 단어 파이썬axisPTZROS

경위



Axis의 PTZ 카메라를 ROS상에서 움직일 기회가 있었으므로, 그 순서를 정리해 보았습니다. PTZ(펀틸트 줌) 카메라란, 팬(좌우), 틸트(상하), 줌(확대)의 제어를 할 수 있는 카메라입니다.

axis_camera 정보



처음에는 PTZ도 포함한 카메라 제어를 할 수 있는 python-onvif을 사용하려고 했습니다만, Axis의 카메라에 대응하고 있지 않았기 때문에, 다른 방법을 찾기로 했습니다. 거기서 찾은 것이 axis_camera이었습니다. axis_camera는 Axis 카메라 제어용 ROS 패키지입니다. 매우 편리하지만 python2로 작성되었으므로주의가 필요합니다. 조만간 스스로 python3로 다시 쓴 것을 만들고, 또 기사로 하려고 합니다.

환경


  • AXIS M5525-E PTZ 네트워크 카메라
  • 우분투 18.04
  • ROS Melodic
  • python2.7

  • 절차



    우선, 준비로서 axis의 디폴트의 권한이 root이므로, ptz 제어할 수 있도록(듯이) anonymous로 바꾸어 둡니다. Axis의 카메라 설정 화면 오른쪽 하단의 Settings->System->Users라고 하면 아래와 같은 페이지로 가므로 Anonymous users를 ON으로 합니다.


    그런 다음 github에서 소스 코드를 삭제하고 ROS를 이동합니다.
    $ cd ~/catkin_ws/src
    $ git clone https://github.com/ros-drivers/axis_camera.git
    $ git clone https://github.com/ros-perception/camera_info_manager_py.git
    $ sudo chmod -R 755 axis_camera 
    $ cd ..
    $ catkin build
    $ roscore
    

    다른 터미널을 열고 아래 명령을 실행합니다.
    $ rosrun axis_camera axis_ptz.py _hostname:=IP_ADDRESS_OF_YOUR_CAMERA
    

    axis_camera는 ROS의 Dynamic Reconfigure를 사용하여 GUI에서 PTZ 제어를 할 수 있도록 되어 있습니다.
    다른 터미널을 열고 아래 명령을 실행합니다.
    $ rosrun rqt_reconfigure rqt_reconfigure 
    

    그러면 아래와 같은 GUI가 나타납니다. 각 슬라이드 바를 움직이면 PTZ 제어가 가능합니다.


    기본값은 tilt가 작동하지 않았기 때문에 PTZ.cfg의 tilt 설정 값을 변경했습니다. 각각의 항목은 gen.add()의 뒤의 3개에 초기치, 최소치, 최대치의 순서로 줄지어 있습니다.
    #!/usr/bin/env python
    PACKAGE = "axis_camera"
    
    from dynamic_reconfigure.parameter_generator_catkin import *
    
    gen = ParameterGenerator()
    
    #gen.add("speed_control", bool_t, 0, "Speed control (true) or absolute position control (false)", False)
    gen.add("autofocus", bool_t, 0, "Autofocus", True)
    gen.add("pan", double_t, 0, "Pan value in degrees (or percent in absolute mode)", 0, -180, 180)
    // tiltの値を-45,-90,0から0,0,90に変えている
    gen.add("tilt", double_t, 0, "Tilt value in degrees (or percent in absolute mode)", 0, 0, 90)
    gen.add("zoom", double_t, 0, "Zoom value", 1, 1, 9999)
    gen.add("focus", double_t, 0, "Focus", 1, 1, 9999)
    gen.add("brightness", double_t, 0, "Brightness", 1, 1, 9999)
    
    exit(gen.generate(PACKAGE, "axis_camera", "PTZ"))
    

    요약



    Axis 카메라라면 ROS에서 쉽게 움직일 수 있었습니다. PTZ 카메라는 움직이는 것만으로도 즐겁기 때문에 꼭 사보세요! 집에서의 사용도는 그다지 없다고 생각합니다만(웃음).

    실수나 질문, 의견등 있으면 부담없이 코멘트해 주세요. 열심히 대답하니까(웃음).

    참고문헌


  • python-onvif: htps : // 코 m / 우에다 타케 유키 / ms / 8b2 02 290775d9
  • 좋은 웹페이지 즐겨찾기