35
35
#include "math.h"
36
36
#include "pid.h"
37
37
#include "usb_task.h"
38
+ #include "data_exchange.h"
38
39
39
40
// clang-format off
40
41
#define IMU_temp_PWM (pwm ) imu_pwm_set(pwm) //pwm给定
@@ -100,7 +101,7 @@ static void imu_temp_control(fp32 temp);
100
101
*/
101
102
static void imu_cmd_spi_dma (void );
102
103
103
- static void AutoCaliImuData (void );
104
+ // static void AutoCaliImuData(void);
104
105
static void UpdateImuData (void );
105
106
106
107
// clang-format off
@@ -177,36 +178,36 @@ static Imu_t IMU_DATA = {
177
178
.z_accel = 0.0f ,
178
179
};
179
180
180
- typedef struct ImuCaliData
181
- {
182
- struct reference
183
- {
184
- float ax , ay , az ;
185
- float r , p , y1 , y2 ;
186
- } ref ;
187
-
188
- struct time
189
- {
190
- uint32_t start ;
191
- uint32_t end ;
192
- } time ;
193
-
194
- struct offect
195
- {
196
- float roll ;
197
- float pitch ;
198
- float yaw ;
199
- float yaw_drift_rate ;
200
- } offect ;
201
-
202
- uint8_t read_cnt ;
203
- } ImuCaliData_t ;
204
-
205
- static ImuCaliData_t IMU_CALI_DATA = {
206
- .ref = {0.0f , 0.0f , 0.0f , 0.0f , 0.0f , 0.0f , 0.0f },
207
- .offect = {0.0f , 0.0f , 0.0f , 0.0f },
208
- .read_cnt = 0 ,
209
- };
181
+ // typedef struct ImuCaliData
182
+ // {
183
+ // struct reference
184
+ // {
185
+ // float ax, ay, az;
186
+ // float r, p, y1, y2;
187
+ // } ref;
188
+
189
+ // struct time
190
+ // {
191
+ // uint32_t start;
192
+ // uint32_t end;
193
+ // } time;
194
+
195
+ // struct offect
196
+ // {
197
+ // float roll;
198
+ // float pitch;
199
+ // float yaw;
200
+ // float yaw_drift_rate;
201
+ // } offect;
202
+
203
+ // uint8_t read_cnt;
204
+ // } ImuCaliData_t;
205
+
206
+ // static ImuCaliData_t IMU_CALI_DATA = {
207
+ // .ref = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f},
208
+ // .offect = {0.0f, 0.0f, 0.0f, 0.0f},
209
+ // .read_cnt = 0,
210
+ // };
210
211
211
212
/**
212
213
* @brief imu task, init bmi088, ist8310, calculate the euler angle
@@ -220,6 +221,9 @@ static ImuCaliData_t IMU_CALI_DATA = {
220
221
*/
221
222
void IMU_task (void const * pvParameters )
222
223
{
224
+ // 发布IMU数据
225
+ Publish (& IMU_DATA , "imu_data" );
226
+
223
227
// clang-format off
224
228
//wait a time
225
229
osDelay (INS_TASK_INIT_TIME );
@@ -322,7 +326,7 @@ void IMU_task(void const * pvParameters)
322
326
// ist8310_read_mag(ist8310_real_data.mag);
323
327
}
324
328
// clang-format on
325
- AutoCaliImuData ();
329
+ // AutoCaliImuData();
326
330
UpdateImuData ();
327
331
}
328
332
}
@@ -331,59 +335,59 @@ void IMU_task(void const * pvParameters)
331
335
* @brief 自动校准IMU数据,每次上电时,读取一定数量的数据,计算出静态角度
332
336
* @param
333
337
*/
334
- static void AutoCaliImuData (void )
335
- {
336
- if (HAL_GetTick () < 100 ) {
337
- return ;
338
- }
339
-
340
- if (IMU_CALI_DATA .read_cnt > IMU_CALI_MAX_COUNT ) {
341
- return ;
342
- }
343
-
344
- if (IMU_CALI_DATA .read_cnt < IMU_CALI_MAX_COUNT ) {
345
- IMU_CALI_DATA .ref .ax += INS_accel [INS_ACCEL_X_ADDRESS_OFFSET ];
346
- IMU_CALI_DATA .ref .ay += INS_accel [INS_ACCEL_Y_ADDRESS_OFFSET ];
347
- IMU_CALI_DATA .ref .az += INS_accel [INS_ACCEL_Z_ADDRESS_OFFSET ];
348
-
349
- IMU_CALI_DATA .ref .r += INS_angle [INS_ROLL_ADDRESS_OFFSET ];
350
- IMU_CALI_DATA .ref .p += INS_angle [INS_PITCH_ADDRESS_OFFSET ];
351
-
352
- if (IMU_CALI_DATA .read_cnt == 0 ) {
353
- IMU_CALI_DATA .ref .y1 = INS_angle [INS_YAW_ADDRESS_OFFSET ];
354
- IMU_CALI_DATA .time .start = HAL_GetTick ();
355
- }
356
-
357
- IMU_CALI_DATA .read_cnt ++ ;
358
- } else if (IMU_CALI_DATA .read_cnt == IMU_CALI_MAX_COUNT ) {
359
- IMU_CALI_DATA .time .end = HAL_GetTick ();
360
- IMU_CALI_DATA .ref .y2 = INS_angle [INS_YAW_ADDRESS_OFFSET ];
361
-
362
- IMU_CALI_DATA .ref .ax = IMU_CALI_DATA .ref .ax / IMU_CALI_MAX_COUNT ;
363
- IMU_CALI_DATA .ref .ay = IMU_CALI_DATA .ref .ay / IMU_CALI_MAX_COUNT ;
364
- IMU_CALI_DATA .ref .az = IMU_CALI_DATA .ref .az / IMU_CALI_MAX_COUNT ;
365
-
366
- IMU_CALI_DATA .ref .r = IMU_CALI_DATA .ref .r / IMU_CALI_MAX_COUNT ;
367
- IMU_CALI_DATA .ref .p = IMU_CALI_DATA .ref .p / IMU_CALI_MAX_COUNT ;
368
-
369
- float static_roll = atan2f (IMU_CALI_DATA .ref .ay , IMU_CALI_DATA .ref .az );
370
- float static_pitch = atan2f (
371
- - IMU_CALI_DATA .ref .ax , sqrtf (
372
- IMU_CALI_DATA .ref .ay * IMU_CALI_DATA .ref .ay +
373
- IMU_CALI_DATA .ref .az * IMU_CALI_DATA .ref .az ));
374
-
375
- IMU_CALI_DATA .offect .roll = static_roll - IMU_CALI_DATA .ref .r ;
376
- IMU_CALI_DATA .offect .pitch = static_pitch - IMU_CALI_DATA .ref .p ;
377
-
378
- IMU_CALI_DATA .read_cnt ++ ;
379
- }
380
- }
338
+ // static void AutoCaliImuData(void)
339
+ // {
340
+ // if (HAL_GetTick() < 100) {
341
+ // return;
342
+ // }
343
+
344
+ // if (IMU_CALI_DATA.read_cnt > IMU_CALI_MAX_COUNT) {
345
+ // return;
346
+ // }
347
+
348
+ // if (IMU_CALI_DATA.read_cnt < IMU_CALI_MAX_COUNT) {
349
+ // IMU_CALI_DATA.ref.ax += INS_accel[INS_ACCEL_X_ADDRESS_OFFSET];
350
+ // IMU_CALI_DATA.ref.ay += INS_accel[INS_ACCEL_Y_ADDRESS_OFFSET];
351
+ // IMU_CALI_DATA.ref.az += INS_accel[INS_ACCEL_Z_ADDRESS_OFFSET];
352
+
353
+ // IMU_CALI_DATA.ref.r += INS_angle[INS_ROLL_ADDRESS_OFFSET];
354
+ // IMU_CALI_DATA.ref.p += INS_angle[INS_PITCH_ADDRESS_OFFSET];
355
+
356
+ // if (IMU_CALI_DATA.read_cnt == 0) {
357
+ // IMU_CALI_DATA.ref.y1 = INS_angle[INS_YAW_ADDRESS_OFFSET];
358
+ // IMU_CALI_DATA.time.start = HAL_GetTick();
359
+ // }
360
+
361
+ // IMU_CALI_DATA.read_cnt++;
362
+ // } else if (IMU_CALI_DATA.read_cnt == IMU_CALI_MAX_COUNT) {
363
+ // IMU_CALI_DATA.time.end = HAL_GetTick();
364
+ // IMU_CALI_DATA.ref.y2 = INS_angle[INS_YAW_ADDRESS_OFFSET];
365
+
366
+ // IMU_CALI_DATA.ref.ax = IMU_CALI_DATA.ref.ax / IMU_CALI_MAX_COUNT;
367
+ // IMU_CALI_DATA.ref.ay = IMU_CALI_DATA.ref.ay / IMU_CALI_MAX_COUNT;
368
+ // IMU_CALI_DATA.ref.az = IMU_CALI_DATA.ref.az / IMU_CALI_MAX_COUNT;
369
+
370
+ // IMU_CALI_DATA.ref.r = IMU_CALI_DATA.ref.r / IMU_CALI_MAX_COUNT;
371
+ // IMU_CALI_DATA.ref.p = IMU_CALI_DATA.ref.p / IMU_CALI_MAX_COUNT;
372
+
373
+ // float static_roll = atan2f(IMU_CALI_DATA.ref.ay, IMU_CALI_DATA.ref.az);
374
+ // float static_pitch = atan2f(
375
+ // -IMU_CALI_DATA.ref.ax, sqrtf(
376
+ // IMU_CALI_DATA.ref.ay * IMU_CALI_DATA.ref.ay +
377
+ // IMU_CALI_DATA.ref.az * IMU_CALI_DATA.ref.az));
378
+
379
+ // IMU_CALI_DATA.offect.roll = static_roll - IMU_CALI_DATA.ref.r;
380
+ // IMU_CALI_DATA.offect.pitch = static_pitch - IMU_CALI_DATA.ref.p;
381
+
382
+ // IMU_CALI_DATA.read_cnt++;
383
+ // }
384
+ // }
381
385
382
386
static void UpdateImuData (void )
383
387
{
384
388
// clang-format off
385
- IMU_DATA .pitch = INS_angle [INS_PITCH_ADDRESS_OFFSET ] + IMU_CALI_DATA . offect . pitch ;
386
- IMU_DATA .roll = INS_angle [INS_ROLL_ADDRESS_OFFSET ] + IMU_CALI_DATA . offect . roll ;
389
+ IMU_DATA .pitch = INS_angle [INS_PITCH_ADDRESS_OFFSET ];
390
+ IMU_DATA .roll = INS_angle [INS_ROLL_ADDRESS_OFFSET ];
387
391
IMU_DATA .yaw = INS_angle [INS_YAW_ADDRESS_OFFSET ];
388
392
389
393
IMU_DATA .roll_vel = INS_gyro [INS_GYRO_X_ADDRESS_OFFSET ];
@@ -399,8 +403,6 @@ static void UpdateImuData(void)
399
403
// clang-format on
400
404
}
401
405
402
- const Imu_t * GetImuDataPoint (void ) { return & IMU_DATA ; }
403
-
404
406
// clang-format off
405
407
406
408
/**
0 commit comments