这是ElectronBot的命令行上位机, 使用rust编写, 支持跨平台运行.
现计划是通过rk3566(2G+16G)的核心板(55mm*40mm)+外扩底板以机器人背包的形式挂载, 将原先的usb尾插小板功能移植到底板.
sherpa-onnx调用usb麦克风实现asr和ttsort推理, rk3566使用rknn推理模型hugging face的默认目录下载模型, 然后程序退出手动调用convert_all_models.py进行模型转换再次启动程序即可.onnx, 这时需要手动安装运行时.brew install onnxruntime # mac
sudo apt install libonnxruntime-dev # ubuntu
winget install Microsoft.OnnxRuntime # Windows
cargo run --release即可依赖: Docker Desktop / docker daemon, cross-rs (cargo install cross --git https://github.com/cross-rs/cross).
完整帮助: ./scripts/deploy_rk3566.sh --help
# 编译并部署主程序 (默认 release)
./scripts/deploy_rk3566.sh
# 单独编译 / 单独部署
./scripts/deploy_rk3566.sh build
./scripts/deploy_rk3566.sh deploy
# 编译并部署 test_bd1 (BD1 声音测试 binary)
./scripts/deploy_rk3566.sh test_bd1
# debug 编译 (dev profile, 含调试符号)
./scripts/deploy_rk3566.sh --debug
./scripts/deploy_rk3566.sh build --debug
# 任意位置参数都能加 --debug, 同时支持 PROFILE 环境变量:
PROFILE=release-with-debug ./scripts/deploy_rk3566.sh
模式: build (只编译) / deploy (只部署) / all (默认, 都做). 也可直接传 binary 名等同 all <binary>.
选项: --debug / -d / --dev 切 dev profile, --help / -h 显示完整帮助. 未知选项会输出错误+帮助到 stderr 并退出 1.
dev profile 警告: RK3566 跨编译
gemm-f16在无优化时汇编失败. debug 编译目前走不通, 但 release 正常. 调试建议用 release 包 + remote gdb.
环境变量 (覆盖默认值):
| 变量 | 默认值 | 说明 |
|---|---|---|
RK_DEVICE | radxa@192.168.2.159 | 目标 SSH 地址 |
RK_REMOTE_DIR | ~/ElectronBotCli | 目标路径 |
RK_PASSWORD | radxa | sshpass 密码, 仅在 SSH 密钥失败时使用 |
HTTP_PROXY / HTTPS_PROXY | http://192.168.2.147:7890 | apt/cargo 走代理时设置 |
PROFILE | release | dev / release / release-with-debug, 也可用 --debug 标志 |
示例:
# 换设备 + 换代理
RK_DEVICE=radxa@192.168.2.202 \
HTTP_PROXY=http://other-proxy:7890 \
./scripts/deploy_rk3566.sh
# 推荐先用 ssh 密钥免密码登录
ssh-copy-id radxa@192.168.2.159
./scripts/deploy_rk3566.sh deploy # 之后自动走密钥
脚本内置:
编译环境完全定义在 Cross.toml + Dockerfile.cross: 基座固定为 Ubuntu 20.04
(focal, glibc 2.31) 的 cross 镜像 digest, 与设备 (Debian bullseye, glibc 2.31) 对齐;
libasound2-dev:arm64 / libssl-dev:arm64 等依赖在镜像构建时一次性装好
(arm64 包走 ubuntu-ports 源, 这是 focal 的正确仓库).
升级 cross-rs base image:
# ⚠️ 只能用 focal (glibc 2.31) 的镜像 digest — :main 已升到 Ubuntu 24.04
# (glibc 2.39), 产物在设备上会报 GLIBC_2.32+ not found. 升级前先验证:
docker run --rm <新镜像> ldd --version # 必须 ≤ 2.31
docker pull --platform linux/amd64 ghcr.io/cross-rs/aarch64-unknown-linux-gnu:edge
docker inspect --format='{{index .RepoDigests 0}}' ghcr.io/cross-rs/aarch64-unknown-linux-gnu:edge
# 把输出的 digest 替换 Dockerfile.cross 里的 FROM 行
配置usb的udev规则
sudo vim /etc/udev/rules.d/99-electronbot.rules
# 文件内输入
SUBSYSTEM=="usb", ATTR{idVendor}=="xxxx", ATTR{idProduct}=="yyyy", MODE="0666"
#保存后重新加载规则
sudo udevadm control --reload-rules
sudo udevadm trigger
部署到 RK3566
一键编译+部署 (推荐):
# 推荐先做一次 ssh 密钥免密
ssh-copy-id radxa@192.168.2.159
# 编译并部署 ele_bot_server (release)
./scripts/deploy_rk3566.sh
# 编译并部署 test_bd1 (BD1 声音测试 binary)
./scripts/deploy_rk3566.sh test_bd1
# 分步: 先编译, 看日志, 再部署
./scripts/deploy_rk3566.sh build
./scripts/deploy_rk3566.sh deploy
# 看完整用法
./scripts/deploy_rk3566.sh --help
切换设备 / 代理 / profile:
# 换一台 RK3566
RK_DEVICE=radxa@192.168.2.202 ./scripts/deploy_rk3566.sh
# 换代理 (公司内网 / 家里)
HTTP_PROXY=http://proxy.corp:7890 ./scripts/deploy_rk3566.sh
# debug profile (注意 gemm-f16 警告)
./scripts/deploy_rk3566.sh --debug
# 自定义 profile
PROFILE=release-with-debug ./scripts/deploy_rk3566.sh
设备端运行:
# ssh 进设备
ssh radxa@192.168.2.159
# 第一次跑: 自动下载模型, 然后程序退出
~/ElectronBotCli/ele_bot_server
# 用 convert_all_models.py 转模型
cd ~/ElectronBotCli
python3 convert_all_models.py
# 之后正常启动
./ele_bot_server
# 测试人脸检测 (用 RKNN 加速)
TEST_RKNN=1 ./ele_bot_server
# 测试指定模型
TEST_RKNN=1 RKNN_MODEL=./model/deepghs/yolo-face/yolo_face.rknn ./ele_bot_server
# 测试指定图片
TEST_RKNN=1 TEST_IMAGE=./assets/images/test.png ./ele_bot_server
手动 (不推荐, 仅当脚本有问题时参考):
cross build --release --target aarch64-unknown-linux-gnu -p ele_bot_server --bin ele_bot_server
scp target/aarch64-unknown-linux-gnu/release/ele_bot_server radxa@192.168.2.159:~/ElectronBotCli/
scp assets/tools/convert_all_models.py radxa@192.168.2.159:~/ElectronBotCli
263 commits
Rust
83.3%
PowerShell
9.8%
Python
3.3%
Shell
3.1%
这是ElectronBot的命令行上位机, 使用rust编写, 支持跨平台运行.
现计划是通过rk3566(2G+16G)的核心板(55mm*40mm)+外扩底板以机器人背包的形式挂载, 将原先的usb尾插小板功能移植到底板.
sherpa-onnx调用usb麦克风实现asr和ttsort推理, rk3566使用rknn推理模型hugging face的默认目录下载模型, 然后程序退出手动调用convert_all_models.py进行模型转换再次启动程序即可.onnx, 这时需要手动安装运行时.brew install onnxruntime # mac
sudo apt install libonnxruntime-dev # ubuntu
winget install Microsoft.OnnxRuntime # Windows
cargo run --release即可依赖: Docker Desktop / docker daemon, cross-rs (cargo install cross --git https://github.com/cross-rs/cross).
完整帮助: ./scripts/deploy_rk3566.sh --help
# 编译并部署主程序 (默认 release)
./scripts/deploy_rk3566.sh
# 单独编译 / 单独部署
./scripts/deploy_rk3566.sh build
./scripts/deploy_rk3566.sh deploy
# 编译并部署 test_bd1 (BD1 声音测试 binary)
./scripts/deploy_rk3566.sh test_bd1
# debug 编译 (dev profile, 含调试符号)
./scripts/deploy_rk3566.sh --debug
./scripts/deploy_rk3566.sh build --debug
# 任意位置参数都能加 --debug, 同时支持 PROFILE 环境变量:
PROFILE=release-with-debug ./scripts/deploy_rk3566.sh
模式: build (只编译) / deploy (只部署) / all (默认, 都做). 也可直接传 binary 名等同 all <binary>.
选项: --debug / -d / --dev 切 dev profile, --help / -h 显示完整帮助. 未知选项会输出错误+帮助到 stderr 并退出 1.
dev profile 警告: RK3566 跨编译
gemm-f16在无优化时汇编失败. debug 编译目前走不通, 但 release 正常. 调试建议用 release 包 + remote gdb.
环境变量 (覆盖默认值):
| 变量 | 默认值 | 说明 |
|---|---|---|
RK_DEVICE | radxa@192.168.2.159 | 目标 SSH 地址 |
RK_REMOTE_DIR | ~/ElectronBotCli | 目标路径 |
RK_PASSWORD | radxa | sshpass 密码, 仅在 SSH 密钥失败时使用 |
HTTP_PROXY / HTTPS_PROXY | http://192.168.2.147:7890 | apt/cargo 走代理时设置 |
PROFILE | release | dev / release / release-with-debug, 也可用 --debug 标志 |
示例:
# 换设备 + 换代理
RK_DEVICE=radxa@192.168.2.202 \
HTTP_PROXY=http://other-proxy:7890 \
./scripts/deploy_rk3566.sh
# 推荐先用 ssh 密钥免密码登录
ssh-copy-id radxa@192.168.2.159
./scripts/deploy_rk3566.sh deploy # 之后自动走密钥
脚本内置:
编译环境完全定义在 Cross.toml + Dockerfile.cross: 基座固定为 Ubuntu 20.04
(focal, glibc 2.31) 的 cross 镜像 digest, 与设备 (Debian bullseye, glibc 2.31) 对齐;
libasound2-dev:arm64 / libssl-dev:arm64 等依赖在镜像构建时一次性装好
(arm64 包走 ubuntu-ports 源, 这是 focal 的正确仓库).
升级 cross-rs base image:
# ⚠️ 只能用 focal (glibc 2.31) 的镜像 digest — :main 已升到 Ubuntu 24.04
# (glibc 2.39), 产物在设备上会报 GLIBC_2.32+ not found. 升级前先验证:
docker run --rm <新镜像> ldd --version # 必须 ≤ 2.31
docker pull --platform linux/amd64 ghcr.io/cross-rs/aarch64-unknown-linux-gnu:edge
docker inspect --format='{{index .RepoDigests 0}}' ghcr.io/cross-rs/aarch64-unknown-linux-gnu:edge
# 把输出的 digest 替换 Dockerfile.cross 里的 FROM 行
配置usb的udev规则
sudo vim /etc/udev/rules.d/99-electronbot.rules
# 文件内输入
SUBSYSTEM=="usb", ATTR{idVendor}=="xxxx", ATTR{idProduct}=="yyyy", MODE="0666"
#保存后重新加载规则
sudo udevadm control --reload-rules
sudo udevadm trigger
部署到 RK3566
一键编译+部署 (推荐):
# 推荐先做一次 ssh 密钥免密
ssh-copy-id radxa@192.168.2.159
# 编译并部署 ele_bot_server (release)
./scripts/deploy_rk3566.sh
# 编译并部署 test_bd1 (BD1 声音测试 binary)
./scripts/deploy_rk3566.sh test_bd1
# 分步: 先编译, 看日志, 再部署
./scripts/deploy_rk3566.sh build
./scripts/deploy_rk3566.sh deploy
# 看完整用法
./scripts/deploy_rk3566.sh --help
切换设备 / 代理 / profile:
# 换一台 RK3566
RK_DEVICE=radxa@192.168.2.202 ./scripts/deploy_rk3566.sh
# 换代理 (公司内网 / 家里)
HTTP_PROXY=http://proxy.corp:7890 ./scripts/deploy_rk3566.sh
# debug profile (注意 gemm-f16 警告)
./scripts/deploy_rk3566.sh --debug
# 自定义 profile
PROFILE=release-with-debug ./scripts/deploy_rk3566.sh
设备端运行:
# ssh 进设备
ssh radxa@192.168.2.159
# 第一次跑: 自动下载模型, 然后程序退出
~/ElectronBotCli/ele_bot_server
# 用 convert_all_models.py 转模型
cd ~/ElectronBotCli
python3 convert_all_models.py
# 之后正常启动
./ele_bot_server
# 测试人脸检测 (用 RKNN 加速)
TEST_RKNN=1 ./ele_bot_server
# 测试指定模型
TEST_RKNN=1 RKNN_MODEL=./model/deepghs/yolo-face/yolo_face.rknn ./ele_bot_server
# 测试指定图片
TEST_RKNN=1 TEST_IMAGE=./assets/images/test.png ./ele_bot_server
手动 (不推荐, 仅当脚本有问题时参考):
cross build --release --target aarch64-unknown-linux-gnu -p ele_bot_server --bin ele_bot_server
scp target/aarch64-unknown-linux-gnu/release/ele_bot_server radxa@192.168.2.159:~/ElectronBotCli/
scp assets/tools/convert_all_models.py radxa@192.168.2.159:~/ElectronBotCli
263 commits
Rust
83.3%
PowerShell
9.8%
Python
3.3%
Shell
3.1%