Mini_ODrive CAN协议

  • ODrive CAN Simple 协议使用标准的 11 位消息标识符(ID)。
  • CAN ID 组成

    • node_id: 用户为ODrive设置的节点 ID。
    • cmd_id: 命令 ID,用于标识消息类型。所有可用命令都列在 ??中。
  • 前缀为 Set_ 的消息 是主机可以发送到 ODrive 的消息。
  • 前缀为 Get_的消息是 ODrive 可以发送到主机的消息。这些消息可以作为can心跳 启用,也可以由 master 主动请求。如用户需要主动请求消息,主设备发送消息时需要设置 RTR 位的消息(远程帧),ODrive 使用相同的 ID 和相应的有效负载进行响应。
  • 所有值都以 little endian (又名 Intel 格式,又名最低有效字节在前) 编码,小端序模式。
  • 浮点数使用标准 IEEE 754 浮点格式进行编码。

CAN报文

CMD ID消息名称方向内容
0x000Get_VersionODrive → HostProtocol_VersionHw_Version_MajorHw_Version_MinorHw_Version_VariantFw_Version_MajorFw_Version_MinorFw_Version_RevisionFw_Version_Unreleased
0x001HeartbeatODrive → HostAxis_ErrorAxis_StateMotor_FlagsEncoder_FlagsController_Flags
0x002EstopHost → ODrive
0x003Get_ErrorODrive → HostAxis.Error_
0x004RxSdoHost → ODriveOpcodeEndpoint_IDReservedValue
0x005TxSdoODrive → HostReserved0Endpoint_IDReserved1Value
0x006Set_Node_IDHost → ODriveNode_ID
0x007Set_Axis_StateHost → ODriveAxis_Requested_State
0x009Get_Encoder_EstimatesODrive → HostPos_EstimateVel_Estimate
0x00bSet_Controller_ModeHost → ODriveControl_ModeInput_Mode
0x00cSet_Input_PosHost → ODriveInput_PosVel_FFTorque_FF
0x00dSet_Input_VelHost → ODriveInput_VelInput_Torque_FF
0x00eSet_Input_TorqueHost → ODriveInput_Torque
0x00fSet_LimitsHost → ODriveVelocity_LimitCurrent_Limit
0x011Set_Traj_Vel_LimitHost → ODriveTraj_Vel_Limit
0x012Set_Traj_Accel_LimitsHost → ODriveTraj_Accel_LimitTraj_Decel_Limit
0x013Set_Traj_InertiaHost → ODriveTraj_Inertia
0x014Get_IqODrive → HostIq_SetpointIq_Measured
0x015Get_TemperatureODrive → HostFET_TemperatureMotor_Temperature
0x016RebootHost → ODrive
0x017Get_Bus_Voltage_CurrentODrive → HostBus_VoltageBus_Current
0x018Clear_ErrorsHost → ODriveIdentify
0x019Set_Absolute_PositionHost → ODrivePosition
0x01aSet_Pos_GainHost → ODrivePos_Gain
0x01bSet_Vel_GainsHost → ODriveVel_GainVel_Integrator_Gain
0x01cGet_TorquesODrive → HostTorque_TargetTorque_Estimate
0x01dGet_PowersODrive → HostElectrical_PowerMechanical_Power
0x01f

CAN 心跳消息

可以将 ODrive 配置为在没有请求的情况下定期发送一些消息。这是通过在上位机中设置所需的发送间隔来完成的。
设置单位为 ms,设置为0则表示禁用心跳。

消息配置 (.axis.config.can.[...])默认值
Heartbeatheartbeat_msg_rate_ms100 ms
Get_Encoder_Estimatesencoder_msg_rate_ms10 ms
Get_Iqiq_msg_rate_ms关闭
Get_Errorerror_msg_rate_ms关闭
Get_Temperaturetemperature_msg_rate_ms关闭
Get_Bus_Voltage_Currentbus_voltage_msg_rate_ms关闭
Get_Torquestorques_msg_rate_ms关闭

看门狗

ODrive 的看门狗定时器可用作安全功能,在 CAN 通信中断时释放电机。
看门狗会通过每条 Set_Input_PosSet_Input_VelSet_Input_Torque消息以及通过 Set_Axis_State进入闭环模式时重置。

消息

Get_Version

  • 命令:0x00
  • 方向:ODrive → Host
起始字节名称类型描述
0Protocol_Versionuint8恒定为1
1Hw_Version_Majoruint8硬件版本信息
2Hw_Version_Minoruint8硬件版本信息
3Hw_Version_Variantuint8硬件版本信息
4Fw_Version_Majoruint8软件版本信息
5Fw_Version_Minoruint8软件版本信息
6Fw_Version_Revisionuint8软件版本信息
7Fw_Version_Unreleaseduint8恒定为1

Heartbeat

  • 命令:0x01
  • 方向:ODrive → Host
起始字节名称类型描述
0Axis_Erroruint8恒定为1
4Hw_Version_Majoruint8硬件版本信息
2Hw_Version_Minoruint8硬件版本信息
3Hw_Version_Variantuint8硬件版本信息
4Fw_Version_Majoruint8软件版本信息
5Fw_Version_Minoruint8软件版本信息
6Fw_Version_Revisionuint8软件版本信息
7Fw_Version_Unreleaseduint8恒定为1

Estop

  • 命令:0x02
  • 方向:ODrive → Host
  • 载荷部分为空
  • 发送后直接停机

Get_Error

  • 命令:0x03
  • 方向:ODrive → Host
起始字节名称类型描述
0Axis_Errorsuint32axis的错误代码

RxSdo

  • 命令:0x04
  • 方向:Host → ODrive
起始字节名称类型描述
0Opcodeuint80: 读参数, 1: 写参数
1Endpoint_IDuint16flat_endpoints.json读取的Endpoint_ID
3Reserveduint8预留,随意
4Valueuint32转换为uint32的值

由主机发送用于对ODrive读取或写入任意参数。

TxSdo

  • 命令:0x05
  • 方向:ODrive → Host
起始字节名称类型描述
0Reserved0uint8预留
1Endpoint_IDuint16flat_endpoints.json读取的Endpoint_ID
3Reserved1uint8硬件版本信息
4Valueuint32读取到的值

由 ODrive 发送,以响应 Opcode=READ 的 RxSdo。

Set_Node_ID

  • 命令:0x06
  • 方向:Host → ODrive
起始字节名称类型描述
0CAN_IDuint32设置CAN节点ID

Set_Axis_State

  • 命令:0x07
  • 方向:Host → ODrive
起始字节名称类型描述
0Axis_Requested_Stateuint32设置闭环状态

Get_Encoder_Estimates

  • 命令:0x09
  • 方向:ODrive → Host
起始字节名称类型单位描述
0Pos_Estimatefloat32电机当前位置
1Vel_Estimatefloat32转/s电机当前速度

此消息默认直接从CAN心跳发送

Set_Controller_Mode

  • 命令:0x0b
  • 方向:Host → ODrive
起始字节名称类型描述
0Control_Modeuint32控制模式
4Input_Modeuint32输入模式

Set_Input_Pos

  • 命令:0x0c
  • 方向:Host → ODrive
起始字节名称类型单位描述
0Input_Posfloat32目标位置
4Vel_FFuint160.001 转/s速度前馈,默认为0
6Torque_FFuint160.001 Nm力矩前馈,默认为0

注意:前馈不等于速度、力矩限制,两个概念,不懂前馈就别管!!!

Set_Input_Vel

  • 命令:0x0d
  • 方向:Host → ODrive
起始字节名称类型单位描述
0Input_Velfloat32转/s目标速度
4Input_Torque_FFfloat32Nm力矩前馈

Set_Input_Torque

  • 命令:0x0e
  • 方向:Host → ODrive
起始字节名称类型单位描述
0Input_Torquefloat32Nm目标力矩

Set_Limits

  • 命令:0x0f
  • 方向:Host → ODrive
起始字节名称类型单位描述
0Velocity_Limitfloat32转/s速度限制
1Current_Limitfloat32A电流限制

Set_Traj_Vel_Limit

  • 命令:0x11
  • 方向:Host → ODrive
起始字节名称类型单位描述
0Traj_Vel_Limitfloat32转/s梯形位置下的恒定速度

Set_Traj_Accel_Limits

  • 命令:0x12
  • 方向:Host → ODrive
起始字节名称类型单位描述
0Traj_Accel_Limitfloat32转/s^2梯形位置下的加速度
1Traj_Decel_Limitfloat32转/s^2梯形位置下的减速度

Set_Traj_Inertia

  • 命令:0x13
  • 方向:Host → ODrive
起始字节名称类型单位描述
0Traj_Inertiafloat32Nm/(转/s^2)前馈系数

Get_Iq

  • 命令:0x14
  • 方向:ODrive → Host
起始字节名称类型单位描述
0Iq_Setpointfloat32A目标Iq电流
1Iq_Measuredfloat32A实际Iq电流

Get_Temperature

  • 命令:0x15
  • 方向:ODrive → Host
起始字节名称类型单位描述
0FET_Temperaturefloat32摄氏度PCB温度
1Motor_Temperaturefloat32摄氏度电机温度

Reboot

  • 命令:0x16
  • 方向:ODrive → Host
起始字节名称类型描述
0Actionuint8待完善

Get_Version

  • 命令:0x00
  • 方向:ODrive → Host
起始字节名称类型描述
0Protocol_Versionuint8恒定为1
1Hw_Version_Majoruint8硬件版本信息
2Hw_Version_Minoruint8硬件版本信息
3Hw_Version_Variantuint8硬件版本信息
4Fw_Version_Majoruint8软件版本信息
5Fw_Version_Minoruint8软件版本信息
6Fw_Version_Revisionuint8软件版本信息
7Fw_Version_Unreleaseduint8恒定为1

Get_Version

  • 命令:0x00
  • 方向:ODrive → Host
起始字节名称类型描述
0Protocol_Versionuint8恒定为1
1Hw_Version_Majoruint8硬件版本信息
2Hw_Version_Minoruint8硬件版本信息
3Hw_Version_Variantuint8硬件版本信息
4Fw_Version_Majoruint8软件版本信息
5Fw_Version_Minoruint8软件版本信息
6Fw_Version_Revisionuint8软件版本信息
7Fw_Version_Unreleaseduint8恒定为1

Get_Version

  • 命令:0x00
  • 方向:ODrive → Host
起始字节名称类型描述
0Protocol_Versionuint8恒定为1
1Hw_Version_Majoruint8硬件版本信息
2Hw_Version_Minoruint8硬件版本信息
3Hw_Version_Variantuint8硬件版本信息
4Fw_Version_Majoruint8软件版本信息
5Fw_Version_Minoruint8软件版本信息
6Fw_Version_Revisionuint8软件版本信息
7Fw_Version_Unreleaseduint8恒定为1

Get_Version

  • 命令:0x00
  • 方向:ODrive → Host
起始字节名称类型描述
0Protocol_Versionuint8恒定为1
1Hw_Version_Majoruint8硬件版本信息
2Hw_Version_Minoruint8硬件版本信息
3Hw_Version_Variantuint8硬件版本信息
4Fw_Version_Majoruint8软件版本信息
5Fw_Version_Minoruint8软件版本信息
6Fw_Version_Revisionuint8软件版本信息
7Fw_Version_Unreleaseduint8恒定为1

Get_Version

  • 命令:0x00
  • 方向:ODrive → Host
起始字节名称类型描述
0Protocol_Versionuint8恒定为1
1Hw_Version_Majoruint8硬件版本信息
2Hw_Version_Minoruint8硬件版本信息
3Hw_Version_Variantuint8硬件版本信息
4Fw_Version_Majoruint8软件版本信息
5Fw_Version_Minoruint8软件版本信息
6Fw_Version_Revisionuint8软件版本信息
7Fw_Version_Unreleaseduint8恒定为1
最后修改:2024 年 10 月 13 日
如果觉得我的文章对你有用,请随意赞赏