-
Notifications
You must be signed in to change notification settings - Fork 0
Plotto_Path
본 문서는 로봇팔 시뮬레이터 프로젝트 Plotto의 통신용 데이터인 Plotto Path에 대한 정의 및 변환 방식을 설명합니다.
Plotto Path는 SVG 경로 파싱 후 생성되는 로봇팔 관절 움직임 정보(JSON)를 1바이트로 압축하여, 하드웨어와의 효율적인 시리얼 통신을 목적으로 합니다.
초기 로봇팔의 움직임 정보는 SVG 경로 파싱 후 다음과 같은 JSON 배열 형태로 생성되었습니다.
[
{ d1: -7, d2: 3, pen: 0 },
{ d1: -7, d2: 2, pen: 0 },
{ d1: -7, d2: 3, pen: 0 },
];
/*
"d1" : -7은 다음 도달지점까지 joint1이 -7step (약 -(0.010986328 * 7) 도) 움직여야 함을 의미합니다.
"d2" : 2은 다음 도달지점까지 joint2가 -7step (약 (0.010986328 * 2) 도) 움직여야 함을 의미합니다.
"pen" : 값이 0이면 pen이 Up, 1이면 Down인 상태입니다.
*/하지만 문자열 기반의 JSON 포맷은 매우 비효율적이고, 실제 필요한 정보(
Plotto Path는 이러한 비효율성을 해소하고 하드웨어 통신의 속도와 메모리 효율성을 높이기 위해 도입되었으며, 모든 명령을 1바이트 크기의 배열로 압축하는 것이 핵심입니다.
- 변환 전:
[{"d1":-7,"d2":3,"pen":0}, ... ] - 변환 후:
[147, ... ]
Plotto Path는 1바이트 크기의 숫자를 원소로 하는 1차원 배열의 자료형입니다. 배열의 각 원소는 다음 두 가지 정보를 담고 있습니다.
-
동작 명령 : 두 관절의 동작 변화량 (
$d1$ ,$d2$ ) - 펜 상태 변경 명령 : 펜의 Up/Down 상태 정보
Delta Byte는 두 관절의 움직임 변화량(
-
High Nibble (상위 4비트): 관절 1의 스텝 변화량 (
$d1$ )을 인코딩합니다. -
Low Nibble (하위 4비트): 관절 2의 스텝 변화량 (
$d2$ )을 인코딩합니다.
동작 변화 인코딩에 사용되지 않는 특정 값을 펜 상태 변경을 위한 제어 명령으로 예약합니다. 이는
| 1바이트 값 | 16진수 | 2진수 (8비트) | 의미 |
|---|---|---|---|
| Pen Down | 펜을 내립니다. | ||
| Pen Up | 펜을 올립니다. |
관절 스텝 변화량
|
|
4비트 이진수 (Nibble) |
|
4비트 이진수 (Nibble) |
|---|---|---|---|
-
펜 상태 변화 감지: 현재 명령의
pen상태가 이전 명령과 다를 경우, 해당 펜 상태 변경을 위한 Control Byte($0\text{x}80$ 또는$0\text{x}08$ )를 먼저 배열에 추가합니다. -
동작 명령 변환:
$d1$ 과$d2$ 값을 4비트 인코딩 맵을 사용하여 각각High Nibble과Low Nibble로 변환합니다. -
1바이트 구성:
$(high \ll 4) \mid low$ 연산을 통해$d1$ 과$d2$ 를 담은 Delta Byte를 배열에 추가합니다.
-
바이트 순회: 배열의 각 바이트
$B$ 를 순서대로 확인합니다. -
제어 명령 처리:
-
$B = 0\text{x}80$ : 현재 펜 상태를 Down (1)으로 갱신합니다. -
$B = 0\text{x}08$ : 현재 펜 상태를 Up (0)으로 갱신합니다.
-
-
동작 명령 해석:
-
$B$ 가 제어 명령이 아닌 경우,$d1$ (High Nibble)과$d2$ (Low Nibble)를 4비트 디코딩 맵을 사용하여 역변환합니다. - 해석된
$d1, d2$ 와 현재 펜 상태를 포함하는 모션 명령을 JSON 배열에 추가합니다.
-