syntax = "proto3"; import "messages.proto"; package robotc; service RobotTest { rpc InitReducerTest(Empty) returns (Result); rpc ReducerTest(ReducerRequest) returns (ReducerResult); rpc InitJointTest(Empty) returns (Result); rpc JointStudy(Empty) returns (JointStudyResult); rpc JointTest(JointRequest) returns (JointResult); rpc TestCommand(CommandRequest) returns (CommandResult); /// 磨合测试,返回每个周期的结果,主动断开即停止 rpc RunInTest(RunInRequest) returns(RunInResult); /// 绝对精度测试 rpc MoveDetectTest(MoveDetectRequest) returns(MoveDetectResult); /// 百分表读取 rpc GetDialIndicator(DeviceIds) returns(DeviceValues); /// 量产测试 rpc StartProductTest(ProductTestRequest) returns(ProductTestResult); /// 主机箱测试: 1, 正常;其他异常 rpc BoxTest(Empty) returns(Result); // 初始化机器人设备信息 /** { "robot": { "model": "LM6J", "sn": "C01905010001XX" }, "name": "lebai-Yonnie", "mac": "B6LLYLUAQG19", "arm": { "sn": "R01905010001XX" } } */ rpc InitRobot(RobotInfo) returns (InitRobotResult); rpc WriteSn(DeviceInfo) returns (WriteSnResult); rpc ReadSn(DeviceTypeRequest) returns (DeviceInfo); } message Empty {} message Result { int32 ok = 1; // 0 正常 其他异常 int32 testError = 2; } message Joints { repeated double pose = 1; } message ReducerRequest { double v = 1; // 转速 } message ReducerResult { double voltage = 1; // 电压 V double v = 2; // 转速 rpm double torque = 3; // 扭矩 Nm } message JointStudyResult { uint32 motor_encoder = 1; // 电机编码(磁编位置) } message JointRequest { uint32 joint_type = 1; // 0 大关节 1 小关节 } message JointResult { double backlash = 1; // 空程 ° double pos_stable_time = 2; // 位置稳定时间 s double pos_overshot = 3; // 位置超调量 rad double temperature = 4; // 关节内部温度 ℃ double current = 5; // 电流 A double voltage = 6; // 电压 V double v = 7; // 转速 rpm double torque = 8; // 电机扭矩 Nm uint32 motor_encoder = 9; // 电机编码(磁编位置) double joint_torque = 10; // 关节扭矩 double reducer_eff = 11; // 减速器效率 double motor_eff = 12; // 电机效率 } message CommandRequest { int32 type = 1; // 类型 int32 value_i = 2; double value_f = 3; } message CommandResult { int32 code = 1; // 返回码,默认0即可 } message MovePoint { // 如果pose_is_joint_angle 为 false,反向运动学会计算成对应的关节角度; repeated double joint_pose_to = 1; // 设定joint_pose_to是用{x, y, z, rx, ry, rz}描述末端位置和姿态还是用关节角度 bool pose_is_joint_angle = 2; // 单位:rad/s^2,主轴的关节加速度 double acceleration = 3; // 单位:rad/s,主轴的关节速度 double velocity = 4; // 单位:s,运动时间 double time = 5; // 单位:m,下一段的交融半径 double blend_radius = 6; } message RunInRequest { repeated MovePoint path = 1; // 单个磨合测试周期轨迹 double equivalent_radius = 2; // 等效半径 m double threshold_distance = 3;// 门限距离 m double position_stable_time = 4; // 位置稳定时间(最大) s double position_overshoot = 5; // 位置超调量(最大) m double pose_stable_time = 6; // 姿态稳定时间(最大) s double pose_overshoot = 7; // 姿态超调量(最大) m } message RunInJointInfo { double min_velocity = 1; // 反馈速度 m/s double max_velocity = 2; // 反馈速度 double min_voltage = 3; // 电压 V double max_voltage = 4; // 电压 double min_temperature = 5; // 温度 ℃ double max_temperature = 6; // 温度 } message RunInPathResult { repeated RunInJointInfo joints = 1; } message RunInResult { bool ok = 1; // 是否符合标准 repeated RunInPathResult path = 2; // 每条轨迹的抖动值 double position_stable_time = 4; // 位置稳定时间 s double position_overshoot = 5; // 位置超调量 m double pose_stable_time = 6; // 姿态稳定时间 s double pose_overshoot = 7; // 姿态超调量 m string filename = 8; // csv文件路径 } message DeviceIds { repeated uint32 id = 1; // 同类型的第几个设备 } message DeviceValues { repeated double value = 1; // 读数结果 } message ProductTestRequest { uint32 cmd = 1; // 测试命令 } message ProductTestResult { uint32 testRes = 1; // 测试结果 uint32 testError = 2; } message InitRobotResult { int32 ret = 1; // 初始化Robort返回结果 string cup = 2; // 绑定hash值 } message WriteSnResult { int32 writeSnRes = 1; // 写sn结果 } message DeviceTypeRequest { int32 devType = 1; // 要读sn的设备类型 } message DecimalInput { int32 pin = 1; int32 value = 2; // 1 或者 0。若为 -1 则表示没有结果(没有运行到此处) } message MoveDetectPath { MovePoint path = 1; // 单个轨迹 repeated DecimalInput moving = 2; // 移动中的各传感器应有值 repeated DecimalInput cross = 3; // 移动完成后(交点)时的各传感器应有值 } message MoveDetectRequest { repeated MoveDetectPath req = 1; } message MoveDetectResult { bool ok = 1; // 是否符合标准 repeated MoveDetectPath res = 2; // 周期内移动中的传感器值,不保证path是对的 string filename = 3; // csv文件路径 }