概述
项目介绍和功能特性
项目介绍和功能特性 Desktop-Wanderer 是一个基于视觉引导的小型机器人系统,实现了自主目标检测、导航和抓取功能。系统采用模块化设计,支持多种硬件加速方案,具备以下核心功能特性:
- 视觉感知:基于YOLO的目标检测系统,支持ONNX CPU推理和Atlas 310B、RK3588 NPU硬件加速 process.py
- 智能导航:视觉引导的移动控制,能够自动导航至目标位置 move_controller.py
- 精确操作:支持两种机械臂控制模式 - ACT学习策略和逆运动学控制 setup.py
- 状态管理:基于状态机的行为控制,实现搜索-抓取的自动化流程 setup.py
系统架构概览
Desktop-Wanderer 采用四层分层架构设计,从应用层到硬件层逐级抽象:

系统核心是位于 src/main.py 的主控制循环 main.py ,负责协调各个子系统:
- 初始化阶段:加载配置、初始化机器人连接、读取初始关节角度
- 感知阶段:获取机器人观测数据,执行YOLO目标检测
- 决策阶段:根据当前状态选择相应控制器(移动控制或机械臂控制)
- 执行阶段:发送控制指令到机器人,维持指定FPS控制频率
快速开始指南
环境准备
- 硬件要求:
- LeKiwi机器人平台
- USB串口连接舵机控制板
- 12V8A电源连接舵机控制板
- 软件依赖
pip install -r requirements.txt
- lerobot 平台安装
python 3.10环境准备
wget "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-$(uname -m).sh"
bash Miniforge3-$(uname)-$(uname -m).sh
conda create -y -n lerobot python=3.10
lerobot 安装
conda activate lerobot
conda install ffmpeg -c conda-forge
git clone https://github.com/huggingface/lerobot.git
cd lerobot
pip install -e .
# 舵机驱动安装
pip install -e ".[feetech]"
详细说明可看安装与配置部分
配置设置
修改 config.yaml 配置文件:
port: /dev/tty.usbmodem5AE60581751 # 串口号
fps: 20 # 帧率
log_level: INFO # 日志级别
hardware_mode: normal # normal,310b,rk3588
control_mode: inverse # inverse, act
安装与配置 (Installation & Configuration)
环境要求和依赖
在PC上进行调试需要安装lerobot平台,具体安装方法可以参考 lerobot_Installation,下文也会给出。
安装miniforge
wget "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-$(uname -m).sh"
bash Miniforge3-$(uname)-$(uname -m).sh
创建python3.10环境
conda create -y -n lerobot python=3.10
激活环境
conda activate lerobot
conda安装ffmpeg
conda install ffmpeg -c conda-forge
从源码下载安装lerobot
克隆仓库
git clone https://github.com/huggingface/lerobot.git
cd lerobot
安装
pip install -e .
安装舵机控制SDK
pip install -e ".[feetech]"
基础环境准备完毕,在代码根目录运行
python -m src.main
配置文件说明
配置文件内容
port: /dev/ttyACM0 # 在控制板上的默认端口号
fps: 20 # 每秒识别20帧
log_level: INFO # 日志级别
hardware_mode: normal # normal,310b,rk3588 支持的硬件
control_mode: inverse # inverse, act 行动模式
其中
- port:在安装lerobot后,处于lerobot环境下,将设备连接到电脑运行
lerobot-find-port,之后会出现一堆设备号,根据指示,拔掉连接线后按回车,即可获得串口号,控制板上的环境已经安装完毕,端口号为固定的 '/dev/ttyACM0' - hardware_mode: 在PC上调试的时候选择normal模式,在控制板上运行的时候,为rk3588
首次运行
机械臂初始设置
连接机械臂后首次运行代码,由于没有硬件配置文件,需要初始化机械臂
正常会看见
"Move robot to the middle of its range of motion and press ENTER...."
之后将所有电机置于中点位置,按回车,之后缓慢的转动所有电机,到每个电机的上下限位,之后按回车,即可完成配置文件的录入。
项目再次启动
如果已经生成配置文件,打开项目能看到
"Press ENTER to use provided calibration file associated with the id {self.id}, or type 'c' and press ENTER to run calibration: "
之后可以按ENTER进入项目,或者等待3秒进入项目,或者输入c + ENTER重新初始化。
配置文件路径为
~/.cache/huggingface/lerobot/calibration/robots/lekiwi/None.json
删除它后进入项目自动进入初始化模式
硬件连接设置
核心架构 (Core Architecture)
四层架构设计
模块依赖关系
初始化流程
状态机 (State Machine)
RobotStatus枚举定义
状态转换逻辑
稳定性计数器机制
控制系统 (Control Systems)
移动控制器
机械臂控制器
ACT策略控制器
逆运动学控制器
控制模式选择
视觉系统 (Vision System)
YOLO推理实现
硬件加速支持 (ONNX/Atlas 310B)
目标检测和跟踪
硬件抽象层 (Hardware Abstraction)
LeKiwi机器人接口
方向控制
键盘遥操作
主控制循环 (Main Control Loop)
控制循环实现
动作-观察循环
时序控制机制
开发指南 (Development Guide)
代码结构和规范
添加新功能
调试和测试
模型优化
参看1的doc/03_Rockchip_RKNPU_API_Reference_RKNN_Toolkit2_V2.3.2_CN.pdf,这是官方的API使用文档。
把onnx模型转为rknn模型的极简脚本:
# file name: onnx2rknn.py
from rknn.api import RKNN
rknn = RKNN()
rknn.config(target_platform='rk3588')
rknn.load_onnx(model='tennis.onnx')
rknn.build(do_quantization=False)
rknn.export_rknn(export_path='tennis.rknn')
rknn.release()
连接主机
目前有adb, ssh, 调试串口三种连接方式。日常调试推荐用ssh连接。
用户名:orangepi 密码:orangepi
# 调试串口连接
minicom -D /dev/ttyUSB0 -b 1500000
# usb线adb连接
adb devices
adb shell
# ssh连接
sudo ip a add 192.168.1.2/24 dev <ethN> # 设置主机的ip地址
ssh orangepi@192.168.1.20 # 开发板的两个网口分别设置为10和20,哪个能连上就用哪个
手动运行
系统启动后本程序会自动运行,可以手动运行观察输出。如下命令都是在开发板的系统上执行。
sudo systemctl stop my-car # 停止本程序的运行,注意下次重启后本程序依然会自动运行
conda activate rknn # 切换到本程序的运行环境
cd ~/Code/Desktop-Wanderer # 切换到本程序所在的目录
python -m src.main # 手动运行本程序
附录
https://github.com/airockchip/rknn-toolkit2.git