---
title: "MCB_ROS"
url: "https://maker.wiznet.io/mason/projects/mcb-ros/"
markdown_url: "https://maker.wiznet.io/mason/projects/mcb-ros/md"
type: "UCC: User Created Content"
author: "medlabprojects"
author_url: "https://github.com/medlabprojects/MCB_ROS"
editor: "WIZnet"
editor_url: "https://maker.wiznet.io/"
original_author: "medlabprojects"
original_url: "https://github.com/medlabprojects/MCB_ROS"
license: "GNU General Public License, version 3 or later (GPL3+)"
published: "2025-12-10"
language: "en"
tags: ["W5500"]
hardware: ["WIZnet W5500", "Teensy USB 3.2 Development Board"]
likes: 0
views: 356
comments: 0
source: "WIZnet Makers (https://maker.wiznet.io/)"
---

# MCB_ROS

> MCB_ROS

Original author: medlabprojects (source: https://github.com/medlabprojects/MCB_ROS)

## Components

- **WIZnet W5500** x 1 ([docs](https://docs.wiznet.io/Product/Chip/Ethernet/W5500))
- **Teensy USB 3.2 Development Board** x 1 ([docs](https://www.pjrc.com/store/))

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/))

## Documents and links

- [Github Code](https://github.com/medlabprojects/MCB_ROS) (code)

## Article

## MCB_ROS란?

**MCB_ROS**는 **ROS 환경에서 Ethernet을 통해** 모터 컨트롤 보드를 제어하기 위한 **Teensy 펌웨어 프로젝트**입니다. ROS 워크스테이션에서 토픽을 발행하면, 보드는 엔코더 피드백을 이용해 **Closed-loop 제어**를 수행하고 상태를 다시 토픽으로 제공합니다.

---

## 하드웨어 구성: Teensy + WIZnet Ethernet 모듈

프로젝트에서 전제로 하는 대표 구성은 다음과 같습니다.

**Teensy 3.2WIZnet Ethernet 모듈**: WIZ820io 또는 WIZ850io(+ Teensy 어댑터)

Motor Control Board + daughterboard(및 모터 앰프 구성)

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

이미지 출처 : AI 생성

---

## W5500의 역할: “ROS ↔ Teensy”를 이어주는 Ethernet 통신 엔진

MCB_ROS에서 **W5500(또는 W5500 기반 모듈)**은 단순히 LAN 케이블을 꽂는 부품이 아니라, **Teensy가 ROS PC와 안정적으로 소켓 통신을 하도록 만드는 핵심 하드웨어**입니다.

**유선 Ethernet 연결 제공**(10/100 MAC/PHY 통합)

**TCP/UDP/IP 처리를 하드웨어로 오프로딩(Hardwired TCP/IP)** → MCU 부담을 크게 줄이고 구현을 단순화

MCB_ROS 동작 흐름에서도 보드가 **WIZnet Ethernet 보드를 초기화하고 rosserial_server에 연결을 시도**한다고 명시

---

## rosserial_server란? 왜 필요한가?

ROS 토픽/서비스 세계를 임베디드 장치가 직접 “ROS 네이티브”로 붙기엔 부담이 큽니다. 그래서 **rosserial**이 ROS 메시지를 직렬화해 임베디드로 보내고, PC 쪽에서 이를 ROS 그래프에 연결해 주는 **브리지 노드**가 필요합니다. 그게 **rosserial_server**예요.

MCB_ROS는 이 브리지를 **Ethernet 소켓 방식**으로 구성합니다.

ROS PC에서 `roslaunch rosserial_server socket.launch` 실행

Teensy+WIZnet(W5500 계열)이 **TCP 소켓으로 접속**

rosserial_server가 데이터를 받아 **ROS 토픽으로 재퍼블리시/연결**

즉, **W5500(네트워크) + rosserial_server(ROS 브리지)** 조합이 MCB_ROS의 “ROS 연동 통로”를 완성합니다.

---

## 주요 ROS 토픽(핵심)

상태/요청: `/status`, `/get_status`

제어 시작: `/enable_ros_control`

엔코더: `/encoder_current`, `/encoder_command`

PID 튜닝: `/set_gains` (토픽으로 게인 설정)

## What is MCB_ROS?

MCB_ROS is a Teensy firmware project designed to control a motor control board over Ethernet in a ROS environment. When the ROS workstation publishes topics, the board performs closed-loop control using encoder feedback and publishes its status back as ROS topics.

---

## Hardware Setup: Teensy + WIZnet Ethernet Module

A typical setup assumed by this project is:

**Teensy 3.2WIZnet Ethernet module:** WIZ820io or WIZ850io (+ Teensy adapter)

**Motor Control Board + daughterboard** (and a motor amplifier setup)

---

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

**Image source:** AI-generated

---

## Role of the W5500: The Ethernet Communication Engine Linking “ROS ↔ Teensy”

In MCB_ROS, the **W5500 (or a W5500-based module)** is not just a component for plugging in a LAN cable—it is the key hardware that enables the Teensy to communicate reliably with a ROS PC via sockets.

Provides **wired Ethernet connectivity** (integrated 10/100 MAC/PHY)

**Hardware offload** of TCP/UDP/IP processing (Hardwired TCP/IP) → greatly reduces the MCU’s workload and simplifies implementation

The MCB_ROS operation flow also explicitly states that the board **initializes the WIZnet Ethernet board and attempts to connect to **`**rosserial_server**`

---

## What is `rosserial_server`, and why is it needed?

It can be heavy for an embedded device to connect “natively” to the ROS topic/service ecosystem. That’s why **rosserial** serializes ROS messages and sends them to the embedded device, and a **bridge node** on the PC side is needed to connect that link to the ROS graph. That bridge is `**rosserial_server**`.

MCB_ROS implements this bridge using an **Ethernet socket** approach:

Run `roslaunch rosserial_server socket.launch` on the ROS PC

The **Teensy + WIZnet (W5500 family)** connects via a TCP socket

`rosserial_server` receives the data and **republishes/bridges it into ROS topics**

In other words, the combination of **W5500 (network)** + `**rosserial_server**`** (ROS bridge)** completes the ROS integration path for MCB_ROS.

---

## Key ROS Topics (Core)

Status/Request: `/status`, `/get_status`

Start control: `/enable_ros_control`

Encoder: `/encoder_current`, `/encoder_command`

PID tuning: `/set_gains` (set gains via topic)

---

Source: https://maker.wiznet.io/mason/projects/mcb-ros/
