Wiznet makers

Aimee0

Published July 24, 2026 ©

139 UCC

23 WCC

24 VAR

0 Contests

0 Followers

0 Following

Original Link

How Did RoboMagellan Implement a UDP-Based Robot Motor Controller Using the RP2040 and W5500?

How Did RoboMagellan Implement a UDP-Based Robot Motor Controller Using the RP2040 and W5500?

COMPONENTS Hardware components

WIZnet - W5500

x 1


PROJECT DESCRIPTION

Overview

robomagellan_rp2040_firmware는 outdoor mobile robot(야외주행 이동로봇)의 steering servo(조향장치)와 VESC drive motor(구동모터)를 Ethernet으로 제어하기 위한 RP2040 firmware입니다. RP2040은 motor I/O와 상태 register를 관리하고, WIZnet W5500은 SPI로 연결된 UDP network interface로 동작하여 robot computer와 command 및 feedback packet을 주고받습니다.

Firmware는 W5500의 socket 0을 UDP port 6707로 열고, Etherbotix-compatible register packet을 처리합니다. 수신된 command는 steering servo pulse 또는 VESC RPM command로 변환되며, motor state와 battery voltage·current 정보는 같은 register interface를 통해 다시 network로 반환됩니다.

이 프로젝트는 W5500을 단순한 sensor telemetry 장치가 아니라 robot actuator command path와 status feedback path 사이의 wired Ethernet endpoint로 배치한 구체적인 오픈소스 사례입니다.

Background

https://www.robotandchisel.com/

https://www.linkedin.com/in/mfergs/

Robot & Chisel의 RoboMagellan 관련 공개 글에 따르면, RoboMagellan은 outdoor navigation 기술을 시험하기 위해 개발된 mobile robot platform입니다. 이전 버전에서는 Intel NUC, GPS, IMU, wheel odometry와 ROS를 함께 사용해 robot의 위치를 계산하고 주행을 제어했습니다.

이 프로젝트의 개발자인 Michael Ferguson은 robot electronics, control, sensor, perception, navigation 분야에서 경험을 쌓아 온 robotics engineer입니다. Fetch Robotics CTO, Unbounded Robotics Founder/CTO, Willow Garage engineer 등을 거쳤으며, Robot & Chisel을 통해 RoboMagellan을 비롯한 여러 robot project와 개발 과정을 공유하고 있습니다.

Etherbotix는 ROS와 motor controller 사이에서 명령과 상태 data를 주고받는 역할을 합니다. 이후에는 기존 ROS용 Etherbotix driver를 C++ 기반 ROS2 driver로 옮기는 작업도 진행되었습니다.

현재 robomagellan_rp2040_firmwareETHERBOTIX_ID, register address, DYN_READ_DATA, DYN_WRITE_DATA 같은 Etherbotix 형식을 사용합니다. 따라서 기존 Etherbotix software와의 연결을 고려한 firmware로 볼 수 있지만, 실제로 어떤 ROS2 driver version과 함께 사용되었는지는 공개 자료만으로 확인되지 않습니다.

Features

1. W5500 UDP socket을 이용한 양방향 robot control

Firmware는 W5500의 socket 0을 다음과 같이 UDP mode로 연다.

socket(0, Sn_MR_UDP, 6707, 0x00);

Main loop는 getSn_RX_RSR(0)으로 수신 data 크기를 확인하고, recvfrom()으로 packet을 읽습니다. 유효한 read request에는 sendto()로 register data를 반환하므로 command와 feedback이 동일한 UDP endpoint를 통해 이동합니다.

2. Etherbotix-compatible register protocol

수신 packet은 다음 signature로 시작해야 합니다.

0xFF, 'B', 'O', 'T'

Packet 내부에는 device ID, length, instruction, register address가 포함됩니다. Firmware는 DYN_READ_DATADYN_WRITE_DATA instruction을 처리하며, ETHERBOTIX_ID253으로 정의되어 있습니다.

이 구조는 motor command와 상태 data를 register address로 추상화합니다. 따라서 network packet parser와 실제 motor hardware driver가 직접 결합되지 않고 register table을 경계로 분리됩니다.

3. Steering servo와 VESC drive motor의 통합 제어

Steering은 RP2040 PWM으로 제어됩니다. Firmware는 50 Hz servo output을 구성하고 1,000~2,000 µs 범위의 pulse command만 허용합니다.

if (p >= 1000 && p <= 2000)
{
    servo_set_angle(p);
}

Drive motor는 UART1에 연결된 VESC로 제어됩니다. Network에서 받은 motor velocity 값은 vesc_set_ticks_per_motor_period()를 거쳐 VESC RPM command로 변환됩니다.

4. Motor·power 상태 feedback

Firmware는 다음 값을 register table에 반영합니다.

  • VESC motor velocity
  • 누적 motor position
  • Motor current
  • Battery voltage
  • Servo current
  • 정상·오류 packet count
  • Firmware system time

Battery voltage는 GP26 ADC input에서 측정하고, current는 GP27과 ACS711 sensing circuit을 이용합니다.

5. Communication-loss motor timeout

마지막 motor command 이후 500 ms가 지나면 firmware는 다음 동작을 수행합니다.

vesc_set_rpm(0);

이는 network command가 끊긴 상태에서 이전 drive command가 계속 유지되는 것을 제한하는 software-level protection입니다. 별도의 hardware emergency stop이나 Deadman radio 동작은 공개 자료에서 확인되지 않습니다.

System Architecture

Command path

Robot Computer / Control Software
→ Etherbotix-compatible UDP packet
→ Ethernet
→ WIZnet W5500 socket 0, UDP port 6707
→ SPI0
→ RP2040 udp_callback()
→ Register write
├─ PWM → Steering Servo
└─ UART1 → Isolated Interface → VESC → Drive Motor

Feedback path

VESC motor status
Battery voltage ADC
Servo current ADC
Packet counters / system state
→ RP2040 register table
→ Register read response
→ SPI0
→ WIZnet W5500
→ UDP
→ Robot Computer / Control Software

Runtime sequence

  1. wizchip_spi_initialize()가 RP2040 SPI0와 W5500 control pin을 초기화합니다.
  2. wizchip_initialize()가 W5500 socket memory를 설정합니다.
  3. network_initialize()가 static IPv4 configuration을 적용합니다.
  4. socket(0, Sn_MR_UDP, 6707, 0x00)이 UDP endpoint를 엽니다.
  5. Main loop가 socket receive size를 검사합니다.
  6. recvfrom()으로 packet을 수신합니다.
  7. udp_callback()이 packet signature, device ID, instruction, register address를 검사합니다.
  8. Write request는 servo 또는 VESC command로 적용됩니다.
  9. Read request는 register data를 packet으로 구성해 sendto()로 반환합니다.
  10. Main loop는 VESC feedback과 ADC measurement를 지속적으로 register table에 업데이트합니다.

Role and Application of the WIZnet Chip

항목구현 내용
WIZnet 모델명W5500
MCU와의 연결RP2040 SPI0
SPI pinGP16 MISO, GP17 CS, GP18 SCK, GP19 MOSI, GP20 RST
SPI clock5 MHz
Network 역할Robot computer와 RP2040 controller 사이의 wired UDP endpoint
사용 protocolIPv4 / UDP
Socket 구성Hardware socket 0, local port 6707
Application dataEtherbotix-compatible register read/write packet
Data path 위치Ethernet과 RP2040 motor-control application 사이
Network 설정Static IPv4
Software libraryWIZnet ioLibrary_Driver submodule

W5500은 이 구조에서 Ethernet frame 처리만 제공하는 수동 PHY가 아닙니다. Firmware는 W5500의 hardware socket API를 통해 UDP socket을 열고 packet을 송수신합니다. RP2040 application은 Ethernet MAC이나 IP·UDP stack 전체를 software로 구현하지 않고, W5500 socket buffer와 ioLibrary API를 통해 application payload를 처리합니다.

이 역할 분리는 robot controller에서 다음과 같은 설계상 장점을 제공합니다.

  • Motor control, PWM, UART, ADC와 network protocol code의 책임을 구분할 수 있습니다.
  • RP2040 application이 register protocol과 actuator control에 집중할 수 있습니다.
  • Wi-Fi 상태나 access point 구성에 의존하지 않는 wired control path를 구성할 수 있습니다.
  • W5500 socket 단위로 수신 상태와 buffer를 관리할 수 있습니다.
  • MCU를 변경하더라도 packet protocol과 W5500 socket 구조를 유지하기 쉽습니다.

다만 공개 자료에는 end-to-end latency, packet jitter, 장거리 cable test 또는 packet-loss 측정값이 포함되어 있지 않으므로 정량적인 실시간 성능은 별도 검증이 필요합니다.

Developer Reuse Points

Reusable PointWhat Developers Can LearnSource Evidence
RP2040-W5500 SPI portPico SDK에서 W5500 CS, RST, SPI read/write callback을 구성하는 방법w5x00_spi.h, w5x00_spi.c
W5500 UDP initializationStatic network 설정, W5500 초기화, UDP socket 생성 순서udp_interface_init()
Hardware socket receive loopgetSn_RX_RSR(), recvfrom(), sendto()를 이용한 polling 구조Main loop, udp_callback()
Register-oriented packet protocolNetwork command를 hardware register read/write 형태로 추상화하는 방법etherbotix.hpp, udp_callback()
Servo control validationNetwork에서 받은 pulse command를 허용 범위 내에서만 PWM에 적용하는 방법servo_set_angle() 및 write handler
VESC UART integrationRP2040 UART interrupt, VESC packet decoding, CRC, status update 구조vesc.c, vesc.h
Command timeout통신 중단 시 drive command를 0으로 전환하는 기본 watchdog patternMain loop의 500 ms timeout
Power monitoringBattery voltage divider와 current sensor ADC를 control status에 통합하는 방법main.c, ControlBoard_revA.pdf
Interface isolationVESC UART 구간에 digital isolator를 배치하는 hardware 설계 관점ControlBoard_revA.pdf
Build integrationPico SDK project에 WIZnet ioLibrary_Driver를 Git submodule로 포함하는 방법.gitmodules, CMake fi

Related Existing Contents & Expansion Value

1. Flight Control Unit

  • Link: https://maker.wiznet.io/Hannah/projects/fcumcfrp
  • Similarity Point: MCU가 control algorithm과 actuator 처리를 담당하고, W5500이 UDP telemetry path를 제공한다는 점이 유사합니다. Flight Control Unit은 IMU와 자세 정보를 ground station으로 전송하는 구조를 설명합니다. 
  • Difference: RoboMagellan firmware는 telemetry뿐 아니라 steering과 drive motor command를 수신하고 register read response를 반환하는 양방향 actuator interface입니다.
  • Connection Value: 두 사례를 함께 보면 W5500 UDP가 telemetry-only 구조와 command/feedback 구조에서 어떻게 달리 사용되는지 비교할 수 있습니다.
  • Expansion Direction: W5500 robot control reference, packet latency measurement, telemetry·command channel 분리 tutorial로 발전시킬 수 있습니다.
  • Expert Analysis: 제어기 내부 loop와 network supervisory control의 경계를 설명하는 교육 콘텐츠로 활용 가치가 높습니다.

2. EtherSense

  • Link: https://maker.wiznet.io/Aimee0/projects/ethersense
  • Similarity Point: MCU와 W5500을 결합해 UDP로 실시간 sensor data를 전달한다는 점이 유사합니다. EtherSense는 STM32F103RB와 W5500을 이용한 UDP sensor streaming system입니다. 
  • Difference: EtherSense는 sensor data streaming이 중심이고, RoboMagellan은 motor command, register response, VESC status, power monitoring을 하나의 controller에 통합합니다.
  • Connection Value: Sensor-to-network data path를 actuator command/feedback architecture로 확장하는 과정을 보여줄 수 있습니다.
  • Expansion Direction: UDP packet schema, register map 설계, command timeout, bidirectional control example을 추가한 후속 tutorial이 적합합니다.
  • Expert Analysis: W5500 기반 UDP node를 sensing에서 actuation으로 확장하려는 개발자에게 단계적인 학습 경로를 제공합니다.

Market & Application Value

이 architecture는 완성된 상용 robot platform보다는 다음 분야의 reference implementation으로 가치가 있습니다.

적용 가능한 분야

  • Outdoor mobile robot prototype
  • Research robot base controller
  • AGV 또는 UGV proof of concept
  • Robot motor test bench
  • Ethernet-connected actuator node
  • University robotics education
  • ROS 또는 ROS 2 hardware interface 실습
  • Distributed robot I/O controller

External Indicators

GitHub repository

확인 가능한 local Git metadata 기준 최신 commit은 다음과 같습니다.

항목확인 내용
Latest commitdf2372452e310580eae46e0ace71b69151750760
Commit date2024-09-28
Commit messagemove radio from issue to known issue note
Default branchmain
WIZnet dependencyWiznet/ioLibrary_Driver Git submodule
Submodule commit3847fb3b5d1a6a1dc8f7e38b239d7e57951f3a8
Release첨부 저장소와 공개 검색 결과에서 별도 release 확인되지 않음
Star / Fork / Issue확인 시점에 신뢰성 있게 검증하지 못함

현재 source tree에는 단순 prototype을 넘어 다음 개발 이력이 포함되어 있습니다.

  • Minimal Etherbotix communication
  • Analog input와 LED status
  • Servo control
  • VESC support
  • Motor velocity·position feedback 개선
  • Custom RevA PCB 추가
  • Deadman radio 상태 문서화

WIZnet Strategic Value

RoboMagellan firmware는 W5500 적용 영역을 sensor gateway나 web server에서 physical motion control interface로 확장해 보여줍니다.

특히 다음 세 가지 점이 유용합니다.

1. MCU와 network 역할이 명확하게 분리되어 있습니다

RP2040은 PWM, UART, ADC, packet application logic을 처리하고, W5500은 Ethernet과 UDP socket을 담당합니다. 이는 robot control firmware를 구조적으로 설명하기 좋은 reference입니다.

2. 실제 actuator와 feedback이 포함되어 있습니다

Servo, VESC motor, battery voltage, current sensing이 하나의 network register table에 연결되어 있습니다. 따라서 단순 network loopback보다 실제 robot subsystem에 가까운 학습 자료가 됩니다.

3. 후속 reference design으로 확장하기 쉽습니다

WIZnet Maker ecosystem에서 다음 콘텐츠로 발전시킬 수 있습니다.

  • RP2040 + W5500 robot controller tutorial
  • ROS 2 ros2_control hardware interface
  • Python UDP diagnostic tool
  • W5500 command latency benchmark
  • Dual-channel command/telemetry architecture
  • Hardware E-stop와 network timeout reference
  • W5500-EVB-Pico 기반 simplified implementation

이 프로젝트의 가치는 특정 robot 한 대의 firmware에 그치지 않고, wired Ethernet actuator node를 설계하는 기본 pattern을 제공한다는 데 있습니다.

Summary

robomagellan_rp2040_firmware는 RP2040과 W5500을 결합해 steering servo, VESC drive motor, power monitoring을 UDP register interface로 연결한 mobile robot controller firmware입니다. W5500은 SPI를 통해 RP2040에 연결되고 UDP port 6707의 hardware socket endpoint로 동작하며, RP2040은 network command를 PWM·UART motor control로 변환하고 상태 data를 다시 반환합니다.

Source, pin map, socket configuration, packet handler, VESC driver, command timeout, custom board schematic이 공개되어 있어 외부 개발자가 wired robot actuator node를 설계할 때 활용할 수 있는 구체적인 reference입니다. 반면 host-side client, 정확한 W5500 module 형상, Deadman 기능, 정량적 network 성능, safety validation과 제품화 정보는 현재 공개 자료만으로 확인되지 않습니다.

FAQ

1. 이 프로젝트는 무엇을 해결합니까?

RP2040 기반 robot control board가 steering servo와 VESC drive motor를 제어하면서, robot computer와 wired Ethernet으로 command 및 상태 data를 교환하도록 합니다. W5500 UDP socket이 robot computer와 low-level motor controller 사이의 network endpoint 역할을 합니다.

2. W5500은 정확히 어떤 역할을 합니까?

W5500은 RP2040과 SPI0으로 연결되고, UDP port 6707에서 hardware socket을 운영합니다. RP2040은 recvfrom()으로 application packet을 읽고 sendto()로 register response를 반환하므로 motor-control code가 Ethernet protocol 전체를 software로 처리할 필요가 없습니다.

3. 개발자가 가장 직접적으로 재사용할 수 있는 부분은 무엇입니까?

w5x00_spi.c의 Pico SDK port, udp_interface_init()의 W5500 초기화 순서, udp_callback()의 register packet parser, vesc.c의 UART driver, 500 ms motor timeout pattern을 재사용할 수 있습니다. Custom board를 설계한다면 회로도의 isolated VESC UART와 power sensing 구조도 참고할 수 있습니다.

4. 이 firmware를 그대로 연결하면 robot이 동작합니까?

Firmware build에 필요한 source와 회로도는 포함되어 있지만 host-side command program, 전체 wiring guide, W5500 module 형상, VESC configuration은 충분히 문서화되어 있지 않습니다. 실제 적용 전에는 packet generator와 hardware configuration을 별도로 준비해야 합니다.

5. 안전한 mobile robot controller로 바로 사용할 수 있습니까?

Software에는 500 ms command timeout이 있지만 README에서 Deadman radio는 구현되지 않은 기능으로 명시되어 있습니다. 사람이 접근하는 환경에서는 hardware emergency stop, power cutoff, communication fault state, startup interlock 등을 별도로 설계해야 합니다.

References

https://www.robotandchisel.com/

https://www.robotandchisel.com/2020/04/10/robomagellan-update/?utm_source=chatgpt.com

https://github.com/mikeferguson/robomagellan_rp2040_firmware

 

 

 

 

Documents
Comments Write