RoBoLoG

[ROS] Shell 파일에서 ROSCORE가 실행될 때까지 기다렸다가 Launch 파일 실행하기 본문

Study/Robot

[ROS] Shell 파일에서 ROSCORE가 실행될 때까지 기다렸다가 Launch 파일 실행하기

SKJun 2024. 8. 14. 18:58

 

ROS (Robot Operating System)를 사용하면서 roscore가 완전히 실행된 후에 다른 노드나 Launch 파일을 실행해야 하는 경우가 많습니다. roscore가 아직 시작되지 않았을 때 ROS 노드를 실행하려 하면 연결 오류가 발생할 수 있습니다. 이 글에서는 Shell 스크립트를 작성하여 roscore가 실행될 때까지 기다렸다가 Launch 파일을 실행하는 방법을 소개하겠습니다.

 

1. 기본 설정

우선, ROS 환경을 설정하고 필요한 설정 파일들을 소싱해야 합니다. 아래는 기본적인 ROS 환경 설정 코드입니다:

#!/bin/bash 

export ROS_MASTER_URI=http://[MASTER_IP]:11311
export ROS_IP=[ROS_IP]

# 필요한 ROS 설정 소싱
source /opt/ros/noetic/setup.bash --extend
source [필요한 Source 파일]

 


2. roscore가 실행될 때까지 기다리기

roscore가 실행되지 않은 상태에서 다른 노드를 실행하면, ROS 노드들이 마스터와 연결할 수 없어 오류가 발생합니다. 이를 방지하기 위해, roscore가 완전히 실행될 때까지 기다렸다가 Launch 파일을 실행하는 방법을 구현합니다.

 

2.1. rostopic list 명령어 사용

rostopic list 명령어는 roscore가 실행 중일 때만 성공적으로 실행됩니다. 이를 이용해 roscore가 실행될 때까지 기다릴 수 있습니다.

echo "Waiting for roscore to start..."
while ! rostopic list > /dev/null 2>&1; do
  sleep 1
done

 

위 코드에서는 rostopic list가 성공할 때까지 1초 간격으로 반복적으로 실행되도록 설정합니다. 이 방법을 통해 roscore가 실행될 때까지 기다릴 수 있습니다.


2.2. Launch 파일 실행

roscore가 실행된 이후에 Launch 파일을 실행합니다. 아래는 최종 스크립트입니다:

#!/bin/bash 

export ROS_MASTER_URI=http://[MASTER_IP]:11311
export ROS_IP=[ROS_IP]

# 필요한 ROS 설정 소싱
source /opt/ros/noetic/setup.bash --extend
source [필요한 Source 파일]

# roscore가 실행될 때까지 기다리기
echo "Waiting for roscore to start..."
while ! rostopic list > /dev/null 2>&1; do
  sleep 1
done

echo "roscore is running. Launching robot_conversation..."

# ROS Launch 파일 실행
roslaunch [ROS패키지] [launch파일]

 

3. 결론

이제 이 스크립트를 사용하여 roscore가 실행될 때까지 기다렸다가 안전하게 Launch 파일을 실행할 수 있습니다. 이 방법은 ROS 기반의 시스템을 더 안정적으로 운영하는 데 도움이 됩니다. 특히 복잡한 네트워크 환경에서 여러 노드를 동시에 실행할 때 유용합니다.

ROS를 활용한 로봇 개발 과정에서 이와 같은 스크립트를 작성해두면, 반복되는 오류를 줄이고 개발 생산성을 높일 수 있습니다. 앞으로도 더 많은 ROS 팁과 트릭을 소개할 예정이니, 많은 관심 부탁드립니다!


 

728x90
반응형