MotorStatus
数据结构
| 字节索引 | 类型 | 字段含义 |
|---|---|---|
| 0-3 | float32 | 电机机械角度 [rad] |
| 4-7 | float32 | 角速度 [rad/s] |
| 8-11 | float32 | 输出扭矩 [N·m] |
| 12-15 | float32 | 电流 [A] |
| 16-19 | float32 | 电压 [V] |
| 20-23 | float32 | 电机温度 [℃] |
| 24-27 | uint32 | 故障码 |
| 28-31 | uint32 | 状态 |
MotorStatus 固定为 32 字节
示例
C++ 示例
struct MotorStatus {
float angle;
float angular_vel;
float torque;
float current;
float voltage;
float temp;
uint32_t fault_code;
uint32_t state;
};
Rust 示例
#[repr(C)]
#[derive(Clone, Copy, Debug, Default)]
pub struct MotorStatus {
pub angle: f32,
pub angular_vel: f32,
pub torque: f32,
pub current: f32,
pub voltage: f32,
pub temp: f32,
pub fault_code: u32,
pub state: u32,
}
const _: () = {
assert!(core::mem::size_of::<MotorStatus>() == 32);
assert!(core::mem::align_of::<MotorStatus>() == 4);
};
Dart 示例
import 'dart:typed_data';
final class MotorStatusView {
static const int byteLength = 32;
final ByteData data;
MotorStatusView(ByteBuffer buffer, [int offsetInBytes = 0])
: data = ByteData.view(buffer, offsetInBytes, byteLength);
double get angle => data.getFloat32(0, Endian.little);
double get angularVel => data.getFloat32(4, Endian.little);
double get torque => data.getFloat32(8, Endian.little);
double get current => data.getFloat32(12, Endian.little);
double get voltage => data.getFloat32(16, Endian.little);
double get temp => data.getFloat32(20, Endian.little);
int get faultCode => data.getUint32(24, Endian.little);
int get state => data.getUint32(28, Endian.little);
}
Java 示例
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
public final class MotorStatusView {
public static final int BYTE_LENGTH = 32;
private final ByteBuffer buffer;
private final int offset;
public MotorStatusView(ByteBuffer buffer, int offset) {
if (offset < 0 || offset + BYTE_LENGTH > buffer.capacity()) {
throw new IndexOutOfBoundsException("MotorStatus payload requires 32 bytes");
}
this.buffer = buffer.order(ByteOrder.LITTLE_ENDIAN);
this.offset = offset;
}
public float angle() { return buffer.getFloat(offset); }
public float angularVel() { return buffer.getFloat(offset + 4); }
public float torque() { return buffer.getFloat(offset + 8); }
public float current() { return buffer.getFloat(offset + 12); }
public float voltage() { return buffer.getFloat(offset + 16); }
public float temp() { return buffer.getFloat(offset + 20); }
public int faultCode() { return buffer.getInt(offset + 24); }
public int state() { return buffer.getInt(offset + 28); }
}