改解析
This commit is contained in:
parent
7492cf8e05
commit
11aef0acb2
@ -157,7 +157,7 @@ static int8_t Virtual_Chassis_DecodeIMU(Virtual_Chassis_t *chassis, uint16_t id,
|
||||
}
|
||||
else if (id == chassis->param.imu.gyro_id) {
|
||||
// 陀螺仪数据 - x/y轴24位,z轴16位
|
||||
// x: 24位有符号整数 (字节0-2) - 精度0.001°/s
|
||||
// x: 24位有符号整数 (字节0-2) - 精度0.001 rad/s (不再转换单位)
|
||||
int32_t x_int = 0;
|
||||
x_int |= ((int32_t)data[0]) << 16;
|
||||
x_int |= ((int32_t)data[1]) << 8;
|
||||
@ -166,9 +166,9 @@ static int8_t Virtual_Chassis_DecodeIMU(Virtual_Chassis_t *chassis, uint16_t id,
|
||||
if (x_int & 0x800000) {
|
||||
x_int |= 0xFF000000;
|
||||
}
|
||||
chassis->data.imu.gyro.x = ((float)x_int / 1000.0f) * M_PI / 180.0f; // °/s -> rad/s
|
||||
chassis->data.imu.gyro.x = (float)x_int / 1000.0f; // 直接除以1000,保持rad/s
|
||||
|
||||
// y: 24位有符号整数 (字节3-5) - 精度0.001°/s
|
||||
// y: 24位有符号整数 (字节3-5) - 精度0.001 rad/s (不再转换单位)
|
||||
int32_t y_int = 0;
|
||||
y_int |= ((int32_t)data[3]) << 16;
|
||||
y_int |= ((int32_t)data[4]) << 8;
|
||||
@ -177,16 +177,16 @@ static int8_t Virtual_Chassis_DecodeIMU(Virtual_Chassis_t *chassis, uint16_t id,
|
||||
if (y_int & 0x800000) {
|
||||
y_int |= 0xFF000000;
|
||||
}
|
||||
chassis->data.imu.gyro.y = ((float)y_int / 1000.0f) * M_PI / 180.0f; // °/s -> rad/s
|
||||
chassis->data.imu.gyro.y = (float)y_int / 1000.0f; // 直接除以1000,保持rad/s
|
||||
|
||||
// z: 16位有符号整数 (字节6-7) - 精度0.01°/s
|
||||
// z: 16位有符号整数 (字节6-7) - 精度0.01 rad/s (不再转换单位)
|
||||
int16_t z_int;
|
||||
memcpy(&z_int, &data[6], sizeof(int16_t));
|
||||
chassis->data.imu.gyro.z = ((float)z_int / 100.0f) * M_PI / 180.0f; // °/s -> rad/s
|
||||
chassis->data.imu.gyro.z = (float)z_int / 100.0f; // 直接除以100,保持rad/s
|
||||
}
|
||||
else if (id == chassis->param.imu.euler_id) {
|
||||
// 欧拉角数据 - yaw/pitch轴24位,roll轴16位
|
||||
// yaw: 24位有符号整数 (字节0-2) - 精度0.0001°
|
||||
// yaw: 24位有符号整数 (字节0-2) - 精度0.0001 rad (不再转换单位)
|
||||
int32_t yaw_int = 0;
|
||||
yaw_int |= ((int32_t)data[0]) << 16;
|
||||
yaw_int |= ((int32_t)data[1]) << 8;
|
||||
@ -195,9 +195,9 @@ static int8_t Virtual_Chassis_DecodeIMU(Virtual_Chassis_t *chassis, uint16_t id,
|
||||
if (yaw_int & 0x800000) {
|
||||
yaw_int |= 0xFF000000;
|
||||
}
|
||||
chassis->data.imu.euler.yaw = ((float)yaw_int / 10000.0f) * M_PI / 180.0f; // ° -> rad
|
||||
chassis->data.imu.euler.yaw = (float)yaw_int / 10000.0f; // 直接除以10000,保持rad
|
||||
|
||||
// pitch: 24位有符号整数 (字节3-5) - 精度0.0001°
|
||||
// pitch: 24位有符号整数 (字节3-5) - 精度0.0001 rad (不再转换单位)
|
||||
int32_t pit_int = 0;
|
||||
pit_int |= ((int32_t)data[3]) << 16;
|
||||
pit_int |= ((int32_t)data[4]) << 8;
|
||||
@ -206,12 +206,12 @@ static int8_t Virtual_Chassis_DecodeIMU(Virtual_Chassis_t *chassis, uint16_t id,
|
||||
if (pit_int & 0x800000) {
|
||||
pit_int |= 0xFF000000;
|
||||
}
|
||||
chassis->data.imu.euler.pit = ((float)pit_int / 10000.0f) * M_PI / 180.0f; // ° -> rad
|
||||
chassis->data.imu.euler.pit = (float)pit_int / 10000.0f; // 直接除以10000,保持rad
|
||||
|
||||
// roll: 16位有符号整数 (字节6-7) - 精度0.001°
|
||||
// roll: 16位有符号整数 (字节6-7) - 精度0.001 rad (不再转换单位)
|
||||
int16_t rol_int;
|
||||
memcpy(&rol_int, &data[6], sizeof(int16_t));
|
||||
chassis->data.imu.euler.rol = ((float)rol_int / 1000.0f) * M_PI / 180.0f; // ° -> rad
|
||||
chassis->data.imu.euler.rol = (float)rol_int / 1000.0f; // 直接除以1000,保持rad
|
||||
}
|
||||
else if (id == chassis->param.imu.quat_id) {
|
||||
// 四元数数据 - q0/q1/q2/q3 各2字节,精度1/32767
|
||||
|
||||
@ -73,9 +73,9 @@ static void Chassis_UpdateChassisState(Chassis_t *c) {
|
||||
return;
|
||||
|
||||
// 从轮子编码器估计机体速度 (参考C++代码)
|
||||
float left_wheel_speed_dps = -c->feedback.wheel[0].rotor_speed; // dps (度每秒)
|
||||
float left_wheel_speed_dps = c->feedback.wheel[0].rotor_speed; // dps (度每秒)
|
||||
float right_wheel_speed_dps =
|
||||
-c->feedback.wheel[1].rotor_speed; // dps (度每秒)
|
||||
c->feedback.wheel[1].rotor_speed; // dps (度每秒)
|
||||
|
||||
// 将dps转换为rad/s
|
||||
float left_wheel_speed = left_wheel_speed_dps * M_PI / 180.0f; // rad/s
|
||||
|
||||
Loading…
Reference in New Issue
Block a user