cmvr-es/protos/cmvr/config/motor_config/motor_config.proto
xtkuang af67751937 feat: add safe UME teleoperation framework
Add the UME RobotArm and Damiao CAN-FD path, migrate the legacy UME controller, and introduce guarded cross-machine gRPC teleoperation with lifecycle, authority, configuration, and test coverage.
2026-07-31 08:48:04 +08:00

150 lines
3.8 KiB
Protocol Buffer

syntax = "proto3";
package cmvr.config;
import "cmvr/config/joint_limits_config.proto";
message MotorConfigItem {
int32 id = 1;
string joint_name = 2;
double limit_q_lb = 3;
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 {
repeated MotorConfigItem motors = 1;
}
message EthercatSlaveConfig {
int32 motor_id = 1;
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 EtherCATDcConfig {
optional bool enable = 1;
optional int32 reference_motor_id = 2;
optional uint32 sync0_cycle_us = 3;
optional int32 sync0_shift_us = 4;
optional uint32 sync_reference_clock_period = 5;
optional uint32 assign_activate = 6;
optional uint32 sync_monitor_period_ms = 7;
}
message SocketCanConfig {
string dev_id = 1;
int32 channel_id = 2;
// Explicit Linux interface name (for example can0 or vcan0). When empty,
// the legacy channel_id based naming remains in use.
optional string interface_name = 3;
// Allows CAN-FD frames on the raw socket. This does not configure the
// physical interface bitrate or bring the interface up.
optional bool enable_fd = 4;
// Default BRS flag for callers that explicitly construct an FD frame.
optional bool bitrate_switch = 5;
// Bounded receive wait. Zero selects the implementation safety default.
optional uint32 receive_timeout_us = 6;
optional bool receive_own_messages = 7;
optional bool enable_error_frames = 8;
// Total bounded wait for one send() batch. Zero selects the implementation
// safety default. UME profiles set this below their control-cycle deadline.
optional uint32 send_timeout_us = 9;
}
message EtherCATConfig {
uint32 master_index = 1;
int32 cycle_us = 2;
Cia402ProtocolConfig cia402 = 3;
EtherCATDcConfig dc = 4;
optional uint32 slave_op_timeout_ms = 5;
optional uint32 slave_state_poll_period_ms = 6;
repeated EthercatSlaveConfig slaves = 10;
}
message MujocoMotorGroupConfig {
string world_id = 1;
}
message ModbusTcpAxisConfig {
int32 motor_id = 1;
uint32 axis_index = 2;
}
message ModbusTcpConfig {
string host = 1;
uint32 port = 2;
uint32 unit_id = 3;
uint32 connect_timeout_ms = 4;
uint32 io_timeout_ms = 5;
uint32 heartbeat_period_ms = 6;
uint32 communication_watchdog_ms = 7;
uint32 status_poll_period_ms = 8;
uint32 reconnect_min_ms = 9;
uint32 reconnect_max_ms = 10;
uint32 command_ack_timeout_ms = 11;
uint32 protocol_major = 12;
uint32 protocol_minor = 13;
uint32 cyclic_watchdog_ms = 14;
repeated ModbusTcpAxisConfig axes = 20;
}
enum MotorBusType {
MOTOR_BUS_UNKNOWN = 0;
MOTOR_BUS_CAN = 1;
MOTOR_BUS_ETHERCAT = 2;
MOTOR_BUS_MUJOCO = 3;
MOTOR_BUS_MODBUS_TCP = 4;
}
enum MotorVendor {
MOTOR_VENDOR_UNKNOWN = 0;
MOTOR_VENDOR_TI5 = 1;
MOTOR_VENDOR_MUJOCO = 2;
MOTOR_VENDOR_EYOU = 3;
MOTOR_VENDOR_PLC_GENERIC = 4;
}
enum MotorProtocol {
MOTOR_PROTOCOL_UNKNOWN = 0;
MOTOR_PROTOCOL_CANOPEN = 1;
MOTOR_PROTOCOL_ETHERCAT_CIA402 = 2;
MOTOR_PROTOCOL_MUJOCO = 3;
MOTOR_PROTOCOL_CMVR_PLC_V1 = 4;
}
message MotorGroupConfig {
string id = 1;
MotorBusType bus_type = 2;
MotorVendor vendor = 3;
MotorProtocol protocol = 4;
oneof bus_config {
SocketCanConfig can = 10;
EtherCATConfig ethercat = 11;
MujocoMotorGroupConfig mujoco = 12;
ModbusTcpConfig modbus_tcp = 13;
}
JointLimitsConfig joint_limits = 30;
MotorList motors = 40;
}
message MotorConfig {
string id = 1;
repeated MotorGroupConfig motor_groups = 2;
}
message MotorRootConfig {
MotorConfig motor = 1;
}