From 4af0cc6bf0e2d2f5b58edebfe4446fb2b9dc6a93 Mon Sep 17 00:00:00 2001 From: Robofish <1683502971@qq.com> Date: Thu, 26 Jun 2025 05:11:10 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=90=E5=8A=A8=E5=AD=A6=E6=AD=A3=E7=A1=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 8196 -> 6148 bytes .vscode/settings.json | 9 + Core/Inc/stm32h7xx_it.h | 3 + Core/Src/dma.c | 9 + Core/Src/spi.c | 6 +- Core/Src/stm32h7xx_it.c | 53 +- Core/Src/usart.c | 67 +- CtrBoard-H7_ALL.ioc | 74 +- MDK-ARM/CtrBoard-H7_ALL.uvoptx | 3109 +++---- MDK-ARM/CtrBoard-H7_ALL.uvprojx | 243 +- MDK-ARM/CtrBoard-H7_ALL/CtrBoard-H7_ALL.axf | Bin 2446628 -> 2456188 bytes MDK-ARM/CtrBoard-H7_ALL/CtrBoard-H7_ALL.hex | 8598 ++++++++++--------- User/bsp/uart.c | 4 + User/bsp/uart.h | 1 + User/component/cmd.c | 4 +- User/component/crc16.c | 35 + User/component/crc16.h | 17 + User/component/crc8.c | 33 + User/component/crc8.h | 17 + User/component/kinematics.c | 117 +- User/component/kinematics.h | 37 + User/component/limiter.c | 27 + User/component/limiter.h | 20 + User/component/unitreeLeg.cpp | 175 + User/component/user_math.c | 1 + User/device/ai.c | 152 + User/device/ai.h | 69 + User/device/bmi088.c | 3 +- User/device/device.h | 13 +- User/device/go copy.c | 118 - User/device/go.c | 1 + User/device/n100.c | 156 + User/device/n100.h | 63 + User/module/chassis.c | 36 +- User/module/chassis.h | 62 +- User/module/config.c | 116 - User/module/config.h | 3 +- User/task/atti_esti.c | 97 +- User/task/config.yaml | 4 +- User/task/ctrl_leg.c | 2 - User/task/init.c | 1 + User/task/user_task.h | 10 +- Utils/Kinematics.m | 221 + Utils/Kinematics.py | 78 + 44 files changed, 7640 insertions(+), 6224 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 User/component/crc16.c create mode 100644 User/component/crc16.h create mode 100644 User/component/crc8.c create mode 100644 User/component/crc8.h create mode 100644 User/component/limiter.c create mode 100644 User/component/limiter.h create mode 100755 User/component/unitreeLeg.cpp create mode 100644 User/device/ai.c create mode 100644 User/device/ai.h delete mode 100644 User/device/go copy.c create mode 100644 User/device/n100.c create mode 100644 User/device/n100.h delete mode 100644 User/module/config.c create mode 100644 Utils/Kinematics.m create mode 100644 Utils/Kinematics.py diff --git a/.DS_Store b/.DS_Store index 66734db092ad45c1abbffc0700749c0b83109abd..0421874618bb62c2c4a190e6d1e19a78e70799f4 100644 GIT binary patch delta 184 zcmZp1XfcprU|?W$DortDU=RQ@Ie-{MGqg`E6q~50D9Q+A12Ir6l|h#wiJ_DslObnf zp}HeTLXaVuA(tVMAsbneAqA)~1tccjn3bGKP!{lWlmUd6*#10=bl7b3D%+W&pK@B3b|d literal 8196 zcmeHM-EI;=6h70^vOsD{v`KG_n|R?(trTjT#v4k(*x25bT20g-uvj(%OW38k^UawvJCuk-p>M1aEfbN3i)A{6YC_@n zd_~HP_v99&0G`O%ZCUkN%c@0m)dR(VVn8vV7*Gr-2CfDJ*t5B4Q}%uLt*R9Rih=)< z0nQIPE|z&u4qYiz2P%04fQ;d>ENJ5#AThcp^PU{KQbN(EdwLKaRCq@W;llA=XLZQD zCx@KkakF$+3;)M z!T2#Qsq3J38@|>c4SI`KANSl#1*2+8y(-?YP96N&u)^&V%1-7{d_dCk^O&As&BQF! zr{KX*0H35|>Pi;agNbv;tOhWPlQ8hw#tea@AU_e0HCXG)@m|c@LRf#AC7w6&&Npu( zOU(<8Yh-DxKh08POi9m2p26;9YZ33_w2!!YjCkIr1KJO<#*yrgsuZ+MM2dk`*`R@3 z3yp9rvR@ZL)dqIg`~B{7t=lqfCzJUiW@ck^^KmV%rL>pjrZp%#Ri|$ks=eoYcW7Cy z+NfQv9hr?mC4FPZ>Nr)i)96WnX*8hn;;Gp&tUUqpPwhRrQ7!&98})4+8ygXMuH-|4*^M$qOw;=+1ES4s#fc^rq7$8pHW*|2wp4!Z`o{ diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..352e893 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,9 @@ +{ + "files.associations": { + "device.h": "c", + "ahrs.h": "c", + "string.h": "c", + "user_math.h": "c", + "__locale": "c" + } +} \ No newline at end of file diff --git a/Core/Inc/stm32h7xx_it.h b/Core/Inc/stm32h7xx_it.h index 3cb491b..424deab 100644 --- a/Core/Inc/stm32h7xx_it.h +++ b/Core/Inc/stm32h7xx_it.h @@ -71,6 +71,9 @@ void EXTI15_10_IRQHandler(void); void DMA1_Stream7_IRQHandler(void); void UART5_IRQHandler(void); void DMA2_Stream0_IRQHandler(void); +void DMA2_Stream1_IRQHandler(void); +void DMA2_Stream2_IRQHandler(void); +void DMA2_Stream3_IRQHandler(void); void OTG_HS_IRQHandler(void); void UART7_IRQHandler(void); void USART10_IRQHandler(void); diff --git a/Core/Src/dma.c b/Core/Src/dma.c index b0e0806..753a344 100644 --- a/Core/Src/dma.c +++ b/Core/Src/dma.c @@ -71,6 +71,15 @@ void MX_DMA_Init(void) /* DMA2_Stream0_IRQn interrupt configuration */ HAL_NVIC_SetPriority(DMA2_Stream0_IRQn, 5, 0); HAL_NVIC_EnableIRQ(DMA2_Stream0_IRQn); + /* DMA2_Stream1_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA2_Stream1_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(DMA2_Stream1_IRQn); + /* DMA2_Stream2_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn); + /* DMA2_Stream3_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA2_Stream3_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(DMA2_Stream3_IRQn); } diff --git a/Core/Src/spi.c b/Core/Src/spi.c index 69a4a88..8a912fc 100644 --- a/Core/Src/spi.c +++ b/Core/Src/spi.c @@ -89,7 +89,7 @@ void MX_SPI2_Init(void) hspi2.Init.CLKPolarity = SPI_POLARITY_HIGH; hspi2.Init.CLKPhase = SPI_PHASE_2EDGE; hspi2.Init.NSS = SPI_NSS_SOFT; - hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; + hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB; hspi2.Init.TIMode = SPI_TIMODE_DISABLE; hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; @@ -210,7 +210,7 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle) hdma_spi2_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; hdma_spi2_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; hdma_spi2_rx.Init.Mode = DMA_NORMAL; - hdma_spi2_rx.Init.Priority = DMA_PRIORITY_LOW; + hdma_spi2_rx.Init.Priority = DMA_PRIORITY_VERY_HIGH; hdma_spi2_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; if (HAL_DMA_Init(&hdma_spi2_rx) != HAL_OK) { @@ -228,7 +228,7 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle) hdma_spi2_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; hdma_spi2_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; hdma_spi2_tx.Init.Mode = DMA_NORMAL; - hdma_spi2_tx.Init.Priority = DMA_PRIORITY_LOW; + hdma_spi2_tx.Init.Priority = DMA_PRIORITY_VERY_HIGH; hdma_spi2_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; if (HAL_DMA_Init(&hdma_spi2_tx) != HAL_OK) { diff --git a/Core/Src/stm32h7xx_it.c b/Core/Src/stm32h7xx_it.c index f5bc4bc..cfb34e0 100644 --- a/Core/Src/stm32h7xx_it.c +++ b/Core/Src/stm32h7xx_it.c @@ -65,11 +65,14 @@ extern DMA_HandleTypeDef hdma_spi2_rx; extern DMA_HandleTypeDef hdma_spi2_tx; extern SPI_HandleTypeDef hspi2; extern DMA_HandleTypeDef hdma_uart5_rx; +extern DMA_HandleTypeDef hdma_uart7_rx; +extern DMA_HandleTypeDef hdma_uart7_tx; extern DMA_HandleTypeDef hdma_usart2_rx; extern DMA_HandleTypeDef hdma_usart2_tx; extern DMA_HandleTypeDef hdma_usart3_rx; extern DMA_HandleTypeDef hdma_usart3_tx; extern DMA_HandleTypeDef hdma_usart10_tx; +extern DMA_HandleTypeDef hdma_usart10_rx; extern UART_HandleTypeDef huart5; extern UART_HandleTypeDef huart7; extern UART_HandleTypeDef huart1; @@ -358,7 +361,7 @@ void USART1_IRQHandler(void) /* USER CODE END USART1_IRQn 0 */ HAL_UART_IRQHandler(&huart1); /* USER CODE BEGIN USART1_IRQn 1 */ - + BSP_UART_IRQHandler(&huart1); /* USER CODE END USART1_IRQn 1 */ } @@ -430,7 +433,7 @@ void UART5_IRQHandler(void) /* USER CODE END UART5_IRQn 0 */ HAL_UART_IRQHandler(&huart5); /* USER CODE BEGIN UART5_IRQn 1 */ - + BSP_UART_IRQHandler(&huart5); /* USER CODE END UART5_IRQn 1 */ } @@ -448,6 +451,48 @@ void DMA2_Stream0_IRQHandler(void) /* USER CODE END DMA2_Stream0_IRQn 1 */ } +/** + * @brief This function handles DMA2 stream1 global interrupt. + */ +void DMA2_Stream1_IRQHandler(void) +{ + /* USER CODE BEGIN DMA2_Stream1_IRQn 0 */ + + /* USER CODE END DMA2_Stream1_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_uart7_rx); + /* USER CODE BEGIN DMA2_Stream1_IRQn 1 */ + + /* USER CODE END DMA2_Stream1_IRQn 1 */ +} + +/** + * @brief This function handles DMA2 stream2 global interrupt. + */ +void DMA2_Stream2_IRQHandler(void) +{ + /* USER CODE BEGIN DMA2_Stream2_IRQn 0 */ + + /* USER CODE END DMA2_Stream2_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_uart7_tx); + /* USER CODE BEGIN DMA2_Stream2_IRQn 1 */ + + /* USER CODE END DMA2_Stream2_IRQn 1 */ +} + +/** + * @brief This function handles DMA2 stream3 global interrupt. + */ +void DMA2_Stream3_IRQHandler(void) +{ + /* USER CODE BEGIN DMA2_Stream3_IRQn 0 */ + + /* USER CODE END DMA2_Stream3_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_usart10_rx); + /* USER CODE BEGIN DMA2_Stream3_IRQn 1 */ + + /* USER CODE END DMA2_Stream3_IRQn 1 */ +} + /** * @brief This function handles USB On The Go HS global interrupt. */ @@ -472,7 +517,7 @@ void UART7_IRQHandler(void) /* USER CODE END UART7_IRQn 0 */ HAL_UART_IRQHandler(&huart7); /* USER CODE BEGIN UART7_IRQn 1 */ - + BSP_UART_IRQHandler(&huart7); /* USER CODE END UART7_IRQn 1 */ } @@ -486,7 +531,7 @@ void USART10_IRQHandler(void) /* USER CODE END USART10_IRQn 0 */ HAL_UART_IRQHandler(&huart10); /* USER CODE BEGIN USART10_IRQn 1 */ - + BSP_UART_IRQHandler(&huart10); /* USER CODE END USART10_IRQn 1 */ } diff --git a/Core/Src/usart.c b/Core/Src/usart.c index e29e13f..2cb8fa4 100644 --- a/Core/Src/usart.c +++ b/Core/Src/usart.c @@ -31,11 +31,14 @@ UART_HandleTypeDef huart2; UART_HandleTypeDef huart3; UART_HandleTypeDef huart10; DMA_HandleTypeDef hdma_uart5_rx; +DMA_HandleTypeDef hdma_uart7_rx; +DMA_HandleTypeDef hdma_uart7_tx; DMA_HandleTypeDef hdma_usart2_rx; DMA_HandleTypeDef hdma_usart2_tx; DMA_HandleTypeDef hdma_usart3_rx; DMA_HandleTypeDef hdma_usart3_tx; DMA_HandleTypeDef hdma_usart10_tx; +DMA_HandleTypeDef hdma_usart10_rx; /* UART5 init function */ void MX_UART5_Init(void) @@ -268,7 +271,7 @@ void MX_USART10_UART_Init(void) /* USER CODE END USART10_Init 1 */ huart10.Instance = USART10; - huart10.Init.BaudRate = 115200; + huart10.Init.BaudRate = 921600; huart10.Init.WordLength = UART_WORDLENGTH_8B; huart10.Init.StopBits = UART_STOPBITS_1; huart10.Init.Parity = UART_PARITY_NONE; @@ -399,6 +402,43 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) GPIO_InitStruct.Alternate = GPIO_AF7_UART7; HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); + /* UART7 DMA Init */ + /* UART7_RX Init */ + hdma_uart7_rx.Instance = DMA2_Stream1; + hdma_uart7_rx.Init.Request = DMA_REQUEST_UART7_RX; + hdma_uart7_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; + hdma_uart7_rx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_uart7_rx.Init.MemInc = DMA_MINC_ENABLE; + hdma_uart7_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma_uart7_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma_uart7_rx.Init.Mode = DMA_NORMAL; + hdma_uart7_rx.Init.Priority = DMA_PRIORITY_MEDIUM; + hdma_uart7_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma_uart7_rx) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(uartHandle,hdmarx,hdma_uart7_rx); + + /* UART7_TX Init */ + hdma_uart7_tx.Instance = DMA2_Stream2; + hdma_uart7_tx.Init.Request = DMA_REQUEST_UART7_TX; + hdma_uart7_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; + hdma_uart7_tx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_uart7_tx.Init.MemInc = DMA_MINC_ENABLE; + hdma_uart7_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma_uart7_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma_uart7_tx.Init.Mode = DMA_NORMAL; + hdma_uart7_tx.Init.Priority = DMA_PRIORITY_MEDIUM; + hdma_uart7_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma_uart7_tx) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(uartHandle,hdmatx,hdma_uart7_tx); + /* UART7 interrupt Init */ HAL_NVIC_SetPriority(UART7_IRQn, 5, 0); HAL_NVIC_EnableIRQ(UART7_IRQn); @@ -648,7 +688,7 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) hdma_usart10_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; hdma_usart10_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; hdma_usart10_tx.Init.Mode = DMA_NORMAL; - hdma_usart10_tx.Init.Priority = DMA_PRIORITY_LOW; + hdma_usart10_tx.Init.Priority = DMA_PRIORITY_VERY_HIGH; hdma_usart10_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; if (HAL_DMA_Init(&hdma_usart10_tx) != HAL_OK) { @@ -657,6 +697,24 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart10_tx); + /* USART10_RX Init */ + hdma_usart10_rx.Instance = DMA2_Stream3; + hdma_usart10_rx.Init.Request = DMA_REQUEST_USART10_RX; + hdma_usart10_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; + hdma_usart10_rx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_usart10_rx.Init.MemInc = DMA_MINC_ENABLE; + hdma_usart10_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma_usart10_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma_usart10_rx.Init.Mode = DMA_NORMAL; + hdma_usart10_rx.Init.Priority = DMA_PRIORITY_VERY_HIGH; + hdma_usart10_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma_usart10_rx) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(uartHandle,hdmarx,hdma_usart10_rx); + /* USART10 interrupt Init */ HAL_NVIC_SetPriority(USART10_IRQn, 5, 0); HAL_NVIC_EnableIRQ(USART10_IRQn); @@ -708,6 +766,10 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle) */ HAL_GPIO_DeInit(GPIOE, GPIO_PIN_7|GPIO_PIN_8); + /* UART7 DMA DeInit */ + HAL_DMA_DeInit(uartHandle->hdmarx); + HAL_DMA_DeInit(uartHandle->hdmatx); + /* UART7 interrupt Deinit */ HAL_NVIC_DisableIRQ(UART7_IRQn); /* USER CODE BEGIN UART7_MspDeInit 1 */ @@ -802,6 +864,7 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle) /* USART10 DMA DeInit */ HAL_DMA_DeInit(uartHandle->hdmatx); + HAL_DMA_DeInit(uartHandle->hdmarx); /* USART10 interrupt Deinit */ HAL_NVIC_DisableIRQ(USART10_IRQn); diff --git a/CtrBoard-H7_ALL.ioc b/CtrBoard-H7_ALL.ioc index aeb0481..c5af9d2 100644 --- a/CtrBoard-H7_ALL.ioc +++ b/CtrBoard-H7_ALL.ioc @@ -44,6 +44,8 @@ Dma.ADC1.0.SyncRequestNumber=1 Dma.ADC1.0.SyncSignalID=NONE Dma.Request0=ADC1 Dma.Request1=UART5_RX +Dma.Request10=UART7_TX +Dma.Request11=USART10_RX Dma.Request2=SPI2_RX Dma.Request3=SPI2_TX Dma.Request4=USART3_RX @@ -51,7 +53,8 @@ Dma.Request5=USART3_TX Dma.Request6=USART2_RX Dma.Request7=USART2_TX Dma.Request8=USART10_TX -Dma.RequestsNb=9 +Dma.Request9=UART7_RX +Dma.RequestsNb=12 Dma.SPI2_RX.2.Direction=DMA_PERIPH_TO_MEMORY Dma.SPI2_RX.2.EventEnable=DISABLE Dma.SPI2_RX.2.FIFOMode=DMA_FIFOMODE_DISABLE @@ -62,7 +65,7 @@ Dma.SPI2_RX.2.Mode=DMA_NORMAL Dma.SPI2_RX.2.PeriphDataAlignment=DMA_PDATAALIGN_BYTE Dma.SPI2_RX.2.PeriphInc=DMA_PINC_DISABLE Dma.SPI2_RX.2.Polarity=HAL_DMAMUX_REQ_GEN_RISING -Dma.SPI2_RX.2.Priority=DMA_PRIORITY_LOW +Dma.SPI2_RX.2.Priority=DMA_PRIORITY_VERY_HIGH Dma.SPI2_RX.2.RequestNumber=1 Dma.SPI2_RX.2.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber Dma.SPI2_RX.2.SignalID=NONE @@ -80,7 +83,7 @@ Dma.SPI2_TX.3.Mode=DMA_NORMAL Dma.SPI2_TX.3.PeriphDataAlignment=DMA_PDATAALIGN_BYTE Dma.SPI2_TX.3.PeriphInc=DMA_PINC_DISABLE Dma.SPI2_TX.3.Polarity=HAL_DMAMUX_REQ_GEN_RISING -Dma.SPI2_TX.3.Priority=DMA_PRIORITY_LOW +Dma.SPI2_TX.3.Priority=DMA_PRIORITY_VERY_HIGH Dma.SPI2_TX.3.RequestNumber=1 Dma.SPI2_TX.3.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber Dma.SPI2_TX.3.SignalID=NONE @@ -106,6 +109,60 @@ Dma.UART5_RX.1.SyncEnable=DISABLE Dma.UART5_RX.1.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT Dma.UART5_RX.1.SyncRequestNumber=1 Dma.UART5_RX.1.SyncSignalID=NONE +Dma.UART7_RX.9.Direction=DMA_PERIPH_TO_MEMORY +Dma.UART7_RX.9.EventEnable=DISABLE +Dma.UART7_RX.9.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.UART7_RX.9.Instance=DMA2_Stream1 +Dma.UART7_RX.9.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.UART7_RX.9.MemInc=DMA_MINC_ENABLE +Dma.UART7_RX.9.Mode=DMA_NORMAL +Dma.UART7_RX.9.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.UART7_RX.9.PeriphInc=DMA_PINC_DISABLE +Dma.UART7_RX.9.Polarity=HAL_DMAMUX_REQ_GEN_RISING +Dma.UART7_RX.9.Priority=DMA_PRIORITY_MEDIUM +Dma.UART7_RX.9.RequestNumber=1 +Dma.UART7_RX.9.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber +Dma.UART7_RX.9.SignalID=NONE +Dma.UART7_RX.9.SyncEnable=DISABLE +Dma.UART7_RX.9.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT +Dma.UART7_RX.9.SyncRequestNumber=1 +Dma.UART7_RX.9.SyncSignalID=NONE +Dma.UART7_TX.10.Direction=DMA_MEMORY_TO_PERIPH +Dma.UART7_TX.10.EventEnable=DISABLE +Dma.UART7_TX.10.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.UART7_TX.10.Instance=DMA2_Stream2 +Dma.UART7_TX.10.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.UART7_TX.10.MemInc=DMA_MINC_ENABLE +Dma.UART7_TX.10.Mode=DMA_NORMAL +Dma.UART7_TX.10.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.UART7_TX.10.PeriphInc=DMA_PINC_DISABLE +Dma.UART7_TX.10.Polarity=HAL_DMAMUX_REQ_GEN_RISING +Dma.UART7_TX.10.Priority=DMA_PRIORITY_MEDIUM +Dma.UART7_TX.10.RequestNumber=1 +Dma.UART7_TX.10.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber +Dma.UART7_TX.10.SignalID=NONE +Dma.UART7_TX.10.SyncEnable=DISABLE +Dma.UART7_TX.10.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT +Dma.UART7_TX.10.SyncRequestNumber=1 +Dma.UART7_TX.10.SyncSignalID=NONE +Dma.USART10_RX.11.Direction=DMA_PERIPH_TO_MEMORY +Dma.USART10_RX.11.EventEnable=DISABLE +Dma.USART10_RX.11.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.USART10_RX.11.Instance=DMA2_Stream3 +Dma.USART10_RX.11.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.USART10_RX.11.MemInc=DMA_MINC_ENABLE +Dma.USART10_RX.11.Mode=DMA_NORMAL +Dma.USART10_RX.11.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.USART10_RX.11.PeriphInc=DMA_PINC_DISABLE +Dma.USART10_RX.11.Polarity=HAL_DMAMUX_REQ_GEN_RISING +Dma.USART10_RX.11.Priority=DMA_PRIORITY_VERY_HIGH +Dma.USART10_RX.11.RequestNumber=1 +Dma.USART10_RX.11.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber +Dma.USART10_RX.11.SignalID=NONE +Dma.USART10_RX.11.SyncEnable=DISABLE +Dma.USART10_RX.11.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT +Dma.USART10_RX.11.SyncRequestNumber=1 +Dma.USART10_RX.11.SyncSignalID=NONE Dma.USART10_TX.8.Direction=DMA_MEMORY_TO_PERIPH Dma.USART10_TX.8.EventEnable=DISABLE Dma.USART10_TX.8.FIFOMode=DMA_FIFOMODE_DISABLE @@ -116,7 +173,7 @@ Dma.USART10_TX.8.Mode=DMA_NORMAL Dma.USART10_TX.8.PeriphDataAlignment=DMA_PDATAALIGN_BYTE Dma.USART10_TX.8.PeriphInc=DMA_PINC_DISABLE Dma.USART10_TX.8.Polarity=HAL_DMAMUX_REQ_GEN_RISING -Dma.USART10_TX.8.Priority=DMA_PRIORITY_LOW +Dma.USART10_TX.8.Priority=DMA_PRIORITY_VERY_HIGH Dma.USART10_TX.8.RequestNumber=1 Dma.USART10_TX.8.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber Dma.USART10_TX.8.SignalID=NONE @@ -395,6 +452,9 @@ NVIC.DMA1_Stream5_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true NVIC.DMA1_Stream6_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true NVIC.DMA1_Stream7_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true NVIC.DMA2_Stream0_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.DMA2_Stream1_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.DMA2_Stream2_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.DMA2_Stream3_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false NVIC.EXTI15_10_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true NVIC.FDCAN1_IT0_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true @@ -777,10 +837,10 @@ SPI1.Direction=SPI_DIRECTION_2LINES_TXONLY SPI1.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,DataSize,BaudRatePrescaler,CLKPolarity SPI1.Mode=SPI_MODE_MASTER SPI1.VirtualType=VM_MASTER -SPI2.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_32 +SPI2.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_8 SPI2.CLKPhase=SPI_PHASE_2EDGE SPI2.CLKPolarity=SPI_POLARITY_HIGH -SPI2.CalculateBaudRate=3.75 MBits/s +SPI2.CalculateBaudRate=15.0 MBits/s SPI2.DataSize=SPI_DATASIZE_8BIT SPI2.Direction=SPI_DIRECTION_2LINES SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,DataSize,BaudRatePrescaler,CLKPolarity,CLKPhase @@ -820,7 +880,7 @@ UART7.IPParameters=BaudRate USART1.BaudRate=921600 USART1.IPParameters=VirtualMode-Asynchronous,BaudRate USART1.VirtualMode-Asynchronous=VM_ASYNC -USART10.BaudRate=115200 +USART10.BaudRate=921600 USART10.IPParameters=VirtualMode,BaudRate USART10.VirtualMode=VM_ASYNC USART2.BaudRate=4000000 diff --git a/MDK-ARM/CtrBoard-H7_ALL.uvoptx b/MDK-ARM/CtrBoard-H7_ALL.uvoptx index 917779f..6dee191 100644 --- a/MDK-ARM/CtrBoard-H7_ALL.uvoptx +++ b/MDK-ARM/CtrBoard-H7_ALL.uvoptx @@ -1,1533 +1,1576 @@ - - - - 1.0 - -
### uVision Project, (C) Keil Software
- - - *.c - *.s*; *.src; *.a* - *.obj; *.o - *.lib - *.txt; *.h; *.inc; *.md - *.plm - *.cpp - 0 - - - - 0 - 0 - - - - CtrBoard-H7_ALL - 0x4 - ARM-ADS - - 24000000 - - 1 - 1 - 0 - 1 - 0 - - - 1 - 65535 - 0 - 0 - 0 - - - 79 - 66 - 8 - - - - 1 - 1 - 1 - 0 - 1 - 1 - 0 - 1 - 0 - 0 - 0 - 0 - - - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 0 - 0 - - - 1 - 0 - 1 - - 18 - - 0 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 0 - 3 - - - - - - - - - - - BIN\CMSIS_AGDI.dll - - - - 0 - ARMRTXEVENTFLAGS - -L70 -Z18 -C0 -M0 -T1 - - - 0 - DLGTARM - (1010=-1,-1,-1,-1,0)(6017=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(6016=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) - - - 0 - ARMDBGFLAGS - - - - 0 - CMSIS_AGDI - -X"" -O206 -S8 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(6BA02477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC8000 -FN1 -FF0STM32H72x-73x_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32H723VGTx$CMSIS\Flash\STM32H72x-73x_1024.FLM) - - - 0 - DLGUARM - - - - 0 - UL2CM3 - UL2CM3(-S0 -C0 -P0 -FD20000000 -FC8000 -FN1 -FF0STM32H72x-73x_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32H723VGTx$CMSIS\Flash\STM32H72x-73x_1024.FLM)) - - - 0 - ST-LINKIII-KEIL_SWO - -U-O142 -O2254 -S0 -C0 -N00("ARM CoreSight SW-DP") -D00(5BA02477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32H72x-73x_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32H723VGTx$CMSIS\Flash\STM32H72x-73x_1024.FLM) - - - - - - 0 - 1 - dr16 - - - 1 - 1 - bmi088 - - - 2 - 1 - eulr_to_send - - - 3 - 1 - cmd_rc - - - 4 - 1 - go - - - 5 - 1 - task_runtime.freq.ctrl_leg - - - 6 - 1 - go_feedback - - - 7 - 1 - cmd.chassis - - - 8 - 1 - chassis - - - 9 - 1 - go_feedback - - - - 0 - - - 0 - 1 - 1 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - - - - 0 - 0 - 0 - - - - - - - - - - 1 - 1 - 0 - 2 - 10000000 - - - - - - Application/MDK-ARM - 0 - 0 - 0 - 0 - - 1 - 1 - 2 - 0 - 0 - 0 - startup_stm32h723xx.s - startup_stm32h723xx.s - 0 - 0 - - - - - Application/User/Core - 1 - 0 - 0 - 0 - - 2 - 2 - 1 - 0 - 0 - 0 - ../Core/Src/main.c - main.c - 0 - 0 - - - 2 - 3 - 1 - 0 - 0 - 0 - ../Core/Src/gpio.c - gpio.c - 0 - 0 - - - 2 - 4 - 1 - 0 - 0 - 0 - ../Core/Src/freertos.c - freertos.c - 0 - 0 - - - 2 - 5 - 1 - 0 - 0 - 0 - ../Core/Src/adc.c - adc.c - 0 - 0 - - - 2 - 6 - 1 - 0 - 0 - 0 - ../Core/Src/dma.c - dma.c - 0 - 0 - - - 2 - 7 - 1 - 0 - 0 - 0 - ../Core/Src/fdcan.c - fdcan.c - 0 - 0 - - - 2 - 8 - 1 - 0 - 0 - 0 - ../Core/Src/memorymap.c - memorymap.c - 0 - 0 - - - 2 - 9 - 1 - 0 - 0 - 0 - ../Core/Src/octospi.c - octospi.c - 0 - 0 - - - 2 - 10 - 1 - 0 - 0 - 0 - ../Core/Src/spi.c - spi.c - 0 - 0 - - - 2 - 11 - 1 - 0 - 0 - 0 - ../Core/Src/tim.c - tim.c - 0 - 0 - - - 2 - 12 - 1 - 0 - 0 - 0 - ../Core/Src/usart.c - usart.c - 0 - 0 - - - 2 - 13 - 1 - 0 - 0 - 0 - ../Core/Src/stm32h7xx_it.c - stm32h7xx_it.c - 0 - 0 - - - 2 - 14 - 1 - 0 - 0 - 0 - ../Core/Src/stm32h7xx_hal_msp.c - stm32h7xx_hal_msp.c - 0 - 0 - - - 2 - 15 - 1 - 0 - 0 - 0 - ../Core/Src/stm32h7xx_hal_timebase_tim.c - stm32h7xx_hal_timebase_tim.c - 0 - 0 - - - - - Application/User/USB_DEVICE/App - 0 - 0 - 0 - 0 - - 3 - 16 - 1 - 0 - 0 - 0 - ../USB_DEVICE/App/usb_device.c - usb_device.c - 0 - 0 - - - 3 - 17 - 1 - 0 - 0 - 0 - ../USB_DEVICE/App/usbd_desc.c - usbd_desc.c - 0 - 0 - - - 3 - 18 - 1 - 0 - 0 - 0 - ../USB_DEVICE/App/usbd_cdc_if.c - usbd_cdc_if.c - 0 - 0 - - - - - Application/User/USB_DEVICE/Target - 0 - 0 - 0 - 0 - - 4 - 19 - 1 - 0 - 0 - 0 - ../USB_DEVICE/Target/usbd_conf.c - usbd_conf.c - 0 - 0 - - - - - Drivers/STM32H7xx_HAL_Driver - 0 - 0 - 0 - 0 - - 5 - 20 - 1 - 0 - 0 - 0 - ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_tim.c - stm32h7xx_hal_tim.c - 0 - 0 - - - 5 - 21 - 1 - 0 - 0 - 0 - ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_tim_ex.c - stm32h7xx_hal_tim_ex.c - 0 - 0 - - - 5 - 22 - 1 - 0 - 0 - 0 - ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pcd.c - stm32h7xx_hal_pcd.c - 0 - 0 - - - 5 - 23 - 1 - 0 - 0 - 0 - ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pcd_ex.c - stm32h7xx_hal_pcd_ex.c - 0 - 0 - - - 5 - 24 - 1 - 0 - 0 - 0 - ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_usb.c - stm32h7xx_ll_usb.c - 0 - 0 - - - 5 - 25 - 1 - 0 - 0 - 0 - ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc.c - stm32h7xx_hal_rcc.c - 0 - 0 - - - 5 - 26 - 1 - 0 - 0 - 0 - ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc_ex.c - stm32h7xx_hal_rcc_ex.c - 0 - 0 - - - 5 - 27 - 1 - 0 - 0 - 0 - ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_flash.c - stm32h7xx_hal_flash.c - 0 - 0 - - - 5 - 28 - 1 - 0 - 0 - 0 - ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_flash_ex.c - stm32h7xx_hal_flash_ex.c - 0 - 0 - - - 5 - 29 - 1 - 0 - 0 - 0 - ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_gpio.c - stm32h7xx_hal_gpio.c - 0 - 0 - - - 5 - 30 - 1 - 0 - 0 - 0 - ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_hsem.c - stm32h7xx_hal_hsem.c - 0 - 0 - - - 5 - 31 - 1 - 0 - 0 - 0 - ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma.c - stm32h7xx_hal_dma.c - 0 - 0 - - - 5 - 32 - 1 - 0 - 0 - 0 - ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma_ex.c - stm32h7xx_hal_dma_ex.c - 0 - 0 - - - 5 - 33 - 1 - 0 - 0 - 0 - ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_mdma.c - stm32h7xx_hal_mdma.c - 0 - 0 - - - 5 - 34 - 1 - 0 - 0 - 0 - ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pwr.c - stm32h7xx_hal_pwr.c - 0 - 0 - - - 5 - 35 - 1 - 0 - 0 - 0 - ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pwr_ex.c - stm32h7xx_hal_pwr_ex.c - 0 - 0 - - - 5 - 36 - 1 - 0 - 0 - 0 - ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_cortex.c - stm32h7xx_hal_cortex.c - 0 - 0 - - - 5 - 37 - 1 - 0 - 0 - 0 - ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal.c - stm32h7xx_hal.c - 0 - 0 - - - 5 - 38 - 1 - 0 - 0 - 0 - ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_i2c.c - stm32h7xx_hal_i2c.c - 0 - 0 - - - 5 - 39 - 1 - 0 - 0 - 0 - ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_i2c_ex.c - stm32h7xx_hal_i2c_ex.c - 0 - 0 - - - 5 - 40 - 1 - 0 - 0 - 0 - ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_exti.c - stm32h7xx_hal_exti.c - 0 - 0 - - - 5 - 41 - 1 - 0 - 0 - 0 - ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_adc.c - stm32h7xx_hal_adc.c - 0 - 0 - - - 5 - 42 - 1 - 0 - 0 - 0 - ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_adc_ex.c - stm32h7xx_hal_adc_ex.c - 0 - 0 - - - 5 - 43 - 1 - 0 - 0 - 0 - ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_fdcan.c - stm32h7xx_hal_fdcan.c - 0 - 0 - - - 5 - 44 - 1 - 0 - 0 - 0 - ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_ospi.c - stm32h7xx_hal_ospi.c - 0 - 0 - - - 5 - 45 - 1 - 0 - 0 - 0 - ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_spi.c - stm32h7xx_hal_spi.c - 0 - 0 - - - 5 - 46 - 1 - 0 - 0 - 0 - ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_spi_ex.c - stm32h7xx_hal_spi_ex.c - 0 - 0 - - - 5 - 47 - 1 - 0 - 0 - 0 - ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_uart.c - stm32h7xx_hal_uart.c - 0 - 0 - - - 5 - 48 - 1 - 0 - 0 - 0 - ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_uart_ex.c - stm32h7xx_hal_uart_ex.c - 0 - 0 - - - - - Drivers/CMSIS - 0 - 0 - 0 - 0 - - 6 - 49 - 1 - 0 - 0 - 0 - ../Core/Src/system_stm32h7xx.c - system_stm32h7xx.c - 0 - 0 - - - - - Middlewares/USB_Device_Library - 0 - 0 - 0 - 0 - - 7 - 50 - 1 - 0 - 0 - 0 - ../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c - usbd_core.c - 0 - 0 - - - 7 - 51 - 1 - 0 - 0 - 0 - ../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c - usbd_ctlreq.c - 0 - 0 - - - 7 - 52 - 1 - 0 - 0 - 0 - ../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c - usbd_ioreq.c - 0 - 0 - - - 7 - 53 - 1 - 0 - 0 - 0 - ../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.c - usbd_cdc.c - 0 - 0 - - - - - Middlewares/FreeRTOS - 0 - 0 - 0 - 0 - - 8 - 54 - 1 - 0 - 0 - 0 - ../Middlewares/Third_Party/FreeRTOS/Source/croutine.c - croutine.c - 0 - 0 - - - 8 - 55 - 1 - 0 - 0 - 0 - ../Middlewares/Third_Party/FreeRTOS/Source/event_groups.c - event_groups.c - 0 - 0 - - - 8 - 56 - 1 - 0 - 0 - 0 - ../Middlewares/Third_Party/FreeRTOS/Source/list.c - list.c - 0 - 0 - - - 8 - 57 - 1 - 0 - 0 - 0 - ../Middlewares/Third_Party/FreeRTOS/Source/queue.c - queue.c - 0 - 0 - - - 8 - 58 - 1 - 0 - 0 - 0 - ../Middlewares/Third_Party/FreeRTOS/Source/stream_buffer.c - stream_buffer.c - 0 - 0 - - - 8 - 59 - 1 - 0 - 0 - 0 - ../Middlewares/Third_Party/FreeRTOS/Source/tasks.c - tasks.c - 0 - 0 - - - 8 - 60 - 1 - 0 - 0 - 0 - ../Middlewares/Third_Party/FreeRTOS/Source/timers.c - timers.c - 0 - 0 - - - 8 - 61 - 1 - 0 - 0 - 0 - ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.c - cmsis_os2.c - 0 - 0 - - - 8 - 62 - 1 - 0 - 0 - 0 - ../Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c - heap_4.c - 0 - 0 - - - 8 - 63 - 1 - 0 - 0 - 0 - ../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM4F/port.c - port.c - 0 - 0 - - - - - User/bsp - 0 - 0 - 0 - 0 - - 9 - 64 - 1 - 0 - 0 - 0 - ..\User\bsp\uart.c - uart.c - 0 - 0 - - - 9 - 65 - 1 - 0 - 0 - 0 - ..\User\bsp\delay.c - delay.c - 0 - 0 - - - 9 - 66 - 1 - 0 - 0 - 0 - ..\User\bsp\gpio.c - gpio.c - 0 - 0 - - - 9 - 67 - 1 - 0 - 0 - 0 - ..\User\bsp\spi.c - spi.c - 0 - 0 - - - 9 - 68 - 1 - 0 - 0 - 0 - ..\User\bsp\pwm.c - pwm.c - 0 - 0 - - - 9 - 69 - 1 - 0 - 0 - 0 - ..\User\bsp\flash.c - flash.c - 0 - 0 - - - 9 - 70 - 1 - 0 - 0 - 0 - ..\User\bsp\usb.c - usb.c - 0 - 0 - - - 9 - 71 - 1 - 0 - 0 - 0 - ..\User\bsp\buzzer.c - buzzer.c - 0 - 0 - - - - - User/component - 1 - 0 - 0 - 0 - - 10 - 72 - 1 - 0 - 0 - 0 - ..\User\component\ahrs.c - ahrs.c - 0 - 0 - - - 10 - 73 - 1 - 0 - 0 - 0 - ..\User\component\user_math.c - user_math.c - 0 - 0 - - - 10 - 74 - 1 - 0 - 0 - 0 - ..\User\component\filter.c - filter.c - 0 - 0 - - - 10 - 75 - 1 - 0 - 0 - 0 - ..\User\component\pid.c - pid.c - 0 - 0 - - - 10 - 76 - 1 - 0 - 0 - 0 - ..\User\component\cmd.c - cmd.c - 0 - 0 - - - 10 - 77 - 1 - 0 - 0 - 0 - ..\User\component\FreeRTOS_CLI.c - FreeRTOS_CLI.c - 0 - 0 - - - 10 - 78 - 1 - 0 - 0 - 0 - ..\User\component\kinematics.c - kinematics.c - 0 - 0 - - - - - Usr/device - 1 - 0 - 0 - 0 - - 11 - 79 - 1 - 0 - 0 - 0 - ..\User\device\dr16.c - dr16.c - 0 - 0 - - - 11 - 80 - 1 - 0 - 0 - 0 - ..\User\device\bmi088.c - bmi088.c - 0 - 0 - - - 11 - 81 - 1 - 0 - 0 - 0 - ..\User\device\go.c - go.c - 0 - 0 - - - - - User/module - 1 - 0 - 0 - 0 - - 12 - 82 - 1 - 0 - 0 - 0 - ..\User\module\chassis.c - chassis.c - 0 - 0 - - - 12 - 83 - 1 - 0 - 0 - 0 - ..\User\module\config.c - config.c - 0 - 0 - - - - - User/task - 1 - 0 - 0 - 0 - - 13 - 84 - 1 - 0 - 0 - 0 - ..\User\task\init.c - init.c - 0 - 0 - - - 13 - 85 - 1 - 0 - 0 - 0 - ..\User\task\rc.c - rc.c - 0 - 0 - - - 13 - 86 - 1 - 0 - 0 - 0 - ..\User\task\user_task.c - user_task.c - 0 - 0 - - - 13 - 87 - 5 - 0 - 0 - 0 - ..\User\task\user_task.h - user_task.h - 0 - 0 - - - 13 - 88 - 1 - 0 - 0 - 0 - ..\User\task\atti_esti.c - atti_esti.c - 0 - 0 - - - 13 - 89 - 1 - 0 - 0 - 0 - ..\User\task\test.c - test.c - 0 - 0 - - - 13 - 90 - 1 - 0 - 0 - 0 - ..\User\task\cli.c - cli.c - 0 - 0 - - - 13 - 91 - 1 - 0 - 0 - 0 - ..\User\task\monitor.c - monitor.c - 0 - 0 - - - 13 - 92 - 1 - 0 - 0 - 0 - ..\User\task\cmd.c - cmd.c - 0 - 0 - - - 13 - 93 - 1 - 0 - 0 - 0 - ..\User\task\ctrl_leg.c - ctrl_leg.c - 0 - 0 - - - 13 - 94 - 1 - 0 - 0 - 0 - ..\User\task\ctrl_chassis.c - ctrl_chassis.c - 0 - 0 - - - - - Unitree - 0 - 0 - 0 - 0 - - 14 - 95 - 1 - 0 - 0 - 0 - ..\Middlewares\Third_Party\Unitree\crc_ccitt.c - crc_ccitt.c - 0 - 0 - - - 14 - 96 - 1 - 0 - 0 - 0 - ..\Middlewares\Third_Party\Unitree\gom_protocol.c - gom_protocol.c - 0 - 0 - - - - - ::CMSIS - 0 - 0 - 0 - 1 - - -
+ + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc; *.md + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + CtrBoard-H7_ALL + 0x4 + ARM-ADS + + 24000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 3 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(6017=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(6016=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + CMSIS_AGDI + -X"Any" -UAny -O206 -S8 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(6BA02477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC8000 -FN1 -FF0STM32H72x-73x_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32H723VGTx$CMSIS\Flash\STM32H72x-73x_1024.FLM) + + + 0 + DLGUARM + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC8000 -FN1 -FF0STM32H72x-73x_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32H723VGTx$CMSIS\Flash\STM32H72x-73x_1024.FLM)) + + + 0 + ST-LINKIII-KEIL_SWO + -U-O142 -O2254 -S0 -C0 -N00("ARM CoreSight SW-DP") -D00(5BA02477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32H72x-73x_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32H723VGTx$CMSIS\Flash\STM32H72x-73x_1024.FLM) + + + + + + 0 + 1 + dr16 + + + 1 + 1 + chassis + + + 2 + 1 + n100 + + + 3 + 1 + go_feedback + + + 4 + 1 + param_default + + + 5 + 1 + angle_pose + + + 6 + 1 + chassis_cmd + + + 7 + 1 + target_pose + + + 8 + 1 + c->param->mech_param.sign.leg[i] + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 1 + 0 + 2 + 10000000 + + + + + + Application/MDK-ARM + 0 + 0 + 0 + 0 + + 1 + 1 + 2 + 0 + 0 + 0 + startup_stm32h723xx.s + startup_stm32h723xx.s + 0 + 0 + + + + + Application/User/Core + 1 + 0 + 0 + 0 + + 2 + 2 + 1 + 0 + 0 + 0 + ../Core/Src/main.c + main.c + 0 + 0 + + + 2 + 3 + 1 + 0 + 0 + 0 + ../Core/Src/gpio.c + gpio.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ../Core/Src/freertos.c + freertos.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ../Core/Src/adc.c + adc.c + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ../Core/Src/dma.c + dma.c + 0 + 0 + + + 2 + 7 + 1 + 0 + 0 + 0 + ../Core/Src/fdcan.c + fdcan.c + 0 + 0 + + + 2 + 8 + 1 + 0 + 0 + 0 + ../Core/Src/memorymap.c + memorymap.c + 0 + 0 + + + 2 + 9 + 1 + 0 + 0 + 0 + ../Core/Src/octospi.c + octospi.c + 0 + 0 + + + 2 + 10 + 1 + 0 + 0 + 0 + ../Core/Src/spi.c + spi.c + 0 + 0 + + + 2 + 11 + 1 + 0 + 0 + 0 + ../Core/Src/tim.c + tim.c + 0 + 0 + + + 2 + 12 + 1 + 0 + 0 + 0 + ../Core/Src/usart.c + usart.c + 0 + 0 + + + 2 + 13 + 1 + 0 + 0 + 0 + ../Core/Src/stm32h7xx_it.c + stm32h7xx_it.c + 0 + 0 + + + 2 + 14 + 1 + 0 + 0 + 0 + ../Core/Src/stm32h7xx_hal_msp.c + stm32h7xx_hal_msp.c + 0 + 0 + + + 2 + 15 + 1 + 0 + 0 + 0 + ../Core/Src/stm32h7xx_hal_timebase_tim.c + stm32h7xx_hal_timebase_tim.c + 0 + 0 + + + + + Application/User/USB_DEVICE/App + 0 + 0 + 0 + 0 + + 3 + 16 + 1 + 0 + 0 + 0 + ../USB_DEVICE/App/usb_device.c + usb_device.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ../USB_DEVICE/App/usbd_desc.c + usbd_desc.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ../USB_DEVICE/App/usbd_cdc_if.c + usbd_cdc_if.c + 0 + 0 + + + + + Application/User/USB_DEVICE/Target + 0 + 0 + 0 + 0 + + 4 + 19 + 1 + 0 + 0 + 0 + ../USB_DEVICE/Target/usbd_conf.c + usbd_conf.c + 0 + 0 + + + + + Drivers/STM32H7xx_HAL_Driver + 0 + 0 + 0 + 0 + + 5 + 20 + 1 + 0 + 0 + 0 + ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_tim.c + stm32h7xx_hal_tim.c + 0 + 0 + + + 5 + 21 + 1 + 0 + 0 + 0 + ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_tim_ex.c + stm32h7xx_hal_tim_ex.c + 0 + 0 + + + 5 + 22 + 1 + 0 + 0 + 0 + ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pcd.c + stm32h7xx_hal_pcd.c + 0 + 0 + + + 5 + 23 + 1 + 0 + 0 + 0 + ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pcd_ex.c + stm32h7xx_hal_pcd_ex.c + 0 + 0 + + + 5 + 24 + 1 + 0 + 0 + 0 + ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_usb.c + stm32h7xx_ll_usb.c + 0 + 0 + + + 5 + 25 + 1 + 0 + 0 + 0 + ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc.c + stm32h7xx_hal_rcc.c + 0 + 0 + + + 5 + 26 + 1 + 0 + 0 + 0 + ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc_ex.c + stm32h7xx_hal_rcc_ex.c + 0 + 0 + + + 5 + 27 + 1 + 0 + 0 + 0 + ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_flash.c + stm32h7xx_hal_flash.c + 0 + 0 + + + 5 + 28 + 1 + 0 + 0 + 0 + ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_flash_ex.c + stm32h7xx_hal_flash_ex.c + 0 + 0 + + + 5 + 29 + 1 + 0 + 0 + 0 + ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_gpio.c + stm32h7xx_hal_gpio.c + 0 + 0 + + + 5 + 30 + 1 + 0 + 0 + 0 + ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_hsem.c + stm32h7xx_hal_hsem.c + 0 + 0 + + + 5 + 31 + 1 + 0 + 0 + 0 + ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma.c + stm32h7xx_hal_dma.c + 0 + 0 + + + 5 + 32 + 1 + 0 + 0 + 0 + ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma_ex.c + stm32h7xx_hal_dma_ex.c + 0 + 0 + + + 5 + 33 + 1 + 0 + 0 + 0 + ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_mdma.c + stm32h7xx_hal_mdma.c + 0 + 0 + + + 5 + 34 + 1 + 0 + 0 + 0 + ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pwr.c + stm32h7xx_hal_pwr.c + 0 + 0 + + + 5 + 35 + 1 + 0 + 0 + 0 + ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pwr_ex.c + stm32h7xx_hal_pwr_ex.c + 0 + 0 + + + 5 + 36 + 1 + 0 + 0 + 0 + ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_cortex.c + stm32h7xx_hal_cortex.c + 0 + 0 + + + 5 + 37 + 1 + 0 + 0 + 0 + ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal.c + stm32h7xx_hal.c + 0 + 0 + + + 5 + 38 + 1 + 0 + 0 + 0 + ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_i2c.c + stm32h7xx_hal_i2c.c + 0 + 0 + + + 5 + 39 + 1 + 0 + 0 + 0 + ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_i2c_ex.c + stm32h7xx_hal_i2c_ex.c + 0 + 0 + + + 5 + 40 + 1 + 0 + 0 + 0 + ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_exti.c + stm32h7xx_hal_exti.c + 0 + 0 + + + 5 + 41 + 1 + 0 + 0 + 0 + ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_adc.c + stm32h7xx_hal_adc.c + 0 + 0 + + + 5 + 42 + 1 + 0 + 0 + 0 + ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_adc_ex.c + stm32h7xx_hal_adc_ex.c + 0 + 0 + + + 5 + 43 + 1 + 0 + 0 + 0 + ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_fdcan.c + stm32h7xx_hal_fdcan.c + 0 + 0 + + + 5 + 44 + 1 + 0 + 0 + 0 + ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_ospi.c + stm32h7xx_hal_ospi.c + 0 + 0 + + + 5 + 45 + 1 + 0 + 0 + 0 + ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_spi.c + stm32h7xx_hal_spi.c + 0 + 0 + + + 5 + 46 + 1 + 0 + 0 + 0 + ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_spi_ex.c + stm32h7xx_hal_spi_ex.c + 0 + 0 + + + 5 + 47 + 1 + 0 + 0 + 0 + ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_uart.c + stm32h7xx_hal_uart.c + 0 + 0 + + + 5 + 48 + 1 + 0 + 0 + 0 + ../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_uart_ex.c + stm32h7xx_hal_uart_ex.c + 0 + 0 + + + + + Drivers/CMSIS + 0 + 0 + 0 + 0 + + 6 + 49 + 1 + 0 + 0 + 0 + ../Core/Src/system_stm32h7xx.c + system_stm32h7xx.c + 0 + 0 + + + + + Middlewares/USB_Device_Library + 0 + 0 + 0 + 0 + + 7 + 50 + 1 + 0 + 0 + 0 + ../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c + usbd_core.c + 0 + 0 + + + 7 + 51 + 1 + 0 + 0 + 0 + ../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c + usbd_ctlreq.c + 0 + 0 + + + 7 + 52 + 1 + 0 + 0 + 0 + ../Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c + usbd_ioreq.c + 0 + 0 + + + 7 + 53 + 1 + 0 + 0 + 0 + ../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.c + usbd_cdc.c + 0 + 0 + + + + + Middlewares/FreeRTOS + 0 + 0 + 0 + 0 + + 8 + 54 + 1 + 0 + 0 + 0 + ../Middlewares/Third_Party/FreeRTOS/Source/croutine.c + croutine.c + 0 + 0 + + + 8 + 55 + 1 + 0 + 0 + 0 + ../Middlewares/Third_Party/FreeRTOS/Source/event_groups.c + event_groups.c + 0 + 0 + + + 8 + 56 + 1 + 0 + 0 + 0 + ../Middlewares/Third_Party/FreeRTOS/Source/list.c + list.c + 0 + 0 + + + 8 + 57 + 1 + 0 + 0 + 0 + ../Middlewares/Third_Party/FreeRTOS/Source/queue.c + queue.c + 0 + 0 + + + 8 + 58 + 1 + 0 + 0 + 0 + ../Middlewares/Third_Party/FreeRTOS/Source/stream_buffer.c + stream_buffer.c + 0 + 0 + + + 8 + 59 + 1 + 0 + 0 + 0 + ../Middlewares/Third_Party/FreeRTOS/Source/tasks.c + tasks.c + 0 + 0 + + + 8 + 60 + 1 + 0 + 0 + 0 + ../Middlewares/Third_Party/FreeRTOS/Source/timers.c + timers.c + 0 + 0 + + + 8 + 61 + 1 + 0 + 0 + 0 + ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.c + cmsis_os2.c + 0 + 0 + + + 8 + 62 + 1 + 0 + 0 + 0 + ../Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c + heap_4.c + 0 + 0 + + + 8 + 63 + 1 + 0 + 0 + 0 + ../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM4F/port.c + port.c + 0 + 0 + + + + + User/bsp + 0 + 0 + 0 + 0 + + 9 + 64 + 1 + 0 + 0 + 0 + ..\User\bsp\uart.c + uart.c + 0 + 0 + + + 9 + 65 + 1 + 0 + 0 + 0 + ..\User\bsp\delay.c + delay.c + 0 + 0 + + + 9 + 66 + 1 + 0 + 0 + 0 + ..\User\bsp\gpio.c + gpio.c + 0 + 0 + + + 9 + 67 + 1 + 0 + 0 + 0 + ..\User\bsp\spi.c + spi.c + 0 + 0 + + + 9 + 68 + 1 + 0 + 0 + 0 + ..\User\bsp\pwm.c + pwm.c + 0 + 0 + + + 9 + 69 + 1 + 0 + 0 + 0 + ..\User\bsp\flash.c + flash.c + 0 + 0 + + + 9 + 70 + 1 + 0 + 0 + 0 + ..\User\bsp\usb.c + usb.c + 0 + 0 + + + 9 + 71 + 1 + 0 + 0 + 0 + ..\User\bsp\buzzer.c + buzzer.c + 0 + 0 + + + + + User/component + 1 + 0 + 0 + 0 + + 10 + 72 + 1 + 0 + 0 + 0 + ..\User\component\ahrs.c + ahrs.c + 0 + 0 + + + 10 + 73 + 1 + 0 + 0 + 0 + ..\User\component\user_math.c + user_math.c + 0 + 0 + + + 10 + 74 + 1 + 0 + 0 + 0 + ..\User\component\filter.c + filter.c + 0 + 0 + + + 10 + 75 + 1 + 0 + 0 + 0 + ..\User\component\pid.c + pid.c + 0 + 0 + + + 10 + 76 + 1 + 0 + 0 + 0 + ..\User\component\cmd.c + cmd.c + 0 + 0 + + + 10 + 77 + 1 + 0 + 0 + 0 + ..\User\component\FreeRTOS_CLI.c + FreeRTOS_CLI.c + 0 + 0 + + + 10 + 78 + 1 + 0 + 0 + 0 + ..\User\component\crc8.c + crc8.c + 0 + 0 + + + 10 + 79 + 1 + 0 + 0 + 0 + ..\User\component\crc16.c + crc16.c + 0 + 0 + + + 10 + 80 + 1 + 0 + 0 + 0 + ..\User\component\limiter.c + limiter.c + 0 + 0 + + + + + Usr/device + 1 + 0 + 0 + 0 + + 11 + 81 + 1 + 0 + 0 + 0 + ..\User\device\dr16.c + dr16.c + 0 + 0 + + + 11 + 82 + 1 + 0 + 0 + 0 + ..\User\device\bmi088.c + bmi088.c + 0 + 0 + + + 11 + 83 + 1 + 0 + 0 + 0 + ..\User\device\go.c + go.c + 0 + 0 + + + 11 + 84 + 1 + 0 + 0 + 0 + ..\User\device\n100.c + n100.c + 0 + 0 + + + + + User/module + 1 + 0 + 0 + 0 + + 12 + 85 + 1 + 0 + 0 + 0 + ..\User\component\kinematics.c + kinematics.c + 0 + 0 + + + 12 + 86 + 1 + 0 + 0 + 0 + ..\User\module\chassis.c + chassis.c + 0 + 0 + + + 12 + 87 + 1 + 0 + 0 + 0 + ..\User\module\config.c + config.c + 0 + 0 + + + + + User/task + 1 + 0 + 0 + 0 + + 13 + 88 + 1 + 0 + 0 + 0 + ..\User\task\init.c + init.c + 0 + 0 + + + 13 + 89 + 1 + 0 + 0 + 0 + ..\User\task\rc.c + rc.c + 0 + 0 + + + 13 + 90 + 1 + 0 + 0 + 0 + ..\User\task\user_task.c + user_task.c + 0 + 0 + + + 13 + 91 + 5 + 0 + 0 + 0 + ..\User\task\user_task.h + user_task.h + 0 + 0 + + + 13 + 92 + 1 + 0 + 0 + 0 + ..\User\task\atti_esti.c + atti_esti.c + 0 + 0 + + + 13 + 93 + 1 + 0 + 0 + 0 + ..\User\task\test.c + test.c + 0 + 0 + + + 13 + 94 + 1 + 0 + 0 + 0 + ..\User\task\cli.c + cli.c + 0 + 0 + + + 13 + 95 + 1 + 0 + 0 + 0 + ..\User\task\monitor.c + monitor.c + 0 + 0 + + + 13 + 96 + 1 + 0 + 0 + 0 + ..\User\task\cmd.c + cmd.c + 0 + 0 + + + 13 + 97 + 1 + 0 + 0 + 0 + ..\User\task\ctrl_leg.c + ctrl_leg.c + 0 + 0 + + + 13 + 98 + 1 + 0 + 0 + 0 + ..\User\task\ctrl_chassis.c + ctrl_chassis.c + 0 + 0 + + + + + Unitree + 0 + 0 + 0 + 0 + + 14 + 99 + 1 + 0 + 0 + 0 + ..\Middlewares\Third_Party\Unitree\crc_ccitt.c + crc_ccitt.c + 0 + 0 + + + 14 + 100 + 1 + 0 + 0 + 0 + ..\Middlewares\Third_Party\Unitree\gom_protocol.c + gom_protocol.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/MDK-ARM/CtrBoard-H7_ALL.uvprojx b/MDK-ARM/CtrBoard-H7_ALL.uvprojx index e5699b1..49064c2 100644 --- a/MDK-ARM/CtrBoard-H7_ALL.uvprojx +++ b/MDK-ARM/CtrBoard-H7_ALL.uvprojx @@ -1,7 +1,10 @@ - - + + + 2.1 +
### uVision Project, (C) Keil Software
+ CtrBoard-H7_ALL @@ -16,28 +19,28 @@ Keil.STM32H7xx_DFP.4.0.0 https://www.keil.com/pack/ IRAM(0x20000000-0x2001FFFF) IRAM2(0x24000000-0x2401FFFF) IROM(0x8000000-0x80FFFFF) CLOCK(12000000) FPU3(DFPU) CPUTYPE("Cortex-M7") ELITTLE TZ - - - + + + 0 - - - - - - - - - - + + + + + + + + + + $$Device:STM32H723VGTx$CMSIS\SVD\STM32H723.svd 0 0 - - - - - + + + + + 0 0 @@ -52,15 +55,15 @@ 1 1 1 - + 1 0 0 0 0 - - + + 0 0 0 @@ -69,8 +72,8 @@ 0 0 - - + + 0 0 0 @@ -78,16 +81,16 @@ 0 - 1 - - + 0 + + 0 0 0 0 1 - + 0 @@ -101,8 +104,8 @@ 0 0 3 - - + + 0 @@ -135,11 +138,11 @@ 1 BIN\UL2V8M.DLL - - - - - + + + + + 0 @@ -172,7 +175,7 @@ 0 0 "Cortex-M7" - + 0 0 0 @@ -306,7 +309,7 @@ 0x20000 - + 1 @@ -333,9 +336,9 @@ 0 0 - + USE_PWR_LDO_SUPPLY,USE_HAL_DRIVER,STM32H723xx - + ../Core/Inc;../USB_DEVICE/App;../USB_DEVICE/Target;../Drivers/STM32H7xx_HAL_Driver/Inc;../Drivers/STM32H7xx_HAL_Driver/Inc/Legacy;../Middlewares/ST/STM32_USB_Device_Library/Core/Inc;../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc;../Drivers/CMSIS/Device/ST/STM32H7xx/Include;../Drivers/CMSIS/Include;../Middlewares/Third_Party/FreeRTOS/Source/include;../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2;../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM4F;../User;../Middlewares/Third_Party/Unitree @@ -351,9 +354,9 @@ 0 1 - - - + + + ../Drivers/CMSIS/Include @@ -364,15 +367,15 @@ 0 1 0 - - - + + + CtrBoard-H7_ALL\CtrBoard-H7_ALL.sct - - - - - + + + + + @@ -417,6 +420,8 @@ 2 2 11 + + 1 @@ -444,6 +449,12 @@ 2 2 2 + + + + + + @@ -735,6 +746,8 @@ 2 2 11 + + 1 @@ -762,6 +775,12 @@ 2 2 2 + + + + + + 2 @@ -774,6 +793,12 @@ 2 2 1 + + + + + + @@ -795,6 +820,8 @@ 2 2 11 + + 1 @@ -822,6 +849,12 @@ 2 2 2 + + + + + + @@ -843,6 +876,8 @@ 2 2 11 + + 1 @@ -870,6 +905,12 @@ 2 2 2 + + + + + + @@ -891,6 +932,8 @@ 2 2 11 + + 1 @@ -918,6 +961,12 @@ 2 2 2 + + + + + + @@ -939,6 +988,8 @@ 2 2 11 + + 1 @@ -966,6 +1017,12 @@ 2 2 2 + + + + + + @@ -987,6 +1044,8 @@ 2 2 11 + + 1 @@ -1014,6 +1073,12 @@ 2 2 2 + + + + + + @@ -1035,6 +1100,8 @@ 2 2 11 + + 1 @@ -1062,6 +1129,12 @@ 2 2 2 + + + + + + @@ -1083,6 +1156,8 @@ 2 2 11 + + 1 @@ -1110,6 +1185,12 @@ 2 2 2 + + + + + + @@ -1131,6 +1212,8 @@ 2 2 11 + + 1 @@ -1158,6 +1241,12 @@ 2 2 2 + + + + + + @@ -1179,6 +1268,8 @@ 2 2 11 + + 1 @@ -1206,6 +1297,12 @@ 2 2 2 + + + + + + @@ -1227,6 +1324,8 @@ 2 2 11 + + 1 @@ -1254,6 +1353,12 @@ 2 2 2 + + + + + + @@ -1339,9 +1444,19 @@ ..\User\component\FreeRTOS_CLI.c - kinematics.c + crc8.c 1 - ..\User\component\kinematics.c + ..\User\component\crc8.c + + + crc16.c + 1 + ..\User\component\crc16.c + + + limiter.c + 1 + ..\User\component\limiter.c @@ -1363,11 +1478,21 @@ 1 ..\User\device\go.c + + n100.c + 1 + ..\User\device\n100.c + User/module + + kinematics.c + 1 + ..\User\component\kinematics.c + chassis.c 1 @@ -1461,18 +1586,20 @@ + - + - + - + - + + @@ -1481,5 +1608,5 @@ -
+
diff --git a/MDK-ARM/CtrBoard-H7_ALL/CtrBoard-H7_ALL.axf b/MDK-ARM/CtrBoard-H7_ALL/CtrBoard-H7_ALL.axf index 768db2d0b98d997ed3907cd45b9d8449860855fb..9000d26b270aebc535f2ba29693a4bafc41a8784 100644 GIT binary patch delta 275048 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

ujD{;@5iGGrK4zgF+ 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�QSy*hP8yIJK}JB=Zr^D8q#guJ?XX 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 YI}uK-5w^zMZvP~*^W*H&w`NxQKdShgqW}N^ delta 262143 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 u)7qf{tNb$iGV{dlPqs@Instance == USART3) return BSP_UART_RIGHT_LEG; if (huart->Instance == USART10) + return BSP_UART_IMU_N100; + if (huart->Instance == UART7) return BSP_UART_AI; // else if (huart->Instance == USARTX) // return BSP_UART_XXX; @@ -114,6 +116,8 @@ UART_HandleTypeDef *BSP_UART_GetHandle(BSP_UART_t uart) { case BSP_UART_RIGHT_LEG: return &huart3; case BSP_UART_AI: + return &huart7; + case BSP_UART_IMU_N100: return &huart10; // case BSP_UART_XXX: // return &huartX; diff --git a/User/bsp/uart.h b/User/bsp/uart.h index 0b51df2..014f00a 100644 --- a/User/bsp/uart.h +++ b/User/bsp/uart.h @@ -20,6 +20,7 @@ typedef enum { BSP_UART_DR16, BSP_UART_LEFT_LEG, BSP_UART_RIGHT_LEG, + BSP_UART_IMU_N100, BSP_UART_AI, /*BSP_UART_XXX*/ BSP_UART_NUM, diff --git a/User/component/cmd.c b/User/component/cmd.c index 9d1898b..5728d8f 100644 --- a/User/component/cmd.c +++ b/User/component/cmd.c @@ -53,8 +53,8 @@ static void CMD_RcLogic(const CMD_RC_t *rc, CMD_t *cmd, float dt_sec) { break; } /* 将操纵杆的对应值转换为底盘的控制向量和云台变化的欧拉角 */ - cmd->chassis.ctrl_vec.vx = rc->ch_l_x; - cmd->chassis.ctrl_vec.vy = rc->ch_l_y; + cmd->chassis.ctrl_vec.vx = rc->ch_l_y; + cmd->chassis.ctrl_vec.vy = rc->ch_l_x; cmd->chassis.ctrl_vec.wz = rc->ch_r_x; cmd->chassis.delta_hight = rc->ch_res; diff --git a/User/component/crc16.c b/User/component/crc16.c new file mode 100644 index 0000000..01cb26f --- /dev/null +++ b/User/component/crc16.c @@ -0,0 +1,35 @@ +/* + N100陀螺仪包头crc16校验 +*/ + +#include + +// CRC16 查找表(多项式 0x1021,初始值 0x0000) +static const uint16_t CRC16Table[256] = { + 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7, 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF, + 0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6, 0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE, + 0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485, 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D, + 0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4, 0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC, + 0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823, 0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B, + 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12, 0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A, + 0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41, 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49, + 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70, 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78, + 0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F, 0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067, + 0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E, 0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256, + 0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D, 0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, + 0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C, 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634, + 0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB, 0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3, + 0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A, 0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92, + 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9, 0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1, + 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8, 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0 +}; + +// 计算 CRC16 校验值 +uint16_t crc16_calc(const uint8_t *data, uint8_t len) { + uint16_t crc = 0x0000; + for (uint8_t i = 0; i < len; i++) { + uint8_t index = (crc >> 8) ^ data[i]; + crc = (crc << 8) ^ CRC16Table[index]; + } + return crc; +} \ No newline at end of file diff --git a/User/component/crc16.h b/User/component/crc16.h new file mode 100644 index 0000000..3f1a8e0 --- /dev/null +++ b/User/component/crc16.h @@ -0,0 +1,17 @@ +/* + N100陀螺仪包头crc16校验 +*/ + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +uint16_t crc16_calc(const uint8_t *data, uint8_t len); + +#ifdef __cplusplus +} +#endif diff --git a/User/component/crc8.c b/User/component/crc8.c new file mode 100644 index 0000000..9deabac --- /dev/null +++ b/User/component/crc8.c @@ -0,0 +1,33 @@ +/* + N100陀螺仪包头crc8校验 +*/ +#include +#include "crc8.h" +// CRC8 查找表(多项式 0x07,初始值 0x00) +static const uint8_t CRC8Table[256] = { + 0x00, 0x5E, 0xBC, 0xE2, 0x61, 0x3F, 0xDD, 0x83, 0xC2, 0x9C, 0x7E, 0x20, 0xA3, 0xFD, 0x1F, 0x41, + 0x9D, 0xC3, 0x21, 0x7F, 0xFC, 0xA2, 0x40, 0x1E, 0x5F, 0x01, 0xE3, 0xBD, 0x3E, 0x60, 0x82, 0xDC, + 0x23, 0x7D, 0x9F, 0xC1, 0x42, 0x1C, 0xFE, 0xA0, 0xE1, 0xBF, 0x5D, 0x03, 0x80, 0xDE, 0x3C, 0x62, + 0xBE, 0xE0, 0x02, 0x5C, 0xDF, 0x81, 0x63, 0x3D, 0x7C, 0x22, 0xC0, 0x9E, 0x1D, 0x43, 0xA1, 0xFF, + 0x46, 0x18, 0xFA, 0xA4, 0x27, 0x79, 0x9B, 0xC5, 0x84, 0xDA, 0x38, 0x66, 0xE5, 0xBB, 0x59, 0x07, + 0xDB, 0x85, 0x67, 0x39, 0xBA, 0xE4, 0x06, 0x58, 0x19, 0x47, 0xA5, 0xFB, 0x78, 0x26, 0xC4, 0x9A, + 0x65, 0x3B, 0xD9, 0x87, 0x04, 0x5A, 0xB8, 0xE6, 0xA7, 0xF9, 0x1B, 0x45, 0xC6, 0x98, 0x7A, 0x24, + 0xF8, 0xA6, 0x44, 0x1A, 0x99, 0xC7, 0x25, 0x7B, 0x3A, 0x64, 0x86, 0xD8, 0x5B, 0x05, 0xE7, 0xB9, + 0x8C, 0xD2, 0x30, 0x6E, 0xED, 0xB3, 0x51, 0x0F, 0x4E, 0x10, 0xF2, 0xAC, 0x2F, 0x71, 0x93, 0xCD, + 0x11, 0x4F, 0xAD, 0xF3, 0x70, 0x2E, 0xCC, 0x92, 0xD3, 0x8D, 0x6F, 0x31, 0xB2, 0xEC, 0x0E, 0x50, + 0xAF, 0xF1, 0x13, 0x4D, 0xCE, 0x90, 0x72, 0x2C, 0x6D, 0x33, 0xD1, 0x8F, 0x0C, 0x52, 0xB0, 0xEE, + 0x32, 0x6C, 0x8E, 0xD0, 0x53, 0x0D, 0xEF, 0xB1, 0xF0, 0xAE, 0x4C, 0x12, 0x91, 0xCF, 0x2D, 0x73, + 0xCA, 0x94, 0x76, 0x28, 0xAB, 0xF5, 0x17, 0x49, 0x08, 0x56, 0xB4, 0xEA, 0x69, 0x37, 0xD5, 0x8B, + 0x57, 0x09, 0xEB, 0xB5, 0x36, 0x68, 0x8A, 0xD4, 0x95, 0xCB, 0x29, 0x77, 0xF4, 0xAA, 0x48, 0x16, + 0xE9, 0xB7, 0x55, 0x0B, 0x88, 0xD6, 0x34, 0x6A, 0x2B, 0x75, 0x97, 0xC9, 0x4A, 0x14, 0xF6, 0xA8, + 0x74, 0x2A, 0xC8, 0x96, 0x15, 0x4B, 0xA9, 0xF7, 0xB6, 0xE8, 0x0A, 0x54, 0xD7, 0x89, 0x6B, 0x35, +}; + +// 计算 CRC8 校验值 +uint8_t crc8_calc(const uint8_t *data, uint8_t len) { + uint8_t crc = 0x00; + for (uint8_t i = 0; i < len; i++) { + crc = CRC8Table[crc ^ data[i]]; + } + return crc; +} \ No newline at end of file diff --git a/User/component/crc8.h b/User/component/crc8.h new file mode 100644 index 0000000..d398d7a --- /dev/null +++ b/User/component/crc8.h @@ -0,0 +1,17 @@ +/* + N100陀螺仪包头crc8校验 +*/ + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +uint8_t crc8_calc(const uint8_t *data, uint8_t len); + +#ifdef __cplusplus +} +#endif diff --git a/User/component/kinematics.c b/User/component/kinematics.c index f2a50db..c281802 100644 --- a/User/component/kinematics.c +++ b/User/component/kinematics.c @@ -3,9 +3,35 @@ */ #include "filter.h" - +#include #include "kinematics.h" +static float q1_ik(float py, float pz, float l1) { + float q1; + float L = sqrtf(py*py + pz*pz - l1*l1); + q1 = atan2f(pz*l1 + py*L, py*l1 - pz*L); + return q1; +} + +static float q3_ik(float b3z, float b4z, float b) { + float q3, temp; + temp = (b3z*b3z + b4z*b4z - b*b) / (2.0f * fabsf(b3z * b4z)); + if (temp > 1.0f) temp = 1.0f; + if (temp < -1.0f) temp = -1.0f; + q3 = acosf(temp); + q3 = -(M_PI - q3); + return q3; +} + +static float q2_ik(float q1, float q3, float px, float py, float pz, float b3z, float b4z) { + float a1 = py * sinf(q1) - pz * cosf(q1); + float a2 = px; + float m1 = b4z * sinf(q3); + float m2 = b3z + b4z * cosf(q3); + float q2 = atan2f(m1 * a1 + m2 * a2, m1 * a2 - m2 * a1); + return q2; +} + int8_t Kinematics_RealFeedback(Kinematics_JointData_t *real, const Kinematics_JointData_t *in, float ratio, float joint_zero){ real->Pos = (in->Pos-joint_zero) / ratio; @@ -23,27 +49,30 @@ int8_t Kinematics_RealOutput(const Kinematics_JointCMD_t *real, Kinematics_Joint return 0; } -/** - * @brief 单腿正运动学 - * @param theta[3] 关节角度数组(单位:弧度):[hip, thigh, calf] - * @param leg_params 单腿机械参数(长度) - * @param foot_out 足端位置输出 [x, y, z](单位:米) - */ -// void Leg_ForwardKinematics(const float theta[3], const joint_params *leg_params, float foot_out[3]) { -// float l1 = leg_params->named.lf_hip; // 髋关节到大腿长度 -// float l2 = leg_params->named.lf_thigh; // 大腿长度 -// float l3 = leg_params->named.lf_calf; // 小腿长度 +void Kinematics_ForwardKinematics(const float theta_in[3], const Kinematics_LinkLength_t *leg_params, float foot_out[3], Kinematics_Sign_t *sign) { + float l1 = leg_params->hip * sign->hip; + float l2 = -leg_params->thigh; + float l3 = -leg_params->calf; -// float t1 = theta[0]; // 髋关节侧摆(绕y轴) -// float t2 = theta[1]; // 髋关节前后 -// float t3 = theta[2]; // 膝关节 + float q1 = theta_in[0]; + float q2 = theta_in[1] * sign->thigh; + float q3 = theta_in[2] * sign->calf; -// // 末端位置 -// float leg_proj = l2 * cosf(t2) + l3 * cosf(t2 + t3); -// foot_out[0] = cosf(t1) * leg_proj + l1 * cosf(t1); // x -// foot_out[1] = sinf(t1) * leg_proj + l1 * sinf(t1); // y -// foot_out[2] = l2 * sinf(t2) + l3 * sinf(t2 + t3); // z -// } + float s1 = sinf(q1); + float s2 = sinf(q2); + float s3 = sinf(q3); + + float c1 = cosf(q1); + float c2 = cosf(q2); + float c3 = cosf(q3); + + float c23 = c2 * c3 - s2 * s3; + float s23 = s2 * c3 + c2 * s3; + + foot_out[0] = l3 * s23 + l2 * s2; + foot_out[1] = -l3 * s1 * c23 + l1 * c1 - l2 * c2 * s1; + foot_out[2] = l3 * c1 * c23 + l1 * s1 + l2 * c1 * c2; +} /** * @brief 单腿逆运动学 @@ -52,34 +81,28 @@ int8_t Kinematics_RealOutput(const Kinematics_JointCMD_t *real, Kinematics_Joint * @param theta_out 关节角度输出数组(单位:弧度):[hip, thigh, calf] * @return 0成功,-1目标不可达 */ -// int Leg_InverseKinematics(const float foot_in[3], const joint_params *leg_params, float theta_out[3]) { -// float l1 = leg_params->named.lf_hip; -// float l2 = leg_params->named.lf_thigh; -// float l3 = leg_params->named.lf_calf; +int8_t Kinematics_InverseKinematics(const float foot_in[3], const Kinematics_LinkLength_t *leg_params, float theta_out[3], Kinematics_Sign_t *sign) { + float px = foot_in[0]; + float py = foot_in[1]; + float pz = foot_in[2]; -// float x = foot_in[0]; -// float y = foot_in[1]; -// float z = foot_in[2]; + float b2y = leg_params->hip * sign->hip; + float b3z = -leg_params->thigh; + float b4z = -leg_params->calf; + float a = leg_params->hip; + float c = sqrtf(px*px + py*py + pz*pz); + float b = sqrtf(c*c - a*a); -// // 1. 先算髋关节侧摆角(绕y轴) -// float r = sqrtf(x * x + y * y); -// float t1 = atan2f(y, x); // 髋关节侧摆角:使用 atan2f,计 + // 检查可达性 + if (b != b) return -1; // NaN + if (b > fabsf(b3z) + fabsf(b4z)) return -1; -// // 2. 去掉髋关节侧摆影响,得到在sagittal平面上的投影 -// float xp = r - l1; -// float zp = z; + float q1 = q1_ik(py, pz, b2y); + float q3 = q3_ik(b3z, b4z, b); + float q2 = q2_ik(q1, q3, px, py, pz, b3z, b4z); -// // 3. 逆解余下两个关节 -// float D = (xp * xp + zp * zp - l2 * l2 - l3 * l3) / (2 * l2 * l3); -// if (D < -1.0f || D > 1.0f) return -1; // 不可达 - -// float t3 = atan2f(-sqrtf(1 - D * D), D); // 膝关节 -// float k1 = l2 + l3 * cosf(t3); -// float k2 = l3 * sinf(t3); -// float t2 = atan2f(zp, xp) - atan2f(k2, k1); - -// theta_out[0] = t1; -// theta_out[1] = t2; -// theta_out[2] = t3; -// return 0; -// } \ No newline at end of file + theta_out[0] = q1; + theta_out[1] = q2 * sign->thigh; + theta_out[2] = q3 * sign->calf; + return 0; +} diff --git a/User/component/kinematics.h b/User/component/kinematics.h index f28b0c1..5b01a65 100644 --- a/User/component/kinematics.h +++ b/User/component/kinematics.h @@ -24,6 +24,24 @@ typedef struct { float K_W; // 关节速度系数(0-25.599) } Kinematics_JointCMD_t; +typedef struct { + float hip; // 髋关节长度(m) + float thigh; // 大腿长度(m) + float calf; // 小腿长度(m) +} Kinematics_LinkLength_t; + +typedef struct { + float x; + float y; + float z; +} Kinematics_LegOffset_t; + +typedef struct { + float hip; + float thigh; + float calf; +} Kinematics_Sign_t; + /** * @brief 计算实际反馈 @@ -44,6 +62,25 @@ int8_t Kinematics_RealFeedback(Kinematics_JointData_t *real, const Kinematics_Jo int8_t Kinematics_RealOutput(const Kinematics_JointCMD_t *real, Kinematics_JointCMD_t *out, float ratio, float joint_zero); +/** + * @brief 单腿正运动学 + * @param theta_in 关节角度输入数组(单位:弧度):[hip, thigh, calf] + * @param leg_params 单腿机械参数(长度) + * @param foot_out 足端位置输出 [x, y, z](单位:米) + * @param side_sign 侧向标志(左前/左后为-1,右前/右后为1) + */ +void Kinematics_ForwardKinematics(const float theta_in[3], const Kinematics_LinkLength_t *leg_params, float foot_out[3], Kinematics_Sign_t *sign); + +/** + * @brief 单腿逆运动学 + * @param foot_in 足端目标位置 [x, y, z](单位:米) + * @param leg_params 单腿机械参数(长度) + * @param theta_out 关节角度输出数组(单位:弧度):[hip, thigh, calf] + * @param side_sign 侧向标志(左前/左后为-1,右前/右后为1) + * @return 0成功,-1目标不可达 + */ +int8_t Kinematics_InverseKinematics(const float foot_in[3], const Kinematics_LinkLength_t *leg_params, float theta_out[3], Kinematics_Sign_t *sign); + #ifdef __cplusplus } diff --git a/User/component/limiter.c b/User/component/limiter.c new file mode 100644 index 0000000..d86d45f --- /dev/null +++ b/User/component/limiter.c @@ -0,0 +1,27 @@ +/* + 限制器 +*/ + +#include "limiter.h" + +#include +#include + +#include "component/user_math.h" + +int8_t Limit_ChassicOutput(const float feedback_pos ,float *out_pos, float max_speed, float max_angle, float min_angle){ + + // 限制位置变化速度 + if (*out_pos - feedback_pos > max_speed) { + *out_pos = feedback_pos + max_speed; + } else if (*out_pos - feedback_pos < -max_speed) { + *out_pos = feedback_pos - max_speed; + } + // 限制角度范围 + if (*out_pos > max_angle) { + *out_pos = max_angle; + } else if (*out_pos < min_angle) { + *out_pos = min_angle; + } + return 0; // 成功 +} \ No newline at end of file diff --git a/User/component/limiter.h b/User/component/limiter.h new file mode 100644 index 0000000..c584ff1 --- /dev/null +++ b/User/component/limiter.h @@ -0,0 +1,20 @@ +/* + 限制器 +*/ + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + + +int8_t Limit_ChassicOutput(const float feedback_pos ,float *out_pos, + float max_speed, float max_angle, float min_angle); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/User/component/unitreeLeg.cpp b/User/component/unitreeLeg.cpp new file mode 100755 index 0000000..3c5f443 --- /dev/null +++ b/User/component/unitreeLeg.cpp @@ -0,0 +1,175 @@ +/********************************************************************** + Copyright (c) 2020-2023, Unitree Robotics.Co.Ltd. All rights reserved. +***********************************************************************/ +#include "common/unitreeLeg.h" +#include + + +/************************/ +/*******QuadrupedLeg*****/ +/************************/ +QuadrupedLeg::QuadrupedLeg(int legID, float abadLinkLength, float hipLinkLength, + float kneeLinkLength, Vec3 pHip2B) + :_abadLinkLength(abadLinkLength), + _hipLinkLength(hipLinkLength), + _kneeLinkLength(kneeLinkLength), + _pHip2B(pHip2B){ + if (legID == 0 || legID == 2) + _sideSign = -1; + else if (legID == 1 || legID == 3) + _sideSign = 1; + else{ + std::cout << "Leg ID incorrect!" << std::endl; + exit(-1); + } +} + +// Forward Kinematics +Vec3 QuadrupedLeg::calcPEe2H(Vec3 q){ + float l1 = _sideSign * _abadLinkLength; + float l2 = -_hipLinkLength; + float l3 = -_kneeLinkLength; + + float s1 = std::sin(q(0)); + float s2 = std::sin(q(1)); + float s3 = std::sin(q(2)); + + float c1 = std::cos(q(0)); + float c2 = std::cos(q(1)); + float c3 = std::cos(q(2)); + + float c23 = c2 * c3 - s2 * s3; + float s23 = s2 * c3 + c2 * s3; + + Vec3 pEe2H; + + pEe2H(0) = l3 * s23 + l2 * s2; + pEe2H(1) = -l3 * s1 * c23 + l1 * c1 - l2 * c2 * s1; + pEe2H(2) = l3 * c1 * c23 + l1 * s1 + l2 * c1 * c2; + + return pEe2H; +} + +// Forward Kinematics +Vec3 QuadrupedLeg::calcPEe2B(Vec3 q){ + return _pHip2B + calcPEe2H(q); +} + +// Derivative Forward Kinematics +Vec3 QuadrupedLeg::calcVEe(Vec3 q, Vec3 qd){ + return calcJaco(q) * qd; +} + +// Inverse Kinematics +Vec3 QuadrupedLeg::calcQ(Vec3 pEe, FrameType frame){ + Vec3 pEe2H; + if(frame == FrameType::HIP) + pEe2H = pEe; + else if(frame == FrameType::BODY) + pEe2H = pEe - _pHip2B; + else{ + std::cout << "[ERROR] The frame of QuadrupedLeg::calcQ can only be HIP or BODY!" << std::endl; + exit(-1); + } + + float q1, q2, q3; + Vec3 qResult; + float px, py, pz; + float b2y, b3z, b4z, a, b, c; + + px = pEe2H(0); + py = pEe2H(1); + pz = pEe2H(2); + + b2y = _abadLinkLength * _sideSign; + b3z = -_hipLinkLength; + b4z = -_kneeLinkLength; + a = _abadLinkLength; + c = sqrt(pow(px, 2) + pow(py, 2) + pow(pz, 2)); // whole length + b = sqrt(pow(c, 2) - pow(a, 2)); // distance between shoulder and footpoint + + q1 = q1_ik(py, pz, b2y); + q3 = q3_ik(b3z, b4z, b); + q2 = q2_ik(q1, q3, px, py, pz, b3z, b4z); + + qResult(0) = q1; + qResult(1) = q2; + qResult(2) = q3; + + return qResult; +} + +// Derivative Inverse Kinematics +Vec3 QuadrupedLeg::calcQd(Vec3 q, Vec3 vEe){ + return calcJaco(q).inverse() * vEe; +} + +// Derivative Inverse Kinematics +Vec3 QuadrupedLeg::calcQd(Vec3 pEe, Vec3 vEe, FrameType frame){ + Vec3 q = calcQ(pEe, frame); + return calcJaco(q).inverse() * vEe; +} + +// Inverse Dynamics +Vec3 QuadrupedLeg::calcTau(Vec3 q, Vec3 force){ + return calcJaco(q).transpose() * force; +} + +// Jacobian Matrix +Mat3 QuadrupedLeg::calcJaco(Vec3 q){ + Mat3 jaco; + + float l1 = _abadLinkLength * _sideSign; + float l2 = -_hipLinkLength; + float l3 = -_kneeLinkLength; + + float s1 = std::sin(q(0)); + float s2 = std::sin(q(1)); + float s3 = std::sin(q(2)); + + float c1 = std::cos(q(0)); + float c2 = std::cos(q(1)); + float c3 = std::cos(q(2)); + + float c23 = c2 * c3 - s2 * s3; + float s23 = s2 * c3 + c2 * s3; + jaco(0, 0) = 0; + jaco(1, 0) = -l3 * c1 * c23 - l2 * c1 * c2 - l1 * s1; + jaco(2, 0) = -l3 * s1 * c23 - l2 * c2 * s1 + l1 * c1; + jaco(0, 1) = l3 * c23 + l2 * c2; + jaco(1, 1) = l3 * s1 * s23 + l2 * s1 * s2; + jaco(2, 1) = -l3 * c1 * s23 - l2 * c1 * s2; + jaco(0, 2) = l3 * c23; + jaco(1, 2) = l3 * s1 * s23; + jaco(2, 2) = -l3 * c1 * s23; + + return jaco; +} + +float QuadrupedLeg::q1_ik(float py, float pz, float l1){ + float q1; + float L = sqrt(pow(py,2)+pow(pz,2)-pow(l1,2)); + q1 = atan2(pz*l1+py*L, py*l1-pz*L); + return q1; +} + +float QuadrupedLeg::q3_ik(float b3z, float b4z, float b){ + float q3, temp; + temp = (pow(b3z, 2) + pow(b4z, 2) - pow(b, 2))/(2*fabs(b3z*b4z)); + if(temp>1) temp = 1; + if(temp<-1) temp = -1; + q3 = acos(temp); + q3 = -(M_PI - q3); //0~180 + return q3; +} + +float QuadrupedLeg::q2_ik(float q1, float q3, float px, float py, float pz, float b3z, float b4z){ + float q2, a1, a2, m1, m2; + + a1 = py*sin(q1) - pz*cos(q1); + a2 = px; + m1 = b4z*sin(q3); + m2 = b3z + b4z*cos(q3); + q2 = atan2(m1*a1+m2*a2, m1*a2-m2*a1); + return q2; +} diff --git a/User/component/user_math.c b/User/component/user_math.c index 1fceac2..b483048 100644 --- a/User/component/user_math.c +++ b/User/component/user_math.c @@ -130,3 +130,4 @@ void VerifyFailed(const char *file, uint32_t line) { __NOP(); } } + diff --git a/User/device/ai.c b/User/device/ai.c new file mode 100644 index 0000000..6ee1e3e --- /dev/null +++ b/User/device/ai.c @@ -0,0 +1,152 @@ +/* +AI +*/ + +/* Includes ----------------------------------------------------------------- */ +#include "ai.h" + +#include + +#include "bsp\delay.h" +#include "bsp\uart.h" +#include "component\crc16.h" +#include "component\crc8.h" +#include "component\user_math.h" +#include "component\filter.h" + + +/* Private define ----------------------------------------------------------- */ +#define AI_LEN_RX_BUFF (sizeof(Protocol_DownPackage_t)) + +/* Private macro ------------------------------------------------------------ */ +/* Private typedef ---------------------------------------------------------- */ +/* Private variables -------------------------------------------------------- */ +static volatile uint32_t drop_message = 0; + +static uint8_t rxbuf[AI_LEN_RX_BUFF]; + +static bool inited = false; + +static osThreadId_t thread_alert; + +/* Private function -------------------------------------------------------- */ + +static void Ai_RxCpltCallback(void) { + osThreadFlagsSet(thread_alert, SIGNAL_AI_RAW_REDY); +} + +static void Ai_IdleLineCallback(void) { + osThreadFlagsSet(thread_alert, SIGNAL_AI_RAW_REDY); +} + +/* Exported functions ------------------------------------------------------- */ +int8_t AI_Init(AI_t *ai) { + UNUSED(ai); + ASSERT(ai); + if (inited) return DEVICE_ERR_INITED; + VERIFY((thread_alert = osThreadGetId()) != NULL); + + BSP_UART_RegisterCallback(BSP_UART_AI, BSP_UART_RX_CPLT_CB, + Ai_RxCpltCallback); + BSP_UART_RegisterCallback(BSP_UART_AI, BSP_UART_IDLE_LINE_CB, + Ai_IdleLineCallback); + + inited = true; + return 0; +} + +int8_t AI_Restart(void) { + __HAL_UART_DISABLE(BSP_UART_GetHandle(BSP_UART_AI)); + __HAL_UART_ENABLE(BSP_UART_GetHandle(BSP_UART_AI)); + return DEVICE_OK; +} + +int8_t AI_StartReceiving(AI_t *ai) { + UNUSED(ai); + if (HAL_UART_Receive_DMA(BSP_UART_GetHandle(BSP_UART_AI), rxbuf, + AI_LEN_RX_BUFF) == HAL_OK) + return DEVICE_OK; + return DEVICE_ERR; +} + +bool AI_WaitDmaCplt(void) { + return (osThreadFlagsWait(SIGNAL_AI_RAW_REDY, osFlagsWaitAll, 0) == + SIGNAL_AI_RAW_REDY); +} + +int8_t AI_ParseHost(AI_t *ai) { + if (!CRC16_Verify((const uint8_t *)&(rxbuf), sizeof(ai->from_host))) + goto error; + ai->ai_online = true; + memcpy(&(ai->from_host), rxbuf, sizeof(ai->from_host)); + memset(rxbuf, 0, AI_LEN_RX_BUFF); + return DEVICE_OK; + +error: + drop_message++; + return DEVICE_ERR; +} + +void AI_PackCmd(AI_t *ai, CMD_Host_t *cmd_host) { + cmd_host->gimbal_delta.yaw = ai->from_host.data.gimbal.yaw; + cmd_host->gimbal_delta.pit = ai->from_host.data.gimbal.pit; + cmd_host->fire = (ai->from_host.data.notice & AI_NOTICE_FIRE); + cmd_host->chassis_move_vec.vx = ai->from_host.data.chassis_move_vec.vx; + cmd_host->chassis_move_vec.vy = ai->from_host.data.chassis_move_vec.vy; + cmd_host->chassis_move_vec.wz = ai->from_host.data.chassis_move_vec.wz; +} + +int8_t AI_HandleOffline(AI_t *ai, CMD_Host_t *cmd_host) { + if (ai == NULL) return DEVICE_ERR_NULL; + if (cmd_host == NULL) return DEVICE_ERR_NULL; + ai->ai_online = false; + memset(&(ai->from_host), 0, sizeof(ai->from_host)); + memset(cmd_host, 0, sizeof(*cmd_host)); + return 0; +} + +int8_t AI_PackMCU(AI_t *ai, const AHRS_Quaternion_t *quat) { + ai->to_host.mcu.id = AI_ID_MCU; + memcpy((void *)&(ai->to_host.mcu.package.data.quat), (const void *)quat, + sizeof(*quat)); + ai->to_host.mcu.package.data.notice = 0; + if (ai->status == AI_STATUS_AUTOAIM) + ai->to_host.mcu.package.data.notice |= AI_NOTICE_AUTOAIM; + else if (ai->status == AI_STATUS_HITSWITCH) + ai->to_host.mcu.package.data.notice |= AI_NOTICE_HITBUFF; + else if (ai->status == AI_STATUS_AUTOMATIC) + ai->to_host.mcu.package.data.notice |= AI_NOTICE_AUTOMATIC; + + ai->to_host.mcu.package.crc16 = CRC16_Calc( + (const uint8_t *)&(ai->to_host.mcu.package), + sizeof(ai->to_host.mcu.package) - sizeof(uint16_t), CRC16_INIT); + return DEVICE_OK; +} + +int8_t AI_PackRef(AI_t *ai, const Referee_ForAI_t *ref) { + (void)ref; + ai->to_host.ref.id = AI_ID_REF; + ai->to_host.ref.package.crc16 = CRC16_Calc( + (const uint8_t *)&(ai->to_host.ref.package), + sizeof(ai->to_host.ref.package) - sizeof(uint16_t), CRC16_INIT); + return DEVICE_OK; +} + +int8_t AI_StartSend(AI_t *ai, bool ref_update) { + if (ref_update) { + if (HAL_UART_Transmit_DMA( + BSP_UART_GetHandle(BSP_UART_AI), (uint8_t *)&(ai->to_host), + sizeof(ai->to_host.ref) + sizeof(ai->to_host.mcu)) == HAL_OK) + return DEVICE_OK; + else + return DEVICE_ERR; + } else { + if (HAL_UART_Transmit_DMA(BSP_UART_GetHandle(BSP_UART_AI), + (uint8_t *)&(ai->to_host.mcu), + sizeof(ai->to_host.mcu)) == HAL_OK) + return DEVICE_OK; + else + return DEVICE_ERR; + } +} + diff --git a/User/device/ai.h b/User/device/ai.h new file mode 100644 index 0000000..4434da3 --- /dev/null +++ b/User/device/ai.h @@ -0,0 +1,69 @@ +/* + AI +*/ + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ----------------------------------------------------------------- */ +#include +#include +#include + +#include "component\ahrs.h" +#include "component\cmd.h" +#include "component\user_math.h" +#include "component\filter.h" +#include "device\device.h" +#include "device\referee.h" +#include "protocol.h" + +/* Exported constants ------------------------------------------------------- */ +/* Exported macro ----------------------------------------------------------- */ +/* Exported types ----------------------------------------------------------- */ + +typedef struct __packed { + uint8_t id; + Protocol_UpPackageReferee_t package; +} AI_UpPackageReferee_t; + +typedef struct __packed { + uint8_t id; + Protocol_UpPackageMCU_t package; +} AI_UpPackageMCU_t; + +typedef struct __packed { + osThreadId_t thread_alert; + + Protocol_DownPackage_t from_host; + + struct { + AI_UpPackageReferee_t ref; + AI_UpPackageMCU_t mcu; + } to_host; + + CMD_AI_Status_t status; + bool ai_online; +} AI_t; + +/* Exported functions prototypes -------------------------------------------- */ +int8_t AI_Init(AI_t *ai); +int8_t AI_Restart(void); + +int8_t AI_StartReceiving(AI_t *ai); +bool AI_WaitDmaCplt(void); +int8_t AI_ParseHost(AI_t *ai); +int8_t AI_HandleOffline(AI_t *ai, CMD_Host_t *cmd_host); +int8_t AI_PackMCU(AI_t *ai, const AHRS_Quaternion_t *quat); +int8_t AI_PackRef(AI_t *ai, const Referee_ForAI_t *ref); +int8_t AI_StartSend(AI_t *ai, bool option); +void AI_PackCmd(AI_t *ai, CMD_Host_t *cmd_host); +#ifdef __cplusplus +} +#endif + + + diff --git a/User/device/bmi088.c b/User/device/bmi088.c index e82cadf..b1f0736 100644 --- a/User/device/bmi088.c +++ b/User/device/bmi088.c @@ -365,5 +365,6 @@ int8_t BMI088_ParseGyro(BMI088_t *bmi088) { float BMI088_GetUpdateFreq(BMI088_t *bmi088) { (void)bmi088; - return 400.0f; + return 200.0f; } + diff --git a/User/device/device.h b/User/device/device.h index f11fa6d..db37a9e 100644 --- a/User/device/device.h +++ b/User/device/device.h @@ -19,19 +19,12 @@ extern "C" { #define SIGNAL_BMI088_GYRO_RAW_REDY (1u << 2) #define SIGNAL_BMI088_ACCL_RAW_REDY (1u << 3) -#define SIGNAL_DR16_RAW_REDY (1u << 4) +#define SIGNAL_N100_NEW_DATA (1u << 4) +#define SIGNAL_DR16_RAW_REDY (1u << 5) -#define SIGNAL_GO_MOTOR_RECV (1u << 5) +#define SIGNAL_GO_MOTOR_RECV (1u << 6) - -#define SIGNAL_IST8310_MAGN_NEW_DATA (1u << 8) -#define SIGNAL_IST8310_MAGN_RAW_REDY (1u << 9) - -#define SIGNAL_REFEREE_RAW_REDY (1u << 10) -#define SIGNAL_REFEREE_FAST_REFRESH_UI (1u << 11) -#define SIGNAL_REFEREE_SLOW_REFRESH_UI (1u << 12) - #define SIGNAL_AI_RAW_REDY (1u << 14) #ifdef __cplusplus diff --git a/User/device/go copy.c b/User/device/go copy.c deleted file mode 100644 index 50d8f7b..0000000 --- a/User/device/go copy.c +++ /dev/null @@ -1,118 +0,0 @@ -/* - 四足机器人12个关节驱动 -*/ - -/* Includes ----------------------------------------------------------------- */ -#include "bsp/uart.h" -#include "go.h" - -#include -#include - - -#include "component/user_math.h" - -#include "cmsis_os2.h" - -static osSemaphoreId_t sem_left_rx = NULL; -static osSemaphoreId_t sem_right_rx = NULL; - -/* Private define ----------------------------------------------------------- */ - - -/* Private macro ------------------------------------------------------------ */ -/* Private typedef ---------------------------------------------------------- */ -/* Private variables -------------------------------------------------------- */ -// static RIS_MotorData_t raw_left __attribute__ ((section(".AXI_SRAM"))); -static uint8_t raw_left_buff[16] __attribute__ ((section(".AXI_SRAM"))); -static uint8_t raw_right_buff[16] __attribute__ ((section(".AXI_SRAM"))); -// static RIS_MotorData_t raw_right __attribute__ ((section(".AXI_SRAM"))); -static MotorCmd_t motor_cmd __attribute__ ((section(".AXI_SRAM"))); - -static osThreadId_t thread_alert; -static GO_t *go_rx; -static bool inited = false; - -/* Private function -------------------------------------------------------- */ - -// static void GO_LeftRxCpltCallback(void) { -// osMessageQueuePut(go_rx->msgq_raw, &raw_left_buff, 0, 0); -// osSemaphoreRelease(sem_left_rx); // 通知接收完成 - // memset(raw_left_buff, 0, sizeof(raw_left_buff)); // 清空缓存区 - // HAL_UART_Receive_DMA(BSP_UART_GetHandle(BSP_UART_LEFT_LEG), - // (uint8_t *)&raw_left, sizeof(RIS_MotorData_t)); -// } -// static void GO_RightRxCpltCallback(void) { -// osMessageQueuePut(go_rx->msgq_raw, &raw_right_buff, 0, 0); -// osSemaphoreRelease(sem_right_rx); // 通知接收完成 - // memset(raw_right_buff, 0, sizeof(raw_right_buff)); // 清空缓存区 - // HAL_UART_Receive_DMA(BSP_UART_GetHandle(BSP_UART_RIGHT_LEG), - // (uint8_t *)&raw_right, sizeof(RIS_MotorData_t)); -// } - -/* Exported functions ------------------------------------------------------- */ - -int8_t GO_Init(GO_t *go, const GO_UART_Params_t *param){ - if (go == NULL) return DEVICE_ERR_NULL; - if (inited) return DEVICE_ERR_INITED; - if ((thread_alert = osThreadGetId()) == NULL) return DEVICE_ERR_NULL; - - go_rx->msgq_raw = osMessageQueueNew(36, 16u, NULL); - - go->param = param; - sem_left_rx = osSemaphoreNew(1, 0, NULL); - sem_right_rx = osSemaphoreNew(1, 0, NULL); - // BSP_UART_RegisterCallback(BSP_UART_LEFT_LEG, BSP_UART_RX_CPLT_CB, - // GO_LeftRxCpltCallback); - // BSP_UART_RegisterCallback(BSP_UART_RIGHT_LEG, BSP_UART_RX_CPLT_CB, - // GO_RightRxCpltCallback); - - inited = true; - return DEVICE_OK; -} - -int8_t GO_Motor_Control(GO_MotorOutput_t *output, GO_t *go){ - if (go == NULL) return DEVICE_ERR_NULL; - if (output == NULL) return DEVICE_ERR_NULL; - memset(raw_right_buff, 0, sizeof(raw_right_buff)); - memset(raw_left_buff, 0, sizeof(raw_left_buff)); - // HAL_UART_Receive_DMA(BSP_UART_GetHandle(BSP_UART_LEFT_LEG), - // (uint8_t *)&raw_left_buff, 16); - // HAL_UART_Receive_DMA(BSP_UART_GetHandle(BSP_UART_RIGHT_LEG), - // (uint8_t *)&raw_right_buff, 16); - - for (uint8_t i = 0; i < GO_MOTOR_NUM; i++) { - motor_cmd.id = i; - motor_cmd.mode = GO_MOTOR_MODE_FOC; - motor_cmd.T = output->as_array[i].tor_des; - motor_cmd.W = output->as_array[i].spd_des; - motor_cmd.Pos = output->as_array[i].pos_des; - motor_cmd.K_P = output->as_array[i].k_pos; - motor_cmd.K_W = output->as_array[i].k_spd; - - modify_data(&motor_cmd); - - if (i <= GO_MOTOR_LF_CALF || (i >= GO_MOTOR_LR_HIP && i <= GO_MOTOR_LR_CALF)) { - HAL_UART_Transmit_DMA(BSP_UART_GetHandle(BSP_UART_LEFT_LEG), - (uint8_t *)&motor_cmd.motor_send_data, - sizeof(RIS_ControlData_t)); - - HAL_UART_Receive(BSP_UART_GetHandle(BSP_UART_LEFT_LEG), - (uint8_t *)&raw_left_buff, 16, 5); - } else { - HAL_UART_Transmit_DMA(BSP_UART_GetHandle(BSP_UART_RIGHT_LEG), - (uint8_t *)&motor_cmd.motor_send_data, - sizeof(RIS_ControlData_t)); - - HAL_UART_Receive(BSP_UART_GetHandle(BSP_UART_RIGHT_LEG), - (uint8_t *)&raw_right_buff, 16, 5); - } - - } - return DEVICE_OK; -} - -int8_t GO_StoreMsg(GO_t *go, RIS_MotorData_t *go_rx){ - - return DEVICE_OK; -} diff --git a/User/device/go.c b/User/device/go.c index a339118..586e224 100644 --- a/User/device/go.c +++ b/User/device/go.c @@ -47,6 +47,7 @@ int8_t GO_Motor_Control(GO_t *go){ go->motor.output.id[i].mode = GO_MOTOR_MODE_FOC; // 设置电机模式 modify_data(&go->motor.output.id[i]); if (i < GO_MOTOR_NUM / 4 || i >= GO_MOTOR_NUM/2 && i < GO_MOTOR_NUM * 3 / 4) { + // if (i < GO_MOTOR_NUM / 4) { HAL_UART_Transmit(BSP_UART_GetHandle(go->uart_param->left_leg), (uint8_t *)&go->motor.output.id[i].motor_send_data, sizeof(go->motor.output.id[i].motor_send_data), 1); diff --git a/User/device/n100.c b/User/device/n100.c new file mode 100644 index 0000000..4d9cb1f --- /dev/null +++ b/User/device/n100.c @@ -0,0 +1,156 @@ +/* + N100 陀螺仪数据 +*/ + +/* Includes ----------------------------------------------------------------- */ +#include "n100.h" + +#include +#include "device/device.h" + +#include "bsp/uart.h" +#include "component/user_math.h" +#include "component/crc8.h" +#include "component/crc16.h" +/* Private define ----------------------------------------------------------- */ +#define RX_BUFF_SIZE 56 +#define N100_BAG_HEAD 0xFC +#define N100_BAG_END 0xFD +// #define RX_BUFF_SIZE (sizeof(N100_AHRS_t)) +/* Private macro ------------------------------------------------------------ */ +/* Private typedef ---------------------------------------------------------- */ +/* Private variables -------------------------------------------------------- */ +static volatile uint32_t drop_message = 0; + +static uint8_t rxbuf[RX_BUFF_SIZE] __attribute__ ((section(".AXI_SRAM"))); + +// static N100_AHRS_t rxbuf __attribute__((section(".AXI_SRAM"))); + +static bool inited = false; + +static osThreadId_t thread_alert; + +/* Private function -------------------------------------------------------- */ + +static void N100_RxCpltCallback(void) { + osThreadFlagsSet(thread_alert, SIGNAL_N100_NEW_DATA); +} + +static void N100_ErrorCallback(void) { + N100_Restart(); +} + +static void N100_Decode(N100_t *n100, const uint8_t *rxbuf) { + if (n100 == NULL || rxbuf == NULL) return; + + size_t offset = 0; + + // header + n100->rx_raw.header.head = rxbuf[offset++]; + n100->rx_raw.header.cmd = rxbuf[offset++]; + n100->rx_raw.header.len = rxbuf[offset++]; + n100->rx_raw.header.count = rxbuf[offset++]; + n100->rx_raw.header.crc8 = rxbuf[offset++]; + + // data.crc16 + n100->rx_raw.data.crc16 = (uint16_t)(rxbuf[offset] | (rxbuf[offset+1] << 8)); + offset += 2; + + //都是float32 + memcpy(&n100->rx_raw.data.gyro.x, rxbuf + offset, 4); + offset += 4; + memcpy(&n100->rx_raw.data.gyro.y, rxbuf + offset, 4); + offset += 4; + memcpy(&n100->rx_raw.data.gyro.z, rxbuf + offset, 4); + offset += 4; + + memcpy(&n100->rx_raw.data.eulr.rol, rxbuf + offset, 4); + offset += 4; + memcpy(&n100->rx_raw.data.eulr.pit, rxbuf + offset, 4); + offset += 4; + memcpy(&n100->rx_raw.data.eulr.yaw, rxbuf + offset, 4); + offset += 4; + // data.quat + memcpy(&n100->rx_raw.data.quat, rxbuf + offset, sizeof(AHRS_Quaternion_t)); + offset += sizeof(AHRS_Quaternion_t); + + // data.time + memcpy(&n100->rx_raw.data.time, rxbuf + offset, sizeof(int64_t)); + offset += sizeof(int64_t); + + // end + n100->rx_raw.end = rxbuf[offset]; +} + +// 直接对原始数据 rxbuf 校验 +static bool N100_Verify(const uint8_t *rxbuf) { + if (rxbuf == NULL) return false; + // 检查包头包尾 + if (rxbuf[0] != N100_BAG_HEAD || rxbuf[RX_BUFF_SIZE - 1] != N100_BAG_END) { + drop_message++; + return false; + } + // // CRC8 校验(包头4字节) + // if (rxbuf[4] != crc8_calc(rxbuf, 4)) { + // drop_message++; + // return false; + // } + // // CRC16 校验(数据段,从第7字节开始,长度为RX_BUFF_SIZE-8) + // uint16_t crc16 = (uint16_t)(rxbuf[5] | (rxbuf[6] << 8)); + // if (crc16 != crc16_calc(rxbuf + 7, RX_BUFF_SIZE - 8)) { + // drop_message++; + // return false; + // } + return true; +} + +/* Exported functions ------------------------------------------------------- */ +int8_t N100_Init(N100_t *n100){ + ASSERT(n100); + if (inited) return DEVICE_ERR_INITED; + if ((thread_alert = osThreadGetId()) == NULL) return DEVICE_ERR_NULL; + + BSP_UART_RegisterCallback(BSP_UART_IMU_N100, BSP_UART_RX_CPLT_CB, N100_RxCpltCallback); + BSP_UART_RegisterCallback(BSP_UART_IMU_N100, BSP_UART_ERROR_CB, N100_ErrorCallback); + inited = true; + return DEVICE_OK; +} + +int8_t N100_Restart(void) { + __HAL_UART_DISABLE(BSP_UART_GetHandle(BSP_UART_IMU_N100)); + __HAL_UART_ENABLE(BSP_UART_GetHandle(BSP_UART_IMU_N100)); + return DEVICE_OK; +} + +int8_t N100_StartReceiving(N100_t *n100) { + if (HAL_UART_Receive_DMA(BSP_UART_GetHandle(BSP_UART_IMU_N100), rxbuf, RX_BUFF_SIZE) != HAL_OK) + return DEVICE_ERR; + return DEVICE_OK; +} + +bool N100_WaitDmaCplt(void) { + return (osThreadFlagsWait(SIGNAL_N100_NEW_DATA, osFlagsWaitAll, 200) == + SIGNAL_N100_NEW_DATA); +} + +int8_t N100_ParseData (N100_t *n100) { + if (n100 == NULL) return DEVICE_ERR_NULL; + // 先校验原始数据 + if (!N100_Verify(rxbuf)) { + return DEVICE_ERR; + } + // 校验通过后再解码 + N100_Decode(n100, rxbuf); + n100->eulr = n100->rx_raw.data.eulr; + n100->gyro = n100->rx_raw.data.gyro; + n100->quat = n100->rx_raw.data.quat; + + return DEVICE_OK; +} + +int8_t N100_HandleOffline(N100_t *n100) { + if (n100 == NULL) return DEVICE_ERR_NULL; + /*清空n100结构体*/ + memset(n100, 0, sizeof(*n100)); + return DEVICE_OK; +} \ No newline at end of file diff --git a/User/device/n100.h b/User/device/n100.h new file mode 100644 index 0000000..e71728c --- /dev/null +++ b/User/device/n100.h @@ -0,0 +1,63 @@ +/* + N100 陀螺仪数据 +*/ + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ----------------------------------------------------------------- */ +#include +#include +#include + +#include "component/ahrs.h" + +/* Exported constants ------------------------------------------------------- */ +/* Exported macro ----------------------------------------------------------- */ +/* Exported types ----------------------------------------------------------- */ + +typedef struct { + struct { + uint8_t head; + uint8_t cmd; + uint8_t len; + uint8_t count; + uint8_t crc8; + } header; /* 数据包头部 */ + struct { + uint16_t crc16; + AHRS_Gyro_t gyro; /* 陀螺仪数据 */ + AHRS_Eulr_t eulr; /* 欧拉角数据 */ + AHRS_Quaternion_t quat; /* 四元数数据 */ + int64_t time; /* 时间戳 */ + } data; /* 数据包内容 */ + uint8_t end; +} N100_AHRS_t; + + +typedef struct { + osThreadId_t thread_alert; + N100_AHRS_t rx_raw; + AHRS_Gyro_t gyro; /* 陀螺仪数据 */ + AHRS_Eulr_t eulr; /* 欧拉角数据 */ + AHRS_Quaternion_t quat; /* 四元数数据 */ +} N100_t; + +/* Exported functions prototypes -------------------------------------------- */ +int8_t N100_Init(N100_t *n100); +int8_t N100_Restart(void); + +int8_t N100_StartReceiving(N100_t *n100); +bool N100_WaitDmaCplt(void); +int8_t N100_ParseData (N100_t *n100); +int8_t N100_HandleOffline(N100_t *n100); + +#ifdef __cplusplus +} +#endif + + + diff --git a/User/module/chassis.c b/User/module/chassis.c index 69c80c6..a376412 100644 --- a/User/module/chassis.c +++ b/User/module/chassis.c @@ -10,12 +10,13 @@ #include "cmsis_os2.h" // #include "component/limiter.h" #include "device/go.h" - +#include "component/limiter.h" /* Private typedef ---------------------------------------------------------- */ /* Private define ----------------------------------------------------------- */ /*底盘默认高度*/ #define CHASSIS_DEFAULT_HEIGHT (0.2f) /* 底盘默认高度,单位:米 */ +#define CHASSIS_MAX_SPEED (0.03f) /* Private macro ------------------------------------------------------------ */ @@ -151,6 +152,7 @@ int8_t Chassis_Control(Chassis_t *c, const CMD_ChassisCmd_t *c_cmd, uint32_t now // c->output.id[i] = damping_torque; /* 设置阻尼力矩 */ c->output.id[i] = position_mode; /* 设置位置模式 */ } + // c->output.named.lf_thigh.Pos = 1.0f; /* 左前腿大腿位置 */ // c->output.named.lf_calf.Pos = 2.0f; /* 左前腿小腿位置 */ // c->output.named.rf_thigh.Pos = -1.0f; /* 右前腿大腿位置 */ @@ -171,6 +173,11 @@ int8_t Chassis_Control(Chassis_t *c, const CMD_ChassisCmd_t *c_cmd, uint32_t now } break; } + c->output.named.lf_hip.Pos = 0.0f; /* 左前腿髋关节位置 */ + c->output.named.lr_hip.Pos = 0.0f; /* 左后腿髋关节位置 */ + c->output.named.rf_hip.Pos = 0.0f; /* 右前腿髋关节位置 */ + c->output.named.rr_hip.Pos = 0.0f; /* 右后腿髋关节位置 */ + c->height = c->height + c_cmd->delta_hight * c->dt; /* 更新底盘高度 */ c->output.named.lf_thigh.Pos = c->height * 5; c->output.named.lf_calf.Pos = c->height * 10; @@ -181,8 +188,35 @@ int8_t Chassis_Control(Chassis_t *c, const CMD_ChassisCmd_t *c_cmd, uint32_t now c->output.named.rr_thigh.Pos = -c->height * 5; c->output.named.rr_calf.Pos = -c->height * 10; chassis_mode_states = CHASSIS_MODE_RECOVER; /* 更新状态 */ + + for (uint8_t i = 0; i < 4; i++) { + float target_pose[3] = {0.0,0.0,-0.2}; /* 目标位置 */ + float angle_pose[3]; + Kinematics_InverseKinematics(target_pose, &c->param->mech_param.length, angle_pose, &c->param->mech_param.sign.leg[i]); /* 逆运动学计算 */ + c->output.id[i * 3].Pos = angle_pose[0]; /* 髋关节位置 */ + c->output.id[i * 3 + 1].Pos = angle_pose[1]; /* 大腿位置 */ + c->output.id[i * 3 + 2].Pos = angle_pose[2]; /* 小腿位置 */ + } + // float target_pose[3] = {c_cmd->ctrl_vec.vx/10.0f, c_cmd->ctrl_vec.vy/10.0f, -0.2f}; /* 目标位置 */ + // float target_pose[3] = {0.0,0.0,-0.2}; /* 目标位置 */ + // float angle_pose[3]; + // Kinematics_InverseKinematics(target_pose, &c->param->mech_param.length, angle_pose, &c->param->mech_param.sign.leg[0]); /* 逆运动学计算 */ + // c->output.named.lf_hip.Pos = angle_pose[0]; /* 左前腿髋关节位置 */ + // c->output.named.lf_thigh.Pos = angle_pose[1]; /* 左前腿大腿位置 */ + // c->output.named.lf_calf.Pos = angle_pose[2]; /* 左前腿小腿位置 */ + break; } + + // Limit_ChassicOutput(&c->feedback, &c->output, 0.5, 0.0, 0.0); + for (uint8_t i = 0; i < GO_MOTOR_NUM; i++) { + /* 限制输出 */ + Limit_ChassicOutput(c->feedback.id[i].Pos, &c->output.id[i].Pos, + c->param->mech_param.ratio.id[i] * CHASSIS_MAX_SPEED, + c->param->mech_param.limit.max.id[i], + c->param->mech_param.limit.min.id[i]); + } + } void Chassis_DumpOutput(const Chassis_t *c, GO_ChassisCMD_t *out){ diff --git a/User/module/chassis.h b/User/module/chassis.h index c28e925..2b35bb9 100644 --- a/User/module/chassis.h +++ b/User/module/chassis.h @@ -11,6 +11,7 @@ extern "C" { /* Includes ----------------------------------------------------------------- */ #include "component/cmd.h" #include "component/filter.h" +#include "component/kinematics.h" #include "component/pid.h" #include "device/go.h" @@ -30,6 +31,13 @@ typedef enum { CHASSIS_TYPE_QUADRUPED, /* 四足机器人 */ } Chassis_Type_t; +typedef enum { + IMU_BOARD_BMI088, + IMU_WHEELREC_N100, + IMU_NUM, + IMU_ERROR, +} Chassis_ImuType_t; + // typedef union { // float id[GO_MOTOR_NUM]; /* 零点角度,单位:弧度 */ // struct { @@ -66,46 +74,32 @@ typedef union { } named; } joint_params; -// /*关节减速比*/ -// typedef union { -// float id[GO_MOTOR_NUM]; -// struct{ -// float lf_hip; /* 左前腿髋关节长度,单位:米 */ -// float lf_thigh; /* 左前腿大腿长度,单位:米 */ -// float lf_calf; /* 左前腿小腿长度,单位:米 */ -// float rf_hip; /* 右前腿髋关节长度,单位:米 */ -// float rf_thigh; /* 右前腿大腿长度,单位:米 */ -// float rf_calf; /* 右前腿小腿长度,单位:米 */ -// float lr_hip; /* 左后腿髋关节长度,单位:米 */ -// float lr_thigh; /* 左后腿大腿长度,单位:米 */ -// float lr_calf; /* 左后腿小腿长度,单位:米 */ -// float rr_hip; /* 右后腿髋关节长度,单位:米 */ -// float rr_thigh; /* 右后腿大腿长度,单位:米 */ -// float rr_calf; /* 右后腿小腿长度,单位:米 */ -// } named; -// } joint_ratio; +typedef struct { + joint_params min; + joint_params max; /* 关节的最小和最大角度,单位:弧度 */ +} joint_limits; - - - // struct { - // float x; /* 机械中心X坐标,单位:米 */ - // float y; /* 机械中心Y坐标,单位:米 */ - // float z; /* 机械中心Z坐标,单位:米 */ - // } mech_center; /* 机械中心位置 */ +typedef union { + Kinematics_Sign_t leg[GO_MOTOR_NUM/3]; + struct { + Kinematics_Sign_t lf; /* 左前腿 */ + Kinematics_Sign_t rf; /* 右前腿 */ + Kinematics_Sign_t lr; /* 左后腿 */ + Kinematics_Sign_t rr; /* 右后腿 */ + } named; +} Kinematics_DirectionSign_t; - - // typedef struct { - // /*三个关节距离*/ typedef struct{ joint_params zero_point; /* 零点角度,单位:弧度 */ - joint_params length; /* 关节长度,单位:米 */ + + // joint_params length; /* 关节长度,单位:米 */ + joint_params ratio; /* 关节减速比 */ - struct { - float x; /* 机械中心X坐标,单位:米 */ - float y; /* 机械中心Y坐标,单位:米 */ - float z; /* 机械中心Z坐标,单位:米 */ - } mech_center; /* 机械中心位置 */ + joint_limits limit; /* 关节的最小和最大角度,单位:弧度 */ + Kinematics_LinkLength_t length; /* 关节长度,单位:米 */ + Kinematics_LegOffset_t offset; /* 关节偏移,单位:米 */ + Kinematics_DirectionSign_t sign; /* 关节侧向标志(左前/左后为-1,右前/右后为1) */ }Chassis_Mech_Params_t; diff --git a/User/module/config.c b/User/module/config.c deleted file mode 100644 index de5d622..0000000 --- a/User/module/config.c +++ /dev/null @@ -1,116 +0,0 @@ -/* - * 配置相关 - */ - -#include "config.h" - -#include -#include - -#include "bsp/flash.h" - -#define CONFIG_BASE_ADDRESS (ADDR_FLASH_SECTOR_11) - -Config_t param_default = { - - .uart = { - .left_leg = BSP_UART_LEFT_LEG, - .right_leg = BSP_UART_RIGHT_LEG, - }, - .cali = { - .bmi088 = { - .gyro_offset = {0.0f, 0.0f, 0.0f}, - }, - }, - .chassis = { - .type = CHASSIS_TYPE_QUADRUPED, - - .torque_pid_param = { - .k = 1.0f, /* 控制器增益 */ - .p = 1.0f, /* 比例项增益 */ - .i = 0.0f, /* 积分项增益 */ - .d = 0.0f, /* 微分项增益 */ - .i_limit = 0.0f, /* 积分项上限 */ - .out_limit = 0.0f, /* 输出绝对值限制 */ - .d_cutoff_freq = 10.0f, /* D项低通截止频率 */ - .range = -1.0f, /* 计算循环误差时使用,大于0时启用 */ - }, - - .low_pass_cutoff_freq = { - .in = -1.0f, - .out = -1.0f, - }, - - .mech_param = { - .length = { - .named = { - .lf_hip = 0.0861f, /* 左前腿髋关节长度,单位:米 */ - .lf_thigh = 0.20f, /* 左前腿大腿长度,单位:米 */ - .lf_calf = 0.20f, /* 左前腿小腿长度,单位:米 */ - .rf_hip = 0.0861f, /* 右前腿髋关节长度,单位:米 */ - .rf_thigh = 0.20f, /* 右前腿大腿长度,单位:米 */ - .rf_calf = 0.20f, /* 右前腿小腿长度,单位:米 */ - .lr_hip = 0.0861f, /* 左后腿髋关节长度,单位:米 */ - .lr_thigh = 0.20f, /* 左后腿大腿长度,单位:米 */ - .lr_calf = 0.20f, /* 左后腿小腿长度,单位:米 */ - .rr_hip = 0.0861f, /* 右后腿髋关节长度,单位:米 */ - .rr_thigh = 0.20f, /* 右后腿大腿长度,单位:米 */ - .rr_calf = 0.20f, /* 右后腿小腿长度,单位:米 */ - } - }, - .zero_point = { - .named = { - .lf_hip = 1.98f, /* 左前腿髋关节零点角度,单位:弧度 */ - .lf_thigh = -2.86f, /* 左前腿大腿零点角度,单位:弧度 */ - .lf_calf = -32.367f, /* 左前腿小腿零点角度,单位:弧度 */ - .rf_hip = 5.56f, /* 右前腿髋关节零点角度,单位:弧度 */ - .rf_thigh = 12.92f, /* 右前腿大腿零点角度,单位:弧度 */ - .rf_calf = 37.047f, /* 右前腿小腿零点角度,单位:弧度 */ - .lr_hip = 4.76f, /* 左后腿髋关节零点角度,单位:弧度 */ - .lr_thigh = -4.57f, /* 左后腿大腿零点角度,单位:弧度 */ - .lr_calf = -35.847f, /* 左后腿小腿零点角度,单位:弧度 */ - .rr_hip = 2.42f, /* 右后腿髋关节零点角度,单位:弧度 */ - .rr_thigh = 8.85f, /* 右后腿大腿零点角度,单位:弧度 */ - .rr_calf = 38.55f, /* 右后腿小腿零点角度,单位:弧度 */ - } - }, - .ratio = { - .named = { - .lf_hip = 6.33f, /* 左前腿髋关节减速比 */ - .lf_thigh = 6.33f, /* 左前腿大腿减速比 */ - .lf_calf = 12.66f, /* 左前腿小腿减速比 */ - .rf_hip = 6.33f, /* 右前腿髋关节减速比 */ - .rf_thigh = 6.33f, /* 右前腿大腿减速比 */ - .rf_calf = 12.66f, /* 右前腿小腿减速比 */ - .lr_hip = 6.33f, /* 左后腿髋关节减速比 */ - .lr_thigh = 6.33f, /* 左后腿大腿减速比 */ - .lr_calf = 12.66f, /* 左后腿小腿减速比 */ - .rr_hip = 6.33f, /* 右后腿髋关节减速比 */ - .rr_thigh = 6.33f, /* 右后腿大腿减速比 */ - .rr_calf = 12.66f, /* 右后腿小腿减速比 */ - } - }, - .mech_center = { - .x = 0.0f, /* 机械中心X坐标,单位:米 */ - .y = 0.0f, /* 机械中心Y坐标,单位:米 */ - .z = 0.0f, /* 机械中心Z坐标,单位:米 */ - }, /* 机械中心位置 */ - - }, - - - }, -}; /* param_default */ - - - -/** - * \brief 获取配置信息 - * - * \param cfg 配置信息 - */ -void Config_Get(Config_t *cfg) { - //直接把param_default传进去 - if (cfg == NULL) return; // 检查参数是否为NULL - memcpy(cfg, ¶m_default, sizeof(Config_t)); // 复制默认配置到cfg -} diff --git a/User/module/config.h b/User/module/config.h index a813e63..a15272d 100644 --- a/User/module/config.h +++ b/User/module/config.h @@ -37,7 +37,8 @@ typedef struct { struct { BMI088_Cali_t bmi088; } cali; /* 校准 */ - + Chassis_ImuType_t chassis_imu_type; /* 底盘IMU类型 */ + } Config_t; /** diff --git a/User/task/atti_esti.c b/User/task/atti_esti.c index 8558fcb..4d8b66d 100644 --- a/User/task/atti_esti.c +++ b/User/task/atti_esti.c @@ -7,9 +7,11 @@ #include "task/user_task.h" /* USER INCLUDE BEGIN*/ #include "bsp/pwm.h" +#include "bsp/gpio.h" #include "component/ahrs.h" #include "component/pid.h" #include "device/bmi088.h" +#include "device/n100.h" #include "task/user_task.h" /* USER INCLUDE END*/ @@ -19,6 +21,8 @@ /* Private variables -------------------------------------------------------- */ /* USER STRUCT BEGIN*/ BMI088_t bmi088; +N100_t n100; + BMI088_Cali_t bmi088_cali = { .gyro_offset = {0.0f, 0.0f, 0.0f}, }; /* BMI088校准数据 */ @@ -48,44 +52,81 @@ void Task_atti_esti(void *argument) { osDelay(ATTI_ESTI_INIT_DELAY); /* 延时一段时间再开启任务 */ /* USER CODE INIT BEGIN*/ - BMI088_Init(&bmi088, &bmi088_cali); /* 初始化BMI088传感器 */ - AHRS_Init(&gimbal_ahrs, &mage, BMI088_GetUpdateFreq(&bmi088)); /* 初始化姿态解算算法 */ - /* 初始化IMU温度控制PID,防止温漂 */ - PID_Init(&imu_temp_ctrl_pid, KPID_MODE_NO_D, - 1.0f / BMI088_GetUpdateFreq(&bmi088), &imu_temp_ctrl_pid_param); - // BSP_PWM_Start(BSP_PWM_IMU_HEAT); + switch (task_runtime.config.chassis_imu_type) { + case IMU_BOARD_BMI088: + BMI088_Init(&bmi088, &bmi088_cali); /* 初始化BMI088传感器 */ + AHRS_Init(&gimbal_ahrs, &mage, BMI088_GetUpdateFreq(&bmi088)); /* 初始化姿态解算算法 */ + /* 初始化IMU温度控制PID,防止温漂 */ + // PID_Init(&imu_temp_ctrl_pid, KPID_MODE_NO_D, + // 1.0f / BMI088_GetUpdateFreq(&bmi088), &imu_temp_ctrl_pid_param); + // BSP_PWM_Start(BSP_PWM_IMU_HEAT); + break; + case IMU_WHEELREC_N100: + N100_Init(&n100); + BSP_GPIO_SetPin(BSP_GPIO_5V_EN, BSP_GPIO_ON); /* 打开5V电源 */ + break; + default: + break; + } /* USER CODE INIT END*/ while (1) { /* USER CODE BEGIN */ - /* 等待IMU新数据 */ - BMI088_WaitNew(); + switch (task_runtime.config.chassis_imu_type) { + case IMU_BOARD_BMI088: + /* 等待IMU新数据 */ + BMI088_WaitNew(); + /* 开始数据接收DMA,加速度计和陀螺仪共用同一个SPI接口, + * 一次只能开启一个DMA + */ + BMI088_AcclStartDmaRecv(); + BMI088_AcclWaitDmaCplt(); - /* 开始数据接收DMA,加速度计和陀螺仪共用同一个SPI接口, - * 一次只能开启一个DMA - */ - BMI088_AcclStartDmaRecv(); - BMI088_AcclWaitDmaCplt(); + BMI088_GyroStartDmaRecv(); + BMI088_GyroWaitDmaCplt(); - BMI088_GyroStartDmaRecv(); - BMI088_GyroWaitDmaCplt(); + /* 锁住RTOS内核防止数据解析过程中断,造成错误 */ + osKernelLock(); + /* 接收完所有数据后,把数据从原始字节加工成方便计算的数据 */ + BMI088_ParseAccl(&bmi088); + BMI088_ParseGyro(&bmi088); + + /* 根据设备接收到的数据进行姿态解析 */ + AHRS_Update(&gimbal_ahrs, &bmi088.accl, &bmi088.gyro, &mage); + + /* 根据解析出来的四元数计算欧拉角 */ + AHRS_GetEulr(&eulr_to_send, &gimbal_ahrs); + osKernelUnlock(); + /* 将欧拉角数据放入消息队列 */ + osMessageQueueReset(task_runtime.msgq.body.eulr_imu); + osMessageQueuePut(task_runtime.msgq.body.eulr_imu, &eulr_to_send, 0, 0); /* 将欧拉角数据放入消息队列 */ + + /* PID控制IMU温度,PWM输出 */ + // BSP_PWM_Set(BSP_PWM_IMU_HEAT, + // PID_Calc(&imu_temp_ctrl_pid, 40.0f, bmi088.temp, 0.0f, 0.01f)); + break; + case IMU_WHEELREC_N100: + N100_StartReceiving(&n100); + if (N100_WaitDmaCplt()) { + osKernelLock(); + N100_ParseData(&n100); + osKernelUnlock(); + } else { + N100_HandleOffline(&n100); + } + osMessageQueueReset(task_runtime.msgq.body.eulr_imu); /* 重置消息队列 */ + osMessageQueuePut(task_runtime.msgq.body.eulr_imu, &n100.eulr, 0, 0); /* 将欧拉角数据放入消息队列 */ + + break; + default: + + break; + + } - /* 锁住RTOS内核防止数据解析过程中断,造成错误 */ - osKernelLock(); - /* 接收完所有数据后,把数据从原始字节加工成方便计算的数据 */ - BMI088_ParseAccl(&bmi088); - BMI088_ParseGyro(&bmi088); - /* 根据设备接收到的数据进行姿态解析 */ - AHRS_Update(&gimbal_ahrs, &bmi088.accl, &bmi088.gyro, &mage); - /* 根据解析出来的四元数计算欧拉角 */ - AHRS_GetEulr(&eulr_to_send, &gimbal_ahrs); - osKernelUnlock(); - /* PID控制IMU温度,PWM输出 */ - // BSP_PWM_Set(BSP_PWM_IMU_HEAT, - // PID_Calc(&imu_temp_ctrl_pid, 40.0f, bmi088.temp, 0.0f, 0.01f)); /* USER CODE END */ } diff --git a/User/task/config.yaml b/User/task/config.yaml index c2094b2..43a7c64 100644 --- a/User/task/config.yaml +++ b/User/task/config.yaml @@ -37,14 +37,14 @@ function: Task_cmd name: cmd stack: 256 -- delay: 0 +- delay: 200 description: 四足控制 freq_control: true frequency: 800 function: Task_ctrl_leg name: ctrl_leg stack: 512 -- delay: 0 +- delay: 200 description: 底盘控制,接受反馈和命令,计算输出给到两测腿控制 freq_control: true frequency: 500 diff --git a/User/task/ctrl_leg.c b/User/task/ctrl_leg.c index 684e586..4851d0f 100644 --- a/User/task/ctrl_leg.c +++ b/User/task/ctrl_leg.c @@ -40,9 +40,7 @@ void Task_ctrl_leg(void *argument) { uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计时 */ while (1) { tick += delay_tick; /* 计算下一个唤醒时刻 */ - /* USER CODE BEGIN */ - // osMessageQueueGet(task_runtime.msgq.chassis.output, &cmd, NULL, 0); /* 从消息队列中获取底盘控制命令 */ if (osMessageQueueGet(task_runtime.msgq.chassis.output, &go_cmd, NULL, 0) == osOK) { /* 从消息队列中获取底盘控制命令 */ GO_ParseCmd(&go, &go_cmd); /* 解析底盘控制命令 */ } diff --git a/User/task/init.c b/User/task/init.c index 82d2981..f5c28ac 100644 --- a/User/task/init.c +++ b/User/task/init.c @@ -45,6 +45,7 @@ void Task_Init(void *argument) { task_runtime.msgq.cmd.chassis = osMessageQueueNew(2u, sizeof(CMD_ChassisCmd_t), NULL); task_runtime.msgq.chassis.feefback = osMessageQueueNew(2u, sizeof(GO_ChassisFeedback_t), NULL); task_runtime.msgq.chassis.output = osMessageQueueNew(2u, sizeof(GO_ChassisCMD_t), NULL); + task_runtime.msgq.body.eulr_imu = osMessageQueueNew(2u, sizeof(AHRS_Eulr_t), NULL); /* USER MESSAGE END */ osKernelUnlock(); // 解锁内核 diff --git a/User/task/user_task.h b/User/task/user_task.h index c55a80c..8f9bdba 100644 --- a/User/task/user_task.h +++ b/User/task/user_task.h @@ -16,7 +16,7 @@ extern "C" { #define TEST_FREQ (1000) #define MONITOR_FREQ (100) #define CMD_FREQ (500) -#define CTRL_LEG_FREQ (500) +#define CTRL_LEG_FREQ (800) #define CTRL_CHASSIS_FREQ (500) /* 任务初始化延时ms */ @@ -27,8 +27,8 @@ extern "C" { #define CLI_INIT_DELAY (0) #define MONITOR_INIT_DELAY (0) #define CMD_INIT_DELAY (0) -#define CTRL_LEG_INIT_DELAY (0) -#define CTRL_CHASSIS_INIT_DELAY (0) +#define CTRL_LEG_INIT_DELAY (200) +#define CTRL_CHASSIS_INIT_DELAY (200) /* Exported defines --------------------------------------------------------- */ /* Exported macro ----------------------------------------------------------- */ @@ -51,6 +51,10 @@ typedef struct { /* USER MESSAGE BEGIN */ struct { // osMessageQueueId_t user_msg; /* 用户自定义任务消息队列 */ + + struct { + osMessageQueueId_t eulr_imu; + } body; struct { struct { osMessageQueueId_t rc; /* 原始数据消息队列 */ diff --git a/Utils/Kinematics.m b/Utils/Kinematics.m new file mode 100644 index 0000000..f3104d9 --- /dev/null +++ b/Utils/Kinematics.m @@ -0,0 +1,221 @@ +function quadruped_leg_visualization() + % 四足机器人单腿运动学可视化 + + % 清除之前的图形 + close all; + clc; + + % 定义腿部参数 (单位: 米) + leg_params.upper_leg_length = 0.15; + leg_params.lower_leg_length = 0.15; + leg_params.hip_offset_x = 0.05; + leg_params.hip_offset_z = -0.02; + leg_params.hip_yaw_offset = 0.01; + leg_params.knee_sign = 1; % 1或-1,取决于机械设计 + + % 目标位置 (在髋关节坐标系中) + target_pos = [0.2, 0.1, -0.25]; % x, y, z + + % 计算逆运动学 (右腿hip_yaw_sign=1,左腿=-1) + joint_angles = leg_inverse_kinematics(target_pos, leg_params, 1); + + % 显示计算结果 + disp('关节角度 (弧度):'); + disp(['髋关节偏航 (hip yaw): ', num2str(joint_angles(1)), ' rad']); + disp(['髋关节滚动 (hip roll): ', num2str(joint_angles(2)), ' rad']); + disp(['髋关节俯仰 (hip pitch): ', num2str(joint_angles(3)), ' rad']); + disp(['膝关节 (knee): ', num2str(joint_angles(4)), ' rad']); + + disp('关节角度 (度):'); + disp(['髋关节偏航 (hip yaw): ', num2str(rad2deg(joint_angles(1))), '°']); + disp(['髋关节滚动 (hip roll): ', num2str(rad2deg(joint_angles(2))), '°']); + disp(['髋关节俯仰 (hip pitch): ', num2str(rad2deg(joint_angles(3))), '°']); + disp(['膝关节 (knee): ', num2str(rad2deg(joint_angles(4))), '°']); + + % 可视化腿部 + visualize_leg(joint_angles, leg_params, target_pos); +end + +function joint_angles = leg_inverse_kinematics(target_pos, leg_params, hip_yaw_sign) + % 逆运动学计算函数 + + % 从参数字典中提取参数 + L1 = leg_params.upper_leg_length; + L2 = leg_params.lower_leg_length; + offset_x = leg_params.hip_offset_x; + offset_z = leg_params.hip_offset_z; + yaw_offset = leg_params.hip_yaw_offset; + knee_sign = leg_params.knee_sign; + + % 第一步:计算髋关节偏航角 (hip yaw) + x = target_pos(1); + y = target_pos(2); + z = target_pos(3); + + x = x - offset_x; + z = z - offset_z; + + % 使用迭代法处理yaw offset + theta_yaw = atan2(hip_yaw_sign * y, x); + for i = 1:3 + % 计算yaw旋转后的位置 + x_rot = x * cos(theta_yaw) + hip_yaw_sign * y * sin(theta_yaw); + y_rot = -x * sin(theta_yaw) + hip_yaw_sign * y * cos(theta_yaw); + + % 考虑yaw offset + x_rot = x_rot - yaw_offset * (1 - cos(theta_yaw)); + y_rot = y_rot + yaw_offset * sin(theta_yaw); + + theta_yaw = atan2(hip_yaw_sign * y_rot, x_rot); + end + + % 第二步:计算髋关节滚转角 (hip roll) 和俯仰角 (hip pitch) + x_rot = x * cos(theta_yaw) + hip_yaw_sign * y * sin(theta_yaw) - yaw_offset; + z_rot = z; + + % 计算髋关节滚转角 + L = sqrt(x_rot^2 + z_rot^2); + theta_roll = atan2(z_rot, x_rot); + + % 计算髋关节俯仰角和膝关节角度 + D = (L^2 - L1^2 - L2^2) / (2 * L1 * L2); + D = max(min(D, 1.0), -1.0); % 确保数值在有效范围内 + + theta_knee = knee_sign * acos(D); + + alpha = atan2(L2 * sin(theta_knee), L1 + L2 * cos(theta_knee)); + theta_pitch = alpha + theta_roll; + + % 返回关节角度 (hip_yaw, hip_roll, hip_pitch, knee) + joint_angles = [theta_yaw, theta_roll, theta_pitch, theta_knee]; +end + +function visualize_leg(joint_angles, leg_params, target_pos) + % 可视化腿部运动学 + + % 提取参数 + L1 = leg_params.upper_leg_length; + L2 = leg_params.lower_leg_length; + offset_x = leg_params.hip_offset_x; + offset_z = leg_params.hip_offset_z; + yaw_offset = leg_params.hip_yaw_offset; + + % 提取关节角度 + theta_yaw = joint_angles(1); + theta_roll = joint_angles(2); + theta_pitch = joint_angles(3); + theta_knee = joint_angles(4); + + % 创建图形窗口 + figure('Name', '四足机器人单腿运动学可视化', 'NumberTitle', 'off', 'Position', [100, 100, 1200, 800]); + + % 1. 3D视图 + subplot(2,2,[1,3]); + hold on; + grid on; + axis equal; + view(3); + xlabel('X (m)'); + ylabel('Y (m)'); + zlabel('Z (m)'); + title('3D视图'); + + % 绘制坐标系 + plot3([0, 0.1], [0, 0], [0, 0], 'r', 'LineWidth', 2); % X轴 + plot3([0, 0], [0, 0.1], [0, 0], 'g', 'LineWidth', 2); % Y轴 + plot3([0, 0], [0, 0], [0, 0.1], 'b', 'LineWidth', 2); % Z轴 + + % 计算关节位置 + % 髋关节位置 (考虑了offset) + hip_pos = [offset_x, 0, offset_z]; + + % 应用yaw旋转 + R_yaw = [cos(theta_yaw), -sin(theta_yaw), 0; + sin(theta_yaw), cos(theta_yaw), 0; + 0, 0, 1]; + + % 应用roll旋转 (在yaw旋转后的坐标系中) + R_roll = [cos(theta_roll), 0, sin(theta_roll); + 0, 1, 0; + -sin(theta_roll), 0, cos(theta_roll)]; + + % 应用pitch旋转 + R_pitch = [1, 0, 0; + 0, cos(theta_pitch), -sin(theta_pitch); + 0, sin(theta_pitch), cos(theta_pitch)]; + + % 计算大腿末端位置 + upper_leg_end = hip_pos + (R_yaw * R_roll * R_pitch * [L1; 0; 0])'; + + % 计算小腿末端位置 + R_knee = [1, 0, 0; + 0, cos(theta_knee), -sin(theta_knee); + 0, sin(theta_knee), cos(theta_knee)]; + + lower_leg_end = upper_leg_end + (R_yaw * R_roll * R_pitch * R_knee * [L2; 0; 0])'; + + % 绘制连杆 + plot3([hip_pos(1), upper_leg_end(1)], ... + [hip_pos(2), upper_leg_end(2)], ... + [hip_pos(3), upper_leg_end(3)], 'b-o', 'LineWidth', 3, 'MarkerSize', 8); + + plot3([upper_leg_end(1), lower_leg_end(1)], ... + [upper_leg_end(2), lower_leg_end(2)], ... + [upper_leg_end(3), lower_leg_end(3)], 'r-o', 'LineWidth', 3, 'MarkerSize', 8); + + % 绘制目标位置 + plot3(target_pos(1), target_pos(2), target_pos(3), 'g*', 'MarkerSize', 15); + + % 绘制yaw offset + plot3([hip_pos(1), hip_pos(1)+yaw_offset*sin(theta_yaw)], ... + [0, yaw_offset*cos(theta_yaw)], ... + [hip_pos(3), hip_pos(3)], 'm--', 'LineWidth', 2); + + % 设置视图范围 + axis_range = max([L1+L2, abs(offset_x)+0.1, abs(offset_z)+0.1]); + xlim([-axis_range, axis_range]); + ylim([-axis_range, axis_range]); + zlim([-axis_range, axis_range]); + + % 2. X-Y平面视图 + subplot(2,2,2); + hold on; + grid on; + axis equal; + xlabel('X (m)'); + ylabel('Y (m)'); + title('X-Y平面视图'); + + plot([0, 0.1], [0, 0], 'r', 'LineWidth', 2); % X轴 + plot([0, 0], [0, 0.1], 'g', 'LineWidth', 2); % Y轴 + + plot([hip_pos(1), upper_leg_end(1)], [hip_pos(2), upper_leg_end(2)], 'b-o', 'LineWidth', 3, 'MarkerSize', 8); + plot([upper_leg_end(1), lower_leg_end(1)], [upper_leg_end(2), lower_leg_end(2)], 'r-o', 'LineWidth', 3, 'MarkerSize', 8); + plot(target_pos(1), target_pos(2), 'g*', 'MarkerSize', 15); + plot([hip_pos(1), hip_pos(1)+yaw_offset*sin(theta_yaw)], [0, yaw_offset*cos(theta_yaw)], 'm--', 'LineWidth', 2); + + xlim([-axis_range, axis_range]); + ylim([-axis_range, axis_range]); + + % 3. X-Z平面视图 + subplot(2,2,4); + hold on; + grid on; + axis equal; + xlabel('X (m)'); + ylabel('Z (m)'); + title('X-Z平面视图'); + + plot([0, 0.1], [0, 0], 'r', 'LineWidth', 2); % X轴 + plot([0, 0], [0, 0.1], 'b', 'LineWidth', 2); % Z轴 + + plot([hip_pos(1), upper_leg_end(1)], [hip_pos(3), upper_leg_end(3)], 'b-o', 'LineWidth', 3, 'MarkerSize', 8); + plot([upper_leg_end(1), lower_leg_end(1)], [upper_leg_end(3), lower_leg_end(3)], 'r-o', 'LineWidth', 3, 'MarkerSize', 8); + plot(target_pos(1), target_pos(3), 'g*', 'MarkerSize', 15); + + xlim([-axis_range, axis_range]); + ylim([-axis_range, axis_range]); + + % 添加图例 + legend({'大腿', '小腿', '目标位置', 'Yaw偏移'}, 'Location', 'best'); +end \ No newline at end of file diff --git a/Utils/Kinematics.py b/Utils/Kinematics.py new file mode 100644 index 0000000..c37dbca --- /dev/null +++ b/Utils/Kinematics.py @@ -0,0 +1,78 @@ +# test_kinematics.py + +import numpy as np + +def forward_kinematics(theta, link, side_sign): + l1 = link['hip'] * side_sign + l2 = -link['thigh'] + l3 = -link['calf'] + q1, q2, q3 = theta + + s1, s2, s3 = np.sin([q1, q2, q3]) + c1, c2, c3 = np.cos([q1, q2, q3]) + + c23 = c2 * c3 - s2 * s3 + s23 = s2 * c3 + c2 * s3 + + x = l3 * s23 + l2 * s2 + y = -l3 * s1 * c23 + l1 * c1 - l2 * c2 * s1 + z = l3 * c1 * c23 + l1 * s1 + l2 * c1 * c2 + return np.array([x, y, z]) + +def q1_ik(py, pz, l1): + L = np.sqrt(py*py + pz*pz - l1*l1) + return np.arctan2(pz*l1 + py*L, py*l1 - pz*L) + +def q3_ik(b3z, b4z, b): + temp = (b3z**2 + b4z**2 - b**2) / (2.0 * np.abs(b3z * b4z)) + temp = np.clip(temp, -1.0, 1.0) + q3 = np.arccos(temp) + return -(np.pi - q3) + +def q2_ik(q1, q3, px, py, pz, b3z, b4z): + a1 = py * np.sin(q1) - pz * np.cos(q1) + a2 = px + m1 = b4z * np.sin(q3) + m2 = b3z + b4z * np.cos(q3) + return np.arctan2(m1 * a1 + m2 * a2, m1 * a2 - m2 * a1) + +def inverse_kinematics(foot, link, side_sign): + px, py, pz = foot + b2y = link['hip'] * side_sign + b3z = -link['thigh'] + b4z = -link['calf'] + a = link['hip'] + c = np.sqrt(px*px + py*py + pz*pz) + b = np.sqrt(c*c - a*a) + if np.isnan(b) or b > abs(b3z) + abs(b4z): + return None + q1 = q1_ik(py, pz, b2y) + q3 = q3_ik(b3z, b4z, b) + q2 = q2_ik(q1, q3, px, py, pz, b3z, b4z) + return np.array([q1, q2, q3]) + +# ...existing code... + +def test(): + link = {'hip': 0.05, 'thigh': 0.2, 'calf': 0.2} + side_sign = 1 # 左前腿 + + # 输入一个目标点 + foot_target = np.array([0.0, 0.06, -0.2]) + print("目标足端位置:", foot_target) + + # 逆运动学求解关节角度 + theta = inverse_kinematics(foot_target, link, side_sign) + if theta is None: + print("目标点不可达!") + return + print("逆运动学解(关节角度,单位:弧度):", theta) + print("逆运动学解(关节角度,单位:度):", np.degrees(theta)) + + # 正运动学验算 + foot_check = forward_kinematics(theta, link, side_sign) + print("正运动学验算足端位置:", foot_check) + print("位置误差:", np.abs(foot_target - foot_check)) + +if __name__ == "__main__": + test()