docs: update project file
YPWsys.
把一台网球拾取机器人的操作系统内核,从 C 语言的 Linux 迁移到 Rust 组件化内核 StarryOS,并在 Sophgo SG2002 开发板上补齐摄像头、串口、TPU 推理等关键链路, 完成「视觉识别 → 底盘追踪 → 机械臂抓取」的闭环。感知与控制都跑在这一颗 SoC 上, 不依赖上位机。
SG2002 是异构双核 RISC-V SoC:大核 C906B(1 GHz,S-mode)运行 StarryOS, 小核 C906L(700 MHz,M-mode)运行自研 Rust 裸机采集固件,两核通过共享 DRAM、 硬件邮箱与 PLIC 中断协同。检测模型为 YOLOv8n 单类网球,mAP50 87.6%, INT8 量化后约 3.3 MB,运行于板载 TPU。
全部数字为真机实测,测量方式与原始数据见 tests/ 与 docs/comp-docs/。
mmap
/dev/cvi-usb-camera0
/dev/cvi-yuv
/dev/ttyS3
/dev/ttyS2
akars detect
akars serve
--mock
目标硬件
软件栈:大核 OpenSBI + U-Boot → StarryOS(Rust 组件化内核,musl 用户态); 小核 Rust 裸机固件(no_std,无操作系统)。
开发主机:Linux x86_64,需网络(首次构建下载工具链与 crates)。
riscv64gc-unknown-linux-musl
rust-toolchain.toml
riscv64-linux-musl-cross
src/akars/scripts/setup.sh
--archive
src/akars
src/tennis-train/requirements.txt
iozone
cargo test
├── README.md 本文件 ├── src/ 项目源代码(git submodule) │ ├── tgoskits/ StarryOS 内核:跨核设备节点、SD 块设备与 rsext4 优化 │ ├── sg200x-bare-metal/ C906L 小核裸机固件:USB 采集、JPU 解码、跨核交付 │ ├── sg200x-bsp/ SG2002 板级支持包:JPU、IVE、DWC2、pinmux 等 no_std 驱动 │ ├── akars/ 机器人主控(用户态 Rust):取帧、TPU 推理、电机与机械臂、状态机 │ └── tennis-train/ 网球检测模型的训练、量化与 cvimodel 转换 ├── docs/ │ ├── 项目说明书.pdf / 项目创新说明.pdf / 成员分工及主要贡献说明.pdf │ ├── 人工智能及第三方工具使用说明.pdf │ ├── 编译说明.md 逐组件复现的构建/烧录步骤 │ └── comp-docs/ 13+ 篇设计报告(架构、优化历程、测试方法、失败案例) ├── tests/ 测试及验证材料(单元测试入口 + 11 组真机实验原始数据) ├── demo/ 可运行交付物(启动脚本、量化模型、离线自检脚本) ├── presentation/ 决赛现场演示 PPT 与演示视频 └── 作品原创承诺书.pdf
首次克隆后请初始化子模块:
git submodule update --init --recursive
各组件的完整构建与烧录步骤见 docs/编译说明.md,要点如下。
1)StarryOS 内核(大核)
cd src/tgoskits cargo starry defconfig licheerv-nano-sg2002 cargo starry build # 产物 target/riscv64gc-unknown-linux-musl/release/starryos.uimg # 配套 dtb:os/StarryOS/configs/board/licheerv-nano-sg2002.dtb
2)小核裸机采集固件
cd src/sg200x-bare-metal make build # 产物 cvirtos.bin,入口 0x8FE00000
3)用户态主控 akars
cd src/akars scripts/setup.sh # 安装目标、TPU SDK submodule、玄铁工具链(一次) scripts/build.sh # 产物 target/.../release/akars scripts/upload.sh /dev/sdX2 # 写入 SD 卡 rootfs 分区
4)检测模型(仅在需要重新训练/量化时)
cd src/tennis-train python -m src.tennis_train.train --model yolov8n.pt --data configs/tennis_ball.yaml --epochs 100 # 量化与 cvimodel 转换命令见 src/tennis-train/docs/project_summary.md
方式一:烧录整卡镜像(推荐)
下载 disk.img(见下文「系统镜像下载」);
disk.img
烧录 SD 卡:dd if=disk.img of=/dev/sdX bs=4M status=progress oflag=sync;
dd if=disk.img of=/dev/sdX bs=4M status=progress oflag=sync
SD 卡装入机器人,上电进入 StarryOS shell 后执行:
./run.sh # 即 demo/run.sh:取帧 → TPU 推理 → 追球 → 抓取
方式二:手动组装启动(自行构建时,详见 docs/编译说明.md)
SD 卡第一个分区 FAT32 放 fip.bin(OpenSBI+U-Boot)、starryos.uimg、dtb; 第二个分区 mkfs.ext4(-b 4096 -O ^orphan_file)作 rootfs。U-Boot 中:
fip.bin
starryos.uimg
-b 4096 -O ^orphan_file
load mmc 0:1 0x82200000 starryos.uimg load mmc 0:1 0x83000000 licheerv-nano-sg2002.dtb bootm 0x82200000 - 0x83000000
辅助运行:demo/detect-check.sh 离线验证 TPU 检测(无需摄像头/电机); akars serve --listen 0.0.0.0:8080 打开 Web 遥控(开发机可 --mock)。 详见 demo/README.md。
demo/detect-check.sh
akars serve --listen 0.0.0.0:8080
全部测试与验证材料的索引及使用方法见 **tests/README.md**:
bash tests/run-host-tests.sh
src/tgoskits/components/rsext4
tests/optimize/
src/tennis-train/docs/project_summary.md
wfi
docs/comp-docs/10-限制与后续.md
ae_priority: None
docs/comp-docs/04
10
presentation/决赛现场演示PPT.pptx
通过网盘分享的文件:disk.img(整卡镜像,含内核、rootfs 与预置程序)
链接: https://pan.baidu.com/s/1As96-etkhgmCm4b0kmn5Yw?pwd=sv1i 提取码: sv1i
下载后在 Linux 主机上按「运行方法」烧录 SD 卡即可复现完整闭环。
项目中使用生成式 AI 辅助代码编写与文档整理,方案设计、代码审查与所有技术 决策由团队完成。使用的工具与第三方组件、模型、数据及许可证的详细声明见 docs/人工智能及第三方工具使用说明.pdf。
主要使用的 AI 工具:Claude Code(claude-opus 4.6 / glm5.2)。
感谢 StarryOS 与 ArceOS 社区提供的内核基础设施,感谢 Sophgo 提供的 TPU SDK 与 tpu-mlir 工具链,感谢 tock-registers 项目提供的类型安全 MMIO 访问抽象, 感谢 Roboflow 社区提供的公开网球数据集。硬件行为的理解过程中参考了 cvitek 开源驱动与 FreeRTOS 移植层的实现思路,一并致谢。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
面向智能机器人的 AIOS:网球拾取机器人(高校赛题)
团队
YPWsys.
项目简介
把一台网球拾取机器人的操作系统内核,从 C 语言的 Linux 迁移到 Rust 组件化内核 StarryOS,并在 Sophgo SG2002 开发板上补齐摄像头、串口、TPU 推理等关键链路, 完成「视觉识别 → 底盘追踪 → 机械臂抓取」的闭环。感知与控制都跑在这一颗 SoC 上, 不依赖上位机。
SG2002 是异构双核 RISC-V SoC:大核 C906B(1 GHz,S-mode)运行 StarryOS, 小核 C906L(700 MHz,M-mode)运行自研 Rust 裸机采集固件,两核通过共享 DRAM、 硬件邮箱与 PLIC 中断协同。检测模型为 YOLOv8n 单类网球,mAP50 87.6%, INT8 量化后约 3.3 MB,运行于板载 TPU。
全部数字为真机实测,测量方式与原始数据见 tests/ 与 docs/comp-docs/。
应用场景
主要功能
mmap零拷贝读取(/dev/cvi-usb-camera0、/dev/cvi-yuv),硬件邮箱 + PLIC 双向中断做核间同步;/dev/ttyS3) 与 ZP10D 机械臂(/dev/ttyS2);akars detect单图推理验证模型/TPU 链路;akars serve内置 Web 遥控前端(支持--mock无硬件运行);系统环境
目标硬件
软件栈:大核 OpenSBI + U-Boot → StarryOS(Rust 组件化内核,musl 用户态); 小核 Rust 裸机固件(no_std,无操作系统)。
开发主机:Linux x86_64,需网络(首次构建下载工具链与 crates)。
依赖要求
riscv64gc-unknown-linux-musl等目标; 各子目录的rust-toolchain.toml会自动切换);riscv64-linux-musl-cross交叉工具链(内核构建时需在 PATH 中);src/akars/scripts/setup.sh自动下载并校验 SHA-256,也支持离线--archive安装);src/akars的 submodule 自动获取);src/tennis-train/requirements.txt);iozone(存储对比)、cargo test(单元测试与 rsext4 回归)。仓库结构
首次克隆后请初始化子模块:
构建方法
各组件的完整构建与烧录步骤见 docs/编译说明.md,要点如下。
1)StarryOS 内核(大核)
2)小核裸机采集固件
3)用户态主控 akars
4)检测模型(仅在需要重新训练/量化时)
运行方法
方式一:烧录整卡镜像(推荐)
下载
disk.img(见下文「系统镜像下载」);烧录 SD 卡:
dd if=disk.img of=/dev/sdX bs=4M status=progress oflag=sync;SD 卡装入机器人,上电进入 StarryOS shell 后执行:
方式二:手动组装启动(自行构建时,详见 docs/编译说明.md)
SD 卡第一个分区 FAT32 放
fip.bin(OpenSBI+U-Boot)、starryos.uimg、dtb; 第二个分区 mkfs.ext4(-b 4096 -O ^orphan_file)作 rootfs。U-Boot 中:辅助运行:
demo/detect-check.sh离线验证 TPU 检测(无需摄像头/电机);akars serve --listen 0.0.0.0:8080打开 Web 遥控(开发机可--mock)。 详见 demo/README.md。测试方法
全部测试与验证材料的索引及使用方法见 **tests/README.md**:
bash tests/run-host-tests.sh(akars 的串口协议、NMS 后处理、图像预处理等模块,TPU 走 stub);src/tgoskits/components/rsext4下cargo test回归(11 个测试二进制)+ mock 低 IOPS 设备建模,三轮优化每轮全绿;tests/optimize/下 11 组实验的原始日志/CSV/图表 (启动计时、SD 时钟、iozone 三方对比、JPU vs CPU 解码、小核分阶段计时等);src/tennis-train/docs/project_summary.md;wfi不可用等负结果证据链 (见docs/comp-docs/10-限制与后续.md)。已知限制
docs/comp-docs/10-限制与后续.md§10.1;ae_priority: None,常光下采集 33 fps (强制 60 fps 会恶化弱光画质);wfi不可用(已逐一排除 候选中断源),CPU 占用无法下降;UART0 大小核共用,输出可能交错;docs/comp-docs/04、10篇)。演示视频与展示材料
presentation/决赛现场演示PPT.pptx系统镜像下载
通过网盘分享的文件:
disk.img(整卡镜像,含内核、rootfs 与预置程序)链接: https://pan.baidu.com/s/1As96-etkhgmCm4b0kmn5Yw?pwd=sv1i 提取码: sv1i
下载后在 Linux 主机上按「运行方法」烧录 SD 卡即可复现完整闭环。
人工智能及第三方工具使用说明
项目中使用生成式 AI 辅助代码编写与文档整理,方案设计、代码审查与所有技术 决策由团队完成。使用的工具与第三方组件、模型、数据及许可证的详细声明见 docs/人工智能及第三方工具使用说明.pdf。
主要使用的 AI 工具:Claude Code(claude-opus 4.6 / glm5.2)。
致谢
感谢 StarryOS 与 ArceOS 社区提供的内核基础设施,感谢 Sophgo 提供的 TPU SDK 与 tpu-mlir 工具链,感谢 tock-registers 项目提供的类型安全 MMIO 访问抽象, 感谢 Roboflow 社区提供的公开网球数据集。硬件行为的理解过程中参考了 cvitek 开源驱动与 FreeRTOS 移植层的实现思路,一并致谢。