wn42
코딩이랑 이것저것
wn42
전체 방문자
오늘
어제
  • 분류 전체보기 (113)
    • 프로그래머스 (23)
      • LV1 (11)
      • LV2 (1)
      • LV3 (3)
      • 연습 (8)
    • 딥러닝 공부 (0)
      • 머신러닝&딥러닝 이론 (0)
    • 임베디드 (17)
      • Adventure Design (1)
      • 센서기반모바일로봇 (5)
      • ROS (9)
      • Google Coral (2)
    • C++ (38)
      • C++ 기초 (34)
      • 자료구조 및 알고리즘 (4)
    • Python (14)
      • 기본 파이썬 문법 (6)
      • Python 기초 (8)
    • 빅데이터 (9)
      • 빅데이터 첫걸음 시작하기(국비지원) (5)
      • 빅데이터 공부 (4)
    • 알고리즘 공부 (2)
      • 기본 알고리즘 (2)
    • 전자공학 (10)
      • 반도체 공정 (3)
      • 무선데이터통신 (7)
      • 반도체공학 (0)
    • C# (0)
      • C# 기본 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • google coral
  • 데이터분석
  • c++
  • stl
  • 데이터분석 인강
  • 프로그래머스
  • 조건문
  • 빅데이터 첫걸음 시작하기
  • 상속
  • 빅데이터
  • 패스트캠퍼스
  • 딥러닝
  • Queue
  • Python
  • numpy
  • 스택
  • 변수
  • ROS
  • 반복문
  • 클래스
  • 정렬
  • 스택/큐
  • 바이트디그리
  • 큐
  • K디지털크레딧
  • 파이썬
  • 내일배움카드
  • 노드
  • 소멸자
  • 인스턴스

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
wn42

코딩이랑 이것저것

ROS 임베디드 시스템
임베디드/ROS

ROS 임베디드 시스템

2022. 3. 16. 23:17

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

  • ROS 설치 가능
    • ARM A-class - Samsung Exynos... / ODROID...
    • x86 - Intel Core i-series... / Intel NUC...
  • ROS 설치 불가능
    • 32-bit MCU - ARM Cortex-M0, ARM Cortex-M7 ...
    • 8/16-bit MCU - Atmel AVR, Arduino Leonardo ...
    • PC와는 달리 임베디드 시스템에서는 ROS 설치 불가능
    • 대신 ROS가 설치 가능한 하드웨어와 USB로 연결이 가능(ROS는 rosserial이라는 패키지를 제공 / PC 등에서 구동)
    • 임베디드 시스템은 모터 제어, 센서 조정 값 등을 ROS가 설치된 PC로 전달

rosserial

  • PC와 제어기 간의 메시지 통신을 위해 중계자 역할을 수행하는 ROS 패키지

rosserial server

  • rosserial_python: python 기반 rosserial server, 제일 많이 사용됨
  • rosserial_server: C++ 기반, 일부 기능 제약
  • rosserial_java: Java 기반, 안드로이드 SDK와 사용

rosserial client

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

rosserial 프로토콜

메시지는 시리얼로 1byte(8bits)씩 전송되고 각각 아래의 순서와 정보로 전달된다.

  • 1st Byte - Sync Flag: 패킷의 시작 위치를 알기 위한 헤더
  • 2nd Byte - Sync Flag / Protocol version: 프로토콜 버전
  • 3rd Byte - Message Length(N) - Low Byte: 메시지의 데이터 길이, Low가 먼저 전송됨
  • 4th Byte - Message Length(N) - High Byte: 메시지의 데이터 길이, High가 나중에 전송됨
  • 5th Byte - Checksum over message length: 메시지 길이 헤더의 유효성 검증을 위한 체크섬. Checksum = 255 - ((Message Length Low Byte + Message Length High Byte) % 256)
  • 6th Byte - Topic ID - Low Byte: 메시지의 형태를 구분하기 위한 ID의 Low Byte
  • 7th Byte - Topic ID - High Byte: 메시지의 형태를 구분하기 위한 ID의 High Byte
  • N Byte - Serialized Message Data: 송/수신 메시지를 시리얼 형태로 전송하기 위한 데이터. ex) IMU, TF, GPIO 데이터
  • Byte N+8 - Checksum over Topic ID and Message Data: Topic ID와 메시지 데이터의 유효성 검증을 위한 체크섬. Checksum = 255 - ((Topic ID Low Byte + Topic ID High Byte + data byte values) % 256)

rosserial 제약사항

  • 메모리: 퍼블리셔, 서브스크라이버 개수 및 송신, 수신 버퍼의 크기를 미리 정의해야 함
  • Float64: 마이크로컨트롤러는 64비트 실수연산을 지원하지 않아 32비트형으로 변경
  • Strings: 문자열 데이터를 String 메시지 안에 저장하지 않고 외부에서 정의한 문자열 데이터의 포인터 값만 메시지에 저장
  • Arrays: 메모리 제약사항으로 배열의 크기를 지정해서 사용
  • 통신 속도: UART 같은 경우 115200bps와 같은 속도로는 메시지의 개수가 많아지면 응답 및 처리속도가 느려짐

 

출처

  • ROS 강의 Chapter9. 임베디드 시스템: https://www.youtube.com/watch?v=VKNVj9IDMeo&list=PLRG6WP3c31_VIFtFAxSke2NG_DumVZPgw&index=9
  • Roswiki: http://wiki.ros.org/rosserial/Overview/Protocol
    '임베디드/ROS' 카테고리의 다른 글
    • SLAM & Navigation
    • ROS 모바일로봇
    • ROS 프로그래밍 실습(이동, 회전)
    • ROS 프로그래밍
    wn42
    wn42
    코딩이랑 이것저것 하는 블로그

    티스토리툴바