---
title: "micro_ros_raspberrypi_pico_sdk"
url: "https://maker.wiznet.io/Benjamin/projects/micro-ros-raspberrypi-pico-sdk/"
markdown_url: "https://maker.wiznet.io/Benjamin/projects/micro-ros-raspberrypi-pico-sdk/md"
type: "UCC: User Created Content"
author: "NITK.K ROS-Team"
author_url: "https://github.com/NITKK-ROS-Team/micro_ros_raspberrypi_pico_sdk"
editor: "WIZnet"
editor_url: "https://maker.wiznet.io/"
original_author: "NITK.K ROS-Team"
original_url: "https://github.com/NITKK-ROS-Team/micro_ros_raspberrypi_pico_sdk"
license: "Apache License 2.0 (Apache-2.0)"
published: "2025-12-04"
language: "en"
likes: 0
views: 552
comments: 0
source: "WIZnet Makers (https://maker.wiznet.io/)"
---

# micro_ros_raspberrypi_pico_sdk

> RP2040 and micro-ROS integration (USB, Wi-Fi, Ethernet)

Original author: NITK.K ROS-Team (source: https://github.com/NITKK-ROS-Team/micro_ros_raspberrypi_pico_sdk)

## Article

> **Original Project by NITKK-ROS-Team on GitHub** This project is maintained by the NITKK-ROS-Team. It is a widely recognized repository in the micro-ROS community, validated by various maker projects such as **Ar-Ray-code's micro_ros_pico_w_robot**.

**1. Introduction: What is micro-ROS?**

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

*출처 : https://micro.ros.org/*

- **Definition**: micro-ROS is a lightweight version of ROS 2 designed for microcontrollers (MCUs) with limited RAM and Flash. It enables these MCUs to act as first-class **End-Nodes** in the ROS 2 ecosystem, participating directly in the data graph via Publisher/Subscriber mechanisms.

- **The Protocol**: It uses **DDS-XRCE** (Data Distribution Service for eXtremely Resource Constrained Environments), a lightweight standard that ultimately relies on **UDP/TCP** transport. This is where the network performance becomes critical.

**2. Market Context & WIZnet Strategy**

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

- **Current Landscape**: The current micro-ROS maker market is dominated by ESP32-based Wi-Fi solutions. While convenient, they often fail to meet the stability requirements of industrial robotics.

- **The Niche Opportunity**: There is a clear **Niche Market** that demands the reliability of Ethernet over the convenience of Wi-Fi. WIZnet aims to capture this market by proving the superiority of **TOE (TCP/IP Offload Engine)** technology.

- **Our Strategic Goals**:
  1. **Prove Performance**: Demonstrate that W5500 (TOE) outperforms software stacks (LwIP) in stability and latency.
  2. **Official Standardization**: Register the **W55RP20-EVB-Pico** as an official micro-ROS platform board (<https://micro.ros.org/>).
  3. **High-Performance Reference**: Provide a reference design for a high-performance network End-Node that goes beyond simple PoC.

**3. Why WIZnet? (TOE vs LwIP)**

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

- **The LwIP Bottleneck**: In ESP32 or Pico W, the TCP/IP stack (LwIP) runs in software on the main MCU. This consumes significant CPU cycles and memory. More critically, heavy network traffic can interrupt the robot's control loops, causing jitter.

- **The TOE Advantage**: WIZnet's **W5500** handles the entire TCP/IP stack in hardware.
  - **Offloading**: The RP2040 cores are free to run complex ROS 2 logic and motor control loops.
  - **Stability**: Hardware-based processing guarantees consistent latency, which is non-negotiable for real-time robotic control.

- **W55RP20: The Ultimate Solution**: The **W55RP20** combines the RP2040 and W5500 into a single chip. This offers the perfect form factor for a compact, industrial-grade micro-ROS node, eliminating the need for bulky shields and complex wiring.

**4. Technical Deep Dive (Code Level)**

- **Modular Architecture**: The repository is designed for extensibility. A look at `CMakeLists.txt` shows how the transport layer is isolated:

```plaintext
add_executable(main
    main.c
    interface/common/transport_common.c
    interface/wifi/pico_wifi_transport.c  <-- The Target
    interface/uart/pico_uart_transport.c
)
```

- **Implementation Plan**: To enable W55RP20, we don't need to rewrite the core. We simply need to:
  1. Create `interface/ethernet/pico_ethernet_transport.c`.
  2. Implement the `uxr_custom_transport` functions (open, close, write, read) using **WIZnet's ioLibrary_Driver**.
  3. Update `CMakeLists.txt` to link against the WIZnet driver instead of the Wi-Fi driver.

**5. Community Validation**

- **Proven Reliability**: This SDK is not experimental. It has been validated by **Ar-Ray-code**, who forked this repository to build the **micro_ros_pico_w_robot**. This real-world implementation proves the library's stability in mobile robotics. Adding Ethernet support to such a well-regarded library will immediately benefit a large, active user base.

- <https://ar-ray.hatenablog.com/entry/2023/08/20/212113>

- ![](https://maker.wiznet.io/upload/ckeditor5/206447314%5F1764935334%2Epng)

- ![](https://maker.wiznet.io/upload/ckeditor5/206447314%5F1764935268%2Epng)

**6. How to Build (Proposed for W55RP20)**

- **Step-by-Step**:
  1. **Install Dependencies**: Pico SDK, CMake, GCC ARM Toolchain.
  2. **Clone Repo**: `git clone https://github.com/NITKK-ROS-Team/micro_ros_raspberrypi_pico_sdk`
  3. **Configure**: (After our contribution) Set `PICO_BOARD=w55rp20_evb_pico` in CMake.
  4. **Build**: `mkdir build && cd build && cmake .. && make`
  5. **Run Agent**: Use the official Docker image: `docker run -it --rm --net=host microros/micro-ros-agent:humble udp4 --port 8888`

---

**[Korean Version]원문 출처 (Source Mention)**

> **Original Project by NITKK-ROS-Team on GitHub** 이 프로젝트는 **NITKK-ROS-Team** (일본 기타큐슈 공업고등전문학교)에 의해 관리됩니다. 주목할 점은 패키지 관리자가 micro-ROS 개발사인 **eProsima의 Pablo Garrido**로 등록되어 있다는 것입니다. 이는 기술적 신뢰도가 매우 높으며 공식 채택될 가능성이 큼을 시사합니다. 또한 **Ar-Ray-code**와 같은 커뮤니티 기여자들에 의해 활발히 지원받고 있습니다.

**1. 소개: micro-ROS란 무엇인가? (Introduction)**

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

*출처 : https://micro.ros.org/*

- **정의**: micro-ROS는 RAM과 플래시 메모리가 제한적인 마이크로컨트롤러(MCU)를 위해 설계된 경량 ROS 2 솔루션입니다. 이를 통해 MCU가 ROS 2 생태계의 **최종 노드(End-Node)**로서 직접 참여하여, Publisher/Subscriber 메커니즘을 통해 데이터를 주고받을 수 있게 합니다.

- **프로토콜**: ROS 2의 표준인 DDS를 경량화한 **DDS-XRCE**를 사용하며, 이는 궁극적으로 **UDP/TCP** 전송 계층에 의존합니다. 바로 이 지점에서 네트워크 성능과 안정성이 시스템 전체의 품질을 좌우하게 됩니다.

**2. 시장 상황 및 위즈네트 전략 (Market Context & Strategy)**

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

- **현재 시장**: 초기 Maker 시장은 ESP32 기반의 Wi-Fi 솔루션이 주류를 이루고 있습니다. 하지만 무선 연결은 산업용 로봇이 요구하는 엄격한 안정성을 충족시키기 어렵습니다.

- **틈새 시장 (Niche Market)**: Wi-Fi의 불안정성을 극복하기 위해 이더넷의 신뢰성을 필요로 하는 시장이 분명히 존재합니다. 위즈네트는 **TOE(TCP/IP Offload Engine)** 기술의 우수성을 앞세워 이 시장을 공략하고자 합니다.

- **전략적 목표**:
  1. **성능 입증**: 범용 LwIP(소프트웨어 스택) 대비 TOE의 압도적인 성능과 안정성을 데이터로 증명합니다.
  2. **공식 표준화**: **W55RP20-EVB-Pico**를 micro-ROS 공식 플랫폼 보드(<https://micro.ros.org/>)로 등재하여 기술 표준 위치를 확보합니다.
  3. **고성능 레퍼런스**: 단순한 개념 증명(PoC)을 넘어, 실제 현장에서 사용 가능한 고성능 네트워크 End-Node 레퍼런스를 제공합니다.

**3. 왜 WIZnet인가? (TOE vs LwIP)**

로봇 제어에서는 **'Real-time Stability'**가 핵심

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

- **LwIP의 병목현상**: ESP32나 Pico W에서 사용하는 소프트웨어 TCP/IP 스택(LwIP)은 메인 MCU의 자원을 상당히 소모합니다. 특히 네트워크 트래픽이 몰릴 경우, CPU가 패킷 처리에 매달리느라 로봇의 제어 루프를 방해하여 **지터(Jitter)**를 유발할 수 있습니다.

- **TOE의 우위**: 위즈네트의 **W5500**은 TCP/IP 스택 전체를 하드웨어로 처리합니다.
  - **오프로딩 (Offloading)**: RP2040 코어는 네트워크 처리 부담에서 완전히 해방되어, 오직 애플리케이션 로직에만 집중할 수 있습니다.
  - **안정성**: 하드웨어 기반 처리는 일정한 지연 시간(Deterministic Latency)을 보장하며, 이는 실시간 제어에 필수적입니다.

- **W55RP20: 궁극의 솔루션**: **W55RP20**은 RP2040과 W5500을 단일 칩으로 통합했습니다. 이는 복잡한 배선이나 부피 큰 쉴드 없이도, 가장 컴팩트하고 강력한 산업용 micro-ROS 노드를 구현할 수 있게 해줍니다.

**4. 기술적 심층 분석 (Technical Deep Dive)**

- **모듈화된 아키텍처**: 이 리포지토리는 확장성을 고려해 설계되었습니다. `CMakeLists.txt`를 보면 전송 계층이 어떻게 격리되어 있는지 확인할 수 있습니다:

- ![](https://maker.wiznet.io/upload/ckeditor5/206447314%5F1764935061%2Epng)

- **구현 계획**: W55RP20을 지원하기 위해 코어 로직을 뜯어고칠 필요가 없습니다. 우리는 단지 다음 단계만 수행하면 됩니다:
  1. `interface/ethernet/pico_ethernet_transport.c` 파일을 생성합니다.
  2. **WIZnet ioLibrary_Driver**를 사용하여 `uxr_custom_transport` 함수들(open, close, write, read)을 구현합니다.
  3. `CMakeLists.txt`에서 Wi-Fi 드라이버 대신 WIZnet 드라이버를 링크하도록 수정합니다.

**5. 커뮤니티 검증 (Community Validation)**

- **입증된 신뢰성**: 이 SDK는 실험적인 코드가 아닙니다. **Ar-Ray-code**가 이 리포지토리를 포크하여 **micro_ros_pico_w_robot**을 제작함으로써 그 안정성을 입증했습니다. 이러한 실제 구현 사례는 모바일 로보틱스 분야에서의 라이브러리 신뢰성을 증명합니다. 이렇게 검증된 라이브러리에 이더넷 지원을 추가하는 것은 거대한 잠재 사용자층에게 즉각적인 혜택을 줄 것입니다.

- <https://ar-ray.hatenablog.com/entry/2023/08/20/212113>

- ![](https://maker.wiznet.io/upload/ckeditor5/206447314%5F1764935334%2Epng)

- ![](https://maker.wiznet.io/upload/ckeditor5/206447314%5F1764935268%2Epng)

**6. 빌드 방법 (W55RP20 제안)**

- **단계별 가이드**:
  1. **의존성 설치**: Pico SDK, CMake, GCC ARM Toolchain.
  2. **리포지토리 복제**: `git clone https://github.com/NITKK-ROS-Team/micro_ros_raspberrypi_pico_sdk`
  3. **설정**: (기여 완료 후) CMake에서 `PICO_BOARD=w55rp20_evb_pico` 설정.
  4. **빌드**: `mkdir build && cd build && cmake .. && make`
  5. **에이전트 실행**: 공식 도커 이미지 사용: `docker run -it --rm --net=host microros/micro-ros-agent:humble udp4 --port 8888`

## **DOCUMENTS (문서 및 자료)**

- **Code**: <https://github.com/NITKK-ROS-Team/micro_ros_raspberrypi_pico_sdk>

- **Community Reference**: <https://github.com/Ar-Ray-code/micro_ros_pico_w_robot> (Validated by Ar-Ray-code)

- **Official Docs**: <https://micro.ros.org/>

---

Source: https://maker.wiznet.io/Benjamin/projects/micro-ros-raspberrypi-pico-sdk/
