Replace compile-time orientation enum/macro approach with a general
3x3 rotation matrix IMU2BODY_ROTATION. User fills in the matrix
according to actual IMU mounting orientation. Matrix must be a proper
rotation (det = +1) to preserve right-handed coordinate system.
Support NORMAL, YAW_180, ROLL_180, PITCH_180 presets selected at compile
time by IMU_MOUNT_ORIENTATION macro. Replaces direct BMI088-to-INS
assignment with IMU_Mount_Correct() for sign flip and axis swap.
- Add DEBUG mode (parallel to AUTO/MANUAL) for real-time PID parameter tuning
- New 0xA8 debug frame: 12 floats for vision/motor angle PID tuning params
- DMMotorSetMode: send zero-velocity before disable, clear PID to prevent jumps
- motor_enable topic: pub from robot_cmd, sub in gimbal, controls motor on/off
- motor_pid topic: pub from robot_cmd, sub in gimbal, updates motor angle PID
- Rename DM motor enums (DM_CMD_ENABLE_MODE/DISABLE_MODE, DM_Motor_Ctrl_Mode_e)
- SwitchToAuto/Manual: re-enable motors when switching back from DEBUG mode
- Static-allocate enable_msg/pid_tune in GimbalTask to avoid stack churn
- Add docs/host_comm_guide.md with Python Tkinter tuning GUI example
- Remove ARCHITECTURE.md
- DM motor send functions now fill txconf.Identifier from tx_id before CANTransmit
(MIT=tid, PosVel=tid+0x100, Velocity=tid+0x200, SetMode=tid)
- Enable motor task with stack size 1024 1000Hz
- Increase FDCAN1 StdFiltersNbr from 1 to 14
- Comment out INS temperature log, DM error handling and PID for testing
- Remove test_robot_cmd.c
- Replace osThreadDef/osThreadCreate/osThread with osThreadNew/osThreadAttr_t
- Replace osSignalWait with osThreadFlagsWait
- Change osThreadId to osThreadId_t, osPriority to osPriority_t
- Increase daemon task stack from 128 to 512 to fix stack overflow HardFault
- Cast BMI088.Temperature float to int before %d format to fix va_list misalignment
The old approach used memcpy to copy PID_Init_Config_s into PIDInstance,
relying on identical struct layout at the beginning. This is fragile and
confusing. Now assigns each field explicitly.
- Remove RC_ctrl_t and RemoteControlInit from robot_cmd.c
- Delete GIMBAL_ZERO_FORCE, gimbal_mode_e, Robot_Status_e from robot_def.h
- Remove EmergencyHandler and robot_state from robot_cmd.c
- Remove emergency commands from master_machine.h
- Remove remote_control and can_comm from CMakeLists.txt
UpdateCount was only used as a first-time-initialization flag for the
accel low-pass filter, not as a real counter. Replaced with a simple
uint8_t flag and moved the set to the first-update path.