Compare commits

...

3 Commits

Author SHA1 Message Date
zxy
8b24d206b0 测试 2025-11-18 15:15:58 +08:00
zxy
fe91017d69 前馈 2025-11-18 15:09:26 +08:00
zxy
08f5a8043a 修改了一下 2025-11-01 21:18:47 +08:00
15 changed files with 3322 additions and 3287 deletions

View File

@ -13,3 +13,5 @@
======= =======
>>>>>>> fc2ac5c99d3c57c83c4929b0969c6dc753eef3ac >>>>>>> fc2ac5c99d3c57c83c4929b0969c6dc753eef3ac
[info] Log at : 2025/11/18|14:23:37|GMT+0800

File diff suppressed because one or more lines are too long

View File

@ -567,7 +567,7 @@
<Group> <Group>
<GroupName>Middlewares/FreeRTOS</GroupName> <GroupName>Middlewares/FreeRTOS</GroupName>
<tvExp>0</tvExp> <tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel> <cbSel>0</cbSel>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -27,10 +27,6 @@ Project File Date: 10/28/2025
<h2>Output:</h2> <h2>Output:</h2>
*** Using Compiler 'V6.7', folder: 'D:\keil\ARM\ARMCLANG\Bin' *** Using Compiler 'V6.7', folder: 'D:\keil\ARM\ARMCLANG\Bin'
Build target 'zzzzh' Build target 'zzzzh'
compiling test.c...
linking...
Program Size: Code=37444 RO-data=688 RW-data=156 ZI-data=24380
FromELF: creating hex file...
"zzzzh\zzzzh.axf" - 0 Error(s), 0 Warning(s). "zzzzh\zzzzh.axf" - 0 Error(s), 0 Warning(s).
<h2>Software Packages used:</h2> <h2>Software Packages used:</h2>
@ -54,7 +50,7 @@ Package Vendor: Keil
<h2>Collection of Component Files used:</h2> <h2>Collection of Component Files used:</h2>
* Component: ARM::CMSIS:CORE:5.0.1 * Component: ARM::CMSIS:CORE:5.0.1
Build Time Elapsed: 00:00:02 Build Time Elapsed: 00:00:01
</pre> </pre>
</body> </body>
</html> </html>

File diff suppressed because it is too large Load Diff

View File

@ -3,7 +3,7 @@
<title>Static Call Graph - [zzzzh\zzzzh.axf]</title></head> <title>Static Call Graph - [zzzzh\zzzzh.axf]</title></head>
<body><HR> <body><HR>
<H1>Static Call Graph for image zzzzh\zzzzh.axf</H1><HR> <H1>Static Call Graph for image zzzzh\zzzzh.axf</H1><HR>
<BR><P>#&#060CALLGRAPH&#062# ARM Linker, 6070001: Last Updated: Tue Oct 28 22:00:46 2025 <BR><P>#&#060CALLGRAPH&#062# ARM Linker, 6070001: Last Updated: Wed Nov 12 20:42:29 2025
<BR><P> <BR><P>
<H3>Maximum Stack Usage = 288 bytes + Unknown(Cycles, Untraceable Function Pointers)</H3><H3> <H3>Maximum Stack Usage = 288 bytes + Unknown(Cycles, Untraceable Function Pointers)</H3><H3>
Call chain for Maximum Stack Depth:</H3> Call chain for Maximum Stack Depth:</H3>
@ -672,7 +672,7 @@ Global Symbols
</UL> </UL>
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f407xx.o(RESET) <BR>[Address Reference Count : 1]<UL><LI> startup_stm32f407xx.o(RESET)
</UL> </UL>
<P><STRONG><a name="[9b]"></a>Chassis_Control</STRONG> (Thumb, 776 bytes, Stack size 56 bytes, chassis.o(.text.Chassis_Control)) <P><STRONG><a name="[9b]"></a>Chassis_Control</STRONG> (Thumb, 792 bytes, Stack size 56 bytes, chassis.o(.text.Chassis_Control))
<BR><BR>[Stack]<UL><LI>Max Depth = 128<LI>Call Chain = Chassis_Control &rArr; PID_Calc &rArr; __hardfp_fmaxf <BR><BR>[Stack]<UL><LI>Max Depth = 128<LI>Call Chain = Chassis_Control &rArr; PID_Calc &rArr; __hardfp_fmaxf
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;LowPassFilter2p_Reset <BR>[Calls]<UL><LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;LowPassFilter2p_Reset
@ -691,7 +691,7 @@ Global Symbols
<BR>[Called By]<UL><LI><a href="#[69]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Task_test <BR>[Called By]<UL><LI><a href="#[69]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Task_test
</UL> </UL>
<P><STRONG><a name="[a7]"></a>Chassis_Init</STRONG> (Thumb, 302 bytes, Stack size 48 bytes, chassis.o(.text.Chassis_Init)) <P><STRONG><a name="[a7]"></a>Chassis_Init</STRONG> (Thumb, 314 bytes, Stack size 48 bytes, chassis.o(.text.Chassis_Init))
<BR><BR>[Stack]<UL><LI>Max Depth = 264<LI>Call Chain = Chassis_Init &rArr; BSP_CAN_Init &rArr; osMutexNew &rArr; xQueueCreateMutexStatic &rArr; xQueueGenericSend &rArr; xTaskResumeAll &rArr; xTaskIncrementTick <BR><BR>[Stack]<UL><LI>Max Depth = 264<LI>Call Chain = Chassis_Init &rArr; BSP_CAN_Init &rArr; osMutexNew &rArr; xQueueCreateMutexStatic &rArr; xQueueGenericSend &rArr; xTaskResumeAll &rArr; xTaskIncrementTick
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[82]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BSP_CAN_Init <BR>[Calls]<UL><LI><a href="#[82]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BSP_CAN_Init

File diff suppressed because it is too large Load Diff

View File

@ -133,7 +133,7 @@ I (..\Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os.h)(0x68C65D
I (..\Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.h)(0x68C65D59) I (..\Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.h)(0x68C65D59)
I (..\User\task\user_task.h)(0x6900CBEC) I (..\User\task\user_task.h)(0x6900CBEC)
I (..\User\module\config.h)(0x68DCDCE8) I (..\User\module\config.h)(0x68DCDCE8)
I (..\User\module\chassis.h)(0x6900CBEC) I (..\User\module\chassis.h)(0x69133B48)
I (..\User\bsp\can.h)(0x68EE5C62) I (..\User\bsp\can.h)(0x68EE5C62)
I (..\Core\Inc\can.h)(0x68EE5A24) I (..\Core\Inc\can.h)(0x68EE5A24)
I (..\User\bsp\bsp.h)(0x68EE5C62) I (..\User\bsp\bsp.h)(0x68EE5C62)
@ -1963,10 +1963,10 @@ I (D:\keil\ARM\ARMCLANG\include\stdbool.h)(0x588CAFD2)
I (D:\keil\ARM\ARMCLANG\include\stdint.h)(0x588CAFD2) I (D:\keil\ARM\ARMCLANG\include\stdint.h)(0x588CAFD2)
I (D:\keil\ARM\ARMCLANG\include\stddef.h)(0x588CAFD2) I (D:\keil\ARM\ARMCLANG\include\stddef.h)(0x588CAFD2)
I (D:\keil\ARM\ARMCLANG\include\string.h)(0x588CAFD2) I (D:\keil\ARM\ARMCLANG\include\string.h)(0x588CAFD2)
F (..\User\module\config.c)(0x6900C8BE)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -D__MICROLIB -gdwarf-3 -O3 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -I ../Core/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I ../Middlewares/Third_Party/FreeRTOS/Source/include -I ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I ../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM4F -I ../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I ../Drivers/CMSIS/Include -I ../User -I./RTE/_zzzzh -ID:/keil/ARM/PACK/ARM/CMSIS/5.0.1/CMSIS/Include -ID:/keil/ARM/PACK/Keil/STM32F4xx_DFP/2.14.0/Drivers/CMSIS/Device/ST/STM32F4xx/Include -D__UVISION_VERSION="524" -D_RTE_ -DSTM32F407xx -DUSE_HAL_DRIVER -DSTM32F407xx -o zzzzh/config.o -MD) F (..\User\module\config.c)(0x69060879)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -D__MICROLIB -gdwarf-3 -O3 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -I ../Core/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I ../Middlewares/Third_Party/FreeRTOS/Source/include -I ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I ../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM4F -I ../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I ../Drivers/CMSIS/Include -I ../User -I./RTE/_zzzzh -ID:/keil/ARM/PACK/ARM/CMSIS/5.0.1/CMSIS/Include -ID:/keil/ARM/PACK/Keil/STM32F4xx_DFP/2.14.0/Drivers/CMSIS/Device/ST/STM32F4xx/Include -D__UVISION_VERSION="524" -D_RTE_ -DSTM32F407xx -DUSE_HAL_DRIVER -DSTM32F407xx -o zzzzh/config.o -MD)
I (..\User\module\config.h)(0x68DCDCE8) I (..\User\module\config.h)(0x68DCDCE8)
I (D:\keil\ARM\ARMCLANG\include\stdint.h)(0x588CAFD2) I (D:\keil\ARM\ARMCLANG\include\stdint.h)(0x588CAFD2)
I (..\User\module\chassis.h)(0x6900CBEC) I (..\User\module\chassis.h)(0x69133B48)
I (..\Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.h)(0x68C65D59) I (..\Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.h)(0x68C65D59)
I (D:\keil\ARM\ARMCLANG\include\stddef.h)(0x588CAFD2) I (D:\keil\ARM\ARMCLANG\include\stddef.h)(0x588CAFD2)
I (..\User\bsp\can.h)(0x68EE5C62) I (..\User\bsp\can.h)(0x68EE5C62)
@ -2025,7 +2025,7 @@ I (..\User\component\ahrs.h)(0x68EE5C62)
I (..\User\device\motor_rm.h)(0x68EE5C18) I (..\User\device\motor_rm.h)(0x68EE5C18)
I (..\User\device\motor.h)(0x68EE5C18) I (..\User\device\motor.h)(0x68EE5C18)
I (..\User\device\device.h)(0x68EE5C63) I (..\User\device\device.h)(0x68EE5C63)
F (..\User\module\chassis.c)(0x6900CBEC)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -D__MICROLIB -gdwarf-3 -O3 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -I ../Core/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I ../Middlewares/Third_Party/FreeRTOS/Source/include -I ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I ../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM4F -I ../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I ../Drivers/CMSIS/Include -I ../User -I./RTE/_zzzzh -ID:/keil/ARM/PACK/ARM/CMSIS/5.0.1/CMSIS/Include -ID:/keil/ARM/PACK/Keil/STM32F4xx_DFP/2.14.0/Drivers/CMSIS/Device/ST/STM32F4xx/Include -D__UVISION_VERSION="524" -D_RTE_ -DSTM32F407xx -DUSE_HAL_DRIVER -DSTM32F407xx -o zzzzh/chassis.o -MD) F (..\User\module\chassis.c)(0x691480B2)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -D__MICROLIB -gdwarf-3 -O3 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -I ../Core/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I ../Middlewares/Third_Party/FreeRTOS/Source/include -I ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I ../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM4F -I ../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I ../Drivers/CMSIS/Include -I ../User -I./RTE/_zzzzh -ID:/keil/ARM/PACK/ARM/CMSIS/5.0.1/CMSIS/Include -ID:/keil/ARM/PACK/Keil/STM32F4xx_DFP/2.14.0/Drivers/CMSIS/Device/ST/STM32F4xx/Include -D__UVISION_VERSION="524" -D_RTE_ -DSTM32F407xx -DUSE_HAL_DRIVER -DSTM32F407xx -o zzzzh/chassis.o -MD)
I (..\Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.h)(0x68C65D59) I (..\Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.h)(0x68C65D59)
I (D:\keil\ARM\ARMCLANG\include\stdint.h)(0x588CAFD2) I (D:\keil\ARM\ARMCLANG\include\stdint.h)(0x588CAFD2)
I (D:\keil\ARM\ARMCLANG\include\stddef.h)(0x588CAFD2) I (D:\keil\ARM\ARMCLANG\include\stddef.h)(0x588CAFD2)
@ -2083,7 +2083,7 @@ I (D:\keil\ARM\ARMCLANG\include\math.h)(0x58A47FFE)
I (..\User\device\motor_rm.h)(0x68EE5C18) I (..\User\device\motor_rm.h)(0x68EE5C18)
I (..\User\device\motor.h)(0x68EE5C18) I (..\User\device\motor.h)(0x68EE5C18)
I (..\User\device\device.h)(0x68EE5C63) I (..\User\device\device.h)(0x68EE5C63)
I (..\User\module\chassis.h)(0x6900CBEC) I (..\User\module\chassis.h)(0x69133B48)
I (..\User\component\filter.h)(0x68EE5C62) I (..\User\component\filter.h)(0x68EE5C62)
I (..\User\component\mixer.h)(0x68EE5C62) I (..\User\component\mixer.h)(0x68EE5C62)
I (..\User\component\pid.h)(0x68EE5C62) I (..\User\component\pid.h)(0x68EE5C62)
@ -2102,7 +2102,7 @@ I (..\Middlewares\Third_Party\FreeRTOS\Source\include\mpu_wrappers.h)(0x68C65D59
I (..\Middlewares\Third_Party\FreeRTOS\Source\include\task.h)(0x68C65D59) I (..\Middlewares\Third_Party\FreeRTOS\Source\include\task.h)(0x68C65D59)
I (..\Middlewares\Third_Party\FreeRTOS\Source\include\list.h)(0x68C65D59) I (..\Middlewares\Third_Party\FreeRTOS\Source\include\list.h)(0x68C65D59)
I (..\User\module\config.h)(0x68DCDCE8) I (..\User\module\config.h)(0x68DCDCE8)
I (..\User\module\chassis.h)(0x6900CBEC) I (..\User\module\chassis.h)(0x69133B48)
I (..\User\bsp\can.h)(0x68EE5C62) I (..\User\bsp\can.h)(0x68EE5C62)
I (..\Core\Inc\can.h)(0x68EE5A24) I (..\Core\Inc\can.h)(0x68EE5A24)
I (..\Core\Inc\main.h)(0x68EE5A28) I (..\Core\Inc\main.h)(0x68EE5A28)
@ -2166,7 +2166,7 @@ I (..\Middlewares\Third_Party\FreeRTOS\Source\include\mpu_wrappers.h)(0x68C65D59
I (..\Middlewares\Third_Party\FreeRTOS\Source\include\task.h)(0x68C65D59) I (..\Middlewares\Third_Party\FreeRTOS\Source\include\task.h)(0x68C65D59)
I (..\Middlewares\Third_Party\FreeRTOS\Source\include\list.h)(0x68C65D59) I (..\Middlewares\Third_Party\FreeRTOS\Source\include\list.h)(0x68C65D59)
I (..\User\module\config.h)(0x68DCDCE8) I (..\User\module\config.h)(0x68DCDCE8)
I (..\User\module\chassis.h)(0x6900CBEC) I (..\User\module\chassis.h)(0x69133B48)
I (..\User\bsp\can.h)(0x68EE5C62) I (..\User\bsp\can.h)(0x68EE5C62)
I (..\Core\Inc\can.h)(0x68EE5A24) I (..\Core\Inc\can.h)(0x68EE5A24)
I (..\Core\Inc\main.h)(0x68EE5A28) I (..\Core\Inc\main.h)(0x68EE5A28)
@ -2214,7 +2214,7 @@ I (..\User\component\ahrs.h)(0x68EE5C62)
I (..\User\device\motor_rm.h)(0x68EE5C18) I (..\User\device\motor_rm.h)(0x68EE5C18)
I (..\User\device\motor.h)(0x68EE5C18) I (..\User\device\motor.h)(0x68EE5C18)
I (..\User\device\device.h)(0x68EE5C63) I (..\User\device\device.h)(0x68EE5C63)
F (..\User\task\test.c)(0x6900CC8C)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -D__MICROLIB -gdwarf-3 -O3 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -I ../Core/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I ../Middlewares/Third_Party/FreeRTOS/Source/include -I ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I ../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM4F -I ../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I ../Drivers/CMSIS/Include -I ../User -I./RTE/_zzzzh -ID:/keil/ARM/PACK/ARM/CMSIS/5.0.1/CMSIS/Include -ID:/keil/ARM/PACK/Keil/STM32F4xx_DFP/2.14.0/Drivers/CMSIS/Device/ST/STM32F4xx/Include -D__UVISION_VERSION="524" -D_RTE_ -DSTM32F407xx -DUSE_HAL_DRIVER -DSTM32F407xx -o zzzzh/test.o -MD) F (..\User\task\test.c)(0x6901FB4E)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -D__MICROLIB -gdwarf-3 -O3 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -I ../Core/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc -I ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I ../Middlewares/Third_Party/FreeRTOS/Source/include -I ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I ../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM4F -I ../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I ../Drivers/CMSIS/Include -I ../User -I./RTE/_zzzzh -ID:/keil/ARM/PACK/ARM/CMSIS/5.0.1/CMSIS/Include -ID:/keil/ARM/PACK/Keil/STM32F4xx_DFP/2.14.0/Drivers/CMSIS/Device/ST/STM32F4xx/Include -D__UVISION_VERSION="524" -D_RTE_ -DSTM32F407xx -DUSE_HAL_DRIVER -DSTM32F407xx -o zzzzh/test.o -MD)
I (..\User\task\user_task.h)(0x6900CBEC) I (..\User\task\user_task.h)(0x6900CBEC)
I (..\Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.h)(0x68C65D59) I (..\Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.h)(0x68C65D59)
I (D:\keil\ARM\ARMCLANG\include\stdint.h)(0x588CAFD2) I (D:\keil\ARM\ARMCLANG\include\stdint.h)(0x588CAFD2)
@ -2229,7 +2229,7 @@ I (..\Middlewares\Third_Party\FreeRTOS\Source\include\mpu_wrappers.h)(0x68C65D59
I (..\Middlewares\Third_Party\FreeRTOS\Source\include\task.h)(0x68C65D59) I (..\Middlewares\Third_Party\FreeRTOS\Source\include\task.h)(0x68C65D59)
I (..\Middlewares\Third_Party\FreeRTOS\Source\include\list.h)(0x68C65D59) I (..\Middlewares\Third_Party\FreeRTOS\Source\include\list.h)(0x68C65D59)
I (..\User\module\config.h)(0x68DCDCE8) I (..\User\module\config.h)(0x68DCDCE8)
I (..\User\module\chassis.h)(0x6900CBEC) I (..\User\module\chassis.h)(0x69133B48)
I (..\User\bsp\can.h)(0x68EE5C62) I (..\User\bsp\can.h)(0x68EE5C62)
I (..\Core\Inc\can.h)(0x68EE5A24) I (..\Core\Inc\can.h)(0x68EE5A24)
I (..\Core\Inc\main.h)(0x68EE5A28) I (..\Core\Inc\main.h)(0x68EE5A28)
@ -2293,7 +2293,7 @@ I (..\Middlewares\Third_Party\FreeRTOS\Source\include\mpu_wrappers.h)(0x68C65D59
I (..\Middlewares\Third_Party\FreeRTOS\Source\include\task.h)(0x68C65D59) I (..\Middlewares\Third_Party\FreeRTOS\Source\include\task.h)(0x68C65D59)
I (..\Middlewares\Third_Party\FreeRTOS\Source\include\list.h)(0x68C65D59) I (..\Middlewares\Third_Party\FreeRTOS\Source\include\list.h)(0x68C65D59)
I (..\User\module\config.h)(0x68DCDCE8) I (..\User\module\config.h)(0x68DCDCE8)
I (..\User\module\chassis.h)(0x6900CBEC) I (..\User\module\chassis.h)(0x69133B48)
I (..\User\bsp\can.h)(0x68EE5C62) I (..\User\bsp\can.h)(0x68EE5C62)
I (..\Core\Inc\can.h)(0x68EE5A24) I (..\Core\Inc\can.h)(0x68EE5A24)
I (..\Core\Inc\main.h)(0x68EE5A28) I (..\Core\Inc\main.h)(0x68EE5A28)

View File

@ -2,9 +2,6 @@
*/ */
/*
µ×ÅÌÄ£×é
*/
#include "cmsis_os2.h" #include "cmsis_os2.h"
#include <stdlib.h> #include <stdlib.h>
@ -81,6 +78,7 @@ int8_t Chassis_Init(Chassis_t *c, const Chassis_Params_t *param,
BSP_CAN_Init(); BSP_CAN_Init();
c->param = param; c->param = param;
c->mode = CHASSIS_MODE_RELAX; c->mode = CHASSIS_MODE_RELAX;
c->param->feedforward.coefficient = 0.1f; //前馈系数
//根据底盘不同设置模式轮子与混合器 //根据底盘不同设置模式轮子与混合器
Mixer_Mode_t mixer_mode; Mixer_Mode_t mixer_mode;
switch (param->type) { switch (param->type) {
@ -149,7 +147,6 @@ int8_t Chassis_Init(Chassis_t *c, const Chassis_Params_t *param,
*/ */
int8_t Chassis_UpdateFeedback(Chassis_t *c) { int8_t Chassis_UpdateFeedback(Chassis_t *c) {
//更新所有电机反馈 //更新所有电机反馈
for (uint8_t i = 0; i < c->num_wheel; i++) { for (uint8_t i = 0; i < c->num_wheel; i++) {
MOTOR_RM_Update(&(c->param->motor_param[i])); MOTOR_RM_Update(&(c->param->motor_param[i]));
@ -166,6 +163,7 @@ int8_t Chassis_UpdateFeedback(Chassis_t *c) {
return CHASSIS_OK; return CHASSIS_OK;
} }
/** /**
* @brief * @brief
* @param c * @param c
@ -191,15 +189,15 @@ int8_t Chassis_Control(Chassis_t *c, const Chassis_CMD_t *c_cmd, uint32_t now) {
c->move_vec.vx = c->move_vec.vy = 0.0f; c->move_vec.vx = c->move_vec.vy = 0.0f;
break; break;
case CHASSIS_MODE_INDEPENDENT: case CHASSIS_MODE_INDEPENDENT:
c->move_vec.vx = c_cmd->ctrl_vec.vx; c->move_vec.vx = c_cmd->ctrl_vec.vx ;
c->move_vec.vy = c_cmd->ctrl_vec.vy; c->move_vec.vy = c_cmd->ctrl_vec.vy ;
break; break;
default: { //遥控器坐标->机体坐标系 default: { //遥控器坐标->机体坐标系
float beta = c->feedback.encoder_gimbalYawMotor - c->mech_zero; float beta = c->feedback.encoder_gimbalYawMotor - c->mech_zero;
float cosb = cosf(beta); float cosb = cosf(beta);
float sinb = sinf(beta); float sinb = sinf(beta);
c->move_vec.vx = cosb * c_cmd->ctrl_vec.vx - sinb * c_cmd->ctrl_vec.vy; c->move_vec.vx = cosb * c_cmd->ctrl_vec.vx - sinb * c_cmd->ctrl_vec.vy ;
c->move_vec.vy = sinb * c_cmd->ctrl_vec.vx + cosb * c_cmd->ctrl_vec.vy; c->move_vec.vy = sinb * c_cmd->ctrl_vec.vx + cosb * c_cmd->ctrl_vec.vy ;
break; break;
} }
} }
@ -211,19 +209,19 @@ int8_t Chassis_Control(Chassis_t *c, const Chassis_CMD_t *c_cmd, uint32_t now) {
c->move_vec.wz = 0.0f; c->move_vec.wz = 0.0f;
break; break;
case CHASSIS_MODE_OPEN: case CHASSIS_MODE_OPEN:
c->move_vec.wz = c_cmd->ctrl_vec.wz; c->move_vec.wz = c_cmd->ctrl_vec.wz ;
break; break;
//云台跟随 //云台跟随
case CHASSIS_MODE_FOLLOW_GIMBAL: case CHASSIS_MODE_FOLLOW_GIMBAL:
c->move_vec.wz = PID_Calc(&c->pid.follow, c->mech_zero, c->feedback.encoder_gimbalYawMotor, 0.0f, c->dt); c->move_vec.wz = PID_Calc(&c->pid.follow, c->mech_zero, c->feedback.encoder_gimbalYawMotor, 0.0f, c->dt) ;
break; break;
//云台跟随(偏移) //云台跟随(偏移)
case CHASSIS_MODE_FOLLOW_GIMBAL_35: case CHASSIS_MODE_FOLLOW_GIMBAL_35:
c->move_vec.wz = PID_Calc(&c->pid.follow,c->mech_zero +M_7OVER72PI, c->feedback.encoder_gimbalYawMotor, 0.0f, c->dt); c->move_vec.wz = PID_Calc(&c->pid.follow,c->mech_zero +M_7OVER72PI, c->feedback.encoder_gimbalYawMotor, 0.0f, c->dt) ;
break; break;
//小陀螺 //小陀螺
case CHASSIS_MODE_ROTOR: case CHASSIS_MODE_ROTOR:
c->move_vec.wz = c->wz_multi * Chassis_CalcWz(CHASSIS_ROTOR_WZ_MIN,CHASSIS_ROTOR_WZ_MAX, now); c->move_vec.wz = c->wz_multi * Chassis_CalcWz(CHASSIS_ROTOR_WZ_MIN,CHASSIS_ROTOR_WZ_MAX, now) ;
break; break;
} }
//运动学逆解算,运动向量分解为电机转速 //运动学逆解算,运动向量分解为电机转速
@ -241,12 +239,15 @@ int8_t Chassis_Control(Chassis_t *c, const Chassis_CMD_t *c_cmd, uint32_t now) {
case CHASSIS_MODE_ROTOR: case CHASSIS_MODE_ROTOR:
case CHASSIS_MODE_INDEPENDENT: case CHASSIS_MODE_INDEPENDENT:
out_current = PID_Calc(&c->pid.motor[i], c->setpoint.motor_rpm[i], fb, 0.0f, c->dt); out_current = PID_Calc(&c->pid.motor[i], c->setpoint.motor_rpm[i], fb, 0.0f, c->dt);
const float K_FF = c->param->feedforward.coefficient; //前馈系数,具体值在初始化部分,使用时可以自己修改。
float feedforward_current = K_FF * c->setpoint.motor_rpm[i];
out_current += feedforward_current; //总电流 = 前馈电流 + 反馈电流
break; break;
case CHASSIS_MODE_OPEN: case CHASSIS_MODE_OPEN:
out_current = c->setpoint.motor_rpm[i] / 7000.0f; out_current = c->setpoint.motor_rpm[i] / 7000.0f ;
break; break;
case CHASSIS_MODE_RELAX: case CHASSIS_MODE_RELAX:
out_current = 0.0f; out_current = 0.0f ;
break; break;
} }

View File

@ -1,5 +1,5 @@
/* /*
*/ */
#pragma once #pragma once
@ -17,72 +17,72 @@ extern "C" {
#include "component\ahrs.h" #include "component\ahrs.h"
#include "device/motor_rm.h" #include "device/motor_rm.h"
/* Exported constants ------------------------------------------------------- */ /* Exported constants ------------------------------------------------------- */
#define CHASSIS_OK (0) /* 运行正常 */ #define CHASSIS_OK (0) /*运行正常*/
#define CHASSIS_ERR (-1) /* 运行时出现了一些小错误 */ #define CHASSIS_ERR (-1) /*运行错误*/
#define CHASSIS_ERR_NULL (-2) /* 运行时发现NULL指针 */ #define CHASSIS_ERR_NULL (-2) /*空指针错误*/
#define CHASSIS_ERR_MODE (-3) /* 运行时出配置了错误的ChassisMode_t */ #define CHASSIS_ERR_MODE (-3) /*模式错误*/
#define CHASSIS_ERR_TYPE (-4) /* 运行时出配置了错误的Chassis_Type_t */ #define CHASSIS_ERR_TYPE (-4) /*类型错误*/
#define MAX_MOTOR_CURRENT 20.0f #define MAX_MOTOR_CURRENT 20.0f
/* 底盘控制模式 */ /* 底盘控制模式 */
typedef enum { typedef enum {
CHASSIS_MODE_RELAX, /* 放松模式,电机不输出。一般情况底盘初始化之后的模式 */ CHASSIS_MODE_RELAX, /*放松模式,电机不转动*/
CHASSIS_MODE_BREAK, /* 刹车模式,电机闭环控制静止。用于机器人停止状态 */ CHASSIS_MODE_BREAK, /* 制动模式,电机立即停止 */
CHASSIS_MODE_FOLLOW_GIMBAL, /* 通过闭环控制使车头方向跟随云台 */ CHASSIS_MODE_FOLLOW_GIMBAL, /* 跟随模式,电机根据云台角度旋转 */
CHASSIS_MODE_FOLLOW_GIMBAL_35, /* 通过闭环控制使车头方向35°跟随云台 */ CHASSIS_MODE_FOLLOW_GIMBAL_35, /* 跟随模式,电机根据云台角度旋转35度 */
CHASSIS_MODE_ROTOR, /* 小陀螺模式,通过闭环控制使底盘不停旋转 */ CHASSIS_MODE_ROTOR, /* 旋转模式,电机根据旋转角度旋转 */
CHASSIS_MODE_INDEPENDENT, /*独立模式。底盘运行不受云台影响 */ CHASSIS_MODE_INDEPENDENT,/* 独立模式,电机根据指令独立旋转 */
CHASSIS_MODE_OPEN, /* 开环模式。底盘运行不受PID控制直接输出到电机 */ CHASSIS_MODE_OPEN, /* 开放模式,电机根据指令直接旋转 */
} Chassis_Mode_t; } Chassis_Mode_t;
/* 小陀螺转动模式 */ /* 底盘小陀螺模式 */
typedef enum { typedef enum {
ROTOR_MODE_CW, /* 顺时针转动 */ ROTOR_MODE_CW, // 顺时针旋转
ROTOR_MODE_CCW, /* 逆时针转动 */ ROTOR_MODE_CCW, // 逆时针旋转
ROTOR_MODE_RAND, /* 随机转动 */ ROTOR_MODE_RAND, // 随机旋转
} Chassis_RotorMode_t; } Chassis_RotorMode_t;
/* 底盘控制命令 */ /* 底盘控制命令 */
typedef struct { typedef struct {
Chassis_Mode_t mode; /* 底盘运行模式 */ Chassis_Mode_t mode; /* 底盘运动模式*/
Chassis_RotorMode_t mode_rotor; /* 小陀螺转动模式 */ Chassis_RotorMode_t mode_rotor; /* 小陀螺模式旋转方向*/
MoveVector_t ctrl_vec; /* 底盘控制向量 */ MoveVector_t ctrl_vec; /* 底盘运动控制向量*/
} Chassis_CMD_t; } Chassis_CMD_t;
/* 限位 */ /* 限位好像没用到 */
typedef struct { typedef struct {
float max; float max;
float min; float min;
} Chassis_Limit_t; } Chassis_Limit_t;
/* 底盘类型(底盘的物理设计) */ /* 底盘类型 */
typedef enum { typedef enum {
CHASSIS_TYPE_MECANUM, /* 麦克纳姆轮 */ CHASSIS_TYPE_MECANUM, /* 麦克纳姆轮底盘 */
CHASSIS_TYPE_PARLFIX4, /* 平行摆放的四个驱动轮 */ CHASSIS_TYPE_PARLFIX4, /* 平行固定4轮底盘 */
CHASSIS_TYPE_PARLFIX2, /* 平行摆放的两个驱动轮 */ CHASSIS_TYPE_PARLFIX2, /* 平行固定2轮底盘 */
CHASSIS_TYPE_OMNI_CROSS, /* 叉型摆放的四个全向轮 */ CHASSIS_TYPE_OMNI_CROSS, /* 十字.omni轮底盘 */
CHASSIS_TYPE_OMNI_PLUS, /* 十字型摆设的四个全向轮 */ CHASSIS_TYPE_OMNI_PLUS, /* X型.omni轮底盘 */
CHASSIS_TYPE_DRONE, /* 无人机底盘 */ CHASSIS_TYPE_DRONE, /* 无人机底盘 */
CHASSIS_TYPE_SINGLE, /* 单个摩擦轮 */ CHASSIS_TYPE_SINGLE, /* 单底盘 */
} Chassis_Type_t; } Chassis_Type_t;
/* 底盘参数结构体,ALL初始化参数 */ /* 底盘参数结构体 ,初始化参数*/
typedef struct { typedef struct {
MOTOR_RM_Param_t motor_param[4]; MOTOR_RM_Param_t motor_param[4];
struct { struct {
KPID_Params_t motor_pid_param; /* 底盘电机PID参数 */ KPID_Params_t motor_pid_param; /* 电机转速PID参数 */
KPID_Params_t follow_pid_param; /* 跟随云台PID参数 */ KPID_Params_t follow_pid_param; /* 跟随PID参数 */
} pid; } pid;
Chassis_Type_t type; /* 底盘类型,底盘的机械设计和轮子选型 */ Chassis_Type_t type; /* 底盘类型 */
/* 低通滤波器截至频率*/ /* 低通滤波器截止频率设置 */
struct { struct {
float in; /* 输入 */ float in; /* 输入 */
float out; /* 输出 */ float out; /* 输出 */
} low_pass_cutoff_freq; } low_pass_cutoff_freq;
/* 电机反装,应该和云台设置相同*/ /*电机反装,设置与云台相同,但貌似没啥用*/
struct { struct {
bool yaw; bool yaw;
} reverse; } reverse;
@ -90,6 +90,12 @@ typedef struct {
float max_vx, max_vy, max_wz; float max_vx, max_vy, max_wz;
float max_current; float max_current;
} limit; } limit;
/*前馈相关系数*/
struct {
float coefficient;
} feedforward;
} Chassis_Params_t; } Chassis_Params_t;
typedef struct { typedef struct {
@ -98,59 +104,56 @@ typedef struct {
} Chassis_IMU_t; } Chassis_IMU_t;
typedef struct { typedef struct {
MOTOR_Feedback_t motor[4]; // 四个 3508电机 反馈 MOTOR_Feedback_t motor[4]; /* 电机反馈 */
float encoder_gimbalYawMotor; float encoder_gimbalYawMotor;
} Chassis_Feedback_t; } Chassis_Feedback_t;
/* 底盘输出结构体*/ /* 底盘输出结构体 */
typedef struct { typedef struct {
float motor[4]; float motor[4]; /* 电机输出电流目标值,范围[-1,1],对应最大电流 */
} Chassis_Output_t; } Chassis_Output_t;
/* /* 底盘主结构体 */
*
* ,,
*/
typedef struct { typedef struct {
uint64_t last_wakeup; uint64_t last_wakeup;
float dt; float dt;
Chassis_Params_t *param; /* 底盘参数,用Chassis_Init设定 */ Chassis_Params_t *param; /* 底盘参数指针 */
/* 模块通用 */ /* 底盘状态 */
Chassis_Mode_t mode; /* 底盘模式 */ Chassis_Mode_t mode; /* 底盘运动模式 */
/* 底盘设计 */ /* 底盘设计 */
int8_t num_wheel; /* 底盘轮子数量 */ int8_t num_wheel; /* 底盘轮子数量 */
Mixer_t mixer; /* 混合器,移动向量->电机目标值 */ Mixer_t mixer; /* 混合器 */
MoveVector_t move_vec; /* 底盘实际的运动向量 */ MoveVector_t move_vec; /* 底盘运动控制向量 */
MOTOR_RM_t *motors[4];/*指向底盘每个电机参数*/ MOTOR_RM_t *motors[4]; /* 电机指针数组 */
float mech_zero; float mech_zero; /* 机械零点 */
float wz_multi; /* 小陀螺旋转模式 */ float wz_multi; /* 小陀螺模式旋转角度系数 */
/* PID计算目标值 */ /*PID计算目标值*/
struct { struct {
float motor_rpm[4]; /* 电机转速的动态数组,单位:RPM */ float motor_rpm[4]; /* 电机转速目标值单位rpm */
} setpoint; } setpoint;
/* 反馈控制用的PID */ /* 反馈控制PID计算 */
struct { struct {
KPID_t motor[4]; /* 控制轮子电机用的PID的动态数组 */ KPID_t motor[4]; /* 电机转速PID */
KPID_t follow; /* 跟随云台用的PID */ KPID_t follow; /* 跟随PID */
} pid; } pid;
struct { struct {
Chassis_Limit_t vx, vy, wz; Chassis_Limit_t vx, vy, wz;
} limit; } limit;
/* 滤波器 */ /*滤波器*/
struct { struct {
LowPassFilter2p_t in[4]; /* 反馈滤波器 */ LowPassFilter2p_t in[4]; /* 电机速度反馈滤波器 */
LowPassFilter2p_t out[4]; /* 输出滤波器 */ LowPassFilter2p_t out[4]; /* 电机速度输出滤波器 */
} filter; } filter;
Chassis_Output_t out; /* 电机输出 */ Chassis_Output_t out;; /* 底盘输出结构体 */
Chassis_Feedback_t feedback; Chassis_Feedback_t feedback;
//float out_motor[4]; //float out_motor[4];
} Chassis_t; } Chassis_t;
@ -158,73 +161,73 @@ typedef struct {
/* Exported functions prototypes -------------------------------------------- */ /* Exported functions prototypes -------------------------------------------- */
/** /**
* \brief * \brief
* *
* \param c * \param c
* \param param * \param param
* \param target_freq * \param target_freq Hz
* *
* \return * \return CHASSIS_OK:
*/ */
int8_t Chassis_Init(Chassis_t *c, const Chassis_Params_t *param, int8_t Chassis_Init(Chassis_t *c, const Chassis_Params_t *param,
float target_freq); float target_freq);
/** /**
* \brief * \brief
* *
* \param c * \param c
* \param can CAN设备结构体
* *
* \return * \return CHASSIS_OK:
*/ */
int8_t Chassis_UpdateFeedback(Chassis_t *c); int8_t Chassis_UpdateFeedback(Chassis_t *c);
/** /**
* \brief * \brief
* *
* \param c * \param c
* \param c_cmd * \param c_cmd
* \param dt_sec * \param now ms
* *
* \return * \return CHASSIS_OK:
*/ */
int8_t Chassis_Control(Chassis_t *c, const Chassis_CMD_t *c_cmd, int8_t Chassis_Control(Chassis_t *c, const Chassis_CMD_t *c_cmd,
uint32_t now); uint32_t now);
/** /**
* \brief * \brief
* * \param c
* \param s
* \param out CAN设备底盘输出结构体
*/ */
void Chassis_Output(Chassis_t *c); void Chassis_Output(Chassis_t *c);
/** /**
* \brief Chassis输出数据 * \brief
* *
* \param out CAN设备底盘输出结构体 * \param c
*/ */
void Chassis_ResetOutput(Chassis_t *c); void Chassis_ResetOutput(Chassis_t *c);
/** /**
* @brief * \brief
* *
* @param c * \param c
* @param cap * \param cap
* @param ref * \param ref
* @return *
* \return CHASSIS_OK:
*/ */
//还没有加入waiting。。。。。。int8_t Chassis_PowerLimit(Chassis_t *c, const CAN_Capacitor_t *cap, //<EFBFBD><EFBFBD>û<EFBFBD>м<EFBFBD><EFBFBD>룬waiting<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>int8_t Chassis_PowerLimit(Chassis_t *c, const CAN_Capacitor_t *cap,
// const Referee_ForChassis_t *ref); // const Referee_ForChassis_t *ref);
/** /**
* @brief * \brief UI数据填充
* *
* @param chassis * \param c
* @param ui UI数据结构体 * \param ui UI数据指针
*
* \return
*/ */
//void Chassis_DumpUI(const Chassis_t *c, Referee_ChassisUI_t *ui); //void Chassis_DumpUI(const Chassis_t *c, Referee_ChassisUI_t *ui);

View File

@ -19,8 +19,8 @@
/* Exported variables ------------------------------------------------------- */ /* Exported variables ------------------------------------------------------- */
Config_RobotParam_t robot_config = { Config_RobotParam_t robot_config = {
.chassis_param = { .chassis_param = {
/* ??3508???? */ /* DJI3508电机*/
.motor_param = { .motor_param = {
{ {
.can = BSP_CAN_1, .can = BSP_CAN_1,
@ -51,14 +51,14 @@ Config_RobotParam_t robot_config = {
.gear = true .gear = true
}, },
}, },
.type = CHASSIS_TYPE_OMNI_PLUS, .type = CHASSIS_TYPE_MECANUM,
/* PID ?? */ /* PID */
.pid = { .pid = {
/* ????/??? PID */ /* 底盘电机 PID */
.motor_pid_param = { .motor_pid_param = {
.k = 0.001f, .k = 0.001f,
.p = 0.01f, .p = 1.0f,
.i = 0.01f, .i = 0.0f,
.d = 0.0f, .d = 0.0f,
.i_limit = 1.0f, .i_limit = 1.0f,
.out_limit = 1.0f, .out_limit = 1.0f,
@ -66,7 +66,7 @@ Config_RobotParam_t robot_config = {
.range = -1.0f, .range = -1.0f,
}, },
/* ?????????? */ /* 跟随 */
.follow_pid_param = { .follow_pid_param = {
.k = 0.5f, .k = 0.5f,
.p = 1.0f, .p = 1.0f,
@ -79,21 +79,19 @@ Config_RobotParam_t robot_config = {
}, },
}, },
/* ??/?????? */
.low_pass_cutoff_freq = { .low_pass_cutoff_freq = {
.in = 50.0f, .in = 50.0f,
.out = 50.0f, .out = 50.0f,
}, },
/* ???? */
.reverse = { .reverse = {
.yaw = true, .yaw = true,
}, },
.limit = { .limit = {
.max_vx = 3.0f, // ????????????? .max_vx = 3.0f,
.max_vy = 3.0f, .max_vy = 3.0f,
.max_wz = 2.0f, // rad/s ??? .max_wz = 2.0f,
.max_current = 16000.0f // ???????????(DJI ?? ±16384) .max_current = 16000.0f
}, },
}, },
}; };