ROS의 노드를 시작하는 자신의 모범 사례

2650 단어 supervisorROS
ROS를 개발하고 있다면 터미널에서 ssh로 로그인하고 roslaunch를 실행하십시오.
노드를 시작하는 경우가 많을까 생각합니다.

개발중이라면 그때마다 그래도 좋을까 생각합니다만, 막상 시험을 실시할 때,
일일이 ssh로 로그인해. . . 시작하는 노드가 여러 장치에 있거나,
노드를 재시작시키고 싶은 경우 프로세스 kill 하거나 등등 하는 것은 멘도쿠사이라고 생각하고 있습니다.

이러한 경우에 자신이 사용하고 있는 것이 docker 컨테이너로 자주 사용하고 있는 supervisor 입니다.
supervisor를 사용하여 OS를 시작할 때, docker 컨테이너를 시작할 때 노드를 시작하거나,
브라우저에서 정지·재기동을 할 수 있습니다.

환경으로서는, 이하에서 사용한 docker 환경 을 베이스로 설명하고 싶습니다.
  • 브라우저에서 ROS Topic, MQTT Topic을 송수신하고 ROS node와 통신한다.
  • 브라우저에서 ROS Topic, MQTT Topic을 송수신하여 ROS node와 통신한다.

  • supervisor를 브라우저에서 제어



    supervisor를 브라우저에서 제어하려면 다음을 설정해야 합니다.

    /etc/supervisor/supervisord.conf
    [inet_http_server]
    port = 0.0.0.0:9001
    username = user
    password = 123
    

    컨테이너 밖에서 또는 다른 PC에서 제어하는 ​​경우를 가정하여 0.0.0.0을 설정합니다.
    브라우저에서 위에서 설정한 URL에 액세스하면 로그인 대화 상자가 표시되므로,
    username과 password를 입력하면 다음과 유사한 화면이 표시됩니다.


    이 예에서는 supervisor에 rosbridge_server를 설정했으므로 rosbridge_server의 노드 재부팅/중지 등
    브라우저에서 제어할 수 있습니다.

    사용 중 docker 환경에서는 roscore가 다른 컨테이너에서 시작되지만 roscore를 다른 컨테이너에서 미리 시작하지 않아도 일반 roslaunch와 마찬가지로 roscore가 시작되지 않았습니다.
    ROS_MASTER_URI 가 설정되어 있지 않으면, roscore도 자동으로 일어나, 브라우저상에서 노드를 정지하면 roscore도 종료합니다.

    노드를 시작하는 supervisor 스크립트는 다음과 같습니다.

    /etc/supervisor/conf.d/rosbridge_server.conf
    [program:rosbridge_server]
    priority=20
    directory=/tmp
    command=/usr/local/bin/rosbridge_server
    user=root
    stopsignal=TERM
    autostart=true
    autorestart=true
    stdout_logfile=/var/log/supervisor/%(program_name)s.log
    stderr_logfile=/var/log/supervisor/%(program_name)s.log
    

    실제로 노드를 시작하는 스크립트는 다음과 같습니다.
    #!/bin/bash
    set -e
    
    source /opt/ros/kinetic/setup.bash
    exec roslaunch rosbridge_server rosbridge_websocket.launch
    

    시작할 수 있는 장치 노드가 많고, 이를 일일이 브라우저상에서 조작하는 것이 멘도사이라는 레벨이 되면,
    이 방법으로도 괴로움이 나오므로, 그러한 케이스가 되면, 다음의 스텝은 ansible 로 제어일까라고 생각하고 있습니다.

    여기까지 사귀어 주셔서 감사합니다.

    좋은 웹페이지 즐겨찾기