ROS의 노드를 시작하는 자신의 모범 사례
2650 단어 supervisorROS
노드를 시작하는 경우가 많을까 생각합니다.
개발중이라면 그때마다 그래도 좋을까 생각합니다만, 막상 시험을 실시할 때,
일일이 ssh로 로그인해. . . 시작하는 노드가 여러 장치에 있거나,
노드를 재시작시키고 싶은 경우 프로세스 kill 하거나 등등 하는 것은 멘도쿠사이라고 생각하고 있습니다.
이러한 경우에 자신이 사용하고 있는 것이 docker 컨테이너로 자주 사용하고 있는 supervisor 입니다.
supervisor를 사용하여 OS를 시작할 때, docker 컨테이너를 시작할 때 노드를 시작하거나,
브라우저에서 정지·재기동을 할 수 있습니다.
환경으로서는, 이하에서 사용한 docker 환경 을 베이스로 설명하고 싶습니다.
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 로 제어일까라고 생각하고 있습니다.
여기까지 사귀어 주셔서 감사합니다.
Reference
이 문제에 관하여(ROS의 노드를 시작하는 자신의 모범 사례), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/shun_xx/items/545450a11ad3baa63e32
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
[inet_http_server]
port = 0.0.0.0:9001
username = user
password = 123
[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
Reference
이 문제에 관하여(ROS의 노드를 시작하는 자신의 모범 사례), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/shun_xx/items/545450a11ad3baa63e32텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)