feat(proto): add EtherCAT CiA402 motor schema
This commit is contained in:
parent
94ee690796
commit
5c8847d334
@ -10,6 +10,8 @@ message MotorConfigItem {
|
|||||||
double limit_q_ub = 4;
|
double limit_q_ub = 4;
|
||||||
double limit_qd = 5;
|
double limit_qd = 5;
|
||||||
double limit_qdd = 6;
|
double limit_qdd = 6;
|
||||||
|
double encoder_counts_per_rev = 7;
|
||||||
|
double gear_ratio = 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
message MotorList {
|
message MotorList {
|
||||||
@ -18,9 +20,16 @@ message MotorList {
|
|||||||
|
|
||||||
message EthercatSlaveConfig {
|
message EthercatSlaveConfig {
|
||||||
int32 motor_id = 1;
|
int32 motor_id = 1;
|
||||||
int32 slave_index = 2;
|
uint32 alias = 2;
|
||||||
uint32 vendor_id = 3;
|
uint32 position = 3;
|
||||||
uint32 product_code = 4;
|
}
|
||||||
|
|
||||||
|
message Cia402ProtocolConfig {
|
||||||
|
uint32 profile_position_trigger_delay_ms = 1;
|
||||||
|
uint32 state_transition_timeout_ms = 2;
|
||||||
|
uint32 velocity_stop_timeout_ms = 3;
|
||||||
|
uint32 status_poll_period_ms = 4;
|
||||||
|
double stopped_velocity_tolerance_rad_s = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
message SocketCanConfig {
|
message SocketCanConfig {
|
||||||
@ -29,8 +38,9 @@ message SocketCanConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
message EtherCATConfig {
|
message EtherCATConfig {
|
||||||
string master_id = 1;
|
uint32 master_index = 1;
|
||||||
int32 cycle_us = 2;
|
int32 cycle_us = 2;
|
||||||
|
Cia402ProtocolConfig cia402 = 3;
|
||||||
repeated EthercatSlaveConfig slaves = 10;
|
repeated EthercatSlaveConfig slaves = 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -49,6 +59,7 @@ enum MotorVendor {
|
|||||||
MOTOR_VENDOR_UNKNOWN = 0;
|
MOTOR_VENDOR_UNKNOWN = 0;
|
||||||
MOTOR_VENDOR_TI5 = 1;
|
MOTOR_VENDOR_TI5 = 1;
|
||||||
MOTOR_VENDOR_MUJOCO = 2;
|
MOTOR_VENDOR_MUJOCO = 2;
|
||||||
|
MOTOR_VENDOR_EYOU = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum MotorProtocol {
|
enum MotorProtocol {
|
||||||
@ -63,7 +74,6 @@ message MotorGroupConfig {
|
|||||||
MotorBusType bus_type = 2;
|
MotorBusType bus_type = 2;
|
||||||
MotorVendor vendor = 3;
|
MotorVendor vendor = 3;
|
||||||
MotorProtocol protocol = 4;
|
MotorProtocol protocol = 4;
|
||||||
string tool_frame = 5;
|
|
||||||
|
|
||||||
oneof bus_config {
|
oneof bus_config {
|
||||||
SocketCanConfig can = 10;
|
SocketCanConfig can = 10;
|
||||||
|
|||||||
@ -5,8 +5,8 @@ package cmvr.msgs;
|
|||||||
message SdoFrame {
|
message SdoFrame {
|
||||||
uint32 node_id = 1; // 节点ID
|
uint32 node_id = 1; // 节点ID
|
||||||
CommandSpecifier cs = 2; // SDO命令字
|
CommandSpecifier cs = 2; // SDO命令字
|
||||||
ObIndex index = 3; // 对象字典索引
|
uint32 index = 3; // 对象字典索引
|
||||||
ObSubIndex sub_index = 4; // 子索引
|
uint32 sub_index = 4; // 子索引
|
||||||
uint32 data = 5; // 数据区
|
uint32 data = 5; // 数据区
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -110,81 +110,38 @@ enum NmtCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 索引
|
// CANopen communication object dictionary indexes.
|
||||||
enum ObIndex {
|
// CiA402 drive-profile objects are defined in cia402.proto.
|
||||||
INDEX_ZERO = 0;
|
enum CanopenObjectIndex {
|
||||||
USER_SAVE_PARA_2000 = 0x2000; // 下发命令 1 保存参数
|
CANOPEN_OBJECT_INDEX_ZERO = 0;
|
||||||
POSITION_OFFSET_2008 = 0x2008; // 位置偏移,子索引 0x00,用于设置零点、起始位置
|
|
||||||
// Error Codes
|
|
||||||
ERROR_CODE_6007 = 0x6007;
|
|
||||||
ERROR_CODE_603F = 0x603F;
|
|
||||||
|
|
||||||
// Control and Status
|
CANOPEN_PRODUCER_HEARTBEAT_TIME_1017 = 0x1017;
|
||||||
CONTROL_WORD_6040 = 0x6040;
|
|
||||||
STATUS_WORD_6041 = 0x6041;
|
|
||||||
|
|
||||||
// Operation Modes
|
|
||||||
OPERATION_MODE_6060 = 0x6060;
|
|
||||||
MODE_DISPLAY_6061 = 0x6061;
|
|
||||||
|
|
||||||
// Actual Values
|
|
||||||
ACTUAL_POSITION_6064 = 0x6064;
|
|
||||||
ACTUAL_SPEED_606C = 0x606C;
|
|
||||||
ACTUAL_CURRENT_6078 = 0x6078;
|
|
||||||
|
|
||||||
// Torque-related
|
|
||||||
TARGET_TORQUE_6071 = 0x6071;
|
|
||||||
MAX_TORQUE_6072 = 0x6072;
|
|
||||||
DEMAND_TORQUE_6074 = 0x6074;
|
|
||||||
|
|
||||||
// Position-related
|
|
||||||
TARGET_POSITION_607A = 0x607A;
|
|
||||||
SOFTWARE_POSITION_LIMIT_607D = 0x607D; // Sub-indexes: 1, 2
|
|
||||||
|
|
||||||
// Speed-related
|
|
||||||
MAX_SPEED_607F = 0x607F;
|
|
||||||
PROFILE_SPEED_6081 = 0x6081;
|
|
||||||
PROFILE_ACCELERATION_6083 = 0x6083;
|
|
||||||
PROFILE_DECELERATION_6084 = 0x6084;
|
|
||||||
|
|
||||||
// Same as DEMAND_TORQUE? Verify correctness.
|
|
||||||
// TORQUE_SLOPE_6074 = 0x6074;
|
|
||||||
|
|
||||||
// PID Control
|
|
||||||
CURRENT_LOOP_PID_60F6 = 0x60F6; // Sub-indexes: 1, 2
|
|
||||||
SPEED_LOOP_PID_60F9 = 0x60F9; // Sub-indexes: 1, 2
|
|
||||||
POSITION_LOOP_PID_60FB = 0x60FB; // Sub-indexes: 1, 2, 3
|
|
||||||
|
|
||||||
// Target Speed
|
|
||||||
TARGET_SPEED_60FF = 0x60FF;
|
|
||||||
|
|
||||||
QUICK_STOP_OPTION_605A = 0x605A;
|
|
||||||
QUICK_STOP_DECEL_6085 = 0x6085;
|
|
||||||
|
|
||||||
// -------------------------
|
|
||||||
// PDO 通信参数对象(Communication Object)
|
// PDO 通信参数对象(Communication Object)
|
||||||
RPDO1_COMM_1400 = 0x1400;
|
CANOPEN_RPDO1_COMM_1400 = 0x1400;
|
||||||
RPDO2_COMM_1401 = 0x1401;
|
CANOPEN_RPDO2_COMM_1401 = 0x1401;
|
||||||
RPDO3_COMM_1402 = 0x1402;
|
CANOPEN_RPDO3_COMM_1402 = 0x1402;
|
||||||
RPDO4_COMM_1403 = 0x1403;
|
CANOPEN_RPDO4_COMM_1403 = 0x1403;
|
||||||
|
|
||||||
TPDO1_COMM_1800 = 0x1800;
|
CANOPEN_TPDO1_COMM_1800 = 0x1800;
|
||||||
TPDO2_COMM_1801 = 0x1801;
|
CANOPEN_TPDO2_COMM_1801 = 0x1801;
|
||||||
TPDO3_COMM_1802 = 0x1802;
|
CANOPEN_TPDO3_COMM_1802 = 0x1802;
|
||||||
TPDO4_COMM_1803 = 0x1803;
|
CANOPEN_TPDO4_COMM_1803 = 0x1803;
|
||||||
|
|
||||||
// PDO 映射对象(Mapping Object)
|
// PDO 映射对象(Mapping Object)
|
||||||
RPDO1_MAP_1600 = 0x1600;
|
CANOPEN_RPDO1_MAP_1600 = 0x1600;
|
||||||
RPDO2_MAP_1601 = 0x1601;
|
CANOPEN_RPDO2_MAP_1601 = 0x1601;
|
||||||
RPDO3_MAP_1602 = 0x1602;
|
CANOPEN_RPDO3_MAP_1602 = 0x1602;
|
||||||
RPDO4_MAP_1603 = 0x1603;
|
CANOPEN_RPDO4_MAP_1603 = 0x1603;
|
||||||
|
|
||||||
TPDO1_MAP_1A00 = 0x1A00;
|
CANOPEN_TPDO1_MAP_1A00 = 0x1A00;
|
||||||
TPDO2_MAP_1A01 = 0x1A01;
|
CANOPEN_TPDO2_MAP_1A01 = 0x1A01;
|
||||||
TPDO3_MAP_1A02 = 0x1A02;
|
CANOPEN_TPDO3_MAP_1A02 = 0x1A02;
|
||||||
TPDO4_MAP_1A03 = 0x1A03;
|
CANOPEN_TPDO4_MAP_1A03 = 0x1A03;
|
||||||
|
|
||||||
PRODUCER_HEARTBEAT_TIME = 0x1017;
|
// Ti5 vendor-specific objects used through CANopen SDO.
|
||||||
|
CANOPEN_USER_SAVE_PARA_2000 = 0x2000;
|
||||||
|
CANOPEN_POSITION_OFFSET_2008 = 0x2008;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 子索引
|
// 子索引
|
||||||
@ -198,5 +155,3 @@ enum ObSubIndex {
|
|||||||
SUB_INDEX_6 = 6;
|
SUB_INDEX_6 = 6;
|
||||||
SUB_INDEX_7 = 7;
|
SUB_INDEX_7 = 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
64
protos/cmvr/msgs/cia402.proto
Normal file
64
protos/cmvr/msgs/cia402.proto
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
package cmvr.msgs;
|
||||||
|
|
||||||
|
// CiA402 object dictionary indexes shared by CANopen and EtherCAT CoE drives.
|
||||||
|
enum Cia402ObjectIndex {
|
||||||
|
CIA402_OBJECT_INDEX_ZERO = 0;
|
||||||
|
|
||||||
|
CIA402_ERROR_CODE_603F = 0x603F;
|
||||||
|
|
||||||
|
CIA402_CONTROL_WORD_6040 = 0x6040;
|
||||||
|
CIA402_STATUS_WORD_6041 = 0x6041;
|
||||||
|
|
||||||
|
CIA402_QUICK_STOP_OPTION_605A = 0x605A;
|
||||||
|
CIA402_SHUTDOWN_OPTION_605B = 0x605B;
|
||||||
|
CIA402_DISABLE_OPERATION_OPTION_605C = 0x605C;
|
||||||
|
CIA402_HALT_OPTION_605D = 0x605D;
|
||||||
|
CIA402_FAULT_REACTION_OPTION_605E = 0x605E;
|
||||||
|
|
||||||
|
CIA402_OPERATION_MODE_6060 = 0x6060;
|
||||||
|
CIA402_MODE_DISPLAY_6061 = 0x6061;
|
||||||
|
|
||||||
|
CIA402_POSITION_DEMAND_VALUE_6062 = 0x6062;
|
||||||
|
CIA402_ACTUAL_POSITION_6064 = 0x6064;
|
||||||
|
CIA402_MAX_FOLLOWING_ERROR_6065 = 0x6065;
|
||||||
|
CIA402_POSITION_WINDOW_6067 = 0x6067;
|
||||||
|
CIA402_POSITION_WINDOW_TIME_6068 = 0x6068;
|
||||||
|
|
||||||
|
CIA402_VELOCITY_DEMAND_VALUE_606B = 0x606B;
|
||||||
|
CIA402_ACTUAL_VELOCITY_606C = 0x606C;
|
||||||
|
CIA402_VELOCITY_WINDOW_606D = 0x606D;
|
||||||
|
CIA402_VELOCITY_WINDOW_TIME_606E = 0x606E;
|
||||||
|
CIA402_VELOCITY_THRESHOLD_606F = 0x606F;
|
||||||
|
CIA402_VELOCITY_THRESHOLD_TIME_6070 = 0x6070;
|
||||||
|
|
||||||
|
CIA402_TARGET_TORQUE_6071 = 0x6071;
|
||||||
|
CIA402_MAX_TORQUE_6072 = 0x6072;
|
||||||
|
CIA402_TORQUE_DEMAND_VALUE_6074 = 0x6074;
|
||||||
|
CIA402_MOTOR_RATED_TORQUE_6076 = 0x6076;
|
||||||
|
CIA402_ACTUAL_TORQUE_6077 = 0x6077;
|
||||||
|
CIA402_ACTUAL_CURRENT_6078 = 0x6078;
|
||||||
|
CIA402_DC_LINK_VOLTAGE_6079 = 0x6079;
|
||||||
|
|
||||||
|
CIA402_TARGET_POSITION_607A = 0x607A;
|
||||||
|
CIA402_HOME_OFFSET_607C = 0x607C;
|
||||||
|
CIA402_SOFTWARE_POSITION_LIMIT_607D = 0x607D;
|
||||||
|
CIA402_MAX_PROFILE_VELOCITY_607F = 0x607F;
|
||||||
|
|
||||||
|
CIA402_PROFILE_VELOCITY_6081 = 0x6081;
|
||||||
|
CIA402_PROFILE_ACCELERATION_6083 = 0x6083;
|
||||||
|
CIA402_PROFILE_DECELERATION_6084 = 0x6084;
|
||||||
|
CIA402_QUICK_STOP_DECELERATION_6085 = 0x6085;
|
||||||
|
CIA402_TORQUE_SLOPE_6087 = 0x6087;
|
||||||
|
|
||||||
|
CIA402_GEAR_RATIO_6091 = 0x6091;
|
||||||
|
CIA402_VELOCITY_OFFSET_60B1 = 0x60B1;
|
||||||
|
CIA402_TORQUE_OFFSET_60B2 = 0x60B2;
|
||||||
|
CIA402_INTERPOLATION_DATA_RECORD_60C1 = 0x60C1;
|
||||||
|
CIA402_INTERPOLATION_TIME_PERIOD_60C2 = 0x60C2;
|
||||||
|
CIA402_FOLLOWING_ERROR_ACTUAL_VALUE_60F4 = 0x60F4;
|
||||||
|
CIA402_TARGET_VELOCITY_60FF = 0x60FF;
|
||||||
|
|
||||||
|
CIA402_SUPPORTED_DRIVE_MODES_6502 = 0x6502;
|
||||||
|
}
|
||||||
@ -114,5 +114,3 @@ message MotorStatus {
|
|||||||
uint32 status_word = 44;
|
uint32 status_word = 44;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
import "cmvr/msgs/canopen.proto";
|
|
||||||
import "cmvr/msgs/motor.proto";
|
import "cmvr/msgs/motor.proto";
|
||||||
package cmvr.msgs;
|
package cmvr.msgs;
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user