9. 임베디드 시스템

Speedwell🍀·2022년 3월 13일
0

1. rosserial

컴퓨터 자원의 종류와 ROS 지원

  • x86은 컴퓨터/노트북, ARM A-class는 스마트폰에 사용됨

  • MCU계열은 로봇 제어 관련


ROS에서 임베디드 시스템

  • PC와는 달리 임베디드 시스템에서는 ROS 설치가 불가능

  • 실시간성 확보 및 하드웨어 제어를 위해서는 ROS가 설치된 PC와 임베디드 시스템 간의 연결이 요구됨

  • ROS에서는 이를 위해 rosserial이라는 패키지를 제공

OpenCR과 Rasberry Pi 3를 USB 혹은 시리얼 연결.
이 둘 사이에 데이터를 주고받는데, Rasberry Pi 3에서는 ROS 메시지를 사용! 하지만 OpenCR에서는 바로 사용 불가능 ➡️ 이 변환을 담당하는 게 rosserial


rosserial

  • PC와 제어기 간의 메시지 통신을 위해 중계자 역할을 수행하는 ROS 패키지
    • 예) 제어기 ➡ 시리얼(rosserial 프로토콜) ➡ PC(ROS 메시지로 재전송)
    • 예) 제어기 ⬅ 시리얼(rosserial 프로토콜) ⬅ PC(ROS 메시지를 시리얼로 변경)

rosserial server와 client

$ sudo apt install ros-kinetic-rosserial ros-kinetic-rosserial-server ros-kinetic-rosserial-arduino

  • rosserial server

    • rosserial_python: Python 언어 기반의 rosserial server, 매우 많이 사용됨
    • rosserial_server: C++ 언어 기반의 rosserial server, 일부 기능 제약 있음
    • rosserial_java: Java 언어 기반의 rosserial server, 안드로이드 SDK와 함께 사용
  • rosserial client:

    • rosserial_arduino: Arduino와 Leonardo 지원, OpenCR은 수정하여 사용 중
    • rosserial_embeddedlinux: 임베디드용 리눅스용 라이브러리
    • rosserial_windows: 윈도우 운영체제 지원, 윈도우의 응용프로그램과 통신 지원
    • rosserial_mbed: ARM사의 mbed 지원
    • rosserial_tivac: TI사의 Launchpad 지원

⭐rosserial 프로토콜

http://wiki.ros.org/rosserial/Overview/Protocol


rosserial 제약사항

  • 메모리

    • Publisher, Subscriber 개수 및 송신, 수신 버퍼의 크기를 미리 정의해야 함
  • Float64

    • 마이크로컨트롤러는 64비트 실수연산을 지원하지 않아 32비트형으로 변경함
  • Strings

    • 문자열 데이터를 String 메시지 안에 저장하지 않고 외부에서 정의한 문자열 데이터의 포인터 값만 메시지에 저장함
  • Arrays

    • 메모리 제약사항으로 배열의 크기를 지정해서 사용
  • 통신 속도

    • UART 같은 경우 115200bps와 같은 속도로는 메시지의 개수가 많아지면 응답 및 처리 속도가 느려짐

2. OpenCR; Open-source Control module for ROS

  • ROS를 지원하는 임베디드 보드

  • 터틀봇3에서 메인 제어기로 사용됨

  • 오픈소스 H/W, S/W: 회로, BOM, 거버 데이터 등의 H/W 정보 및 OpenCR의 모든 S/W를 오픈소스로 공개

  • rosserial의 제약 사항을 극복하기 위한 구성

    • 32-bit ARM Cortex-M7 with FPU (216MHz, 462DMIPS)
    • 1MB 플래시 메모리
    • 320KB SRAM
    • Float64 지원
    • UART가 아닌 USB 패킷 전송 사용
  • SBC 계열의 컴퓨터와 다양한 센서와 함께 사용하기 위한 전원 설계

    • 12V@1A, 5V@4A, 3.3V@800mA
  • 확장 포트

    • 32 pins(L 14, R 18) - Arduino connectivity
    • OLLO Sensor module x 4 pins
    • Extension connector x 18 pins

기본 장착 센서 및 통신 지원

  • 기본 장착 센서
    • Gyroscope 3Axis
    • Accelerometer 3Axis
    • Magnetometer 3Axis
    • 전압 측정 회로

  • 통신 지원
    • USB, SPI, I2C
    • TTL, RS485, CAN

블록 다이어그램 및 플래시 메모리 맵


개발환경 구축


3. 터틀봇3 펌웨어


참고)
강의: https://www.youtube.com/watch?v=VKNVj9IDMeo&list=PLRG6WP3c31_VIFtFAxSke2NG_DumVZPgw&index=9&ab_channel=ROBOTISOpenSourceTeam
자료: https://github.com/robotpilot/ros-seminar/blob/master/09_%EC%9E%84%EB%B2%A0%EB%94%94%EB%93%9C_%EC%8B%9C%EC%8A%A4%ED%85%9C.pdf

0개의 댓글