Robotics/ROS2

Micro-ROS 테스트

gspark 2023. 2. 24. 20:42

ROS - MCU 간 통신

- XRCE-DDS(eXtremely Resource Constrained Environments DDS) 프로토콜

- 사용가능 패키지

1. ros2arduino  >> ROS2 Dashing 까지 지원

2. micro_ros  >> ROS2 최신버전 모두 지원 (Foxy, Galactic, Humble, Rolling)

 

Micro-ROS

리눅스 PC(ROS2 Foxy)와 ESP32 개발보드 사이 통신 테스트를 진행

micro-ROS 펌웨어 생성, 환경설정, 빌드 및 업로드 과정은 아두이노 IDE 환경에서도 가능

(아두이노 IDE 사용하는 경우 micro-ROS 펌웨어 과정 생략)

1. ESP-IDF 설치

ESP32 소프트웨어 개발 프레임워크

$ mkdir esp && cd esp
$ git clone --recursive https://github.com/espressif/esp-idf.git
$ cd esp-idf && ./install.sh
$ . ./export.sh

2. micro-ROS 패키지 설치

$ sudo apt install python3-pip
$ sudo apt install python3-rosdep2          # ros 의존성 확인해 설치하는 패키지 설치
$ sudo apt install python3-colcon-common-extensions # colcon 빌드 시스템 설치

$ cd ~/ros_ws
$ git clone -b $ROS_DISTRO https://github.com/micro-ROS/micro_ros_setup.git src/micro_ros_setup # src 폴더에 다운로드 됨

$ sudo apt update && rosdep update          # 패키지 업데이트
$ rosdep install --from-path src --ignore-src -y   # 종속성 패키지 설치

$ colcon build --symlink-install --packages-select micro_ros_setup
$ source install/setup.bash

3. micro-ROS 펌웨어 생성

$ ros2 run micro_ros_setup create_firmware_ws.sh [RTOS] [Platform]

## example)
# Creating a NuttX + micro-ROS firmware workspace
$ ros2 run micro_ros_setup create_firmware_ws.sh nuttx olimex-stm32-e407

# Creating a FreeRTOS + micro-ROS firmware workspace
$ ros2 run micro_ros_setup create_firmware_ws.sh freertos olimex-stm32-e407

# Creating a Zephyr + micro-ROS firmware workspace
$ ros2 run micro_ros_setup create_firmware_ws.sh zephyr olimex-stm32-e407

firmware 폴더가 생성됨

4. micro-ROS 펌웨어 환경설정

프로젝트는 firmware/freertos_app/apps 폴더 아래 존재

- MCU 펌웨어 작업은 아래 그림처럼 폴더 만들어서 소스 코드 추가

$ ros2 run micro_ros_setup configure_firmware.sh [프로젝트 이름] -t serial
$ ros2 run micro_ros_setup configure_firmware.sh [프로젝트 이름] -t udp -i [ip주소] -p [포트]

## example) -t(전송모드) 옵션으로 serial, udp, tcp 존재
$ ros2 run micro_ros_setup configure_firmware.sh int32_publisher -t udp -i 127.0.0.1 -p 8888
$ ros2 run micro_ros_setup build_firmware.sh menuconfig # udp/tcp인 경우 wifi 정보 설정 필요

 

5. micro-ROS 펌웨어 빌드 및 업로드

flash_firmware 과정에서 Port 권한 오류 발생할 수 있음

$ ros2 run micro_ros_setup build_firmware.sh  # 선택된 프로젝트 빌드

$ sudo chmod a+rw /dev/tty*            # /dev/tty* 권한 추가 (MCU가 연결된 디바이스 포트 먼저 확인)
$ ros2 run micro_ros_setup flash_firmware.sh  # 빌드한 펌웨어 MCU 보드로 업로드 (MCU 연결된 상태에서 진행)

6. 에이전트 서버 구성

최초 1번만 진행

$ ros2 run micro_ros_setup create_agent_ws.sh

$ ros2 run micro_ros_setup build_agent.sh
$ source install/local_setup.bash

7. 에이전트 서버 실행

configure_firmware에서 설정한 전송모드와 동일한 전송모드로 실행

MCU 리셋 버튼 눌러주면 보드 통신이 연결된 것을 확인할 수 있음 (토픽 메시지로도 확인 가능)

## example)
$ ros2 run micro_ros_agent micro_ros_agent udp4 --port 8888
$ ros2 run micro_ros_agent micro_ros_agent serial --dev /dev/ttyACM0  # 해당 MCU 디바이스 포트로 설정

 

※ MCU 펌웨어 수정 없이 실행만 하는 경우 하드웨어 연결 후 에이전트 서버 바로 실행

MCU 연결 전
MCU 연결된 상태
micro-ros 토픽

 

Reference)

https://www.robotstory.co.kr/king/?vid=901