ROS1 노드 매니저: wego에서 제공하는 노드 실행 매니저
ROS 환경에서 여러 데모 기능을 수행하려면, 다수의 Launch 파일과 노드, 토픽을 관리해야 합니다. 이는 개발자에게 각 노드를 시작하고 모니터링하기 위해 개별 터미널을 열어 명령어를 입력해야 하는 큰 번거로움을 줍니다.
wego 로보틱스는 이를 해소하기 위해 통합 노드 매니저를 제공합니다.
wego 노드 매니저의 핵심 기능
wego 노드 매니저는 복잡하게 얽힌 ROS 노드들을 직관적인 GUI 환경에서 쉽게 실행하고 제어할 수 있도록 돕습니다.
| 기능 영역 | 설명 | 장점 |
|---|---|---|
| 통합 실행/관리 | 복잡하게 분산된 Launch 파일과 노드들을 하나의 인터페이스에서 모니터링하고 제어합니다. | 여러 터미널을 열 필요 없이 작업 효율성 극대화 |
| GUI 지원 범위 | PyQt 기반 로컬 GUI와 niceGUI 기반 외부 GUI를 모두 지원합니다. | 로컬 환경뿐만 아니라 원격에서도 웹 브라우저를 통해 접근 및 조작 가능 |
| 사용자 지정 노드 지원 | 이미 만들어진 노드들을 조작하는 것을 넘어, 간단한 변경을 통해 사용자가 직접 정의한 노드를 매니저에 통합하고 조작할 수 있습니다. | 시스템의 확장성 보장 및 사용자 맞춤 개발 용이 |
사용하기
데모 실행 매뉴얼과 웹 GUI 매뉴얼에서 사용방법이 상세히 나와있습니다.
현재, mini pi는 로봇 부팅 시 자동으로 웹 GUI에 접속할 수 있도록 설정되어있습니다.
주소는 아래와 같이 mini pi 터미널에 입력하여 확인할 수 있는 ROS_IP를 사용하여 접속할 수 있습니다.
echo $ROS_MASTER_URIhttp://$ROS_MASTER_URI:8089을 통해 웹 GUI에 연결할 수 있습니다.
연결하면 아래와 같은 화면이 나타납니다. 주소를 확인하여 자신의 로봇에 맞게 접속하세요.

터미널 명령어 입력으로 노드 매니저 실행을 원하시는 경우, 다음 순서를 따르십시오.
- rosbridge 연결
아래 명령어를 입력하여 rosbridge를 실행하십시오.
roslaunch rosbridge_server rosbridge_websocket- gui 실행
soccer_ws 경로에 들어와 있고, source devel/setup.bash가 되어있다면 아래 명령어가 작동합니다.
rosrun web_gui_pkg run_webgui.py이후, 터미널에 나타나는 주소에 접속하고 몇 초간 기다리면 패키지 목록들이 나타납니다.
노드 추가하기
워크스페이스에서 기능이 추가되는 경우는 크게 두가지가 있습니다.
- 특정 패키지에서 launch 파일 생성
- 패키지 생성
1의 경우, 별도의 설정 필요 없이 gui 생성 코드를 다시 실행하면 바로 생깁니다. 2의 경우, 패키지 빌드가 완료되었다면 웹 GUI는 별도의 설정이 필요없습니다.
다만, 로봇 내 화면에서 GUI를 실행하려면 mini pi 로봇 자체의 ~/.bashrc 코드를 수정하고 gui 생성 코드를 다시 실행합니다.
sudo nano ~/.bashrc
# 다음과 같은 줄을 찾으세요.
alias soccer_ws='cd ~/soccer_ws && source devel/setup.bash'
alias roboworld_gui='export LAUNCH_PACKAGES="ball_tracker_pkg,yolo11_detect_pkg,wego_twist_mux,d435_pkg,using_llm,soccer_demo" && python3 /home/hightorque/soccer_ws/src/roboworld_soccer.py'
echo "========================"
echo "soccer_ws: source devel"
echo "roboworld_gui: gui for roboworld"
echo "========================"위와 같이 설정된 ~/.bashrc 내 alias roboworld_gui에서 LAUNCH_PACKAGES에 새로운 패키지 이름을 추가하세요.
그 후
source ~/.bashrc를 입력하고 soccer_ws => roboworld_gui를 입력하면 새로운 패키지가 포함된 노드 매니저가 실행됩니다.
부록 (ROS node)
ROS1 시스템은 여러 개의 독립적인 실행 파일인 노드 (Node)들이 메시지 통신을 통해 협력하며 로봇을 작동하게 합니다. 이러한 노드들의 중앙 관리 시스템 역할을 하는 것이 바로 ROS Master입니다.
역할: ROS Master는 시스템 내의 모든 노드, 토픽, 서비스에 대한 정보를 가지고 있는 이름 서버와 같습니다.
핵심 기능:
노드 등록/삭제: 새로운 노드가 실행되거나 종료될 때 이를 시스템에 등록하고 관리합니다.
연결 중개: 노드들이 서로 통신할 수 있도록 어떤 노드가 어떤 토픽을 발행하고 구독하는지 정보를 제공하여 P2P (Peer-to-Peer) 연결을 맺도록 중개합니다.
💡 주의: ROS Master는 통신 자체를 중개하지만, 실제 메시지 데이터는 노드들이 Master를 통해 연결 정보를 받은 후, 서로 직접 통신합니다.
노드를 추가하는 세 가지 방법
ROS 시스템에 새로운 노드를 생성하고 동작시키는 방법은 크게 세 가지가 있습니다.
- 터미널 명령어를 통한 임시 노드 생성 (디버깅/테스트)
rostopic, rosservice와 같은 ROS 기본 CLI 도구를 사용할 때, 해당 명령이 실행되는 동안 임시 노드가 생성됩니다.
원리: 명령어가 토픽을 구독하거나 발행하는 행위를 수행하기 위해 백그라운드에서 임시 ROS 노드를 초기화합니다.
예시 (노드 생성): 아래 명령어를 수행하면 해당 터미널 세션이 종료되거나 ctrl+c로 명령이 중단될 때까지 /rostopic_X와 같은 이름의 임시 구독 노드가 생성됩니다.
$ rostopic echo /cmd_vel$ rostopic pub -r 10 /cmd_vel geometry_msgs/Twist '...'위 명령 역시 토픽을 주기적으로 발행하는 임시 노드를 생성합니다.
- 🐍 코드를 통한 노드 초기화 (개발/실습)
Python (rospy)이나 C++ (roscpp) 코드를 작성하고 실행하여 노드를 만드는 가장 일반적인 방법입니다. 해당 코드가 실행되는 동안 노드가 유지됩니다.
# rospy.init_node('노드_이름') 을 통해 노드가 초기화되고 생성됩니다.
import rospy
class RosNode:
def __init__(self):
rospy.init_node('mini_pi_keyboard_controller', anonymous=True)
# ... (생략)python의 경우 rospy, c++과 같은 경우 roscpp 라이브러리를 통해 ros에서 제공하는 기능들을 사용할 수 있습니다. 이 때, init_node를 사용하여 노드를 생성할 수 있습니다.
- Launch 파일을 사용한 노드 관리 (운영/배포)
XML 형식의 Launch 파일을 사용하여 여러 노드를 동시에 실행하고, 파라미터를 설정하며, remap을 조정하는 가장 강력한 방법입니다. Launch 파일은 안정적인 로봇 시스템 운영의 핵심입니다.
<node> 태그 속성: pkg (패키지 이름), type (실행 파일 이름), name (ROS 시스템 내 노드 이름)을 지정합니다.
<remap> 태그: 노드의 소스 코드를 수정하지 않고 토픽이나 서비스의 이름을 변경하여 통신 경로를 유연하게 설정할 수 있습니다.
<launch>
<node pkg="roscpp_tutorials"
type="talker"
name="my_talker"
output="screen"/>
<node pkg="roscpp_tutorials"
type="listener"
name="my_listener"
output="screen">
<remap from="chatter" to="my_topic"/>
</node>
<node pkg="roscpp_tutorials"
type="talker"
name="another_talker"
output="screen">
<remap from="chatter" to="my_topic"/>
</node>
</launch>이 Launch 파일을 실행하면 my_listener 노드는 remap 설정 덕분에 another_talker 노드가 발행하는 /my_topic 메시지를 수신하게 됩니다.
노드 및 코드 분석에 활용하는 방법
노드를 직접적으로 변경하는 일은 드물지만, 새로운 기능을 만들거나 기존 기능을 분석하기 위해 노드 정보를 확인하고 해당 코드를 참조하는 활용 상황은 매우 많습니다.
| 명령어 | 기능 | 설명 |
|---|---|---|
| rosnode list | 현재 활성화된 모든 노드의 이름을 출력합니다. | 시스템의 현재 동작 상태를 파악하는 첫 단계입니다. |
| rosnode info /(node 이름) | 특정 노드의 정보를 확인합니다. | 해당 노드가 어떤 토픽을 구독/발행하는지, 어떤 서비스를 제공하는지, 그리고 어떤 패키지에서 만들어졌는지 확인할 수 있습니다. |
| roscd (패키지 이름) | 노드가 만들어진 패키지 경로로 이동합니다. | rosnode info에서 확인한 패키지 이름으로 이동하여 소스 코드를 직접 분석할 수 있습니다. |