본문 바로가기
MD로봇 로봇플랫폼 프로젝트

MDROBOT의 MDUI 제어기를 ROS에서 활용하기

by sstonne 2025. 6. 22.

MDUI란?

MDUI는 MDROBOT에서 제공하는 로봇 중간 제어기로, 다양한 센서의 데이터를 수집하고 로봇을 시리얼 통신으로 제어할 수 있도록 해주는 핵심 장치입니다.
이 MDUI를 ROS 기반 환경에서 제어하고 데이터를 받아오는 시스템을 직접 구현하여, 로봇과 센서 통합을 보다 유연하게 할 수 있습니다.

 

ROS 패키지 구성

본 시스템은 ubuntu 20.04, ros noetic 에서 테스트하였고, 아래의 주요 파일은 ROS에서 MDUI와 통신을 담당합니다:

1. settings.py

MDUI 통신에 필요한 PID 코드, 주소, 명령 데이터 구조를 정의합니다.

  • pid_robot_monitor(mode) → 센서 정보 요청 프레임 생성
  • pid_robot_cmd(mode) → 로봇 제어 명령 프레임 생성
  • 내부 필드인 RingBF, rc_d0~d5는 송신 버퍼나 속도 데이터 저장 등에 사용됨

2. robot_global_navi.py

MDUI와 양방향 시리얼 통신을 통해 제어 및 센서 수신을 수행하는 메인 노드입니다.

  • turtlebot에서 제공하는 teleop 의 /cmd_vel 토픽을 구독하여 속도 명령을 수신하고, MDUI 명령 형식으로 변환하여 전송
  • /odom, /tf를 통해 로봇의 위치와 방향을 퍼블리시
  • /robot/state, /robot/monitor에 센서 데이터 및 상태 정보를 발행
  • 초당 20회 반복으로 지속적인 통신을 유지하며 실시간 제어 가능

3. robot_monitor_parser.py

로봇 제어 없이, 모니터링 전용으로 MDUI 센서 데이터를 수신하는 테스트용 노드입니다.

  • /robot/state와 /robot/monitor를 통해 위치, 배터리, 범퍼 상태 등을 주기적으로 수신
  • 터미널에서 rostopic echo /robot/state 또는 rqt_graph로 확인 가능

실제 ROS 통신 흐름

ROS 환경에서는 다음과 같은 방식으로 MDUI와 통신이 이루어집니다:

  1. 명령 송신 흐름
    • 사용자가 /cmd_vel 토픽에 Twist 메시지를 퍼블리시
    • robot_global_navi.py가 이를 감지해 시리얼로 MDUI에 속도 명령 전송
    • MDUI는 로봇에 실제로 속도를 전달
  2. 상태 수신 흐름
    • MDUI는 주기적으로 위치, 배터리, 초음파, 상태 비트 등을 반환
    • 이 데이터를 파싱하여 /odom, /tf, /robot/state, /robot/monitor 토픽으로 퍼블리시

rostopic 및 rosgraph로 확인하기

아래 명령어들을 통해 ROS에서 MDUI 연동 상태를 실시간으로 확인할 수 있습니다:

rostopic echo /robot/state
rostopic echo /robot/monitor
rostopic echo /odom
rosrun rqt_graph rqt_graph
 
  • /robot/state → 위치(x, y), 배터리 상태, 범퍼 여부, 속도 등 확인
  • /odom, /tf → RViz 시각화 가능
  • /cmd_vel → turtlebot teleop 제어 시 실제 명령 확인 가능

rostopic echo /robot/state

header: 
  seq: 1
  stamp: 
    secs: 1750585939
    nsecs: 486754417
  frame_id: "base_link"
x: 57
y: 0
theta: 358.70001220703125
battery: 67
ultrasonic: [41, 226, 79, 0]
emergency_switch: False
moving: False
charger_connected: False
front_bumper: False
rear_bumper: False
fully_charged: False
linear_velocity: 0.0
angular_velocity: 0.0
---

이 패키지를 기반으로 실내 자율 주행 로봇을 졸업 프로젝트로 제작하였습니다.
MDUI를 통해 로봇 제어 및 센서 통신을 구현했고, GitHub에 업로드한 ROS 패키지에서는
RPLiDAR A2M8과 Karto SLAM을 활용한 지도 작성까지 포함되어 있습니다.

📂 GitHub Repository: https://github.com/sstonne/mdrobot_slam_setup

📹 자율 주행 데모 영상: https://www.youtube.com/shorts/OtdrrEtIUno?feature=share