概述

项目介绍和功能特性

项目介绍和功能特性 Desktop-Wanderer 是一个基于视觉引导的小型机器人系统,实现了自主目标检测、导航和抓取功能。系统采用模块化设计,支持多种硬件加速方案,具备以下核心功能特性:

  • 视觉感知:基于YOLO的目标检测系统,支持ONNX CPU推理和Atlas 310B、RK3588 NPU硬件加速 process.py
  • 智能导航:视觉引导的移动控制,能够自动导航至目标位置 move_controller.py
  • 精确操作:支持两种机械臂控制模式 - ACT学习策略和逆运动学控制 setup.py
  • 状态管理:基于状态机的行为控制,实现搜索-抓取的自动化流程 setup.py

系统架构概览

Desktop-Wanderer 采用四层分层架构设计,从应用层到硬件层逐级抽象:

img.png

系统核心是位于 src/main.py 的主控制循环 main.py ,负责协调各个子系统:

  • 初始化阶段:加载配置、初始化机器人连接、读取初始关节角度
  • 感知阶段:获取机器人观测数据,执行YOLO目标检测
  • 决策阶段:根据当前状态选择相应控制器(移动控制或机械臂控制)
  • 执行阶段:发送控制指令到机器人,维持指定FPS控制频率

快速开始指南

环境准备

  1. 硬件要求:
  • LeKiwi机器人平台
  • USB串口连接舵机控制板
  • 12V8A电源连接舵机控制板
  1. 软件依赖

pip install -r requirements.txt

  1. 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)

代码结构和规范

添加新功能

调试和测试

模型优化

参看1doc/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			# 手动运行本程序

附录

1

https://github.com/airockchip/rknn-toolkit2.git

故障排除 (Troubleshooting)

常见问题

调试技巧

性能优化