fix: remove attitude_t, unify with INS_t
- Delete attitude_t struct from ins_task.h - INS_Init() returns INS_t* directly instead of casting from INS.Gyro offset - Change Gimbal_Upload_Data_s.gimbal_imu_data to INS_t* pointer - Update gimbal.c and robot_cmd.c accordingly
This commit is contained in:
+10
-10
@@ -96,8 +96,8 @@ static void SwitchToAutoMode(void)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
/* 同步角度参考值为当前 IMU 角度 */
|
/* 同步角度参考值为当前 IMU 角度 */
|
||||||
gimbal_yaw_ref = gimbal_fetch_data.gimbal_imu_data.YawTotalAngle;
|
gimbal_yaw_ref = gimbal_fetch_data.gimbal_imu_data->YawTotalAngle;
|
||||||
gimbal_pitch_ref = gimbal_fetch_data.gimbal_imu_data.Pitch;
|
gimbal_pitch_ref = gimbal_fetch_data.gimbal_imu_data->Pitch;
|
||||||
|
|
||||||
vision_data.manual_updated = 0; // 清除手动数据残留
|
vision_data.manual_updated = 0; // 清除手动数据残留
|
||||||
VisionPIDReset();
|
VisionPIDReset();
|
||||||
@@ -110,8 +110,8 @@ static void SwitchToManualMode(void)
|
|||||||
if (current_mode == VISION_MODE_MANUAL)
|
if (current_mode == VISION_MODE_MANUAL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
gimbal_yaw_ref = gimbal_fetch_data.gimbal_imu_data.YawTotalAngle;
|
gimbal_yaw_ref = gimbal_fetch_data.gimbal_imu_data->YawTotalAngle;
|
||||||
gimbal_pitch_ref = gimbal_fetch_data.gimbal_imu_data.Pitch;
|
gimbal_pitch_ref = gimbal_fetch_data.gimbal_imu_data->Pitch;
|
||||||
|
|
||||||
vision_data.auto_updated = 0; // 清除自动数据残留
|
vision_data.auto_updated = 0; // 清除自动数据残留
|
||||||
current_mode = VISION_MODE_MANUAL;
|
current_mode = VISION_MODE_MANUAL;
|
||||||
@@ -250,8 +250,8 @@ static void ManualModeSet()
|
|||||||
/* 零力子模式 */
|
/* 零力子模式 */
|
||||||
vision_data.manual_updated = 0;
|
vision_data.manual_updated = 0;
|
||||||
gimbal_cmd_send.gimbal_mode = GIMBAL_ZERO_FORCE;
|
gimbal_cmd_send.gimbal_mode = GIMBAL_ZERO_FORCE;
|
||||||
gimbal_yaw_ref = gimbal_fetch_data.gimbal_imu_data.YawTotalAngle;
|
gimbal_yaw_ref = gimbal_fetch_data.gimbal_imu_data->YawTotalAngle;
|
||||||
gimbal_pitch_ref = gimbal_fetch_data.gimbal_imu_data.Pitch;
|
gimbal_pitch_ref = gimbal_fetch_data.gimbal_imu_data->Pitch;
|
||||||
}
|
}
|
||||||
else if (vision_data.manual_updated)
|
else if (vision_data.manual_updated)
|
||||||
{
|
{
|
||||||
@@ -285,16 +285,16 @@ static void EmergencyHandler()
|
|||||||
{
|
{
|
||||||
robot_state = ROBOT_STOP;
|
robot_state = ROBOT_STOP;
|
||||||
gimbal_cmd_send.gimbal_mode = GIMBAL_ZERO_FORCE;
|
gimbal_cmd_send.gimbal_mode = GIMBAL_ZERO_FORCE;
|
||||||
gimbal_cmd_send.yaw = gimbal_fetch_data.gimbal_imu_data.YawTotalAngle;
|
gimbal_cmd_send.yaw = gimbal_fetch_data.gimbal_imu_data->YawTotalAngle;
|
||||||
gimbal_cmd_send.pitch = gimbal_fetch_data.gimbal_imu_data.Pitch;
|
gimbal_cmd_send.pitch = gimbal_fetch_data.gimbal_imu_data->Pitch;
|
||||||
laser_off();
|
laser_off();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!switch_is_down(rc_data[TEMP].rc.switch_right) && robot_state == ROBOT_STOP)
|
if (!switch_is_down(rc_data[TEMP].rc.switch_right) && robot_state == ROBOT_STOP)
|
||||||
{
|
{
|
||||||
robot_state = ROBOT_READY;
|
robot_state = ROBOT_READY;
|
||||||
gimbal_yaw_ref = gimbal_fetch_data.gimbal_imu_data.YawTotalAngle;
|
gimbal_yaw_ref = gimbal_fetch_data.gimbal_imu_data->YawTotalAngle;
|
||||||
gimbal_pitch_ref = gimbal_fetch_data.gimbal_imu_data.Pitch;
|
gimbal_pitch_ref = gimbal_fetch_data.gimbal_imu_data->Pitch;
|
||||||
LOGINFO("[CMD] reinstate, robot ready");
|
LOGINFO("[CMD] reinstate, robot ready");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
#include "message_center.h"
|
#include "message_center.h"
|
||||||
#include "general_def.h"
|
#include "general_def.h"
|
||||||
|
|
||||||
static attitude_t *gimbal_IMU_data;
|
static INS_t *gimbal_IMU_data;
|
||||||
|
|
||||||
static Publisher_t *gimbal_pub;
|
static Publisher_t *gimbal_pub;
|
||||||
static Subscriber_t *gimbal_sub;
|
static Subscriber_t *gimbal_sub;
|
||||||
@@ -96,6 +96,6 @@ void GimbalTask()
|
|||||||
DMMotorSetRef(pitch_motor, gimbal_cmd_recv.pitch);
|
DMMotorSetRef(pitch_motor, gimbal_cmd_recv.pitch);
|
||||||
}
|
}
|
||||||
|
|
||||||
gimbal_feedback_data.gimbal_imu_data = *gimbal_IMU_data;
|
gimbal_feedback_data.gimbal_imu_data = gimbal_IMU_data;
|
||||||
PubPushMessage(gimbal_pub, (void *)&gimbal_feedback_data);
|
PubPushMessage(gimbal_pub, (void *)&gimbal_feedback_data);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ typedef struct
|
|||||||
/* ---- gimbal 发布给 CMD 的反馈数据 ---- */
|
/* ---- gimbal 发布给 CMD 的反馈数据 ---- */
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
attitude_t gimbal_imu_data;
|
INS_t *gimbal_imu_data; // 指向 INS 实例的指针
|
||||||
uint16_t yaw_motor_single_round_angle;
|
uint16_t yaw_motor_single_round_angle;
|
||||||
uint8_t gimbal_power;
|
uint8_t gimbal_power;
|
||||||
} Gimbal_Upload_Data_s;
|
} Gimbal_Upload_Data_s;
|
||||||
|
|||||||
@@ -77,12 +77,12 @@ static void InitQuaternion(float *init_q4)
|
|||||||
init_q4[i + 1] = axis_rot[i] * sinf(angle / 2.0f); // 轴角公式,第三轴为0(没有z轴分量)
|
init_q4[i + 1] = axis_rot[i] * sinf(angle / 2.0f); // 轴角公式,第三轴为0(没有z轴分量)
|
||||||
}
|
}
|
||||||
|
|
||||||
attitude_t *INS_Init(void)
|
INS_t *INS_Init(void)
|
||||||
{
|
{
|
||||||
if (!INS.init)
|
if (!INS.init)
|
||||||
INS.init = 1;
|
INS.init = 1;
|
||||||
else
|
else
|
||||||
return (attitude_t *)&INS.Gyro;
|
return &INS;
|
||||||
|
|
||||||
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_4);
|
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_4);
|
||||||
|
|
||||||
@@ -112,7 +112,7 @@ attitude_t *INS_Init(void)
|
|||||||
// noise of accel is relatively big and of high freq,thus lpf is used
|
// noise of accel is relatively big and of high freq,thus lpf is used
|
||||||
INS.AccelLPF = 0.0085;
|
INS.AccelLPF = 0.0085;
|
||||||
DWT_GetDeltaT(&INS_DWT_Count);
|
DWT_GetDeltaT(&INS_DWT_Count);
|
||||||
return (attitude_t *)&INS.Gyro; // @todo: 这里偷懒了,不要这样做! 修改INT_t结构体可能会导致异常,待修复.
|
return &INS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 注意以1kHz的频率运行此任务 */
|
/* 注意以1kHz的频率运行此任务 */
|
||||||
|
|||||||
+1
-12
@@ -25,17 +25,6 @@
|
|||||||
|
|
||||||
#define INS_TASK_PERIOD 1
|
#define INS_TASK_PERIOD 1
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
float Gyro[3]; // 角速度
|
|
||||||
float Accel[3]; // 加速度
|
|
||||||
// 还需要增加角速度数据
|
|
||||||
float Roll;
|
|
||||||
float Pitch;
|
|
||||||
float Yaw;
|
|
||||||
float YawTotalAngle;
|
|
||||||
} attitude_t; // 最终解算得到的角度,以及yaw转动的总角度(方便多圈控制)
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
float q[4]; // 四元数估计值
|
float q[4]; // 四元数估计值
|
||||||
@@ -82,7 +71,7 @@ typedef struct
|
|||||||
* @brief 初始化惯导解算系统
|
* @brief 初始化惯导解算系统
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
attitude_t *INS_Init(void);
|
INS_t *INS_Init(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 此函数放入实时系统中,以1kHz频率运行
|
* @brief 此函数放入实时系统中,以1kHz频率运行
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include "controller.h"
|
#include "controller.h"
|
||||||
#include "stdint.h"
|
#include "stdint.h"
|
||||||
|
#include "bsp_can.h"
|
||||||
|
|
||||||
#define LIMIT_MIN_MAX(x, min, max) (x) = (((x) <= (min)) ? (min) : (((x) >= (max)) ? (max) : (x)))
|
#define LIMIT_MIN_MAX(x, min, max) (x) = (((x) <= (min)) ? (min) : (((x) >= (max)) ? (max) : (x)))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user