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_qd = 5;
|
||||
double limit_qdd = 6;
|
||||
double encoder_counts_per_rev = 7;
|
||||
double gear_ratio = 8;
|
||||
}
|
||||
|
||||
message MotorList {
|
||||
@ -18,9 +20,16 @@ message MotorList {
|
||||
|
||||
message EthercatSlaveConfig {
|
||||
int32 motor_id = 1;
|
||||
int32 slave_index = 2;
|
||||
uint32 vendor_id = 3;
|
||||
uint32 product_code = 4;
|
||||
uint32 alias = 2;
|
||||
uint32 position = 3;
|
||||
}
|
||||
|
||||
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 {
|
||||
@ -29,8 +38,9 @@ message SocketCanConfig {
|
||||
}
|
||||
|
||||
message EtherCATConfig {
|
||||
string master_id = 1;
|
||||
uint32 master_index = 1;
|
||||
int32 cycle_us = 2;
|
||||
Cia402ProtocolConfig cia402 = 3;
|
||||
repeated EthercatSlaveConfig slaves = 10;
|
||||
}
|
||||
|
||||
@ -49,6 +59,7 @@ enum MotorVendor {
|
||||
MOTOR_VENDOR_UNKNOWN = 0;
|
||||
MOTOR_VENDOR_TI5 = 1;
|
||||
MOTOR_VENDOR_MUJOCO = 2;
|
||||
MOTOR_VENDOR_EYOU = 3;
|
||||
}
|
||||
|
||||
enum MotorProtocol {
|
||||
@ -63,7 +74,6 @@ message MotorGroupConfig {
|
||||
MotorBusType bus_type = 2;
|
||||
MotorVendor vendor = 3;
|
||||
MotorProtocol protocol = 4;
|
||||
string tool_frame = 5;
|
||||
|
||||
oneof bus_config {
|
||||
SocketCanConfig can = 10;
|
||||
|
||||
@ -5,8 +5,8 @@ package cmvr.msgs;
|
||||
message SdoFrame {
|
||||
uint32 node_id = 1; // 节点ID
|
||||
CommandSpecifier cs = 2; // SDO命令字
|
||||
ObIndex index = 3; // 对象字典索引
|
||||
ObSubIndex sub_index = 4; // 子索引
|
||||
uint32 index = 3; // 对象字典索引
|
||||
uint32 sub_index = 4; // 子索引
|
||||
uint32 data = 5; // 数据区
|
||||
}
|
||||
|
||||
@ -110,81 +110,38 @@ enum NmtCommand {
|
||||
}
|
||||
|
||||
|
||||
// 索引
|
||||
enum ObIndex {
|
||||
INDEX_ZERO = 0;
|
||||
USER_SAVE_PARA_2000 = 0x2000; // 下发命令 1 保存参数
|
||||
POSITION_OFFSET_2008 = 0x2008; // 位置偏移,子索引 0x00,用于设置零点、起始位置
|
||||
// Error Codes
|
||||
ERROR_CODE_6007 = 0x6007;
|
||||
ERROR_CODE_603F = 0x603F;
|
||||
// CANopen communication object dictionary indexes.
|
||||
// CiA402 drive-profile objects are defined in cia402.proto.
|
||||
enum CanopenObjectIndex {
|
||||
CANOPEN_OBJECT_INDEX_ZERO = 0;
|
||||
|
||||
// Control and Status
|
||||
CONTROL_WORD_6040 = 0x6040;
|
||||
STATUS_WORD_6041 = 0x6041;
|
||||
CANOPEN_PRODUCER_HEARTBEAT_TIME_1017 = 0x1017;
|
||||
|
||||
// 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)
|
||||
RPDO1_COMM_1400 = 0x1400;
|
||||
RPDO2_COMM_1401 = 0x1401;
|
||||
RPDO3_COMM_1402 = 0x1402;
|
||||
RPDO4_COMM_1403 = 0x1403;
|
||||
CANOPEN_RPDO1_COMM_1400 = 0x1400;
|
||||
CANOPEN_RPDO2_COMM_1401 = 0x1401;
|
||||
CANOPEN_RPDO3_COMM_1402 = 0x1402;
|
||||
CANOPEN_RPDO4_COMM_1403 = 0x1403;
|
||||
|
||||
TPDO1_COMM_1800 = 0x1800;
|
||||
TPDO2_COMM_1801 = 0x1801;
|
||||
TPDO3_COMM_1802 = 0x1802;
|
||||
TPDO4_COMM_1803 = 0x1803;
|
||||
CANOPEN_TPDO1_COMM_1800 = 0x1800;
|
||||
CANOPEN_TPDO2_COMM_1801 = 0x1801;
|
||||
CANOPEN_TPDO3_COMM_1802 = 0x1802;
|
||||
CANOPEN_TPDO4_COMM_1803 = 0x1803;
|
||||
|
||||
// PDO 映射对象(Mapping Object)
|
||||
RPDO1_MAP_1600 = 0x1600;
|
||||
RPDO2_MAP_1601 = 0x1601;
|
||||
RPDO3_MAP_1602 = 0x1602;
|
||||
RPDO4_MAP_1603 = 0x1603;
|
||||
CANOPEN_RPDO1_MAP_1600 = 0x1600;
|
||||
CANOPEN_RPDO2_MAP_1601 = 0x1601;
|
||||
CANOPEN_RPDO3_MAP_1602 = 0x1602;
|
||||
CANOPEN_RPDO4_MAP_1603 = 0x1603;
|
||||
|
||||
TPDO1_MAP_1A00 = 0x1A00;
|
||||
TPDO2_MAP_1A01 = 0x1A01;
|
||||
TPDO3_MAP_1A02 = 0x1A02;
|
||||
TPDO4_MAP_1A03 = 0x1A03;
|
||||
CANOPEN_TPDO1_MAP_1A00 = 0x1A00;
|
||||
CANOPEN_TPDO2_MAP_1A01 = 0x1A01;
|
||||
CANOPEN_TPDO3_MAP_1A02 = 0x1A02;
|
||||
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_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;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
syntax = "proto3";
|
||||
|
||||
import "cmvr/msgs/canopen.proto";
|
||||
import "cmvr/msgs/motor.proto";
|
||||
package cmvr.msgs;
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user