[Micro-ROS] ESP32 펌웨어 빌드와 Agent 연결

hyoin·2026년 1월 25일

ROS2 부트캠프

목록 보기
5/11
post-thumbnail

Micro ROS의 필요성

micro ros는 ROS2의 개념을 MCU 버전에 맞게 줄여서 넣은 버전이라고 생각하면 됩니다.
ROS2 vs Micro-ROS:

  • ROS2: 컴퓨터 등 비교적 리소스 넉넉한 시스템용
  • micro-ros: 수십~수백 KB RAM 등 MCU같은 리소스 제한 환경용
    센서보드/모터보드 같은 MCU를 ROS2에 편입시키고 싶을 때 주로 사용합니다.
    저는 실습 때 ESP32 보드를 사용했습니다.

아키텍처

큰 흐름

ROS2랑 비슷한 기능을 수행하면서 어떻게 리소스를 줄였을까요? 일단 micro ros가 들어가는 MCU는 ROS2가 돌아갈 만큼의 리소스를 가진 컴퓨터가 필요합니다.

MCU 쪽엔 micro-ROS client, PC 쪽에 micro-ROS Agent가 있고, Agent가 ROS2 DDS로 브릿지 역할을 해 MCU 노드를 ROS2 시스템에 붙여줍니다.

  • Agent의 역할: micro ROS client는 DDS-XRCE 프로토콜로 Agent와만 통신합니다. Agent가 DDS 네트워크로 변환해서 ROS2 전체 시스템과 연결해 줍니다.

OS

FreeRTOS 등의 RTOS가 돌아갑니다. ROS2는 일반 리눅스에서도 돌고, 필요하면 RTOS + DDS 튜닝으로 하드 실시간도 노릴 수 있습니다.

네트워크/인터페이스

  • ROS2: 주로 Ethernet/Wi-Fi 상의 DDS 통신으로 설계되었습니다.
  • micro-ROS: DDS-XRCE 기반으로 시리얼, CAN, Ethernet 등 다양한 링크 위에서 ROS2와 통신할 수 있게 설계되었습니다.

이미지 생성

일반적인 리눅스/라즈베리 파이랑은 다르게 조금 복잡했습니다. 펌웨어 이미지를 굽고, Agent까지 빌드 및 실행해야 했습니다.

1. micro-ROS 소스코드 다운로드

micro-ROS도 이미지를 구워야만 사용할 수 있습니다. 2026년 1월 기준으로, 충돌이 발생하기 쉽기 때문에, 도커 컨테이너를 만들어 해당 컨테이너 안에서 작업을 수행했습니다.
Docker Hub-ROS

조금 신기했던 점은, 도커 허브의 ROS레포, ROS2레포가 제 생각과는 다른 네이밍이라는 점입니다.

  • ROS 레포: ROS1과 ROS2 모두 포함. 일반적인 개발용도에 적합
  • ROS2 레포: ROS2 전용. 실험적 기능/ 불안정한 인터페이스
    ROS 레포에서 ROS2용 배포버전(Jazzy 등)을 태그에서 선택하면 됩니다.

2. 펌웨어 프로젝트 생성

ros2 run micro_ros_setup create_firmware_ws.sh freertos esp32

이때 코드 편집기(vim/nano 등), 예제 코드를 다운해 둡니다.
예제 코드는 ping-pong을 사용했는데, 해당 예제코드만 그런 건지는 모르겠지만, app.c에서 ROS_DOMAIN_ID 초기화를 설정해야 했습니다. 이건 리팩토링하면 좋을 텐데... 조금 아쉬웠습니다.
게다가 초기화 문제를 잘 설정하지 않으면 USB를 인식하지 못했습니다.
추가로, USB 권한이 crw-rw-rw- 일 때 제대로 USB를 인식했습니다.

3. 펌웨어 빌드 및 플래시

빌드:

ros2 run micro_ros_setup build_firmware.sh

평범하게 run으로 build shell 파일을 실행하면 됩니다.

플래시:

ros2 run micro_ros_setup flash_firmware.sh

이것 또한 run으로 flash shell 파일을 실행합니다.

5. Agent 빌드 및 실행

MCU에 펌웨어를 올렸다고 끝이 아닙니다. 아키텍처에 있는 Agent를 실행해야만 MCU와 ROS2 네트워크가 연결됩니다.

Agent 빌드:

ros2 run micro_ros_setup create_agent_ws.sh
ros2 run micro_ros_setup build_agent.sh

Agent 실행:

ros2 run micro_ros_agent micro_ros_agent serial --dev /dev/ttyUSB0 -b 115200

Agent까지 실행되면 MCU의 노드가 ROS2 네트워크에 나타납니다. 또, node/topic list가 예제 프로그램에 대해 나타나는 걸 알 수 있습니다.

참고 자료

profile
배워야 할 게 많은 개발자... 하지만 공부를 포기하지 않지!!

0개의 댓글