diff --git a/include/dto/control_test_attitude_feedback.h b/include/dto/control_test_attitude_feedback.h new file mode 100644 index 0000000..de19b4e --- /dev/null +++ b/include/dto/control_test_attitude_feedback.h @@ -0,0 +1,40 @@ +#ifndef CONTROL_TEST_ATTITUDE_FEEDBACK_H +#define CONTROL_TEST_ATTITUDE_FEEDBACK_H + +#include + +#include "../enum/icd_id.h" + +// 좌표계: +// - 쿼터니언/각속도/가속도: Body +// 스케일: +// - 쿼터니언: 0.001 (단위 쿼터니언, |q|=1) +// - 각속도: 0.001 rad/s +// - 가속도: 0.001 m/s² (mm/s²) +#pragma pack(push, 1) +struct ControlTestAttitudeFeedback { + IcdId message_id; + + // 미사일 쿼터니언 (Body → NED 회전, 0.001 scalar) + int32_t q_w; + int32_t q_x; + int32_t q_y; + int32_t q_z; + + // 미사일 각속도 (Body frame, 0.001 rad/s) + // omega_p : roll rate (body X) + // omega_q : pitch rate (body Y) + // omega_r : yaw rate (body Z) + int32_t omega_p; + int32_t omega_q; + int32_t omega_r; + + // 미사일 가속도 (Body frame, 0.001 m/s²) + // IMU 가속도계 측정값 (specific force) + int32_t accel_x; // body X (전방) + int32_t accel_y; // body Y (우측) + int32_t accel_z; // body Z (아래) +}; +#pragma pack(pop) + +#endif // CONTROL_TEST_ATTITUDE_FEEDBACK_H diff --git a/include/dto/control_test_command.h b/include/dto/control_test_command.h new file mode 100644 index 0000000..b70f922 --- /dev/null +++ b/include/dto/control_test_command.h @@ -0,0 +1,15 @@ +#ifndef CONTROL_TEST_COMMAND_H +#define CONTROL_TEST_COMMAND_H + +#include + +#include "../enum/icd_id.h" + +#pragma pack(push, 1) +struct ControlTestCommand { + IcdId message_id; + uint8_t start; // 1 = 시작, 0 = 종료 +}; +#pragma pack(pop) + +#endif // CONTROL_TEST_COMMAND_H diff --git a/include/dto/control_test_missile_target_state.h b/include/dto/control_test_missile_target_state.h new file mode 100644 index 0000000..4d5146b --- /dev/null +++ b/include/dto/control_test_missile_target_state.h @@ -0,0 +1,39 @@ +#ifndef CONTROL_TEST_MISSILE_TARGET_STATE_H +#define CONTROL_TEST_MISSILE_TARGET_STATE_H + +#include + +#include "../enum/icd_id.h" + +// 좌표계: +// - 위치/속도: NED (발사점 원점) +// 스케일: +// - 위치: 0.01 m (cm) +// - 속도: 0.001 m/s (mm/s) +#pragma pack(push, 1) +struct ControlTestMissileTargetState { + IcdId message_id; + + // 미사일 위치 (발사점 기준 NED, 0.01 m) + int32_t missile_pos_n; + int32_t missile_pos_e; + int32_t missile_pos_d; + + // 미사일 속도 (NED, 0.001 m/s) + int32_t missile_vel_n; + int32_t missile_vel_e; + int32_t missile_vel_d; + + // 표적 위치 (발사점 기준 NED, 0.01 m) + int32_t target_pos_n; + int32_t target_pos_e; + int32_t target_pos_d; + + // 표적 속도 (NED, 0.001 m/s) + int32_t target_vel_n; + int32_t target_vel_e; + int32_t target_vel_d; +}; +#pragma pack(pop) + +#endif // CONTROL_TEST_MISSILE_TARGET_STATE_H diff --git a/include/dto/navigation_test_command.h b/include/dto/navigation_test_command.h index e4a8271..484de81 100644 --- a/include/dto/navigation_test_command.h +++ b/include/dto/navigation_test_command.h @@ -5,14 +5,10 @@ #include "../enum/icd_id.h" -// ICD-27: 항법시험 명령 (UI -> GCU) -// 시험 시작/종료 알림 -// start = 1 : 시험 시작 (ICD-26/25 송수신 시작) -// start = 0 : 시험 종료 (UART 입력으로 알고리즘 변경 가능) #pragma pack(push, 1) struct NavigationTestCommand { - IcdId message_id; - uint8_t start; // 1 = 시작, 0 = 종료 + IcdId message_id; + uint8_t start; // 1 = 시작, 0 = 종료 }; #pragma pack(pop) diff --git a/include/enum/icd_id.h b/include/enum/icd_id.h index cd62fb8..7078be4 100644 --- a/include/enum/icd_id.h +++ b/include/enum/icd_id.h @@ -37,6 +37,11 @@ enum class IcdId : uint16_t { MISSILE_TARGET_STATE = 0x0019, // 미사일/표적 참값 상태 (missile_target_state) NAVIGATION_TEST_COMMAND = 0x001A, // 항법시험 명령 (navigation_test_command) + CONTROL_TEST_COMMAND = 0x001B, // 제어시험 명령 (control_test_command) + CONTROL_TEST_MISSILE_TARGET_STATE = + 0x001C, // 제어시험 미사일/표적 상태 (control_test_missile_target_state) + CONTROL_TEST_ATTITUDE_FEEDBACK = + 0x001D // 제어시험 자세 피드백 (control_test_attitude_feedback) COMM_RELIABLE_TEST = 0xFFF0, // 통신 신뢰성 테스트용 ICD ID (comm_reliable_test) COMM_BIG_DATA_TEST = 0xFFF1 // 통신 대용량 데이터 테스트용 ICD ID (comm_big_data_test) };