第 21 届全国大学生智能汽车竞赛 — 智能视觉组 — 手机端 WiFi 调试遥控 APP。
与车载 Project/CODE/WIFI_SPI.c (RT1064 + RT-Thread) 通过 UDP 双向通信,提供:
- 连接管理:WiFi 扫描 + 小车 IP 推导(白名单
SEEK/WIFI/10:91:a8MAC,黑名单常见手机热点名) - 虚拟 IPS 屏同步:实时还原车上 IPS 屏文本(支持 RGB565 颜色 / 中文 baseline 对齐)
- 虚拟摇杆 + 方向键:
LX0LY0RX0RY0/BTN_UP/DOWN/LEFT/RIGHT/MID协议 - PID 实时下发:
#PID#p,i,d无需烧板 - 12×16 地图渲染:
#MAP#协议同步,# / $ A-I / . 0-9 / * / @ / 空格字符配色 - 小车定位显示:
#POS#x,y(cm) 全局绝对坐标 - LogPage 速选:
#REQ_ID#阶段人工决策 (BTN_A-J箱子 /BTN_0-9目标) - 连接测试:
PING/PONG心跳
| 方向 | 协议 | 说明 |
|---|---|---|
| 车上 → APP | #IPS#x,y,rgb565,text\n |
IPS 屏文本,多行用 \n |
| 车上 → APP | #MAP#<12行×16字符> |
推箱子地图,\r\n / \n 分行 |
| 车上 → APP | #POS#x,y |
绝对位置(cm,基线 (grid+1)*20) |
| 车上 → APP | #REQ_ID# |
通知 APP 进入决策页面 |
| 车上 → APP | PONG |
连接测试响应 |
| APP → 车上 | BTN_UP/DOWN/LEFT/RIGHT/MID |
方向键 |
| APP → 车上 | BTN_A-BTN_J |
箱子(决策阶段) |
| APP → 车上 | BTN_0-BTN_9 |
目标(决策阶段) |
| APP → 车上 | #PID#p,i,d |
PID 实时调参 |
| APP → 车上 | LX0LY0RX±100RY±100 |
摇杆 |
默认端口:小车 6666,手机 8087(对应 zf_device_wifi_spi.h:35-36)
# 要求
# - Android Studio (AGP 8.13.1, Gradle 8.13)
# - JDK (gradle.properties 指定了 org.gradle.java.home, 按本机调整)
# - Android SDK 36 (compileSdk = 36, minSdk = 24)
# 调试包
./gradlew :app:assembleDebug
# 产物: app/build/outputs/apk/debug/app-debug.apk
# 释放包
./gradlew :app:assembleRelease第一次构建前,确认 local.properties 的 sdk.dir 指向本机 Android SDK 位置(此文件不入 git)。
- 同仓子项目
./phone-debugger/(2026-07-01 由独立 git 仓git subtree add合并进主仓rt1064-sokoban-car,保留 2 个 commits:1b1ed67init +c7913f4parser 重构) — Android Gradle 工程跟 C 固件在同仓,通过.gitignore隔离编译产物 .gitignore已覆盖:.gradle/、build/、local.properties、.idea/、*.iml、/.kotlin/local.properties含本机 SDK 路径, 不入仓 — 提交前确认没误 add- 不引第三方网络库,UDP 走
java.net.DatagramSocket,异步走 Kotlin Coroutines MainActivity.kt仍承载主要 Compose UI 与交互状态,协议解析已拆到WifiProtocolParser.kt;后续重构目标是继续拆分VirtualJoystick.kt/SemanticMapView.kt等独立 Composable
- 主仓根:
../(同仓子项目, parent =rt1064-sokoban-car推箱子智能视觉小车项目) - 协议参考:
../Project/CODE/WIFI_SPI.c/zf_device_wifi_spi.{c,h}