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
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 펌웨어 수정 없이 실행만 하는 경우 하드웨어 연결 후 에이전트 서버 바로 실행
Reference)
https://www.robotstory.co.kr/king/?vid=901