AKA-00
辰龙AI教育机器人
新闻
- 2026-03-03 添加对zl-zp10s舵机的支持
- 2026-02-12 小车模拟器可用了
- 2026-02-06 AKA-00 小车添加了对 MG996R 舵机的支持,目前支持 STS3215 和 MG996R
- 2026-01-30 opi5p 开发板可以驱动 AKA-00 小车了
开始使用
配置指南
使用文档
开发资料
项目介绍
AKA-00 是一个面向教学的低成本AI机器人,通过提供简单的平台实现多种算法的训练和仿真。
核心能力
| 能力 | 说明 |
|---|---|
| 机械臂控制 | 支持 STS3215、MG996R 等舵机 |
| 底盘运动 | N20 电机差速控制 |
| 远程控制 | Web 界面 + HTTP API |
技术架构
AKA-00
├── tennis_hunter.py # 机器人主程序
├── run.py # Web 服务器
├── src/
│ ├── arm_control/ # 机械臂控制(舵机驱动)
│ ├── base_control/ # 底盘控制(电机驱动)
│ └── cameras/ # 摄像头模块
├── app/ # Flask Web 应用
├── frontend/ # React 前端
└── models/ # YOLOv8 模型
硬件平台
| 组件 | 型号 |
|---|---|
| 主控 | LicheeRV Nano |
| 机械臂 | ZL-ZP10S / STS3215 |
| 电机 | N20 直流减速电机 |
| 摄像头 | USB 免驱摄像头 |
快速开始
本文档帮助你快速开始让 AKA-00 跑起来。
1. 组装
参考 硬件接线 完成机械臂、电机、摄像头的连接。
2. 通电
- 连接电源,等待控制板指示灯亮起
- 等待 60 秒,网络模块启动
- 连接机器人热点(格式:
chenlong-robot-xxxxx) - 浏览器访问
192.168.4.1,进入控制界面 - 之后可以通过手机上的遥控器控制小车
3. 部署(首次/更新)
项目以单文件 aka-server 分发,拷贝到控制板:
# 打包(在开发机上)
./build_release.sh # 使用已有静态文件
./build_release.sh --rebuild # 自动构建前端后打包
# 拷贝到控制板
scp dist/aka-server root@<robot>:
# 首次部署:一键初始化(解压 + 热点 + 自启)
ssh root@<robot> 'aka-server --init'
# 之后每次开机自动启动,也可手动运行
ssh root@<robot> 'aka-server'
更新部署时清除旧数据后重新运行:
ssh root@<robot> 'rm -rf /root/AKA-00 && aka-server'
4. 修改代码常用命令
# SSH 登录控制板
ssh root@<机器人IP>
# 本地修改代码后,重新打包并部署
./build_release.sh && scp dist/aka-server root@<robot>:/usr/local/bin/
# 在控制板上重启服务
ssh root@<robot> 'rm -rf /root/AKA-00 && aka-server'
5. 使用
启动后通过以下方式控制:
- Web 界面: 访问
http://<机器人IP>/ - API: 使用
/api/control接口
下一步
硬件参数
主控板

| 参数 | 值 |
|---|---|
| 型号 | LicheeRV Nano |
| CPU | 算能 SG2002 大核:1GHz RISC-V C906 / ARM A53 二选一; 小核:700MHz RISC-V C906; |
| NPU | 1 TOPS (INT8),支持 BF16 |
机械臂舵机和控制板
控制板
微雪UART串口通信控制板

使用的舵机
| 参数 | 值 |
|---|---|
| 型号 | ZL-ZP10S |
| 通信 | 串口 UART |
| 设备 | /dev/ttyACM0 |
| 波特率 | 115200 |
支持的舵机
- STS3215
- MG996R
- ZL-ZP10S
电机控制板(DRV8833)

使用的电机
| 参数 | 值 |
|---|---|
| 型号 | N20 直流减速电机 |
| 控制方式 | PWM 调速 |
| GPIO Chip | 4 |
硬件接线
接线示意
主控接口图

本项目使用了以下接口:
- 电机控制
- A16:PWM4
- A17:PWM5
- A18:PWM6
- A19:PWM7
- 舵机控制
- A28:UART2TX
- A29:UART2RX
- VBUS 5V
- GND
底盘控制板接口图

- VM:电机供电
- NC:置空
- GND:接地
- A、BO1、2:接电机
- A、BIN1、2:控制信号输入
- STBY:SLEEP控制,底电平有效
机械臂控制板接口图

- D:数据总线
- V:舵机供电正级
- G:舵机接地
- DC+:主控供电正级
- DC-:主控供电负极
- TX:控制输入
- RX:控制接收
- GND:接地
- A UART:UART总线控制模式
- B USB:USB总线控制模式
控制电路连线图
接线前请确保断电操作。
机械臂UART控制
- 机械臂串口连接至
/dev/ttyACM0 - 波特率:115200
电机PWM控制
| 电机 | PWM Chip | Channel |
|---|---|---|
| 左电机 | 4 | 0, 1 |
| 右电机 | 4 | 2, 3 |
更多原理图
硬件原理图位于 hardware/ 目录:
LicheeRV_Nano-70418_Schematic.pdf- 主控板原理图sg2000_trm_cn.pdf- SG2000 技术参考手册众灵舵机使用手册-250508.pdf- 舵机使用说明
第一次连接
如何连接机器人
第一步,连接机器人自身的热点,用于配置机器人
- 确保机器人已连接到电源,等待机器人控制板灯亮
- 等待20秒到30秒,此时控制板正在启动网络模块
- 开发者打开电脑/手机,进入wifi连接,找到控制板的热点并连接,例如
chenlong-robot-02
第二步,让机器人连接到开发者的WiFi网络
- 连接热点之后,打开浏览器,输入
192.168.4.1(不同的机器人可能不同,已实际为准),即可进入机器人的遥控界面 - 在配置页面中,刷新网络,找到开发者需要的WiFi网络,点击连接,如有密码需要输入密码

- 连接成功后,网页会显示当前连接的WiFi网络名称以及为机器人分配的IP

第三步,ssh登录机器人的控制板
- 第二步进行完之后,开发者需要记下为机器人分配的IP,并且让自己的电脑和机器人连接到同一个WiFi网络

- 开发者打开终端,输入
ssh root@[机器人分配的IP],即可登录机器人的控制板,密码为root - 登录成功后,即可在终端中操作机器人的控制板,输入
ping www.baidu.com或者curl www.baidu.com,用来检测控制板网络是否成功连接并且能够访问互联网
项目本地启动并部署到控制板
项目本地启动
- 安装Miniconda用于控制python的版本
安装miniconda,请按照官方安装指南
创建 python 3.11 环境
conda create -n aka python=3.11 -y
- 运行 pip install -r requirements.txt 安装依赖
pip install -r requirements.txt
- 安装前端依赖
cd frontend && npm i
4.打包前端项目
npm run build && cd ..
- 运行项目
python run.py
之后访问本地的80端口或443端口即可
本地对于硬件调用的接口进行了隔离,所以可以直接启动
打包部署到控制板
使用 build_release.sh 将整个项目打包为单个自解压可执行文件 aka-server,然后拷贝到 SG2002 控制板即可运行。
# 构建(在开发机上执行)
./build_release.sh # 使用已有静态文件
./build_release.sh --rebuild # 自动构建前端后打包
# 输出: dist/aka-server (约 9MB)
首次部署
# 1. 拷贝 aka-server 到控制板
scp dist/aka-server root@<robot>:/usr/local/bin/
# 2. 一键初始化(解压 + 热点 + 开机自启)
ssh root@<robot> 'aka-server --init'
更新部署
清除旧数据后重新运行:
scp dist/aka-server root@<robot>:
ssh root@<robot> 'rm -rf /root/AKA-00 && aka-server'
工作原理
aka-server 是一个自解压程序:
- 首次运行时自动解压项目文件到
${AKA_HOME:-/root/AKA-00} - 执行
uart_init.sh初始化串口(如果存在) - 启动
python3 run.py运行 Web 服务
后续运行时跳过解压步骤,直接启动服务。
初始化配置
这部分为机器人的初始化部分,都会在用户拿到设备前实现,如果用户需要自行初始化也可以按照本流程实现。
烧录镜像
从Releases下载最新镜像,通过烧入工具将镜像烧录到tf卡中,镜像中会自带一份项目文件。
连接主控
通过type-c接口可以将板子连接到电脑上
在win下在终端里输入ipconfig,找到一个新的以太网,例如 10.163.124.100。
之后可以使用ssh进行连接,ssh root@10.163.124.1
部署 aka-server
将 aka-server 拷贝到控制板,一条命令完成初始化:
# 1. 拷贝到控制板
scp dist/aka-server root@<robot>:/usr/local/bin/
# 2. 一键初始化(解压 + AP 热点 + DHCP + 开机自启)
ssh root@<robot> 'aka-server --init'
--init 自动完成:
- 解压项目文件到
/root/AKA-00 - 配置 AP 热点(SSID:
chenlong-robot-xxxxx,基于 MAC 地址唯一) - 配置 DHCP(192.168.4.100-200)
- 写入 S98apstart / S99webstart 自启脚本
- 立即启动热点
之后每次开机自动运行 aka-server。如需手动更新:
scp dist/aka-server root@<robot>:/usr/local/bin/
ssh root@<robot> 'rm -rf /root/AKA-00 && aka-server'
HTTPS 证书生成命令
- 无交互生成自签名证书,有效期10年(3650天)
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 3650 -nodes -subj "/C=CN/ST=Beijing/L=Beijing/O=MyOrg/OU=MyDept/CN=localhost"
网络配置
修改 /etc/wpa_supplicant.conf 文件
ctrl_interface=/var/run/wpa_supplicant
ap_scan=1
network={
ssid="wifi名"
psk="wifi密码"
priority=8
}
network={
ssid="#####"
psk="********"
priority=5
}
network={
key_mgmt=NONE
priority=1
}
镜像烧录
本文档介绍如何将系统镜像烧录到开发板。
准备工作
所需工具
- SD 卡(2GB或以上)
- SD 卡读卡器
- BalenaEtcher 或其他镜像烧录工具
下载镜像
从项目 releases 页面下载最新的系统镜像文件(.img 格式)。
镜像文件地址
烧录步骤
Windows 系统
- 插入 SD 卡
- 打开 BalenaEtcher
- 点击 "Flash from file",选择下载的镜像文件
- 点击 "Select target",选择 SD 卡设备
- 点击 "Flash" 开始烧录
- 等待烧录完成(约 5-10 分钟)
macOS / Linux 系统
使用 dd 命令烧录:
# 查看 SD 卡设备名称
diskutil list
# 卸载 SD 卡(假设设备为 /dev/disk2)
diskutil unmountDisk /dev/disk2
# 烧录镜像(注意:of 后面的设备名称不能包含 partition 号)
sudo dd if=./aka-image.img of=/dev/rdisk2 bs=4M status=progress
# 烧录完成后弹出 SD 卡
diskutil eject /dev/disk2
首次启动
- 烧录完成后,将 SD 卡插入开发板的 SD 卡槽
- 连接电源
- 等待系统启动(约 1-2 分钟)
- 通过串口或网络连接进行后续配置,详见初始化配置
常见问题
无法启动
- 检查电源是否正常供电
- 确认 SD 卡已正确插入
- 尝试重新烧录镜像
Web 界面
启动服务后,访问 http://<机器人IP>/ 进入 Web 控制界面。
功能区域
遥控器
通过方向键控制机器人运动:
- 前进/后退:前进/后退
- 左转/右转:左转/右转
夹爪控制
- 抓取:控制机械臂向下夹取夹爪闭合
- 释放:控制机械臂夹爪张开
WiFi 配置
访问 WiFi 配置页面,可重新设置机器人连接的 WiFi 网络。
详细步骤见 WiFi 配置
进入试验平台
可进入自带的实验平台进行实验
WebSocket 控制接口
AKA-00 提供 WebSocket 通道用于低延迟实时控制底盘运动,替代 HTTP REST 轮询。
连接
ws://<机器人IP>/ws/control
允许任意来源跨域访问。连接时自动禁用 Nagle 算法,延迟 < 1ms。
协议格式
双方通信均为二进制帧。
客户端 → 服务端(控制指令)
| Offset | 字节数 | 描述 |
|---|---|---|
| 0 | 1 | 帧头 0xAA |
| 1 | 1 | X 轴(转向),有符号 int8,-100 ~ 100 |
| 2 | 1 | Y 轴(油门),有符号 int8,-100 ~ 100 |
电机映射:
左轮 = Y + X
右轮 = Y - X
结果限幅到 [-100, 100]。
示例:
| 操作 | 字节 | 说明 |
|---|---|---|
| 前进 50 | AA 00 32 | X=0, Y=50 |
| 后退 30 | AA 00 E2 | X=0, Y=-30(补码) |
| 左转 25 | AA E7 00 | X=-25, Y=0 |
| 右转 25 | AA 19 00 | X=25, Y=0 |
| 停止 | AA 00 00 | X=0, Y=0 |
服务端 → 客户端(状态上报)
| Offset | 字节数 | 描述 |
|---|---|---|
| 0 | 1 | 帧头 0xBB |
| 1-2 | 2 | 左轮速度,有符号 int16 LE,单位 m/s × 1000 |
| 3-4 | 2 | 右轮速度,有符号 int16 LE,单位 m/s × 1000 |
推送策略:速度变化时立即推送,无变化时每 2 秒发一次心跳。
示例:
| 速度 | 字节 | 说明 |
|---|---|---|
| 左右均 0.05 m/s | BB 32 00 32 00 | left=50, right=50 |
| 左 0.03 右 0.01 | BB 1E 00 0A 00 | left=30, right=10 |
| 停止 | BB 00 00 00 00 | left=0, right=0 |
生命周期
- 连接打开:服务端注册客户端,启动 200ms 定时器推送状态
- 连接关闭:服务端自动执行
run_motor(0, 0)停止电机 - 异常断开:TCP 断开时 Tornado 触发
on_close,同样停止电机
前端示例
const ws = new WebSocket("ws://192.168.4.1/ws/control");
ws.binaryType = "arraybuffer";
// 发送:前进 50
const x = 0, y = 50;
ws.send(new Uint8Array([0xAA, x & 0xFF, y & 0xFF]));
// 接收状态
ws.onmessage = (event) => {
const buf = new DataView(event.data);
if (buf.getUint8(0) === 0xBB) {
const leftSpeed = buf.getInt16(1, true) / 1000;
const rightSpeed = buf.getInt16(3, true) / 1000;
console.log(`左: ${leftSpeed} m/s, 右: ${rightSpeed} m/s`);
}
};
注意事项
- 连接断开后电机自动停止,无需额外发送停止指令
- 每个 WebSocket 连接独立控制电机,多个连接同时发送会导致竞争
- 控制值限幅 ±100,超出范围会被裁剪
API 文档
获取 IP 地址
GET /api/ip
响应:
{
"ip": "192.168.1.100"
}
控制接口
GET /api/control?action=<action>&speed=<speed>&time=<time>
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| action | string | 是 | 动作类型 |
| speed | int | 否 | 速度 0-50 |
| time | int | 否 | 持续时间(毫秒) |
action 可选值
| 值 | 说明 |
|---|---|
| up | 前进 |
| down | 后退 |
| left | 左转 |
| right | 右转 |
| stop | 停止 |
| grab | 抓取 |
| release | 释放 |
示例
# 前进
curl "http://<ip>/api/control?action=up&speed=30&time=1000"
# 左转
curl "http://<ip>/api/control?action=left&speed=20&time=500"
# 抓取
curl "http://<ip>/api/control?action=grab"
# 释放
curl "http://<ip>/api/control?action=release"
距离标定
小车支持通过 YOLO 视觉检测 + 标定公式估算目标物体的真实距离。
标定公式
D = m / P + c
| 符号 | 含义 | 单位 |
|---|---|---|
| D | 目标物体的真实距离 | cm |
| P | 检测框在画面中的像素尺寸(取宽高中的较大值) | px |
| m | 标定乘数,由相机焦距和物体实际尺寸决定 | — |
| c | 标定偏移,修正系统误差 | — |
标定参数
标定参数 m 和 c 配置在 app/config.py 的 HardwareConfig 中:
@dataclass(frozen=True)
class HardwareConfig:
# ...
# 距离标定: D = m / P + c
calib_m: float = 2671.82
calib_c: float = -2.82
修改后重启小车服务即可生效。
如何标定:将目标物体(如网球)放在已知距离处,在画面中测量其像素尺寸
P,代入公式反算出适合自己场景的m和c值。
获取标定参数
小车的 /api/camera/snapshot 接口在返回图片的同时,会携带当前的标定参数:
GET /api/camera/snapshot
响应:
{
"image": "<base64 jpeg>",
"width": 320,
"height": 240,
"format": "jpeg",
"m": 2671.82,
"c": -2.82
}
| 字段 | 说明 |
|---|---|
| image | 320×240 的 JPEG 图片(letterbox 等比缩放) |
| m | 标定乘数 |
| c | 标定偏移 |
YOLO 距离仪表盘
项目提供了电脑端仪表盘 tests/server_dashboard.py,可从浏览器直观查看检测结果和距离估算。
启动
python tests/server_dashboard.py --model tests/model/tennis.onnx --port 8080
浏览器打开 http://localhost:8080,输入小车 IP 地址(如 192.168.4.1),点击「开始」即可。
工作流程
小车 电脑端仪表盘
───── ─────────────
/api/camera/snapshot ←─── 拉取图片 + m, c
本地 YOLO 检测目标
计算 D = m / P + c
画框标注,显示距离
界面说明
| 区域 | 内容 |
|---|---|
| 距离显示 | 实时显示计算出的距离值(cm) |
| 标定参数 | 显示当前使用的 m、c 值 |
| P 值 | 显示检测框的像素尺寸 |
| 图片 | 320×240 画面,检测框以绿色矩形标注 |
参数说明
| 参数 | 默认值 | 说明 |
|---|---|---|
--model | tennis.onnx | YOLO ONNX 模型路径 |
--port | 8080 | 本机监听端口 |
如果没有 YOLO 模型或模型加载失败,仪表盘仍可运行,仅显示图片和 m/c 参数,不进行检测。
使用sg2002
SG2002 是一款面向 AIoT 领域的高性能、低功耗 SoC,内置多个处理器核心,集成 TPU、视频编解码器、丰富外设接口,适用于智能视觉、边缘计算等场景。
硬件架构
-
处理器
主处理器: RISCV C906 @ 1.0Ghz 和 ARM Cortex-A53 @ 1.0Ghz 协处理器: RISCV C906 @700Mhz
-
TPU
算力为 1TOPS(INT8),适用于AI推理计算
-
视频子系统
视频输出:支持 2L MIPI DSI 输出(分辨率 2880×1620@30fps),兼容 LVDS、BT.601/656/1120 等传统接口。
视频输入:支持 ISP(图像信号处理器),最高 5MP@30fps;支持 4L 或 2L+2L MIPI CSI 接口,兼容 DVP、Sub-LVDS、HisPI 等。
视频编解码:解码:H.264,支持 5MP@30fps。
编码:H.264/H.265,支持 5MP@30fps。
连接方式
-
串口连接
sudo apt install minicom # 安装minicom minicom -D /dev/ttyUSB0 -b 115200 # 连接串口,用户名:root,密码:root -
usb rndis 网口连接
ip a show # 查看网口信息.如果主机是10.245.118.100,则开发板是10.245.118.1。 ssh root@10.245.118.1 # 连接开发板,密码:root -
wifi 连接
# 假设分配的地址为192.168.1.2 ssh root@192.168.1.2 # 连接开发板,密码:root
配置 UART 串口
-
验证方法
# 开发板上执行(利用Python的pyserial库) python3 -m serial.tools.miniterm /dev/ttyS0 115200 # 一般 UARTx 对应 /dev/ttySx # 主机上执行(利用minicom) minicom -D /dev/ttyUSB0 -b 115200 # 连接串口 -
uart0 默认开启,无需配置
-
uart1 默认开启,无需配置。但如果要同时使用uart1和uart2, 则需要进行配置。
devmem 0x03001070 32 0x2 # GPIOA 28 UART2 TX devmem 0x03001074 32 0x2 # GPIOA 29 UART2 RX devmem 0x03001068 32 0x6 # GPIOA 18 UART1 RX devmem 0x03001064 32 0x6 # GPIOA 19 UART1 TX -
uart3 引脚默认复用为SDIO。而SDIO被用于wifi连接。所以在有wifi连接的情况下,不能使用uart3。
devmem 0x030010D0 32 0x5 # GPIOP 18 UART3 CTS devmem 0x030010D4 32 0x5 # GPIOP 19 UART3 TX devmem 0x030010D8 32 0x5 # GPIOP 20 UART3 RX devmem 0x030010DC 32 0x5 # GPIOP 21 UART3 RTS
代码结构
AKA-00/
├── run.py # 主入口,启动 HTTP/HTTPS 服务器
├── tennis_hunter.py # 机器人主程序(网球收集逻辑)
├── requirements.txt # Python 依赖
├── init.sh # 系统初始化脚本
│
├── app/ # Flask Web 应用
│ ├── __init__.py # Flask 应用工厂
│ └── routes/
│ ├── api.py # 控制 API(运动、夹爪)
│ └── frontend.py # 前端路由
│
├── src/ # 硬件控制模块
│ ├── arm_control/ # 机械臂控制
│ │ ├── sts3215/ # STS3215 舵机驱动
│ │ ├── mg996r/ # MG996R 舵机
│ │ └── zl/zp10s/ # ZL-ZP10S 机械臂
│ ├── base_control/
│ │ └── n20/ # N20 电机驱动
│ └── cameras/
│ └── opencv/ # 摄像头模块
│
├── frontend/ # React 前端
│ ├── src/
│ │ ├── App.tsx # 主应用组件
│ │ ├── pages/
│ │ │ ├── BaseControlPage.tsx # 遥控器页面
│ │ │ └── WiFiConfigPage.tsx # WiFi配置页面
│ │ └── ...
│ ├── package.json
│ └── vite.config.ts
│
├── models/ # YOLOv8 模型文件
│ ├── best.onnx # CPU 推理模型
│ └── best.rknn # RK3588 推理模型
│
├── static/ # Flask 静态文件
└── templates/ # Flask 模板
关键模块
| 文件 | 功能 |
|---|---|
run.py | Flask 服务器启动,支持 HTTP/HTTPS |
app/__init__.py | Flask 应用工厂,初始化硬件驱动 |
app/routes/api.py | HTTP API,提供运动/夹爪控制 |
src/arm_control/ | 舵机通信协议实现 |
src/base_control/n20/ | PWM N20电机速度控制 |
调试方法
串口连接
# 安装 minicom
sudo apt install minicom
# 连接串口
minicom -D /dev/ttyUSB0 -b 115200
网络连接
USB RNDIS 网口
# 查看网口
ip a show
# 如果主机是 10.245.118.100,则开发板是 10.245.118.1
ssh root@10.245.118.1
WiFi SSH
ssh root@<机器人IP>
日志查看
# 查看运行日志
cat app.log
# 实时查看日志
tail -f app.log
测试硬件
# 测试电机
python car_test.py
网络诊断
# 检测网络连通性
ping www.baidu.com
# 检测外网访问
curl www.baidu.com
HTTPS 证书
如需启用 HTTPS,需生成自签名证书:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 3650 -nodes -subj "/C=CN/ST=Beijing/L=Beijing/O=MyOrg/OU=MyDept/CN=localhost"
自定义镜像的制作
1. 基础镜像的选择
我们需要选择一个基础镜像,在它的基础上进行修改。从项目 releases 页面下载最新的系统镜像文件(.img 格式)。
镜像文件地址
2. 镜像的挂载
我们需要挂载镜像文件到本地,以便进行修改。具体步骤如下:
sudo losetup -fP /path/to/image.img --show # 把镜像对应到loop设备,返回loop设备的路径
# 假设返回的loop设备路径为/dev/loop0
sudo mount /dev/loop0p2 /mnt # 挂载loop设备的p2分区到/mnt目录
3. 镜像的修改
在挂载后,我们可以对镜像文件进行修改。具体步骤如下:
cd /mnt/root/ # 进入挂载目录
rm -rf AKA-00 # 删除AKA-00目录
cp -r /path/to/AKA-00 . # 复制AKA-00目录到挂载目录
# 注:如果frontend有更新,需要重新生成static目录
4. 镜像的卸载
在修改完成后,我们可以卸载镜像文件。
sudo umount /mnt # 卸载loop设备
sudo losetup -d /dev/loop0 # 卸载loop设备
5. 镜像的压缩
在修改完成后,我们可以压缩镜像文件,以便于传输。
xz -zk /path/to/image.img
AKA-00教育机器人测试文档 - 测试概述与策略
1. 测试概述
1.1 文档目的
本文档旨在为教育机器人(AKA-00教育机器人)提供从实验室到产品化过程中的标准测试流程指导。测试覆盖硬件功能、极限工况等多个方面,以验证机器人的功能完整性、稳定性和鲁棒性,确保产品交付质量。
1.2 测试范围
| 测试领域 | 测试内容 |
|---|---|
| 硬件功能测试 | 电机测试、电机控制电路模块测试、摄像头测试、舵机测试、舵机控制电路模块测试、电池测试、降压模块测试、UART通信测试、NPU功能测试(YOLO网球识别测试)、WiFi功能测试(SSH连接测试) |
| 极限工况测试 | 电机连续运行温度测试、舵机连续运行温度测试、高温/低温环境测试、阳光直射测试、长时间连续运行测试(40分钟) |
| 交互测试 | 手机APP遥控 |
| 系统集成测试 | 完整捡球流程、多球场景、自主模式切换 |
1.3 教育机器人基本信息
| 部件 | 描述 |
|---|---|
| 底盘 | 两轮驱动的四轮小车,电机驱动 |
| 机械臂 | 三关节结构,3个舵机分别控制2个关节和1个夹爪 |
| 摄像头 | USB接口,用于图像采集和物体识别 |
| 电池 | 7.5V电池,分出一路降压(7.5V给舵机,5V给控制板和电机) |
| 控制板 | sg2002芯片,Linux/StarryOS系统 |
| 通信接口 | USB控制摄像头,两路UART分别控制电机和舵机 |
1.4 测试环境
| 环境类型 | 描述 |
|---|---|
| 室内环境 | 实验室、体育馆等平坦地面,常温环境(25±5℃) |
| 室外环境 | 网球场、操场等实际使用场景 |
| 高温环境 | 40℃环境箱 |
| 低温环境 | 0℃环境箱 |
| 阳光直射环境 | 室外阳光直射条件 |
1.5 测试设备清单
| 设备名称 | 规格/型号 | 用途 |
|---|---|---|
| 教育机器人 | aka01b | 被测设备 |
| sg2002开发板 | Linux/StarryOS系统 | 主控单元 |
| USB摄像头 | - | 图像采集 |
| 机械臂(三关节) | 3舵机控制 | 网球拾取 |
| 手机APP | - | 遥控控制 |
| 网球 | 标准网球 | 测试目标 |
| 红桶/黑色网球袋 | - | 目标容器 |
| 万用表 | - | 电压测量 |
| 红外测温仪/热电偶 | - | 温度测量 |
| 计时器 | - | 时间记录 |
| 串口调试工具 | - | UART测试 |
| SSH客户端 | - | 远程连接测试 |
| 环境箱 | - | 高低温测试 |
1.6 参考文档
- 《0_测试需求.md》
2. 测试策略
2.1 测试方法
- 黑盒测试:验证功能是否符合预期,不关注内部实现
- 白盒测试:检查代码逻辑和算法正确性
- 集成测试:验证各模块协同工作能力
- 系统测试:验证整个系统在真实环境下的表现
- 极限测试:验证极端工况下的系统稳定性
2.2 测试分类
| 测试级别 | 测试内容 | 测试方法 |
|---|---|---|
| 单元测试 | 单个功能模块(电机、舵机、摄像头等) | 白盒测试 |
| 集成测试 | 模块间协作(UART通信等) | 黑盒测试 |
| 系统测试 | 完整系统功能(捡球流程等) | 黑盒测试 |
| 极限工况测试 | 极端环境条件下的稳定性 | 黑盒测试 |
| 验收测试 | 验证是否满足需求 | 用户验收 |
2.3 测试流程
- 测试准备:搭建测试环境、准备测试设备、明确测试参数(如安全温度上限)
- 单元测试执行:按照测试用例执行各硬件模块测试
- 集成测试执行:验证模块间协同工作能力
- 极限工况测试:在极端环境下验证系统稳定性(包括组装过程中的电机和舵机连续运行温度测试)
- 系统测试执行:验证完整功能流程
- 缺陷记录:记录测试中发现的问题
- 缺陷修复:开发人员修复问题
- 回归测试:验证修复效果
- 测试报告:汇总测试结果
2.4 测试优先级
| 优先级 | 测试类别 | 说明 |
|---|---|---|
| P0 | 硬件功能测试 | 确保核心硬件模块正常工作 |
| P1 | 极限工况测试 | 验证极端环境下的稳定性(如40分钟连续运行温度测试) |
| P2 | 交互测试 | 确保用户交互功能正常 |
| P3 | 系统集成测试 | 验证完整系统功能 |
文档版本:V1.0
创建日期:2026-06-11
文档状态:待审核
AKA-00教育机器人测试文档 - 硬件测试
3. 硬件测试
3.1 电机测试与电机控制电路测试
3.1.1 测试目标
验证电机驱动功能和电机控制电路模块的工作状态,包括电机转动和控制芯片状态。
3.1.2 测试环境
- 底盘垫高,车轮离地
- 计时器
3.1.3 测试用例
| 用例编号 | 测试场景 | 测试步骤 | 预期结果 | 实际结果 | 状态 |
|---|---|---|---|---|---|
| HW-001 | 电机前进驱动 | 1. 启动机器人 2. 发送前进指令 3. 观察电机转动 | 电机正常转动 | ||
| HW-002 | 电机后退驱动 | 1. 启动机器人 2. 发送后退指令 3. 观察电机转动 | 电机正常转动 | ||
| HW-003 | 电机左转驱动 | 1. 启动机器人 2. 发送左转指令 3. 观察电机转动 | 电机正常转动 | ||
| HW-004 | 电机右转驱动 | 1. 启动机器人 2. 发送右转指令 3. 观察电机转动 | 电机正常转动 | ||
| HW-006 | 运动停止 | 1. 机器人运动中 2. 发送停止指令 | 电机立即停止转动 | ||
| HW-008 | 左电机独立控制 | 1. 单独驱动左电机 2. 观察右电机状态 3. 记录左电机转动情况 | 仅左电机转动,右电机保持静止 | ||
| HW-009 | 右电机独立控制 | 1. 单独驱动右电机 2. 观察左电机状态 3. 记录右电机转动情况 | 仅右电机转动,左电机保持静止 |
3.2 摄像头测试与控制板USB测试
3.2.1 测试目标
验证摄像头的图像采集功能是否正常。
3.2.2 测试环境
- 室内测试环境
3.2.3 测试用例
| 用例编号 | 测试场景 | 测试步骤 | 预期结果 | 实际结果 | 状态 |
|---|---|---|---|---|---|
| HW-011 | 摄像头图像采集 | 1. 启动摄像头 2. 抓取一张图片 3. 检查图像是否成功保存 | 成功抓取并保存一张图片 |
3.3 舵机测试与舵机控制电路测试
3.3.1 测试目标
验证舵机驱动功能和舵机控制电路模块的工作状态,包括3个舵机的独立控制。
3.3.2 测试环境
- 平坦地面
- 计时器
3.3.3 测试用例
| 用例编号 | 测试场景 | 测试步骤 | 预期结果 | 实际结果 | 状态 |
|---|---|---|---|---|---|
| HW-019 | 舵机1(关节1)控制 | 1. 发送舵机1转动指令 2. 观察舵机1运动 | 舵机1按指令转动 | ||
| HW-020 | 舵机2(关节2)控制 | 1. 发送舵机2转动指令 2. 观察舵机2运动 | 舵机2按指令转动 | ||
| HW-021 | 舵机3(夹爪)控制 | 1. 发送夹爪张开/闭合指令 2. 观察夹爪状态 | 夹爪正常张开和闭合 |
3.4 电池测试
3.4.1 测试目标
验证12V电池的输出电压和续航时间是否满足要求。
3.4.2 测试环境
- 室内/室外测试场地
- 满电状态的电池
- 万用表
- 计时器
3.4.3 测试用例
| 用例编号 | 测试场景 | 测试步骤 | 预期结果 | 实际结果 | 状态 |
|---|---|---|---|---|---|
| HW-026 | 电池输出电压测试 | 1. 电池满电状态 2. 测量电池输出电压 | 电池输出电压为7.5V±5% | ||
| HW-027 | 连续工作续航 | 1. 充满电 2. 启动自主捡球模式 3. 记录工作时间直到电量耗尽 | 续航时间≥[预期值]小时 |
3.5 降压模块测试
3.5.1 测试目标
验证降压模块的输出电压和输出电流是否正确(7.5V给舵机供电,5V给控制板和电机供电)。
3.5.2 测试环境
- 实验室测试环境
- 万用表
- 电流表
3.5.3 测试用例
| 用例编号 | 测试场景 | 测试步骤 | 预期结果 | 实际结果 | 状态 |
|---|---|---|---|---|---|
| HW-030 | 控制板供电降压模块测试 | 1. 连接电池到降压模块 2. 测量控制板供电输出电压 | 输出电压为5V±5% | ||
| HW-031 | 降压模块输出电压测试 | 1. 连接电池到降压模块 2. 测量各路输出电压 3. 记录测量值 | 舵机供电输出7.5V±5%,控制板供电输出5V±5% | ||
| HW-032 | 降压模块输出电流测试 | 1. 连接电池到降压模块 2. 测量各路输出电流 3. 记录测量值 | 舵机供电电流≤[预期值]A,控制板供电电流≤[预期值]A |
3.6 UART通信测试
3.6.1 测试目标
验证控制板两路UART接口的通信功能,分别用于控制电机和舵机。
3.6.2 测试环境
- 实验室测试环境
- 串口调试工具
- 电机控制板
- 舵机控制板
3.6.3 测试用例
| 用例编号 | 测试场景 | 测试步骤 | 预期结果 | 实际结果 | 状态 |
|---|---|---|---|---|---|
| HW-034 | UART1(电机控制)通信测试 | 1. 连接UART1到电机控制板 2. 发送电机控制指令 3. 检查通信状态和电机响应 | UART通信正常,电机按指令动作 | ||
| HW-035 | UART2(舵机控制)通信测试 | 1. 连接UART2到舵机控制板 2. 发送舵机控制指令 3. 检查通信状态和舵机响应 | UART通信正常,舵机按指令动作 |
3.7 NPU功能测试(含YOLO网球识别)
3.7.1 测试目标
验证控制板NPU(神经网络处理器)的YOLO网球识别功能。
3.7.2 测试环境
- 室内测试环境
- 网球
3.7.3 测试用例
| 用例编号 | 测试场景 | 测试步骤 | 预期结果 | 实际结果 | 状态 |
|---|---|---|---|---|---|
| HW-039 | NPU网球识别 | 1. 启动YOLO识别功能 2. 放置网球 3. 检查视频帧识别结果 | 能在视频帧里正确识别网球 |
3.8 WiFi功能测试
3.8.1 测试目标
验证控制板WiFi连接功能和SSH远程连接能力。
3.8.2 测试环境
- 室内测试环境
- WiFi网络环境
- SSH客户端
3.8.3 测试用例
| 用例编号 | 测试场景 | 测试步骤 | 预期结果 | 实际结果 | 状态 |
|---|---|---|---|---|---|
| HW-043 | WiFi连接测试 | 1. 控制板接入WiFi网络 2. 检查连接状态 | 成功连接WiFi,获取IP地址 | ||
| HW-044 | SSH远程连接测试 | 1. 通过SSH客户端连接控制板 2. 执行命令验证连接 | SSH连接成功,命令执行正常 |
文档版本:V1.0
创建日期:2026-06-11
文档状态:待审核
AKA-00教育机器人测试文档 - 极限工况测试
4. 极限工况测试
4.1 测试目标
验证机器人在极端环境条件下的安全运行能力,包括不同温度环境、阳光直射等工况下的长时间运行稳定性。
4.2 测试环境
- 高温测试环境(40℃)
- 低温测试环境(0℃)
- 室外阳光直射环境
- 温度测量设备
- 计时器
4.3 测试用例
| 用例编号 | 测试场景 | 测试步骤 | 预期结果 | 实际结果 | 状态 |
|---|---|---|---|---|---|
| EX-007 | 电机连续运行温度测试 | 1. 安装完整底盘后 2. 控制电机连续最大速度转动40分钟 3. 测量电机控制芯片温度 | 电机控制芯片温度≤[实测安全温度]℃ | ||
| EX-008 | 舵机连续运行温度测试 | 1. 安装完整机械臂后 2. 控制舵机依次最大角度转动一次,执行抓取释放循环40分钟 3. 测量舵机和舵机控制芯片温度 | 舵机温度≤[实测安全温度]℃ 舵机控制芯片温度≤[实测安全温度]℃ | ||
| EX-001 | 高温环境连续运行测试 | 1. 在40℃环境下启动机器人 2. 持续高强度运动40分钟(一节课时间) 3. 测量电机控制芯片温度 | 电机控制芯片温度≤[实测安全温度]℃ | ||
| EX-002 | 低温环境连续运行测试 | 1. 在0℃环境下启动机器人 2. 持续高强度运动40分钟 3. 测量各关键部件温度 | 各部件工作正常,无异常低温问题 | ||
| EX-003 | 阳光直射环境测试 | 1. 在室外阳光直射环境下 2. 持续运行40分钟 3. 测量控制板和电池温度 | 控制板温度≤65℃,电池温度≤55℃ | ||
| EX-004 | 室内环境连续运行测试 | 1. 在室内常温环境下 2. 持续高强度运动40分钟 3. 测量电机控制芯片温度 | 电机控制芯片温度≤[实测安全温度]℃ | ||
| EX-005 | 室外环境连续运行测试 | 1. 在室外自然环境下 2. 持续高强度运动40分钟 3. 测量电机控制芯片温度 | 电机控制芯片温度≤[实测安全温度]℃ | ||
| EX-006 | 湿度环境测试 | 1. 在高湿度环境(85%RH)下 2. 持续运行2小时 3. 检查是否有结露或短路 | 无结露现象,电路工作正常 |
文档版本:V1.0
创建日期:2026-06-11
文档状态:待审核
AKA-00教育机器人测试文档 - 交互测试
5. 交互测试
5.1 手机APP遥控测试
5.1.1 测试目标
验证手机APP遥控功能是否正常。
5.1.2 测试环境
- 手机安装控制APP
- 机器人处于遥控模式
5.1.3 测试用例
| 用例编号 | 测试场景 | 测试步骤 | 预期结果 | 实际结果 | 状态 |
|---|---|---|---|---|---|
| INT-001 | APP连接 | 1. 打开手机APP 2. 搜索机器人 3. 点击连接 | 成功连接机器人 | ||
| INT-002 | APP断开连接 | 1. APP已连接机器人 2. 点击断开连接 | 成功断开连接 | ||
| INT-003 | 遥控前进 | 1. 连接APP 2. 点击前进按钮 3. 观察机器人运动 | 机器人前进 | ||
| INT-004 | 遥控后退 | 1. 连接APP 2. 点击后退按钮 3. 观察机器人运动 | 机器人后退 | ||
| INT-005 | 遥控左转 | 1. 连接APP 2. 点击左转按钮 3. 观察机器人运动 | 机器人左转 | ||
| INT-006 | 遥控右转 | 1. 连接APP 2. 点击右转按钮 3. 观察机器人运动 | 机器人右转 | ||
| INT-007 | 遥控停止 | 1. 机器人运动中 2. 点击停止按钮 3. 观察机器人状态 | 机器人停止 | ||
| INT-008 | 模式切换 | 1. 遥控模式下 2. 点击切换到自主模式 3. 观察机器人状态 | 成功切换到自主捡球模式 |
文档版本:V1.0
创建日期:2026-06-11
文档状态:待审核
AKA-00教育机器人测试文档 - 系统集成测试
6. 系统集成测试
6.1 完整捡球流程测试
6.1.1 测试目标
验证机器人完整捡球流程的功能完整性,包括自主捡球模式的各项功能。
6.1.2 测试环境
- 室内/室外测试场地
- 放置网球和目标容器
6.1.3 测试用例
| 用例编号 | 测试场景 | 测试步骤 | 预期结果 | 实际结果 | 状态 |
|---|---|---|---|---|---|
| SYS-001 | 启动自主模式 | 1. 启动机器人 2. 切换到自主捡球模式 3. 观察机器人行为 | 机器人开始搜索网球 | ||
| SYS-002 | 多球完整流程 | 1. 放置5个网球和1个目标容器 2. 启动自主捡球模式 3. 观察完整流程 | 机器人依次完成所有网球的捡取 | ||
| SYS-003 | 模式切换回遥控 | 1. 自主模式下 2. 切换到遥控模式 3. 观察机器人状态 | 成功切换到遥控模式 |
6.2 性能指标测试
6.2.1 测试目标
验证机器人的性能指标是否满足要求。
6.2.2 测试环境
- 室内/室外测试场地
6.2.3 测试用例
| 用例编号 | 测试场景 | 测试步骤 | 预期结果 | 实际结果 | 状态 |
|---|---|---|---|---|---|
| SYS-004 | 捡球效率测试 | 1. 放置10个网球 2. 启动自主模式 3. 记录捡球时间 | 捡球效率≥[预期值]个/分钟 | ||
| SYS-005 | 移动速度测试 | 1. 测量10米距离 2. 机器人从起点到终点 3. 记录时间 | 移动速度≥[预期值]米/秒 | ||
| SYS-006 | 续航时间测试 | 1. 充满电 2. 启动自主模式 3. 记录工作时间 | 续航时间≥[预期值]小时 |
文档版本:V1.0
创建日期:2026-06-11
文档状态:待审核
AKA-00教育机器人测试文档 - 缺陷管理与测试报告
7. 缺陷管理
7.1 缺陷分类
| 级别 | 描述 | 示例 |
|---|---|---|
| 严重 | 导致系统崩溃或无法完成核心功能 | 机器人无法启动、无法识别网球 |
| 高 | 影响主要功能正常使用 | 捡球成功率低于50%、通信频繁失败 |
| 中 | 影响次要功能或用户体验 | 偶尔识别错误、APP响应延迟 |
| 低 | 轻微问题,不影响功能使用 | 界面显示问题、日志格式问题 |
7.2 缺陷记录模板
| 字段 | 描述 |
|---|---|
| 缺陷编号 | 唯一标识,如 DEF-001 |
| 缺陷标题 | 简要描述问题 |
| 缺陷级别 | 严重/高/中/低 |
| 测试用例 | 关联的测试用例编号 |
| 测试环境 | 测试时的环境信息 |
| 复现步骤 | 详细描述如何复现问题 |
| 预期结果 | 期望的正常行为 |
| 实际结果 | 实际观察到的行为 |
| 发现日期 | 问题发现日期 |
| 发现人 | 测试人员姓名 |
| 状态 | 待修复/修复中/已修复/已验证 |
| 修复人 | 开发人员姓名 |
| 修复日期 | 问题修复日期 |
8. 测试报告模板
8.1 测试摘要
| 项目 | 内容 |
|---|---|
| 测试名称 | AKA-00教育机器人测试 |
| 测试日期 | YYYY-MM-DD |
| 测试环境 | 室内/室外 |
| 测试人员 | 姓名 |
| 测试版本 | 机器人软件版本 |
8.2 测试结果统计
| 测试类别 | 用例总数 | 通过数 | 失败数 | 通过率 |
|---|---|---|---|---|
| 硬件测试 | ||||
| 极限工况测试 | ||||
| 交互测试 | ||||
| 系统集成测试 | ||||
| 总计 |
8.3 缺陷统计
| 缺陷级别 | 数量 |
|---|---|
| 严重 | |
| 高 | |
| 中 | |
| 低 | |
| 总计 |
8.4 测试结论
- 测试是否通过:□ 通过 □ 未通过
- 主要问题:
- 改进建议:
- 测试人员签名:
附录:测试用例状态说明
| 状态 | 说明 |
|---|---|
| □ 未执行 | 测试用例尚未执行 |
| □ 通过 | 测试用例执行通过 |
| □ 失败 | 测试用例执行失败 |
| □ 阻塞 | 测试用例因其他问题无法执行 |
文档版本:V1.0
创建日期:2026-06-11
文档状态:待审核
常见问题
连接问题
Q: 机器人热点无法连接?
- 确保机器人已通电且指示灯亮起
- 等待 60 秒让网络模块完全启动
- 确认电脑/手机 WiFi 已开启
Q: 无法 SSH 登录?
- 确认电脑和机器人在同一 WiFi 网络
- 检查 IP 地址是否正确
- 尝试使用串口连接调试
Q: WiFi 配置页面打不开?
浏览器访问 192.168.4.1,确认已连接机器人热点。
运行问题
Q: 启动失败,提示缺少依赖?
pip install -r requirements.txt
Q: 机械臂不响应?
- 检查串口连接是否正确
- 确认舵机供电正常
- 检查
/dev/ttyACM0设备是否存在
Q: 电机不转动?
- 检查 GPIO 连接
- 确认 PWM 引脚配置正确
- 检查电机供电
Q: 摄像头无法识别?
- 检查 USB 连接
- 确认设备文件
/dev/video0存在 - 测试摄像头:
ls -l /dev/video0
其他
Q: 如何查看机器人 IP?
访问 http://<机器人IP>/api/ip
Q: 如何开启 HTTPS?
- 生成证书:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 3650 -nodes
- 配置环境变量:
export APP_CERT_PATH=/path/to/cert.pem
export APP_KEY_PATH=/path/to/key.pem
Q: 如何设置开机自启?
参考 机器人连接 中的开机自启配置。