# ZLLG80ASM250-4096-B V2.12 모터 & ZLAC8015D 4WD C++ 초저지연 제어 시스템

본 로봇 제어 시스템은 **C++17 고성능 멀티스레드 엔진**으로 작성되었으며, Linux 커널 USB Latency 1ms 튜닝, SDL2 무선 Xbox 컨트롤러 조이스틱 인터페이스, 4WD 차동/제자리 선회 Kinematics 및 엔코더 실시간 주행 거리(Tripmeter) 검증 기능이 탑재되어 있습니다.

---

## 1. 하드웨어 스펙 & 로봇 칫수

* **로봇 차체 칫수**:
  * **좌우 바퀴 중심 간 거리 (Track Width, $W$)**: `576.0 mm` (`0.576 m`)
  * **전후 바퀴 중심 간 거리 (Wheelbase, $L$)**: `368.4 mm` (`0.3684 m`)
  * **버니어 실측 타이어 유효 반지름 ($R$)**: `131.517 mm` (`0.131517 m`, 10.35인치 타이어 외경)
  * **전면 범퍼 오프셋**: `45.0 mm` (`0.045 m`)
* **모터 & 드라이버**:
  * Front Driver: RS485 Station ID 1 (`/dev/ttyUSB0`)
  * Rear Driver: RS485 Station ID 2 (`/dev/ttyUSB0`)
  * 모터 1회전 엔코더 해상도: `16,384 Ticks` (4체배 정밀 카운팅)

---

## 2. ⚡ 원클릭 1ms 초저지연 실행 방법

터미널에서 원클릭 라운치 스크립트를 실행합니다:

```bash
./run_4wd.sh
```

> **`run_4wd.sh`가 자동 처리하는 작업**:
> 1. Linux Kernel USB Serial latency_timer를 16ms에서 **1ms**로 즉시 하향 튜닝
> 2. `xbox_motor_control.cpp` C++17 고성능 바이너리 최적화 컴파일 (`g++ -O3 -std=c++17 -lSDL2 -lpthread`)
> 3. 100Hz 초저지연 4모터 동기화 모션 제어 및 HUD 출력 루프 시작

---

## 3. 🎮 Xbox 컨트롤러 조작법

* **좌측 아날로그 스틱 (위/아래)**: 로봇 직진 / 후진
* **좌측 아날로그 스틱 (좌/우)**: 커브 선회 (차동 Kinematics, 지면 긁힘 0%)
* **우측 아날로그 스틱 (좌/우)**: 제자리 회전 (Spin Turn)
* **A 버튼**: 주행 미터계 (TRIP Distance) **`0.000m` 영점 리셋**
* **B 버튼 / Ctrl+C**: 로봇 안전 정지 후 브레이크 잠금 및 안전 종료

---

## 4. 📐 주행 거리 (Odometry) 정밀 검증

* **`AXLE`**: 바퀴 중심 축이 이동한 실시간 거리 (m)
* **`BUMPER`**: 로봇 맨 앞 전면 범퍼 위치 기준 거리 (m)
* **왕복 정밀도**: 1.2m 이상 직진 후 출발선으로 복귀 시 **0.008m (8mm) 오차 0개 정밀 검증 완벽 완료!**

---

## 5. 주요 레지스터 (Modbus RTU 115200 8N1)

| 레지스터 (Hex) | 설명 |
| :--- | :--- |
| **`0x200D`** | 동작 모드 (`3`: 속도 제어 모드) |
| **`0x200E`** | Control Word (`0x0008`: Enable, `0x0007`: Disable) |
| **`0x2088`** | 좌/우 모터 명령 속도 (RPM) |
| **`0x201A / 0x201B`** | 좌/우 전자식 브레이크 (`0`: 해제, `1`: 잠금) |
| **`0x20A7`** | 6레지스터 연속 블록 읽기 (포지션 틱 & RPM 피드백) |
