143 lines
7.1 KiB
Protocol Buffer
143 lines
7.1 KiB
Protocol Buffer
syntax = "proto3";
|
|
|
|
// 规范包名,确保与运控调优(control)和传感器外参(sensor)在逻辑上严格物理隔离
|
|
package agv.calibration.chassis;
|
|
|
|
// =========================================================
|
|
// 核心服务:AGV 底盘底层硬件自诊与物理运动学标定代理服务
|
|
// 部署端:Windows车端 (直连底层电机驱动器/PLC 的网关层)
|
|
// 调用端:Linux标定服务器 (掌控外部高精雷达真值)
|
|
// =========================================================
|
|
service AgvCalibChassisService {
|
|
|
|
// ---------------------------------------------------------
|
|
// 1. 底层硬件接管与安全熔断
|
|
// ---------------------------------------------------------
|
|
// 强制接管底层驱动器。注意:这里不仅要切断避障,还要切断底盘的“运动学正逆解算法”
|
|
rpc SetDiagnosticMode(DiagnosticModeRequest) returns (StandardResponse);
|
|
|
|
// 硬件级绝对急停 (直接向驱动器下发 Safe Torque Off / 机械抱死指令,无视任何上层状态)
|
|
rpc HardwareEmergencyBrake(Empty) returns (StandardResponse);
|
|
|
|
// ---------------------------------------------------------
|
|
// 2. 原始物理开环指令下发 (对应方案 4.2 诊断 与 4.3 物理标定)
|
|
// ---------------------------------------------------------
|
|
// 允许 Linux 越过底盘协同模型,直接对指定驱动轮下发最原始的转速(RPM)或占空比
|
|
// 核心用途:暴露真实的机械阻力差、诊断减速机卡死、测试轮胎滑移率
|
|
rpc ExecuteRawDriveCommand(RawDriveRequest) returns (StandardResponse);
|
|
|
|
// 允许 Linux 直接对转向机构下发绝对物理角度或往复扫频
|
|
// 核心用途:测定舵机机械死区、往复间隙(Backlash)与静态机械零位偏差
|
|
rpc ExecuteRawSteerCommand(RawSteerRequest) returns (StandardResponse);
|
|
|
|
// ---------------------------------------------------------
|
|
// 3. 物理运动学本底参数持久化 (出厂定稿写值)
|
|
// ---------------------------------------------------------
|
|
// Linux 结合外部真值算出真实的物理机械参数后,下发并直接覆写到底盘驱动板 EEPROM 或底层配置中
|
|
rpc CommitKinematicParameters(KinematicParams) returns (StandardResponse);
|
|
|
|
// ---------------------------------------------------------
|
|
// 4. 原始硬件级高频遥测 (数字孪生健康诊断的唯一依据)
|
|
// ---------------------------------------------------------
|
|
// 🚨 严禁推流经过滤波后的数据!必须是最底层的“原始编码器 Tick”和“绝对相电流”!
|
|
rpc StreamHardwareTelemetry(Empty) returns (stream HardwareState);
|
|
}
|
|
|
|
// =========================================================
|
|
// 基础通用消息结构
|
|
// =========================================================
|
|
message Empty {}
|
|
|
|
message StandardResponse {
|
|
bool success = 1;
|
|
string message = 2; // 异常时返回驱动器底层故障码 (如 "ERR_MOTOR_OVERCURRENT")
|
|
}
|
|
|
|
message DiagnosticModeRequest {
|
|
enum Mode {
|
|
NORMAL_KINEMATICS = 0; // 正常模式 (底盘接收 V_x, Omega,由底层执行运动学逆解分配)
|
|
DIRECT_RAW_DRIVE = 1; // 直驱模式 (切断逆解,允许 Linux 直接独立控制左/右轮转速)
|
|
}
|
|
Mode target_mode = 1;
|
|
}
|
|
|
|
// =========================================================
|
|
// 2. 原始驱动指令 (发考题:逼迫底盘暴露出机械缺陷)
|
|
// =========================================================
|
|
message RawDriveRequest {
|
|
string test_case_id = 1; // 测试用例 (如 "Slip_Test_0.5m", "Straight_Friction_Test")
|
|
|
|
// 直接下发给电机的原始指令 (若是两驱车,后轮填 0 即可)
|
|
double fl_motor_rpm = 2; // 左前轮 (Front-Left) 目标物理转速 (RPM)
|
|
double fr_motor_rpm = 3; // 右前轮 (Front-Right) 目标物理转速 (RPM)
|
|
double rl_motor_rpm = 4; // 左后轮 (Rear-Left) 目标物理转速 (RPM)
|
|
double rr_motor_rpm = 5; // 右后轮 (Rear-Right) 目标物理转速 (RPM)
|
|
|
|
double duration_sec = 6; // 动作维持时间,断网防飞车底线:超时底层必须自动刹车
|
|
}
|
|
|
|
message RawSteerRequest {
|
|
string test_case_id = 1; // 测试用例 (如 "Deadzone_Sweep_5deg")
|
|
|
|
// 针对舵机/转向推杆的绝对物理指令 (度)
|
|
double front_steer_angle_deg = 2;
|
|
double rear_steer_angle_deg = 3;
|
|
|
|
// 专门用于 4.2节 测定机械间隙的扫频参数
|
|
optional double sweep_amplitude_deg = 4; // 往复抖动幅度 (度)
|
|
optional double sweep_frequency_hz = 5; // 抖动频率 (Hz)
|
|
|
|
double duration_sec = 6;
|
|
}
|
|
|
|
// =========================================================
|
|
// 3. 运动学本底参数定稿载荷 (纯物理修正系数)
|
|
// =========================================================
|
|
message KinematicParams {
|
|
// --- 1. 真实有效物理轮径 (解决“开环走直线画大弧”及闭环位移不准) ---
|
|
optional double wheel_radius_fl_m = 1;
|
|
optional double wheel_radius_fr_m = 2;
|
|
optional double wheel_radius_rl_m = 3;
|
|
optional double wheel_radius_rr_m = 4;
|
|
|
|
// --- 2. 机械零位绝对偏差补偿 (解决“指令0度但车子斜着跑”) ---
|
|
optional double steer_zero_offset_front_deg = 5;
|
|
optional double steer_zero_offset_rear_deg = 6;
|
|
|
|
// --- 3. 旋转几何协同参数 (解决“原地打转时车体画圆甩尾摆动”) ---
|
|
optional double effective_track_width_m = 7; // 有效轮距 (左右轮真实物理间距)
|
|
optional double effective_wheel_base_m = 8; // 有效轴距 (前后轮真实物理间距)
|
|
|
|
// 针对四驱四转等多舵轮底盘:瞬时旋转中心(ICR)的物理几何偏移
|
|
optional double icr_offset_x_m = 9;
|
|
optional double icr_offset_y_m = 10;
|
|
}
|
|
|
|
// =========================================================
|
|
// 4. 原始硬件遥测数据流 (Linux 用来排雷、熔断和算滑移率的裸数据)
|
|
// =========================================================
|
|
message HardwareState {
|
|
int64 hardware_timestamp_us = 1; // 底层获取到脉冲那一瞬间的高精度单调系统时钟 (微秒)
|
|
|
|
// --- A. 原始编码器反馈 (用于 4.2 阶段 Linux 计算轮胎打滑率 Slip Ratio) ---
|
|
// 🚨 严禁返回平滑后的速度(m/s),必须返回最原始的累计脉冲!
|
|
int64 encoder_ticks_fl = 2;
|
|
int64 encoder_ticks_fr = 3;
|
|
int64 encoder_ticks_rl = 4;
|
|
int64 encoder_ticks_rr = 5;
|
|
|
|
// 实际物理舵角反馈 (度,用于 4.2 阶段比对指令下发时间,测定机械死区和相位滞后)
|
|
double actual_steer_angle_front_deg = 6;
|
|
double actual_steer_angle_rear_deg = 7;
|
|
|
|
// --- B. 动力与负载健康状态 (用于 4.2 阶段诊断减速机干涉或刹车未放) ---
|
|
// 若维持低速所需的电流异常激增,说明机械装配存在过载阻力,Linux 将立刻熔断报警
|
|
double current_fl_amp = 8; // 左前电机实际相电流 (安培)
|
|
double current_fr_amp = 9;
|
|
double current_rl_amp = 10;
|
|
double current_rr_amp = 11;
|
|
double current_steer_front_amp = 12;// 前转向舵机电流
|
|
|
|
// --- C. 驱动器底层硬件报警位 ---
|
|
uint32 driver_error_code = 13; // 0x00=健康, 0x01=过压, 0x02=堵转过流, 0x03=过热等
|
|
} |