ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Micro-ROS 테스트
    Robotics/ROS2 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

    'Robotics > ROS2' 카테고리의 다른 글

    Livox MID-360 동작 테스트  (1) 2023.02.12
Designed by Tistory.