ASCII格式协议
如何发送指令
- 通过 USB :
- Windows : 使用Zadig将ODrive的驱动程序设置为
usbser
。随后将使该设备识别为COM端口。您可以使用PuTTY手动发送指令或使用您喜欢的编程语言打开COM端口自己编写代码发送指令。 - Linux/macOS : 在命令终端中输入
ls /dev/tty*
Enter来列出所有串口。在Linux下ODrive显示为/dev/ttyACM0
,在macOS下显示为/dev/tty.usbmodem[...]
。找到了ODrive显示的串口名称后,您可以使用screen/dev/ttyACM0
(请自行替换为您的串口名称) Enter来手动发送指令或者使用您喜欢的其它串口工具来发送指令。
- Windows : 使用Zadig将ODrive的驱动程序设置为
- 通过 UART : 将ODrive的TX(GPIO1)连接到主机的RX。将ODrive的RX(GPIO2)连接到 主机的TX。ODrive的逻辑电平为3.3V。
- Arduino : 您可以调用我们的库和ODrive通信,该库位于
ODrive源码根目录/Arduino/ODriveArduino
下。 - Windows/Linux/macOS : 您可以使用USB转串口模块(如CP2102)连接ODrive进行通信。
- Arduino : 您可以调用我们的库和ODrive通信,该库位于
指令格式
使用ASCII 格式协议方便直接阅读,它的格式如下:
command *42; comment [new line character]
*42
表示兼容GCode的校验和,它可以被省略。当且仅当提供校验和时,设备才会在响应中包括校验和(如果有)。如果提供了校验和,但无效,则忽略该行。校验和计算为星号(*)之前所有字符的按位异或。- 注释也是兼容GCode。
- 一旦遇到换行符,将开始解释该指令。
指令格式
电机轨迹指令
t motor destination
t
表示轨迹控制模式motor
表示电机编号,0
或1
destination
目标位置,值表示编码器的计数
例如:t 0 -200
对于一般绕轴运动,推荐使用这种命令。
以上命令发送后会触发对应电机的内部看门狗喂狗动作。
电机位置指令
对于一次发送一个设定位置的应用,请使用q
命令。
如果您的应用是实时控制位置,您应该不断的发送处于轨迹上的各个位置,来实现自定义的轨迹跟踪,请使用p
命令。
q motor position velocity_lim current_lim
q
表示位置控制模式motor
表示电机编号,0
或1
position
目标位置,值表示编码器的计数velocity_lim
转速限制,单位为turns /s (可选的)current_lim
电流限制,单位为A(可选的)
例如:q 0 -200 10 10
p motor position velocity_ff current_ff
p
表示位置控制模式motor
表示电机编号,0
或1
position
目标位置,值表示编码器的计数velocity_ff
速度前馈,单位为turns /s(可选的)current_ff
电流前馈,单位为A(可选的)- 例如:
p 0 -200 0 0
请注意,如果您不了解前馈和它的作用,只需将其忽略即可。
以上命令发送后会触发对应电机的内部看门狗喂狗动作。
电机电流指令
c motor current
c
表示电流控制模式motor
表示电机编号,0
或1
current
目标电流,单位为A
以上命令发送后会触发对应电机的内部看门狗喂狗动作。
电机电流指令
f motor
response:
pos vel
f
表示请求返回信息motor
表示电机编号,0
或1
pos
当前编码器计数值(float)vel
当前转速,单位为turns/s (float)
更新电机看门狗
u motor
u
表示更新/喂狗motor
表示电机编号,0
或1
此命令仅仅更新电机的看门狗定时器,不影响其它任何指令。
参数读/写
并非所有参数都可以通过ASCII协议读写,但支持所有float和integer类型的参数。
- 读:
r [property]
-
property
属性名称,如ODrive Tool中所示 -
response: 返回所请求参数值的文本表示
-
例如:
r vbus_voltage
=> response:24.087744
-
写:
w [property] [value]
property
属性名称,如ODrive Tool中所示value
想要设定的值- 例如:
w axis0.controller.pos_setpoint -123.456
系统指令:
ss
-保存配置se
-擦除配置sr
-重启