#include "sensor_gyro.h" #include "orbit_info.h" #include "GNCFunction.h" #include "libconvert.h" #include "liblog.h" #include // #include // #include // #include int32_t Delta_Gyro_angle_int[3]; uint16_t Integ_time_int[3]; double Gyro1MtxInstall[3][3] = { {-0.000872664182949154, 0.000873425726015331, 0.999999237792072}, {0.999999238456644, -0.000871902307307135, 0.000873425726015331}, {0.000872664515235150, 0.999999238456644, -0.000872664182949154} }; double GyroOutputPeriod = 1.0; double Ox = 0.017; double Oy = 0.205; double Oz = 0.369; //%常值漂移,单位为°/h double Tx = 20.0; double Ty = 20.0; double Tz = 20.0; //积分时间,单位为ms double Kx = 289752.5; double Ky = 299114.7; double Kz = 282454.6; //%标度因子,单位为^/°/s void GetGyro1Meas(double MeasGyro1[3], double AttiVelECI[3], double Gyro1MtxInstall[3][3], double GyroOutputPeriod); /// @brief 生成GYRO遥测帧 /// @param frame:生成的遥测帧数据 /// @return uint8_t generate_gyro_frame(uint8_t *frame, double AttiVelECI[3]) { Gyro_Frame gyro; memset(frame,0,GYRO_FRAME_LENGTH); memset( (uint8_t *)&gyro.header,0,GYRO_FRAME_LENGTH); double MeasGyro1[3]; GetGyro1Meas( MeasGyro1, AttiVelECI, Gyro1MtxInstall, GyroOutputPeriod); // printf("MeasGyro1 is %10.3f \t %10.3f \t %10.3f\r\n", MeasGyro1[0], MeasGyro1[1], MeasGyro1[2]); spdlog::info("MeasGyro1为:{1:10.6f},{2:10.6f},{3:10.6f}",__FUNCTION__, MeasGyro1[0], MeasGyro1[1], MeasGyro1[2]); gyro.header = 0x97; gyro.x_angle_delta[0] = (uint8_t)((Delta_Gyro_angle_int[0] & 0x00FF0000) >> 16); gyro.x_angle_delta[1] = (uint8_t)((Delta_Gyro_angle_int[0] & 0x0000FF00)>>8); gyro.x_angle_delta[2] = (uint8_t)((Delta_Gyro_angle_int[0] & 0x000000FF)); gyro.x_integral_time = htons(Integ_time_int[0]); gyro.y_angle_delta[0] = (uint8_t)((Delta_Gyro_angle_int[1] & 0x00FF0000) >> 16); gyro.y_angle_delta[1] = (uint8_t)((Delta_Gyro_angle_int[1] & 0x0000FF00)>>8); gyro.y_angle_delta[2] = (uint8_t)((Delta_Gyro_angle_int[1] & 0x000000FF)); gyro.y_integral_time = htons(Integ_time_int[1]); gyro.z_angle_delta[0] = (uint8_t)((Delta_Gyro_angle_int[2] & 0x00FF0000)>>16); gyro.z_angle_delta[1] = (uint8_t)((Delta_Gyro_angle_int[2] & 0x0000FF00)>>8); gyro.z_angle_delta[2] = (uint8_t)((Delta_Gyro_angle_int[2] & 0x000000FF)); gyro.z_integral_time = htons(Integ_time_int[2]); uint8_t checksum = 0; uint8_t *buffer = (uint8_t *)&gyro.header; for(int kc = 0;kc