From a7dcb87450035b56e600e519dd476f6c212fc158 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B6=80=EA=B1=B4?= Date: Wed, 22 Apr 2026 14:53:07 +0900 Subject: [PATCH 1/2] =?UTF-8?q?navigation=5Ftest=5Fcommand=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80,=20missile=5Ftarget=5Fstate=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EB=AF=B8=EC=82=AC=EC=9D=BC=20=EA=B0=81=EC=86=8D=EB=8F=84,=20?= =?UTF-8?q?=EA=B0=80=EC=86=8D=EB=8F=84=20=EC=B6=94=EA=B0=80,=20icd=5Fid=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/dto/missile_target_state.h | 29 +++++++++++++++++++++++---- include/dto/navigation_test_command.h | 19 ++++++++++++++++++ include/enum/icd_id.h | 5 +++-- 3 files changed, 47 insertions(+), 6 deletions(-) create mode 100644 include/dto/navigation_test_command.h diff --git a/include/dto/missile_target_state.h b/include/dto/missile_target_state.h index faac2b6..2dfa66c 100644 --- a/include/dto/missile_target_state.h +++ b/include/dto/missile_target_state.h @@ -6,9 +6,16 @@ #include "../enum/icd_id.h" // ICD-26: 미사일/표적 참값 상태 (UI -> GCU, 100ms) -// SILS 1단계 UI-GCU 통합 ICD — 미사일(6필드) + 표적(6필드) 참값 전달 -// 좌표계: NED (발사점 원점) -// 위치 스케일 0.01 m (cm), 속도 스케일 0.001 m/s (mm/s) +// SILS 통합 ICD — 미사일(위치·속도·쿼터니언·각속도) + 표적(위치·속도) +// 좌표계: +// - 위치/속도: NED (발사점 원점) +// - 쿼터니언/각속도: Body +// 스케일: +// - 위치: 0.01 m (cm) +// - 속도: 0.001 m/s (mm/s) +// - 쿼터니언: 0.001 (단위 쿼터니언, |q|=1) +// - 각속도: 0.001 rad/s +// - 가속도: 0.001 m/s² (mm/s²) #pragma pack(push, 1) struct MissileTargetState { IcdId message_id; @@ -23,12 +30,26 @@ struct MissileTargetState { int32_t missile_vel_e; int32_t missile_vel_d; - // 미사일 쿼터니언 + // 미사일 쿼터니언 (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 (아래) + // 표적 위치 (발사점 기준 NED, 0.01 m) int32_t target_pos_n; int32_t target_pos_e; diff --git a/include/dto/navigation_test_command.h b/include/dto/navigation_test_command.h new file mode 100644 index 0000000..e4a8271 --- /dev/null +++ b/include/dto/navigation_test_command.h @@ -0,0 +1,19 @@ +#ifndef NAVIGATION_TEST_COMMAND_H +#define NAVIGATION_TEST_COMMAND_H + +#include + +#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 = 종료 +}; +#pragma pack(pop) + +#endif // NAVIGATION_TEST_COMMAND_H diff --git a/include/enum/icd_id.h b/include/enum/icd_id.h index b4f4358..f9296e6 100644 --- a/include/enum/icd_id.h +++ b/include/enum/icd_id.h @@ -30,8 +30,9 @@ enum class IcdId : uint16_t { PIN_CONTROL_MAIN_COMMAND = 0x0017, // 핀제어실제명령(pin_control_main_command) // SILS 1단계 (SRS-GCU-05 항법유도) 신규 - GUIDANCE_COMMAND = 0x0018, // 유도 명령 (guidance_command) - MISSILE_TARGET_STATE = 0x0019 // 미사일/표적 참값 상태 (missile_target_state) + GUIDANCE_COMMAND = 0x0018, // 유도 명령 (guidance_command) + MISSILE_TARGET_STATE = 0x0019, // 미사일/표적 참값 상태 (missile_target_state) + NAVIGATION_TEST_COMMAND = 0x001A // 항법시험 명령 (navigation_test_command) }; #endif // ICD_ID_H From 4d9299fcfef5c2631b6f49cf5ca21413ed45ebb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B6=80=EA=B1=B4?= Date: Wed, 22 Apr 2026 15:15:27 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=EC=A3=BC=EC=84=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/enum/icd_id.h | 62 +++++++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 29 deletions(-) diff --git a/include/enum/icd_id.h b/include/enum/icd_id.h index f9296e6..9124d98 100644 --- a/include/enum/icd_id.h +++ b/include/enum/icd_id.h @@ -4,35 +4,39 @@ #include enum class IcdId : uint16_t { - COMMON_PARAMETER = 0x0000, // 공통매개변수(common_parameter) - ACT_INFO = 0x0001, // ACT정보(act_info) - FULL_SYSTEM_INFO = 0x0002, // 부체계 정보 및 GCU 정보(full_system_info) - INS_DATA = 0x0003, // INS값(ins_data) - INS_INFO = 0x0004, // INS정보(ins_info) - SKR_INFO = 0x0005, // SKR정보(skr_info) - FEATURE_INSPECT_COMMAND = 0x0006, // 기능점검명령(feature_inspect_command) - FEATURE_INSPECT_READY_RES = 0x0007, // 기능점검준비완료응답(feature_inspect_ready_res) - TARGET_DISTANCE_REQ = 0x0008, // 목표거리오차요청(target_distance_req) - TARGET_DISTANCE_RES = 0x0009, // 목표거리오차응답(target_distance_res) - POSITION_REQ = 0x000A, // 자세요청(position_req) - POSITION_RES = 0x000B, // 자세응답(position_res) - PIN_CONTROL_REQ = 0x000C, // 핀제어요청(pin_control_req) - PIN_CONTROL_RES = 0x000D, // 핀제어응답(pin_control_res) - FEATURE_INSPECT_FINISH_COMMAND = 0x000E, // 기능점검종료명령(feature_inspect_finish_command) - FEATURE_INSPECT_FINISH_RES = 0x000F, // 기능점검종료응답(feature_inspect_finish_res) - ONE_TEST_RESULT = 0x0010, // 1회 수행결과 전송(one_test_result) - REBOOT_COMMAND = 0x0011, // 재부팅 명령 전송(reboot_command) - REBOOT_RES = 0x0012, // 재부팅 명령 응답(reboot_res) - FEATURE_INSPECT_READY_COMMAND = 0x0013, // 기능점검준비완료명령(feature_inspect_ready_command) - ACT_DATA = 0x0014, // ACT값(act_data) - INS_MAIN_DATA = 0x0015, // INS실제값(ins_main_data) - SKR_MAIN_DATA = 0x0016, // SKR실제값(skr_main_data) - PIN_CONTROL_MAIN_COMMAND = 0x0017, // 핀제어실제명령(pin_control_main_command) - - // SILS 1단계 (SRS-GCU-05 항법유도) 신규 - GUIDANCE_COMMAND = 0x0018, // 유도 명령 (guidance_command) - MISSILE_TARGET_STATE = 0x0019, // 미사일/표적 참값 상태 (missile_target_state) + COMMON_PARAMETER = 0x0000, // 공통매개변수(common_parameter) + ACT_INFO = 0x0001, // ACT정보(act_info) + FULL_SYSTEM_INFO = 0x0002, // 부체계 정보 및 GCU 정보(full_system_info) + INS_DATA = 0x0003, // INS값(ins_data) + INS_INFO = 0x0004, // INS정보(ins_info) + SKR_INFO = 0x0005, // SKR정보(skr_info) + FEATURE_INSPECT_COMMAND = 0x0006, // 기능점검명령(feature_inspect_command) + FEATURE_INSPECT_READY_RES = + 0x0007, // 기능점검준비완료응답(feature_inspect_ready_res) + TARGET_DISTANCE_REQ = 0x0008, // 목표거리오차요청(target_distance_req) + TARGET_DISTANCE_RES = 0x0009, // 목표거리오차응답(target_distance_res) + POSITION_REQ = 0x000A, // 자세요청(position_req) + POSITION_RES = 0x000B, // 자세응답(position_res) + PIN_CONTROL_REQ = 0x000C, // 핀제어요청(pin_control_req) + PIN_CONTROL_RES = 0x000D, // 핀제어응답(pin_control_res) + FEATURE_INSPECT_FINISH_COMMAND = + 0x000E, // 기능점검종료명령(feature_inspect_finish_command) + FEATURE_INSPECT_FINISH_RES = + 0x000F, // 기능점검종료응답(feature_inspect_finish_res) + ONE_TEST_RESULT = 0x0010, // 1회 수행결과 전송(one_test_result) + REBOOT_COMMAND = 0x0011, // 재부팅 명령 전송(reboot_command) + REBOOT_RES = 0x0012, // 재부팅 명령 응답(reboot_res) + FEATURE_INSPECT_READY_COMMAND = + 0x0013, // 기능점검준비완료명령(feature_inspect_ready_command) + ACT_DATA = 0x0014, // ACT값(act_data) + INS_MAIN_DATA = 0x0015, // INS실제값(ins_main_data) + SKR_MAIN_DATA = 0x0016, // SKR실제값(skr_main_data) + PIN_CONTROL_MAIN_COMMAND = + 0x0017, // 핀제어실제명령(pin_control_main_command) + GUIDANCE_COMMAND = 0x0018, // 유도 명령 (guidance_command) + MISSILE_TARGET_STATE = + 0x0019, // 미사일/표적 참값 상태 (missile_target_state) NAVIGATION_TEST_COMMAND = 0x001A // 항법시험 명령 (navigation_test_command) }; -#endif // ICD_ID_H +#endif // ICD_ID_H