跳到主要内容

MotorStatus

数据结构

字节索引类型字段含义
0-3float32电机机械角度 [rad]
4-7float32角速度 [rad/s]
8-11float32输出扭矩 [N·m]
12-15float32电流 [A]
16-19float32电压 [V]
20-23float32电机温度 [℃]
24-27uint32故障码
28-31uint32状态

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); }
}