# Dashboard Test

**What you’ll do**
- GUI(Dashboard)로 UART 연결을 확인하고, 최소 동작(구동/조향/상태/속도)을 검증합니다.

**Prerequisites**
- {doc}`Linux Port Setup </page/Setup_Test/linux_port_setup>` 완료
- 초기 테스트는 바퀴가 공중에 뜬 상태(또는 아주 낮은 속도)에서 진행 권장

**Next**
- {doc}`SDK Guide </page/SDK/sdk_guide>`

KMC Dashboard는 배포된 GUI 프로그램을 통해 **UART 통신 연결 상태 확인**, **명령 입력 전송**, **속도 요청/보조 명령 모니터링** 등을 수행하여 차량이 정상 동작하는지 빠르게 테스트할 수 있는 도구입니다. 패킷 ID 등 바이트 레벨 규격은 {doc}`UART Protocol Reference </page/Protocol/uart_protocol>`에 정리되어 있습니다.

---

## 1. Checklist

 하드웨어가 올바르게 동작하는지 확인하기 위한 체크리스트입니다.

- 포트/baud rate 설정 후 연결이 유지된다
- **속도 요청**으로 속도 ($\mathrm{m/s}$)를 읽을 수 있다
- **보조 명령**(AllState)으로 온도 ($^\circ\mathrm{C}$)/전류 ($\mathrm{A}$)/에러 코드를 읽을 수 있다
- **명령 입력**으로 구동/조향이 기대한 방향으로 동작한다

---

## 2. 설치

KMC Dashboard는 참가자용으로 배포된 실행 파일(GUI)입니다. 대회 안내에서 제공되는 다운로드 링크(Release)를 통해 운영체제에 맞는 프로그램을 받아 설치합니다.

- [Dashboard 설치](https://github.com/Seo12044/KAIST_Mobility_Challenge_SDK/releases/tag/v1.0.0)

- Release 탭에서 OS별 설치 파일 선택  
  - Windows: `.exe` 또는 설치 패키지  
  - Ubuntu: `.AppImage` / 실행 파일 등 배포 형태에 맞게 설치

설치가 끝나면 Dashboard를 실행합니다.

```{admonition} 참고
:class: note

Dashboard가 없어도 UART 프로토콜만으로 제어/모니터링 구현이 가능합니다.  
패킷 형식은 {doc}`UART Protocol Reference </page/Protocol/uart_protocol>`을 참고하세요.
```

![KMC Dashboard 메인 화면](../../_static/img/Installation/main.png)

---

## 3. 연결 설정 (CONNECTION)

차량과 PC를 USB로 연결한 뒤, Dashboard에서 포트와 baud rate를 설정합니다.

### 3.1 Port
운영체제별로 포트 이름이 다릅니다.

- **Windows**
  - 장치관리자 → **포트(COM & LPT)**  
  - `USB Serial Port (COMx)` 형태로 표시되는 COM 번호를 확인하여 입력 (ex `COM5`) 

- **Ubuntu**
  - 권장 고정 링크: `/dev/ttyKMC`
  - 또는 일반 포트: `/dev/ttyUSB0` 등  
  - 포트 확인:
    ```bash
    ls -l /dev/ttyKMC
    ls -l /dev/ttyUSB*
    ```

설치/연결 방법 문서:
- {doc}`Linux Port Setup </page/Setup_Test/linux_port_setup>`

### 3.2 Baud rate
- 하드웨어와 UART 통신에 사용할 **baud rate**를 설정합니다.
- 통신이 불안정하면 더 낮은 baud rate로 시도하는 것이 도움이 될 수 있습니다.
- 반대로 통신이 안정적이고 빠른 응답이 필요하면 더 높은 baud rate를 사용할 수 있습니다.

---

## 4. 주행 명령 테스트 (CONTROL)

Dashboard의 Control 섹션은 차량 주행 명령을 전송하는 기능입니다.

- **Send Control**
  - 차량에 **명령 입력**을 전송합니다.
  - 일반적으로 선속도 $v$와 곡률 $\kappa$를 기반으로 Ackermann 주행 입력이 적용됩니다.

- **Return to Center**
  - 조이스틱 입력을 놓았을 때 조향을 중앙으로 자동 복귀시키는 옵션입니다.
  - 직진 안정성 확인 및 실수로 조향이 남는 상황을 줄이는 데 유용합니다.

```{admonition} 주의
:class: warning

초기 테스트는 **바퀴가 공중에 뜬 상태** 또는 **아주 낮은 속도**에서 시작하는 것을 권장합니다.
```

---

## 5. 시스템 기능 (SYSTEM)

모터 드라이버의 초기화/리셋 및 엔코더 보정 기능입니다.

### 5.1 RESET Mx
- 선택한 모터 번호의 모터 드라이버를 Reset 합니다.
- 모터 번호 할당:
  - **왼쪽 모터: 0**
  - **오른쪽 모터: 1**

### 5.2 ENC CAL Mx (Encoder Calibration)
- 선택한 모터의 엔코더 보정(캘리브레이션)을 수행합니다.

```{admonition} 주의
:class: warning

엔코더 캘리브레이션 수행 시 바퀴는 **자유 회전 상태**여야 합니다.  
캘리브레이션 중 바퀴에 힘이 가해지거나(손으로 잡기, 바닥에 닿아 마찰 발생 등) 회전이 방해되면 보정이 잘못될 수 있고, 이후 동작이 비정상일 수 있습니다.
```

---

## 6. 상태/속도 모니터링 (READ STREAMS)
차량의 상태를 읽어오는 기능입니다.

- **AllState**
  - **보조 명령**(AllState)으로 상태 데이터를 읽습니다. (프로토콜에서는 `0xAF`의 `ID=0x06`)
  - 모터 상태(각도/속도/전류/온도/에러 코드 등)를 포함한 데이터를 주기적으로 수신합니다.

- **Vehicle Speed**
  - **속도 요청**으로 차량의 현재 속도 ($\mathrm{m/s}$)를 읽습니다.

---

## 7. 송수신 주기 설정 (RATES)

차량과의 통신 주기를 설정합니다.

- **명령 입력** 송신 주기
- **속도 요청**/**보조 명령** 주기

---

## 8. 그래프 표시 옵션 (DISPLAY FILTER)

그래프(Plot)에서 어떤 신호를 표시할지 선택합니다.

- **Show Speed**
  - **보조 명령**으로 읽어온 각 모터의 속도 ($\mathrm{rpm}$)를 그래프에 표시

- **Show Current**
  - **보조 명령**으로 읽어온 각 모터의 전류 ($\mathrm{A}$)를 그래프에 표시

- **Show Vehicle Speed**
  - **속도 요청**으로 읽어온 차량 속도 ($\mathrm{m/s}$)를 그래프에 표시

---

## 9. 주요 표시 영역 설명

### 9.1 VEHICLE SPEED
- **속도 요청** 응답으로 수신된 차량 속도 ($\mathrm{m/s}$) 표시

### 9.2 BATTERY
- **보조 명령**(Battery Voltage)로 읽어온 배터리 전압 표시 (프로토콜에서는 `0xAF`의 `ID=0x07`)

### 9.3 MOTOR INFO
- **보조 명령**(AllState) 데이터(각도/속도/전류/온도/에러 등)를 표 형태로 표시 (프로토콜에서는 `0xAF`의 `ID=0x06`)

