차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
activity:public:2020:ros:210120 [2021/01/20 14:39:45] khr9648activity:public:2020:ros:210120 [2021/01/27 11:35:45] (현재) – Youtube 링크 추가 david
줄 3: 줄 3:
 ZOOM 화상회의 ZOOM 화상회의
  
-====1. 개념====+{{youtube>xNYE07gjrds?medium}} 
 + 
 +=====1. 개념=====
 **임베디드 시스템(embedded system, 내장형 시스템)** **임베디드 시스템(embedded system, 내장형 시스템)**
  
줄 23: 줄 25:
 리눅스 같은 운영체제는 실시간성을 보장하지 못하기 때문에 엑추에이터나 센서등을 제어하기 위해서는 실시간 제어에 적합한 마이크로컨트롤러를 사용한다. 이런 임베디드 시스템에는 ROS를 설치할 수 없기 때문에 시스템과 (ROS가 설치된) PC 사이의 통신이 필요하다.((ROS에서는 이를 위해 rosserial이라는 패키지를 제공한다)) 리눅스 같은 운영체제는 실시간성을 보장하지 못하기 때문에 엑추에이터나 센서등을 제어하기 위해서는 실시간 제어에 적합한 마이크로컨트롤러를 사용한다. 이런 임베디드 시스템에는 ROS를 설치할 수 없기 때문에 시스템과 (ROS가 설치된) PC 사이의 통신이 필요하다.((ROS에서는 이를 위해 rosserial이라는 패키지를 제공한다))
  
-====2. Open CR====+=====2. Open CR===== 
 + 
 +====2.1 개념====
  
-===2.1 개념===+{{https://img.kasimov.synology.me/2020/ros/9/OpenCR.JPG?400}}
  
 ROS를 지원하는 임베디드 보드이며 터틀봇3에서 메인 제어기로 사용된다.  회로, BOM, 거버 데이터 등의 H/W 정보 및 OpenCR의 모든 S/W가 오픈소스로 공개되어 있으며 성능이 좋고((마이크로컨트롤러에서는 최상위인 Cortex-M7 코어를 사용해 최대 216Mhz로 구동됨)) 인터페이스가 다양하다. 또한 IMU 센서를 사용하며 전원 출력이 다양((입력 전원이 7~24V일 때 12, 5V, 3.3V의 출력을 지원))하다. ROS를 지원하는 임베디드 보드이며 터틀봇3에서 메인 제어기로 사용된다.  회로, BOM, 거버 데이터 등의 H/W 정보 및 OpenCR의 모든 S/W가 오픈소스로 공개되어 있으며 성능이 좋고((마이크로컨트롤러에서는 최상위인 Cortex-M7 코어를 사용해 최대 216Mhz로 구동됨)) 인터페이스가 다양하다. 또한 IMU 센서를 사용하며 전원 출력이 다양((입력 전원이 7~24V일 때 12, 5V, 3.3V의 출력을 지원))하다.
줄 31: 줄 35:
 || ||
  
-===2.2 개발환경 구축===+====2.2 개발환경 구축====
 [[https://emanual.robotis.com/docs/en/platform/turtlebot3/appendix_opencr1_0/|Turtlebot3 e-Manual]] 참조  [[https://emanual.robotis.com/docs/en/platform/turtlebot3/appendix_opencr1_0/|Turtlebot3 e-Manual]] 참조 
  
  
-====3. rosserial====+=====3. rosserial=====
  
-===3.1. 개념===+====3.1. 개념====
  
 PC와 제어기 간의 메시지((메시지, 토픽, 서비스 모두 가능)) 통신을 위해 중계자 역할을 수행하는 ROS 패키지 PC와 제어기 간의 메시지((메시지, 토픽, 서비스 모두 가능)) 통신을 위해 중계자 역할을 수행하는 ROS 패키지
줄 46: 줄 50:
 || ||
  
-===3.2. package 구성===+====3.2. package 구성====
  
 rosserial은 rosserial server와 rosserial client로 구성되어있다. rosserial server는 구현된 프로그래밍 언어에 따라 3가지 노드가 있다. rosserial은 rosserial server와 rosserial client로 구성되어있다. rosserial server는 구현된 프로그래밍 언어에 따라 3가지 노드가 있다.
줄 73: 줄 77:
 || ||
  
-===3.3. 프로토콜===+====3.3. 프로토콜====
  
 rosserial server와 client는 시리얼 통신 시반의 패킷 형태로 데이터를 송/수신한다.  rosserial server와 client는 시리얼 통신 시반의 패킷 형태로 데이터를 송/수신한다. 
줄 85: 줄 89:
   * Sync Flag / Protocol version: 프로토콜 버전으로 ROS Groovy는 0xFF이고, ROS Hydro, Indigo, Jade 그리고 Kinetic은 0xFE 이다.   * Sync Flag / Protocol version: 프로토콜 버전으로 ROS Groovy는 0xFF이고, ROS Hydro, Indigo, Jade 그리고 Kinetic은 0xFE 이다.
   * Message Length(N): 메시지의 데이터 길이 헤더이며 2 Byte로 구성된다. Low 바이트가 먼저 전송되고 이어서 High 바이트가 전송된다.   * Message Length(N): 메시지의 데이터 길이 헤더이며 2 Byte로 구성된다. Low 바이트가 먼저 전송되고 이어서 High 바이트가 전송된다.
-  * Checksum over message length: 메시지 길이 헤더의 유효성 검증을 위한 체크섬으로 계산 방법은 다은과 같다.+  * Checksum over message length: 메시지 길이 헤더의 유효성 검증을 위한 체크섬으로 계산 방법은 아래와 같다.
 <sxh>Checksum = 255 - ( (Message Length Low Byte + Message Length High Byte) %256) </sxh> <sxh>Checksum = 255 - ( (Message Length Low Byte + Message Length High Byte) %256) </sxh>
   * Topic ID: 메시지의 형태를 구분하기 위한 ID이다. 0~100까지는 시스템 함수로 예약되어있는데 주로 사용되는 ID는 아래와 같다.   * Topic ID: 메시지의 형태를 구분하기 위한 ID이다. 0~100까지는 시스템 함수로 예약되어있는데 주로 사용되는 ID는 아래와 같다.
줄 91: 줄 95:
 ID_PARAMETER_REQUEST=6, ID_LOG=7, ID_TIME=10, ID_TX_STOP=11</sxh> ID_PARAMETER_REQUEST=6, ID_LOG=7, ID_TIME=10, ID_TX_STOP=11</sxh>
   * Serialized Message Data: 송/수신 메시지를 시리얼 형태로 전송하기 위한 데이터이다. 예) IMU, TF, GPIO 데이터   * Serialized Message Data: 송/수신 메시지를 시리얼 형태로 전송하기 위한 데이터이다. 예) IMU, TF, GPIO 데이터
-  * Checksum over Topic ID and Message Data: Topic ID와 메시지 데이터의 유효성 검증을 위한 체크섬으로 계산 방법은 다음과 같다.+  * Checksum over Topic ID and Message Data: Topic ID와 메시지 데이터의 유효성 검증을 위한 체크섬으로 계산 방법은 아래와 같다.
 <sxh>Checksum = 255 - ( (Topic ID Low Byte + Topic ID High Byte + data byte values) % 256) </sxh> <sxh>Checksum = 255 - ( (Topic ID Low Byte + Topic ID High Byte + data byte values) % 256) </sxh>
  
 || ||
  
-===3.4. 제약 상황=== +====3.4. 제약 상황==== 
  
   * **메모리**: 마이크로컨트롤러는 사용할 수 있는 메모리의 용량이 작고 제한되어있기 때문에 퍼블리셔, 서브스크라이버 개수 및 송신, 수신 버퍼의 크기를 미리 정의해야 한다.   * **메모리**: 마이크로컨트롤러는 사용할 수 있는 메모리의 용량이 작고 제한되어있기 때문에 퍼블리셔, 서브스크라이버 개수 및 송신, 수신 버퍼의 크기를 미리 정의해야 한다.
줄 109: 줄 113:
 || ||
  
-===3.5. 예제===+====3.5. 예제====
  
 예제를 진행하기 전에 roscore를 먼저 실행한 후 진행해야 한다. 다음은 OpenCR에서 제공하는 기본 예제이다. 예제를 진행하기 전에 roscore를 먼저 실행한 후 진행해야 한다. 다음은 OpenCR에서 제공하는 기본 예제이다.
  • activity/public/2020/ros/210120.1611121185.txt.gz
  • 마지막으로 수정됨: 5년 전
  • 저자 khr9648