From d2121ad080fa3446ece06e452a874d27af20628b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B6=80=EA=B1=B4?= Date: Fri, 24 Apr 2026 17:34:21 +0900 Subject: [PATCH] =?UTF-8?q?=EC=A0=9C=EC=96=B4=20=EC=8B=9C=ED=97=98?= =?UTF-8?q?=EC=9A=A9=20icd=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/dto/control_test_attitude_feedback.h | 40 +++++++++++++++++++ include/dto/control_test_command.h | 15 +++++++ .../dto/control_test_missile_target_state.h | 39 ++++++++++++++++++ include/dto/navigation_test_command.h | 8 +--- include/enum/icd_id.h | 7 +++- 5 files changed, 102 insertions(+), 7 deletions(-) create mode 100644 include/dto/control_test_attitude_feedback.h create mode 100644 include/dto/control_test_command.h create mode 100644 include/dto/control_test_missile_target_state.h 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 9124d98..6cc5deb 100644 --- a/include/enum/icd_id.h +++ b/include/enum/icd_id.h @@ -36,7 +36,12 @@ enum class IcdId : uint16_t { GUIDANCE_COMMAND = 0x0018, // 유도 명령 (guidance_command) MISSILE_TARGET_STATE = 0x0019, // 미사일/표적 참값 상태 (missile_target_state) - NAVIGATION_TEST_COMMAND = 0x001A // 항법시험 명령 (navigation_test_command) + 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) }; #endif // ICD_ID_H