---
title: "PACE HMI: Connecting the RAMMP Robotic Wheelchair via RTPS with ESP32-P4 and W5500"
url: "https://maker.wiznet.io/Aimee0/projects/pace-hmi-fw/"
markdown_url: "https://maker.wiznet.io/Aimee0/projects/pace-hmi-fw/md"
type: "UCC: User Created Content"
author: "rammp-org"
author_url: "https://github.com/rammp-org/pace-hmi-fw"
editor: "WIZnet"
editor_url: "https://maker.wiznet.io/"
original_author: "rammp-org"
original_url: "https://github.com/rammp-org/pace-hmi-fw"
published: "2026-09-10"
language: "en"
hardware: ["WIZnet W5500"]
likes: 0
views: 85
comments: 0
source: "WIZnet Makers (https://maker.wiznet.io/)"
---

# PACE HMI: Connecting the RAMMP Robotic Wheelchair via RTPS with ESP32-P4 and W5500

> PACE HMI: Connecting the RAMMP Robotic Wheelchair via RTPS with ESP32-P4 and W5500

Original author: rammp-org (source: https://github.com/rammp-org/pace-hmi-fw)

## Components

- **WIZnet W5500** x 1 ([docs](https://docs.wiznet.io/Product/Chip/Ethernet/W5500))

WIZnet parts: W5500 ([Datasheet](https://docs.wiznet.io/Product/Chip/Ethernet/W5500/datasheet?utm_source=maker&utm_medium=project&utm_campaign=w5500), [product hub](https://maker.wiznet.io/products/w5500/))

## Article

[Embedded media](https://www.youtube.com/embed/_KZApOytV2M)

1:25

## Overview

**RAMMP(Robotic Assistive Mobility and Manipulation Platform)는 robotic wheelchair의 mobility control, 사용자 HMI, motor controller, ROS 2 기반 robot software, simulation 환경 등을 함께 개발하는 open-source assistive robotics 프로젝트입니다.** RAMMP GitHub organization에는 wheelchair의 drive control을 담당하는 MIB, 사용자 인터페이스인 PACE HMI, BLDC motor controller인 PACE RACER, 공통 RTPS interface, ROS 2 interface, RAMMS simulation 관련 프로젝트가 각각 공개되어 있습니다.

이 가운데 wheelchair의 embedded control system은 하나의 controller가 모든 기능을 처리하는 구조가 아니라, **PACE HMI, MIB(MEBot Interface Board), PACE RACER가 역할을 나누고 network를 통해 command와 state를 교환하는 분산 제어 구조**로 개발되고 있습니다. 각 embedded project에서 사용하는 공통 RTPS topic과 type은 별도의 `rammp-rtps` repository에서 관리됩니다.

![](https://maker.wiznet.io/upload/ckeditor5/314965353%5F1790692951%2Epng)

*Generated by AI*

이 구조에서 **PACE HMI는 사용자와 wheelchair control system 사이의 인터페이스**입니다. M5Stack Tab5의 ESP32-P4에서 UI를 실행하고 3D Hall joystick과 touch 입력을 처리하며, **WIZnet W5500을 SPI Ethernet interface로 사용해 RTPS message를 MIB와 교환합니다.MIB는 wheelchair base의 motor actuation과 drive control을 담당하는 ESP32-P4 기반 중앙 embedded controller**입니다. HMI에서 전달된 사용자 요청을 기반으로 system state와 drive control을 관리하고, PACE RACER motor controller와 연결되는 구조가 개발되고 있습니다. 다만 MIB repository에서는 PACE RACER와의 PoE communication/control이 아직 `Functionality (in progress)`로 표시되어 있으므로, 이 구간은 현재 개발 중인 구조로 구분해야 합니다.

**PACE RACER는 ESP32-S3 기반 open-source FOC(Field-Oriented Control) BLDC motor controller**입니다. Firmware에는 W5500 Ethernet 지원이 포함되어 있으며, W5500 breakout을 SPI expansion header에 연결해 command를 수신하고 telemetry를 전송하도록 구성되어 있습니다.

RAMMP에는 이러한 embedded control 계층 외에도 ROS 2 기반 software interface와 simulation 환경이 존재합니다. `rammp-interfaces-ros2`는 RAMMP robot과 통신하기 위한 ROS 2 interface를 제공하며, RAMMS(Robotic Assistive Mobility and Manipulation Simulation)는 Unreal Engine 5 기반 assistive robotics simulation 환경으로 개발되고 있습니다.

이 글에서는 이 전체 시스템 중 **PACE HMI에서 W5500이 어떻게 사용자 인터페이스를 RAMMP의 Ethernet/RTPS control network에 연결하는지**를 중심으로 살펴봅니다.

## Organization

![](https://maker.wiznet.io/upload/ckeditor5/314965353%5F1790693489%2Epng)

*https://rammp.tech/*

RAMMP는 특정 기업이 단독으로 개발하는 상용 제품이 아니라, **University of Pittsburgh의 Human Engineering Research Laboratories(HERL)가 주도하는 open-source assistive robotics 연구 프로그램**입니다. Principal Investigator는 University of Pittsburgh의 **Rory Cooper, Ph.D.**이며, 미국 Advanced Research Projects Agency for Health(**ARPA-H**)의 지원을 받아 차세대 robotic assistive mobility와 manipulation 기술을 개발하고 있습니다.

프로젝트에는 University of Pittsburgh뿐 아니라 **Carnegie Mellon University, Cornell University, Northeastern University, Purdue University** 등의 연구기관과 **ATDev, Kinova, LUCI** 등의 기업이 consortium partner로 참여하고 있습니다. 이외에도 RAMMP 공식 사이트에는 Meta, NVIDIA, Amazon Web Services 등이 참여 기관으로 소개되어 있으며, rehabilitation engineering, robotics, AI, assistive technology 분야의 기술을 하나의 open platform으로 통합하는 것을 목표로 합니다.

RAMMP는 하나의 robotic wheelchair만 개발하는 프로젝트가 아니라, 연구자와 개발자가 새로운 assistive mobility system을 개발할 수 있도록 **software, hardware design, simulation environment, documentation을 open-source ecosystem으로 제공하는 것**을 목표로 합니다. 공식적으로는 modular software framework, RAMMS digital twin simulation, hardware reference design, developer documentation과 API 등이 주요 ecosystem 구성 요소로 소개되어 있습니다.

## Technical Architecture

PACE HMI firmware는 **M5Stack Tab5(ESP32-P4)**를 대상으로 합니다. Hardware 구성에는 720×1280 portrait touch panel, X/Y/twist를 입력받는 3D Hall joystick, 최대 4개의 GPIO button, 그리고 **RTPS 통신을 위한 W5500 SPI Ethernet**이 포함됩니다.

| Item | Confirmed Details |
| --- | --- |
| **WIZnet Chip** | W5500 SPI Ethernet |
| **MCU / Board** | M5Stack Tab5 / ESP32-P4 |
| **User Input** | 3D Hall joystick X/Y/twist, 최대 4 GPIO buttons |
| **Interface** | ESP32-P4 ↔ W5500: SPI |
| **Network / Protocol** | Ethernet / UDP/IP / RTPS |
| **Serialization** | XCDR1(Classic CDR) using `espp/cdr` |
| **Shared Interface** | `external/rammp-rtps` |

PACE HMI와 MIB 사이의 기본 data flow는 다음과 같습니다.

```plaintext
User
  │
  ▼
3D Hall Joystick / Touch
  │
  ▼
M5Stack Tab5
ESP32-P4
  │
  │ SPI
  ▼
W5500
  │
  │ Ethernet / UDP / RTPS
  ▼
MIB
ESP32-P4
  │
  ├─ System State
  ├─ Drive Control
  └─ Seat Control
```

HMI에서 MIB로 전달되는 주요 RTPS topic은 다음과 같습니다.

| Topic | Direction | Data |
| --- | --- | --- |
| `rammp/joystick/xy_twist` | HMI → MIB | X/Y/twist, buttons |
| `rammp/joystick/drive_command` | HMI → MIB | drive enable/disable, drive profile |
| `rammp/joystick/seat_command` | HMI → MIB | seat axis와 absolute target |
| `rammp/mib/status` | MIB → HMI | system state, profile, seat position, speed, error |
| `rammp/mcb/diagnostics` | MIB → HMI | diagnostic readings |

`rammp/joystick/xy_twist`는 보정된 X/Y/twist 값을 **-1~+1 범위에서 약 30 Hz**로 전송하며, `rammp/mib/status`와 `rammp/mcb/diagnostics`는 약 **2 Hz**로 HMI에 전달됩니다. 현재 PACE HMI의 RTPS topic은 모두 best-effort로 설정되어 있으며, MIB가 state를 주기적으로 다시 전송하는 구조입니다.

특히 PACE HMI는 사용자 입력과 실제 wheelchair state를 분리합니다. Repository에서는 이를 **“MCB owns the chair's state; the HMI shows it and asks for changes”**라는 원칙으로 설명합니다. 예를 들어 사용자가 Drive Enable을 요청하더라도 HMI가 자체적으로 drive state를 확정하지 않고, MIB가 `MibStatus`를 통해 실제 `ENABLED` 상태를 보고한 뒤 UI에 반영합니다.

공통 message definition은 `rammp-rtps` repository에서 관리합니다. `messages/joystick_message.hpp`는 joystick과 MIB 사이의 message, `messages/mib_message.hpp`는 MIB state, `messages/motor_message.hpp`는 MIB와 PACE RACER motor controller 사이의 message를 정의합니다.

## WIZnet Role in This Project

PACE HMI에서 **W5500은 ESP32-P4 기반 사용자 인터페이스를 RAMMP의 wired Ethernet network에 연결하는 network interface** 역할을 합니다.

```plaintext
HMI Application
      │
      ▼
     RTPS
      │
      ▼
    UDP/IP
      │
      ▼
     LwIP
      │
      ▼
ESP-IDF Ethernet Driver
      │
      ▼
ESP32-P4
      │ SPI
      ▼
    W5500
      │
      ▼
   Ethernet
      │
      ▼
     MIB
```

이 구조는 PACE RACER에서도 다시 나타납니다. PACE RACER firmware는 ESP32-S3 기반 FOC BLDC motor controller이며, **W5500 breakout을 SPI expansion header에 연결해 Ethernet command를 수신하고 telemetry를 전송**합니다.

```plaintext
PACE HMI                         PACE RACER
ESP32-P4                         ESP32-S3
   │                                │
   │ SPI                            │ SPI
   ▼                                ▼
 W5500                            W5500
   │                                │
   └──────── Ethernet Network ──────┘
                    │
                    ▼
                   MIB
```

즉 RAMMP에서는 W5500이 단순한 standalone Ethernet demo가 아니라, **HMI와 embedded motor controller를 wired robotic control network에 참여시키는 interface로 적용되고 있다는 점**이 특징입니다.

단, MIB와 PACE RACER 사이의 PoE communication/control은 MIB repository에서 아직 개발 진행 항목으로 표시되어 있으므로, 현재 공개 자료만으로 전체 PACE RACER network path가 완성되었다고 단정할 수는 없습니다.

## Developer Takeaways

- **ESP32-P4 + W5500 + RTPS 구조를 실제 HMI에 적용한 사례를 확인할 수 있습니다.** W5500을 SPI Ethernet interface로 연결하고 UDP/IP 위에서 RTPS message를 교환하는 embedded robotics architecture입니다.

- **공통 communication interface를 별도 repository로 관리하는 구조를 참고할 수 있습니다.** `rammp-rtps`는 topic name, type, enum, payload struct를 공통 관리하며, RTPS를 사용하는 RAMMP project가 이를 submodule로 가져가도록 설계되어 있습니다.

- **Command와 실제 state를 분리한 HMI 설계를 확인할 수 있습니다.** 사용자가 drive mode나 seat position을 요청하더라도 UI가 요청 자체를 실제 state로 간주하지 않고, MIB가 다시 보고한 `MibStatus`를 기준으로 화면을 갱신합니다. RTPS link가 2초 동안 끊기면 `"RTPS LINK LOST"` 상태로 전환하고 Drive와 Seat 진입도 차단합니다.

- **실제 MIB 없이 RTPS interface를 테스트할 수 있는 PC tool도 제공합니다.** `scripts/rtps_mcb_gui.py`는 PC가 MIB 역할을 대신해 system state, drive, seat, diagnostics를 테스트할 수 있고, `scripts/rtps_adc_plot.py`는 joystick data를 실시간으로 확인하는 데 사용할 수 있습니다.

이러한 구조는 robotic wheelchair뿐 아니라 **mobile robot HMI, wired robot controller, distributed motor controller, RTPS/DDS 기반 embedded node**처럼 여러 controller가 Ethernet을 통해 command와 state를 교환하는 시스템을 설계할 때 참고할 수 있습니다.

## Related Maker Content and Application Value

WIZnet Maker Site에서는 PACE HMI와 완전히 동일한 assistive robotic wheelchair 사례보다는 **W5500 + ESP32 + RTPS/robotics**라는 기술 구조에서 연결할 수 있는 콘텐츠를 확인할 수 있습니다.

**`mros2-esp32-eth1`**은 ESP32-S3와 W5500을 SPI로 연결하고, ESP-IDF Ethernet driver와 LwIP 위에서 RTPS/UDP 기반 ROS 2 communication을 수행합니다. Application은 다르지만 `Application → RTPS → UDP/IP → LwIP → ESP-IDF Ethernet Driver → W5500`이라는 network stack 관점에서 PACE HMI와 직접 비교할 수 있습니다. ([Maker Site](https://maker.wiznet.io/TheoIm/projects/mros2-esp32-eth1/))

PACE HMI는 이 구조를 단순 ROS 2 communication test가 아니라 **3D joystick과 touch UI를 갖춘 실제 robotic wheelchair HMI에 적용**한다는 점에서 차이가 있습니다. 또한 MIB가 실제 system state를 관리하고 HMI는 이를 표시하는 방식으로 사용자 인터페이스와 vehicle control의 책임을 분리합니다.

`**Meridian LITE**` 역시 W5500을 이용해 robot과 control system 사이를 wired Ethernet으로 연결하는 사례입니다. Humanoid/multi-joint robot의 control communication을 Ethernet으로 구성한다는 점에서, PACE HMI의 distributed robotic control network와 함께 참고할 수 있습니다.

PACE HMI 사례의 확장 가치는 **W5500 기반 Ethernet을 실제 assistive robotics의 사용자 입력 및 distributed control architecture에 적용했다는 점**에 있습니다. 특히 `pace-hmi-fw`, `RAMMP-mib-fw`, `rammp-rtps`, `pace-racer-fw`가 각각 공개되어 있어 HMI, central controller, communication interface, motor controller의 역할을 어떻게 분리하는지 함께 살펴볼 수 있습니다.

## FAQ

**Q. ESP32-P4에 Ethernet MAC이 있는데 PACE HMI는 왜 W5500을 사용하나요?**

PACE HMI가 M5Stack Tab5의 ESP32-P4와 W5500 SPI Ethernet을 사용하는 것은 공개 repository에서 확인됩니다. 하지만 **RAMMP 개발자가 ESP32-P4의 native Ethernet 대신 W5500을 선택한 구체적인 이유는 현재 공개 자료에서 명시적으로 확인되지 않습니다.** 따라서 Tab5의 pin availability나 PCB 구현 편의성 때문이라고 단정하기보다는, 공개된 구현이 `ESP32-P4 → SPI → W5500 → Ethernet` 구조라는 사실까지만 확인하는 것이 적절합니다.

**Q. PACE HMI는 W5500의 Hardware TCP/IP Offload 기능을 사용하나요?**

이 구현에서는 사용하지 않습니다. Espressif의 W5500 Ethernet driver는 W5500의 hardwired TCP/IP stack을 사용하지 않으며, W5500을 ESP-IDF Ethernet interface로 구성합니다. 따라서 PACE HMI에서는 ESP32-P4 측 software network stack 위에서 UDP/IP와 RTPS communication이 이루어지는 구조로 볼 수 있습니다.

**Q. PACE HMI가 직접 wheel motor를 제어하나요?**

아닙니다. PACE HMI는 joystick, drive, seat request를 MIB에 전달하고 MIB가 wheelchair state와 drive control을 담당합니다. `rammp-rtps`에서도 `joystick_message.hpp`는 joystick ↔ MIB, `motor_message.hpp`는 MIB ↔ PACE RACER motor controller interface로 구분되어 있습니다.

## Verified Scope and Sources

| Source | Link | Checked Date | Verified Scope |
| --- | --- | --- | --- |
| **PACE HMI Firmware** | [GitHub](https://github.com/rammp-org/pace-hmi-fw) | 2026-09-29 | ESP32-P4, W5500, joystick, RTPS topics, UI/state architecture |
| **RAMMP MIB Firmware** | [GitHub](https://github.com/rammp-org/RAMMP-mib-fw) | 2026-09-29 | ESP32-P4, wheelchair drive control, PACE RACER integration status |
| **rammp-rtps** | [GitHub](https://github.com/rammp-org/rammp-rtps) | 2026-09-29 | Shared RTPS topic/type definitions |
| **PACE RACER Firmware** | [GitHub](https://github.com/rammp-org/pace-racer-fw) | 2026-09-29 | ESP32-S3, FOC BLDC, W5500 command/telemetry Ethernet |
| **PACE RACER Hardware** | [GitHub](https://github.com/rammp-org/pace-racer-hardware) | 2026-09-29 | PACE V0/RACER hardware, ESP32-S3, 3-phase inverter |
| **RAMMP Organization** | [GitHub](https://github.com/rammp-org) | 2026-09-29 | RAMMP repositories, ROS 2 interface, RAMMS |
| **RAMMP Project** | [Website](https://rammp.tech/) | 2026-09-29 | RAMMP project context |
| **Espressif W5500 Driver** | [GitHub](https://github.com/espressif/esp-eth-drivers/blob/master/w5500/README.md) | 2026-09-29 | ESP driver에서 W5500 hardwired TCP/IP stack 미사용 |
| **mros2-esp32-eth1** | [Maker Site](https://maker.wiznet.io/TheoIm/projects/mros2-esp32-eth1/) | 2026-09-29 | ESP32-S3 + W5500 + RTPS/ROS 2 유사 사례 |
| **Meridian LITE** | [Maker Site](https://maker.wiznet.io/ssekim/projects/meridian-lite) | 2026-09-29 | W5500 기반 robot-control Ethernet 사례 |

확인 시점 기준 `pace-hmi-fw` repository에는 **118 commits, 0 stars, 0 forks**가 공개되어 있으며, RAMMP organization에는 MIB, PACE RACER, RTPS, ROS 2 interface, RAMMS 등 실제 robot과 simulation을 구성하는 여러 repository가 지속적으로 업데이트되고 있습니다.

PACE HMI의 핵심은 W5500을 단순히 ESP32-P4에 Ethernet port를 추가하는 용도로 사용하는 데 그치지 않습니다. **사용자의 joystick과 touch input을 RTPS message로 변환하고, W5500 기반 wired Ethernet을 통해 중앙 MIB와 command와 state를 교환하는 실제 assistive robotics HMI architecture**를 보여줍니다. 여기에 공통 interface를 정의하는 `rammp-rtps`와 W5500을 사용하는 PACE RACER까지 함께 공개되어 있어, W5500 기반 Ethernet을 distributed robotic control system에 적용하는 방법을 살펴볼 수 있는 open-source reference입니다.

---

Source: https://maker.wiznet.io/Aimee0/projects/pace-hmi-fw/
