#include "sensor_gnss.h" #include "orbit_info.h" #include "libconvert.h" #include "liblog.h" #include //linux下大小端转换 #include #include #include #include #include "TyxkDynamics.h" #include "GNCFunction.h" using namespace Dynamics; GNSS_Base_t gnss_info; uint8_t telemetry_cnt = 0; void GetGNSSMeas(double PosVelECIMeas[6], double PosVelWGS84[6], double* GNSSTime, double PosVelECIReal[6], double mjd, double Epoch_J2000); /// @brief 生成GNSS遥测帧 /// @param frame:生成的遥测帧数据 /// @return: 无 uint8_t generate_gnss_frame(uint8_t *frame, double PosVelECIReal[6], double mjd, double Epoch_J2000) { uint8_t gnss_frame[GPS_Hk_FRAME_LENGTH] = {0}; double PosVelECIMeas[6], PosVelWGS84[6], GNSSTime; GetGNSSMeas(PosVelECIMeas, PosVelWGS84, &GNSSTime, PosVelECIReal, mjd, Epoch_J2000); //printf("PosVelECIMeas is %10.3f \t %10.3f \t %10.3f\r\n", PosVelECIMeas[0], PosVelECIMeas[1], PosVelECIMeas[2]); //printf("PosVelWGS84 is %10.3f \t %10.3f \t %10.3f\r\n", PosVelWGS84[0], PosVelWGS84[1], PosVelWGS84[1]); spdlog::info("函数{0}计算位置为:{1:.5f},{2:.5f},{3:.5f},速度为:{4:.2f},{5:.2f},{6:.2f},GNSSTime为:{7:.5f},Epoch_J2000为{8:.5f}",__FUNCTION__, PosVelECIMeas[0], PosVelECIMeas[1], PosVelECIMeas[2], PosVelECIMeas[3], PosVelECIMeas[4], PosVelECIMeas[5], GNSSTime, Epoch_J2000); uint16_t checksum = 0; gnss_info.header[0] = 0xEB; gnss_info.header[1] = 0x90; gnss_info.length = 0x6C01; gnss_info.datatype = 0x12; gnss_info.telemetry_cnt = telemetry_cnt++; gnss_info.GNSS_X_POS_inJ2000 = htonl((int32_t)(PosVelECIMeas[0]*10.0)); gnss_info.GNSS_Y_POS_inJ2000 = htonl((int32_t)(PosVelECIMeas[1]*10.0)); gnss_info.GNSS_Z_POS_inJ2000 = htonl((int32_t)(PosVelECIMeas[2]*10.0)); gnss_info.GNSS_X_SPEED_inJ2000 = htonl((int32_t)(PosVelECIMeas[3]*100.0)); gnss_info.GNSS_Y_SPEED_inJ2000 = htonl((int32_t)(PosVelECIMeas[4]*100.0)); gnss_info.GNSS_Z_SPEED_inJ2000 = htonl((int32_t)(PosVelECIMeas[5]*100.0)); gnss_info.GNSS_X_POS_inWGS84 = htonl((int32_t)(PosVelWGS84[0]*10.0)); gnss_info.GNSS_Y_POS_inWGS84 = htonl((int32_t)(PosVelWGS84[1]*10.0)); gnss_info.GNSS_Z_POS_inWGS84 = htonl((int32_t)(PosVelWGS84[2]*10.0)); gnss_info.GNSS_X_SPEED_inWGS84 = htonl((int32_t)(PosVelWGS84[3]*100.0)); gnss_info.GNSS_Y_SPEED_inWGS84 = htonl((int32_t)(PosVelWGS84[4]*100.0)); gnss_info.GNSS_Z_SPEED_inWGS84 = htonl((int32_t)(PosVelWGS84[5]*100.0)); gnss_info.posi_status = 0xE4; gnss_info.utc_time = htonl(GNSSTime); memcpy(gnss_frame,(uint8_t *)&gnss_info.header[0],GPS_Hk_FRAME_LENGTH); for(int kc= 2;kc