开始前准备
- 建议按文中要求先装 Python 3.9,再装对应版本的 odrive Python 包;命令行和 PyCharm 版本保持一致。
- 使用能传数据的 Type-C 线,校准时先让电机脱开负载或至少保证周围没有手、线缆和卷筒会被卷入。
新手说明
这篇是 steadywin6010 / ODrive 类电机的 Windows 使用流程。对新手最关键的是先让电脑识别设备,再装 Python 库,最后在电机无负载状态下做校准;这三个步骤顺序错了,后面基本都会卡住。
https://cyberbeast.feishu.cn/docx/N3SMd4QyRobzHkx3wP3cT1qXnpf
1. 安装Python 3.9 勾选加入环境变量 安装目录改为C:\python39

图解说明:这张图对应“安装 Python 3.9 勾选加入环境变量 安装目录改为C:\python39”这一步。优先确认驱动、线材和 Python 环境三件事,再运行校准脚本。

图解说明:这张图对应“安装 Python 3.9 勾选加入环境变量 安装目录改为C:\python39”这一步。优先确认驱动、线材和 Python 环境三件事,再运行校准脚本。
2. 安装PyCharm,一路确认
3. 终端 修改pip源
输入pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
4. 安装电机控制库pip install odrive==0.6.9.post0
5. 电机通电,连接Type-C到电脑上
6. 打开Zadig.exe

图解说明:这张图对应“打开 Zadig.exe”这一步。优先确认驱动、线材和 Python 环境三件事,再运行校准脚本。
7. 修改驱动类型为WinUSB,点击install Driver,大约3分钟,安装完毕

图解说明:这张图对应“修改驱动类型为 WinUSB,点击install Driver,大约3分钟,安装完毕”这一步。优先确认驱动、线材和 Python 环境三件事,再运行校准脚本。
8. 打开cmd 输入odrivetool回车,如果显示以下的文字,说明驱动安装成功,关闭cmd

图解说明:这张图对应“打开 cmd 输入odrivetool回车 ,如果显示以下的文字,说明驱动安装成功,关闭 cmd”这一步。优先确认驱动、线材和 Python 环境三件事,再运行校准脚本。
9. 运行python中的6010-8初始化电机和编码器.PY程序
运行后,电机会叫一声,然后正转一圈,反转一圈,用于校准传感器
10. 运行6010-8设置参数.py
11. 运行6010-8测试.py
电机会旋转
电机控制逻辑
0~5圈 按照设定的扭矩往回收绳 模拟桨在水里的阻力
>5圈 以最快的速度收绳 桨的位置已经到达极限 运动员会把桨复位 开启大扭矩收绳
odrv0.axis0.encoder.config.index_offset
odrv0.axis0.encoder.pos_estimate
odrv0.save_configuration()
odrv0.axis0.requested_state = 8
odrv0.axis0.config.can.node_id
## 当电机ID是0x00时的CAN输出:
### 1. 清除错误命令 (CLEAR_ERROR_CMD = 0x018)
- CAN ID : (0x00 << 5) + 0x018 = 0x018
- 数据 : [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
### 2. 状态命令 - 启动 (STATE_CMD = 0x007)
- CAN ID : (0x00 << 5) + 0x007 = 0x007
- 数据 : [0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
### 3. 位置命令 (POS_CMD = 0x00c)
根据你的代码中的示例:
位置0时:
- CAN ID : (0x00 << 5) + 0x00c = 0x00c
- 数据 : [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] (位置0.0的float表示)
位置-2时:
- CAN ID : (0x00 << 5) + 0x00c = 0x00c
- 数据 : [0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00] (位置-2.0的float表示)
### 4. 状态命令 - 停止 (STATE_CMD = 0x007)
- CAN ID : (0x00 << 5) + 0x007 = 0x007
- 数据 : [0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
In [2]: odrv0.can.config
Out[2]:
baud_rate: 500000 (uint32)
enable_r120: True (bool)
protocol: 1 (uint8)
r120_gpio_num: 5 (uint16)
odrv0.can.config
小臂

图解说明:这张图对应“号电机 0~1.4”这一步。执行前先拆桨或脱开负载,避免设备突然动作。
肩膀

图解说明:这张图对应“号电机 0~1.4”这一步。执行前先拆桨或脱开负载,避免设备突然动作。
odrv0.erase_configuration()
odrivetool
1号电机 0~1.4
2号电机 0~3.3
odrv0.axis0.motor.config.current_control_bandwidth=50
odrv0.axis0.controller.config.vel_gain=0.16
odrv0.axis0.controller.config.vel_integrator_gain=0.33
odrv0.axis0.controller.config.pos_gain=200
odrv0.axis0.controller.config.enable_vel_limit=True
odrv0.axis0.controller.config.vel_limit=10
(odrivetool 里的单位是转子侧 转/s)
odrv0.axis0.trap_traj.config.vel_limit=15
odrv0.axis0.trap_traj.config.decel_limit=5
odrv0.axis0.trap_traj.config.accel_limit=5
odrv0.axis0.controller.input_pos = 10 #单位turns
odrv0.can.config.enable_r120 = False