Open Duck Mini V2 文档
搭建问题记录
目录
资料导航
硬件组装
电机配置
电机驱动板供电,并且 Type-C 连接电脑或树莓派。Windows 电脑可以使用 FT 上位机修改 ID。电机设置参考:舵机配置
这里的脚本 scripts/configure_motor.py 会设置电机的 ID,PID,和位置,新电机默认检测 ID 1,然后修改至输入 ID,如果电机之前已经配置好 ID,则需要注释行 io.change_id({current_id: int(args.id)})
:
注意,校准后的位置为中位,在 FT 上查看是 2048
参考后续用串口设置 2048 更安全。
切勿直接使用 FT 设置为 0,有个问题是到达 4095 需要绕一整圈。装配好后,肯定是无法做到的,会发生堵转。
1 |
|
- 舵机十六进制指助手
- 波特率 1000000
- 十六进制发送
- 磁编码SMS08.xlsx
在表格中,修改这里的 ID 号和自定义位置,这样电机就会设置当前位置,改为2048。
名称 | ID | 当前位置 0 | 当前位置 2048 |
---|---|---|---|
right_hip_yaw | 10 | FF FF 0A 04 0B 00 00 E6 | FF FF 0A 04 0B 00 08 DE |
right_hip_roll | 11 | FF FF 0B 04 0B 00 00 E5 | FF FF 0B 04 0B 00 08 DD |
right_hip_pitch | 12 | FF FF 0C 04 0B 00 00 E4 | FF FF 0C 04 0B 00 08 DC |
right_knee | 13 | FF FF 0D 04 0B 00 00 E3 | FF FF 0D 04 0B 00 08 DB |
right_ankle | 14 | FF FF 0E 04 0B 00 00 E2 | FF FF 0E 04 0B 00 08 DA |
left_hip_yaw | 20 | FF FF 14 04 0B 00 00 DC | FF FF 14 04 0B 00 08 D4 |
left_hip_roll | 21 | FF FF 15 04 0B 00 00 DB | FF FF 15 04 0B 00 08 D3 |
left_hip_pitch | 22 | FF FF 16 04 0B 00 00 DA | FF FF 16 04 0B 00 08 D2 |
left_knee | 23 | FF FF 17 04 0B 00 00 D9 | FF FF 17 04 0B 00 08 D1 |
left_ankle | 24 | FF FF 18 04 0B 00 00 D8 | FF FF 18 04 0B 00 08 D0 |
neck_pitch | 30 | FF FF 1E 04 0B 00 00 D2 | FF FF 1E 04 0B 00 08 CA |
head_pitch | 31 | FF FF 1F 04 0B 00 00 D1 | FF FF 1F 04 0B 00 08 C9 |
head_yaw | 32 | FF FF 20 04 0B 00 00 D0 | FF FF 20 04 0B 00 08 C8 |
head_roll | 33 | FF FF 21 04 0B 00 00 CF | FF FF 21 04 0B 00 08 C7 |
电路连接
为了安全起见,请确保在将电池放入电池座之前,所有电池单元已充电至相同的电压。
电源连接示意图:
- 注意充放电保护板 BMS 直接输出的 8.4V 给电机驱动板和稳压板 UBEC 供电
- 稳压板的 EN 短接帽要拿掉。红灯亮时表示有输出
- UBEC 输出 5V 给头部各模块供电
保护电路连接示意图:
充电电路示意图:
- 充满时,红灯亮,绿灯也亮
- 电池电量不足充电时,红灯亮,绿灯不亮
调试
Runtime 设置文档:
运行时
1 |
|
1 |
|
分量 | 含义 | 范围 | 说明 |
---|---|---|---|
sys | 系统整体校准状态 | 0–3 | 依赖于 gyro/accel/mag 的状态 |
gyro | 陀螺仪校准状态 | 0–3 | 静止即可自动完成 |
accel | 加速度计校准状态 | 0–3 | 多方向移动以完成 |
mag | 磁力计校准状态 | 0–3 | 环境干净下旋转设备可完成 |
各模块校准条件说明
🌀 Gyro(陀螺仪):
- 只需要 静止几秒 即可完成。
- 如果你一直在晃动设备,它可能永远达不到 3。
🧭 Magnetometer(磁力计):
- 需要在远离金属、磁场干扰的环境中,多角度旋转设备。
- 室内环境常常干扰大,很难校准到 3。
📐 Accelerometer(加速度计):
- 需要你在多个方向上轻轻移动或旋转设备。
- 不用剧烈甩动,类似于「画圈、倾斜」。
🧠 System(系统):
- 综合其他三个分量,取决于它们的校准状态。
sim2real
1 |
|
duck/config.json:
1 |
|
1 |
|
1 |
|
1 |
|
安装 uv
1 |
|
1 |
|
机器鸭资源文件:
1 |
|
第一步,加载 auto_gait.json 中的参数:
1 |
|
调整建议:
- 若机器人行走不稳:
- 减小 dx_max 或 dtheta_max,降低运动速度。
- 增大 double_support_ratio(需在另一个配置文件中调整)。
- 若步态不自然:
- 调整 sweep_x/y 范围,限制脚掌移动幅度。
- 减小 sweep_xy_granularity,使优化更精细。
- 若优化耗时过长:
- 增大 sweep_theta_granularity,减少旋转角度的尝试次数。
定义机器鸭典型步态运动模式 gait_motions :(没有用到)
- standing
- forward 直线前进
- backward 直线后退
- left
- right
- ang_left 逆时针旋转
- ang_right 顺时针旋转
- dia_forward 沿对角线方向前进(如 X+Y 方向组合)
- dia_backward 沿对角线方向后退(如 -X+Y 方向组合)。
动作生成:
1 |
|
所有的生成基于 open_duck_reference_motion_generator/robots/go_bdx/placo_presets/medium.json
的预设:
1 |
|
以下是对 open_duck_reference_motion_generator/gait_generator.py
代码的详细注释和功能分析:
1. 核心功能概述
这段代码实现了一个基于 Flask Web框架 的 机器鸭步态生成与可视化系统,主要功能包括:
- 通过Web界面实时调整步态参数(速度、步长、支撑时间等)
- 可视化机器鸭的运动状态(三维模型+足部轨迹)
- 支持多种机器鸭模型(go_bdx/open_duck_mini等)
- 生成可保存的运动轨迹数据
2. 关键模块分析
(1) 参数解析与初始化
1 |
|
(2) 步态参数管理类 GaitParameters
1 |
|
(3) Web接口路由
1 |
|
(4) 步态生成线程
1 |
|
3. 关键技术点
(1) 参数覆盖逻辑
1 |
|
(2) 实时数据记录
1 |
|
(3) 可视化系统
- 三维模型:通过
robot_viz
显示URDF模型 - 足部轨迹:
footsteps_viz
绘制支撑多边形 - 坐标系:
robot_frame_viz
显示机身/足部局部坐标系
1 |
|
训练:
1 |
|
训练遇到的问题:
cuSolver internal error
参考 https://github.com/jax-ml/jax/issues/29042#issuecomment-2916978884
使用uv pip list | grep nvidia
查看 NV 库版本
如果是 0.6.1 jax 把nvidia-cublas-cu12==12.8.4.1
手动升级到12.9.0.13
,然后不要直接uv run
,会刷新环境重置刚刚升级的版本,直接source .venv/bin/activate
,然后python playground/open_duck_mini_v2/runner.py
1
2
3
4
5
6
7
8
9
10
11
12
13uv pip install nvidia-cublas-cu12==12.9.0.13
uv pip list | grep nvidia
nvidia-cublas-cu12 12.9.0.13 # 这个要升级
nvidia-cuda-cupti-cu12 12.9.19
nvidia-cuda-nvcc-cu12 12.9.41
nvidia-cuda-runtime-cu12 12.9.37
nvidia-cudnn-cu12 9.10.1.4
nvidia-cufft-cu12 11.4.0.6
nvidia-cusolver-cu12 11.7.4.40
nvidia-cusparse-cu12 12.5.9.5
nvidia-nccl-cu12 2.26.5
nvidia-nvjitlink-cu12 12.9.41
nvidia-nvshmem-cu12 3.2.5AttributeError: ‘dict’ object has no attribute ‘policy’
参考:https://github.com/apirrone/Open_Duck_Playground/issues/8
将:export_onnex.py
中的1
transfer_weights(params[1].policy["params"], tf_policy_network)
改为
1
transfer_weights(params[1]["params"], tf_policy_network)
然后参考 https://github.com/onnx/tensorflow-onnx/issues/2373
https://github.com/onnx/tensorflow-onnx/pull/2378/commits/2e752714669d1d4e0a93fc9a575f33189d02916e
更改 .venv 中的tfonnx.py
现在可以愉快训练了:
1 |
|