加ai
This commit is contained in:
parent
70233c2f90
commit
bfb2368082
@ -82,10 +82,11 @@ target_sources(${CMAKE_PROJECT_NAME} PRIVATE
|
|||||||
# User/module sources
|
# User/module sources
|
||||||
User/module/balance_chassis.c
|
User/module/balance_chassis.c
|
||||||
User/module/config.c
|
User/module/config.c
|
||||||
User/module/shoot.c
|
|
||||||
User/module/gimbal.c
|
User/module/gimbal.c
|
||||||
|
User/module/shoot.c
|
||||||
|
|
||||||
# User/task sources
|
# User/task sources
|
||||||
|
User/task/ai.c
|
||||||
User/task/atti_esit.c
|
User/task/atti_esit.c
|
||||||
User/task/blink.c
|
User/task/blink.c
|
||||||
User/task/ctrl_chassis.c
|
User/task/ctrl_chassis.c
|
||||||
|
|||||||
@ -188,7 +188,17 @@
|
|||||||
<Ww>
|
<Ww>
|
||||||
<count>6</count>
|
<count>6</count>
|
||||||
<WinNumber>1</WinNumber>
|
<WinNumber>1</WinNumber>
|
||||||
<ItemText>chassis</ItemText>
|
<ItemText>ai</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>7</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>cmd_ai</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>8</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>gimbal</ItemText>
|
||||||
</Ww>
|
</Ww>
|
||||||
</WatchWindow1>
|
</WatchWindow1>
|
||||||
<Tracepoint>
|
<Tracepoint>
|
||||||
@ -1289,6 +1299,18 @@
|
|||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<bShared>0</bShared>
|
<bShared>0</bShared>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<GroupNumber>8</GroupNumber>
|
||||||
|
<FileNumber>83</FileNumber>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<tvExp>0</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<bDave2>0</bDave2>
|
||||||
|
<PathWithFileName>..\User\device\vision_bridge.c</PathWithFileName>
|
||||||
|
<FilenameWithoutPath>vision_bridge.c</FilenameWithoutPath>
|
||||||
|
<RteFlg>0</RteFlg>
|
||||||
|
<bShared>0</bShared>
|
||||||
|
</File>
|
||||||
</Group>
|
</Group>
|
||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
@ -1299,7 +1321,7 @@
|
|||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>83</FileNumber>
|
<FileNumber>84</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1311,7 +1333,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>84</FileNumber>
|
<FileNumber>85</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1323,7 +1345,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>85</FileNumber>
|
<FileNumber>86</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1335,7 +1357,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>86</FileNumber>
|
<FileNumber>87</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1355,7 +1377,7 @@
|
|||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>10</GroupNumber>
|
<GroupNumber>10</GroupNumber>
|
||||||
<FileNumber>87</FileNumber>
|
<FileNumber>88</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1367,7 +1389,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>10</GroupNumber>
|
<GroupNumber>10</GroupNumber>
|
||||||
<FileNumber>88</FileNumber>
|
<FileNumber>89</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1379,7 +1401,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>10</GroupNumber>
|
<GroupNumber>10</GroupNumber>
|
||||||
<FileNumber>89</FileNumber>
|
<FileNumber>90</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1391,7 +1413,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>10</GroupNumber>
|
<GroupNumber>10</GroupNumber>
|
||||||
<FileNumber>90</FileNumber>
|
<FileNumber>91</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1403,7 +1425,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>10</GroupNumber>
|
<GroupNumber>10</GroupNumber>
|
||||||
<FileNumber>91</FileNumber>
|
<FileNumber>92</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1415,7 +1437,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>10</GroupNumber>
|
<GroupNumber>10</GroupNumber>
|
||||||
<FileNumber>92</FileNumber>
|
<FileNumber>93</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1427,7 +1449,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>10</GroupNumber>
|
<GroupNumber>10</GroupNumber>
|
||||||
<FileNumber>93</FileNumber>
|
<FileNumber>94</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1439,7 +1461,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>10</GroupNumber>
|
<GroupNumber>10</GroupNumber>
|
||||||
<FileNumber>94</FileNumber>
|
<FileNumber>95</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1451,7 +1473,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>10</GroupNumber>
|
<GroupNumber>10</GroupNumber>
|
||||||
<FileNumber>95</FileNumber>
|
<FileNumber>96</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1463,7 +1485,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>10</GroupNumber>
|
<GroupNumber>10</GroupNumber>
|
||||||
<FileNumber>96</FileNumber>
|
<FileNumber>97</FileNumber>
|
||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -1473,6 +1495,18 @@
|
|||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<bShared>0</bShared>
|
<bShared>0</bShared>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<GroupNumber>10</GroupNumber>
|
||||||
|
<FileNumber>98</FileNumber>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<tvExp>0</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<bDave2>0</bDave2>
|
||||||
|
<PathWithFileName>..\User\task\ai.c</PathWithFileName>
|
||||||
|
<FilenameWithoutPath>ai.c</FilenameWithoutPath>
|
||||||
|
<RteFlg>0</RteFlg>
|
||||||
|
<bShared>0</bShared>
|
||||||
|
</File>
|
||||||
</Group>
|
</Group>
|
||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
|
|||||||
@ -829,6 +829,11 @@
|
|||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<FilePath>..\User\device\gimbal_imu.c</FilePath>
|
<FilePath>..\User\device\gimbal_imu.c</FilePath>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>vision_bridge.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\User\device\vision_bridge.c</FilePath>
|
||||||
|
</File>
|
||||||
</Files>
|
</Files>
|
||||||
</Group>
|
</Group>
|
||||||
<Group>
|
<Group>
|
||||||
@ -909,6 +914,11 @@
|
|||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<FilePath>..\User\task\user_task.h</FilePath>
|
<FilePath>..\User\task\user_task.h</FilePath>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>ai.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\User\task\ai.c</FilePath>
|
||||||
|
</File>
|
||||||
</Files>
|
</Files>
|
||||||
</Group>
|
</Group>
|
||||||
<Group>
|
<Group>
|
||||||
|
|||||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
152
User/device/ai.c
152
User/device/ai.c
@ -1,152 +0,0 @@
|
|||||||
/*
|
|
||||||
AI
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Includes ----------------------------------------------------------------- */
|
|
||||||
#include "ai.h"
|
|
||||||
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@ -1,69 +0,0 @@
|
|||||||
/*
|
|
||||||
AI
|
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Includes ----------------------------------------------------------------- */
|
|
||||||
#include <cmsis_os2.h>
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#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
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -344,7 +344,12 @@ Config_RobotParam_t robot_config = {
|
|||||||
.x = 0.0f,
|
.x = 0.0f,
|
||||||
.phi = -0.1f,
|
.phi = -0.1f,
|
||||||
|
|
||||||
}
|
},
|
||||||
|
|
||||||
|
.ai_param = {
|
||||||
|
.can = BSP_FDCAN_2,
|
||||||
|
.vision_id = 0x104,
|
||||||
|
},
|
||||||
/* USER CODE END robot_config */
|
/* USER CODE END robot_config */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -13,6 +13,7 @@ extern "C" {
|
|||||||
#include "module/shoot.h"
|
#include "module/shoot.h"
|
||||||
#include "module/balance_chassis.h"
|
#include "module/balance_chassis.h"
|
||||||
#include "module/gimbal.h"
|
#include "module/gimbal.h"
|
||||||
|
#include "device/vision_bridge.h"
|
||||||
/**
|
/**
|
||||||
* @brief 机器人参数配置结构体
|
* @brief 机器人参数配置结构体
|
||||||
* @note 在此添加您的配置参数
|
* @note 在此添加您的配置参数
|
||||||
@ -22,6 +23,7 @@ typedef struct {
|
|||||||
Shoot_Params_t shoot_param;
|
Shoot_Params_t shoot_param;
|
||||||
Chassis_Params_t chassis_param;
|
Chassis_Params_t chassis_param;
|
||||||
Gimbal_Params_t gimbal_param;
|
Gimbal_Params_t gimbal_param;
|
||||||
|
AI_Param_t ai_param;
|
||||||
/* USER CODE END Config_RobotParam */
|
/* USER CODE END Config_RobotParam */
|
||||||
} Config_RobotParam_t;
|
} Config_RobotParam_t;
|
||||||
|
|
||||||
|
|||||||
@ -163,7 +163,7 @@ int8_t Gimbal_UpdateIMU(Gimbal_t *gimbal){
|
|||||||
*
|
*
|
||||||
* \return 函数运行结果
|
* \return 函数运行结果
|
||||||
*/
|
*/
|
||||||
int8_t Gimbal_Control(Gimbal_t *g, Gimbal_CMD_t *g_cmd) {
|
int8_t Gimbal_Control(Gimbal_t *g, Gimbal_CMD_t *g_cmd, Gimbal_AI_t *g_ai) {
|
||||||
if (g == NULL || g_cmd == NULL) {
|
if (g == NULL || g_cmd == NULL) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -222,20 +222,44 @@ int8_t Gimbal_Control(Gimbal_t *g, Gimbal_CMD_t *g_cmd) {
|
|||||||
g->out.yaw = 0.0f;
|
g->out.yaw = 0.0f;
|
||||||
g->out.pit = 0.0f;
|
g->out.pit = 0.0f;
|
||||||
break;
|
break;
|
||||||
|
case GIMBAL_MODE_AI_CONTROL:
|
||||||
|
if (g_ai != NULL && g_ai->ctrl) {
|
||||||
|
g->setpoint.eulr.yaw = g_ai->yaw;
|
||||||
|
g->setpoint.eulr.pit = g_ai->pit;
|
||||||
|
|
||||||
|
/* 限位处理 - 使用圆周误差保持一致性 */
|
||||||
|
if (g->param->travel.yaw > 0) {
|
||||||
|
if (CircleError(g->setpoint.eulr.yaw, g->limit.yaw.max, M_2PI) > 0) {
|
||||||
|
g->setpoint.eulr.yaw = g->limit.yaw.max;
|
||||||
|
}
|
||||||
|
if (CircleError(g->setpoint.eulr.yaw, g->limit.yaw.min, M_2PI) < 0) {
|
||||||
|
g->setpoint.eulr.yaw = g->limit.yaw.min;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (g->param->travel.pit > 0) {
|
||||||
|
if (CircleError(g->setpoint.eulr.pit, g->limit.pit.max, M_2PI) > 0) {
|
||||||
|
g->setpoint.eulr.pit = g->limit.pit.max;
|
||||||
|
}
|
||||||
|
if (CircleError(g->setpoint.eulr.pit, g->limit.pit.min, M_2PI) < 0) {
|
||||||
|
g->setpoint.eulr.pit = g->limit.pit.min;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
case GIMBAL_MODE_ABSOLUTE:
|
case GIMBAL_MODE_ABSOLUTE:
|
||||||
case GIMBAL_MODE_RELATIVE:
|
case GIMBAL_MODE_RELATIVE:
|
||||||
|
/* AI 控制模式:直接使用 AI 下发的目标角度 */
|
||||||
|
|
||||||
|
/* PID 控制计算 - AI 和手动控制都需要执行 */
|
||||||
yaw_omega_set_point = PID_Calc(&(g->pid.yaw_angle), g->setpoint.eulr.yaw,
|
yaw_omega_set_point = PID_Calc(&(g->pid.yaw_angle), g->setpoint.eulr.yaw,
|
||||||
g->feedback.imu.eulr.yaw, 0.0f, g->dt);
|
g->feedback.imu.eulr.yaw, 0.0f, g->dt);
|
||||||
g->out.yaw = PID_Calc(&(g->pid.pit_omega), yaw_omega_set_point,
|
g->out.yaw = PID_Calc(&(g->pid.yaw_omega), yaw_omega_set_point,
|
||||||
g->feedback.imu.gyro.z, 0.f, g->dt);
|
g->feedback.imu.gyro.z, 0.0f, g->dt);
|
||||||
|
|
||||||
pit_omega_set_point = PID_Calc(&(g->pid.pit_angle), g->setpoint.eulr.pit,
|
pit_omega_set_point = PID_Calc(&(g->pid.pit_angle), g->setpoint.eulr.pit,
|
||||||
g->feedback.imu.eulr.rol, 0.0f, g->dt);
|
g->feedback.imu.eulr.rol, 0.0f, g->dt);
|
||||||
g->out.pit = PID_Calc(&(g->pid.pit_omega), pit_omega_set_point,
|
g->out.pit = PID_Calc(&(g->pid.pit_omega), pit_omega_set_point,
|
||||||
g->feedback.imu.gyro.y, 0.f, g->dt);
|
g->feedback.imu.gyro.y, 0.0f, g->dt);
|
||||||
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -30,6 +30,7 @@ typedef enum {
|
|||||||
GIMBAL_MODE_RELAX, /* 放松模式,电机不输出。一般情况云台初始化之后的模式 */
|
GIMBAL_MODE_RELAX, /* 放松模式,电机不输出。一般情况云台初始化之后的模式 */
|
||||||
GIMBAL_MODE_ABSOLUTE, /* 绝对坐标系控制,控制在空间内的绝对姿态 */
|
GIMBAL_MODE_ABSOLUTE, /* 绝对坐标系控制,控制在空间内的绝对姿态 */
|
||||||
GIMBAL_MODE_RELATIVE, /* 相对坐标系控制,控制相对于底盘的姿态 */
|
GIMBAL_MODE_RELATIVE, /* 相对坐标系控制,控制相对于底盘的姿态 */
|
||||||
|
GIMBAL_MODE_AI_CONTROL /* AI控制模式,直接接受AI下发的目标角度 */
|
||||||
} Gimbal_Mode_t;
|
} Gimbal_Mode_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@ -38,6 +39,12 @@ typedef struct {
|
|||||||
float delta_pit;
|
float delta_pit;
|
||||||
} Gimbal_CMD_t;
|
} Gimbal_CMD_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
bool ctrl;
|
||||||
|
float yaw;
|
||||||
|
float pit;
|
||||||
|
} Gimbal_AI_t;
|
||||||
|
|
||||||
/* 软件限位 */
|
/* 软件限位 */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
float max;
|
float max;
|
||||||
@ -168,7 +175,7 @@ int8_t Gimbal_UpdateIMU(Gimbal_t *gimbal);
|
|||||||
*
|
*
|
||||||
* \return 函数运行结果
|
* \return 函数运行结果
|
||||||
*/
|
*/
|
||||||
int8_t Gimbal_Control(Gimbal_t *g, Gimbal_CMD_t *g_cmd);
|
int8_t Gimbal_Control(Gimbal_t *g, Gimbal_CMD_t *g_cmd, Gimbal_AI_t *g_ai);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief 云台输出
|
* \brief 云台输出
|
||||||
|
|||||||
48
User/task/ai.c
Normal file
48
User/task/ai.c
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
ai Task
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Includes ----------------------------------------------------------------- */
|
||||||
|
#include "task/user_task.h"
|
||||||
|
/* USER INCLUDE BEGIN */
|
||||||
|
#include "bsp/fdcan.h"
|
||||||
|
#include "module/config.h"
|
||||||
|
#include "device/vision_bridge.h"
|
||||||
|
/* USER INCLUDE END */
|
||||||
|
|
||||||
|
/* Private typedef ---------------------------------------------------------- */
|
||||||
|
/* Private define ----------------------------------------------------------- */
|
||||||
|
/* Private macro ------------------------------------------------------------ */
|
||||||
|
/* Private variables -------------------------------------------------------- */
|
||||||
|
/* USER STRUCT BEGIN */
|
||||||
|
AI_cmd_t cmd_ai;
|
||||||
|
AI_t ai;
|
||||||
|
/* USER STRUCT END */
|
||||||
|
|
||||||
|
/* Private function --------------------------------------------------------- */
|
||||||
|
/* Exported functions ------------------------------------------------------- */
|
||||||
|
void Task_ai(void *argument) {
|
||||||
|
(void)argument; /* 未使用argument,消除警告 */
|
||||||
|
|
||||||
|
|
||||||
|
/* 计算任务运行到指定频率需要等待的tick数 */
|
||||||
|
const uint32_t delay_tick = osKernelGetTickFreq() / AI_FREQ;
|
||||||
|
|
||||||
|
osDelay(AI_INIT_DELAY); /* 延时一段时间再开启任务 */
|
||||||
|
|
||||||
|
uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计时 */
|
||||||
|
/* USER CODE INIT BEGIN */
|
||||||
|
AI_Init(&ai, &Config_GetRobotParam()->ai_param);
|
||||||
|
/* 注册CAN接收ID */
|
||||||
|
/* USER CODE INIT END */
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
tick += delay_tick; /* 计算下一个唤醒时刻 */
|
||||||
|
/* USER CODE BEGIN */
|
||||||
|
AI_ParseCmdFromCan( &ai,&cmd_ai);
|
||||||
|
/* USER CODE END */
|
||||||
|
osDelayUntil(tick); /* 运行结束,等待下一次唤醒 */
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -46,3 +46,10 @@
|
|||||||
function: Task_ctrl_shoot
|
function: Task_ctrl_shoot
|
||||||
name: ctrl_shoot
|
name: ctrl_shoot
|
||||||
stack: 256
|
stack: 256
|
||||||
|
- delay: 0
|
||||||
|
description: ''
|
||||||
|
freq_control: true
|
||||||
|
frequency: 500.0
|
||||||
|
function: Task_ai
|
||||||
|
name: ai
|
||||||
|
stack: 256
|
||||||
|
|||||||
@ -68,5 +68,3 @@ void Task_ctrl_chassis(void *argument) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -19,6 +19,7 @@
|
|||||||
/* USER STRUCT BEGIN */
|
/* USER STRUCT BEGIN */
|
||||||
Gimbal_t gimbal;
|
Gimbal_t gimbal;
|
||||||
Gimbal_CMD_t gimbal_cmd;
|
Gimbal_CMD_t gimbal_cmd;
|
||||||
|
Gimbal_AI_t gimbal_ai;
|
||||||
// BSP_FDCAN_StdDataFrame_t can_frame;
|
// BSP_FDCAN_StdDataFrame_t can_frame;
|
||||||
/* USER STRUCT END */
|
/* USER STRUCT END */
|
||||||
|
|
||||||
@ -54,8 +55,8 @@ void Task_ctrl_gimbal(void *argument) {
|
|||||||
|
|
||||||
osMessageQueueReset(task_runtime.msgq.chassis.yaw); // 重置消息队列,防止阻塞
|
osMessageQueueReset(task_runtime.msgq.chassis.yaw); // 重置消息队列,防止阻塞
|
||||||
osMessageQueuePut(task_runtime.msgq.chassis.yaw, &gimbal.feedback.motor.yaw, 0, 0);
|
osMessageQueuePut(task_runtime.msgq.chassis.yaw, &gimbal.feedback.motor.yaw, 0, 0);
|
||||||
|
osMessageQueueGet(task_runtime.msgq.gimbal.ai_cmd, &gimbal_ai, NULL, 0);
|
||||||
Gimbal_Control(&gimbal, &gimbal_cmd);
|
Gimbal_Control(&gimbal, &gimbal_cmd, &gimbal_ai);
|
||||||
|
|
||||||
Gimbal_Output(&gimbal);
|
Gimbal_Output(&gimbal);
|
||||||
|
|
||||||
|
|||||||
@ -4,7 +4,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* Includes ----------------------------------------------------------------- */
|
/* Includes ----------------------------------------------------------------- */
|
||||||
#include "device/motor_rm.h"
|
|
||||||
#include "task/user_task.h"
|
#include "task/user_task.h"
|
||||||
/* USER INCLUDE BEGIN */
|
/* USER INCLUDE BEGIN */
|
||||||
#include "module/shoot.h"
|
#include "module/shoot.h"
|
||||||
|
|||||||
@ -39,6 +39,7 @@ void Task_Init(void *argument) {
|
|||||||
task_runtime.thread.monitor = osThreadNew(Task_monitor, NULL, &attr_monitor);
|
task_runtime.thread.monitor = osThreadNew(Task_monitor, NULL, &attr_monitor);
|
||||||
task_runtime.thread.blink = osThreadNew(Task_blink, NULL, &attr_blink);
|
task_runtime.thread.blink = osThreadNew(Task_blink, NULL, &attr_blink);
|
||||||
task_runtime.thread.ctrl_shoot = osThreadNew(Task_ctrl_shoot, NULL, &attr_ctrl_shoot);
|
task_runtime.thread.ctrl_shoot = osThreadNew(Task_ctrl_shoot, NULL, &attr_ctrl_shoot);
|
||||||
|
task_runtime.thread.ai = osThreadNew(Task_ai, NULL, &attr_ai);
|
||||||
|
|
||||||
// 创建消息队列
|
// 创建消息队列
|
||||||
/* USER MESSAGE BEGIN */
|
/* USER MESSAGE BEGIN */
|
||||||
|
|||||||
@ -85,12 +85,20 @@ void Task_rc(void *argument) {
|
|||||||
cmd_for_gimbal.delta_pit = 0.0f;
|
cmd_for_gimbal.delta_pit = 0.0f;
|
||||||
break;
|
break;
|
||||||
case DR16_SW_MID:
|
case DR16_SW_MID:
|
||||||
cmd_for_gimbal.mode = GIMBAL_MODE_ABSOLUTE;
|
if (dr16.data.sw_r == DR16_SW_UP || dr16.data.sw_r == DR16_SW_ERR) {
|
||||||
|
cmd_for_gimbal.mode = GIMBAL_MODE_RELATIVE;
|
||||||
|
} else {
|
||||||
|
cmd_for_gimbal.mode = GIMBAL_MODE_AI_CONTROL;
|
||||||
|
}
|
||||||
cmd_for_gimbal.delta_yaw = -dr16.data.ch_r_x * 5.0f;
|
cmd_for_gimbal.delta_yaw = -dr16.data.ch_r_x * 5.0f;
|
||||||
cmd_for_gimbal.delta_pit = dr16.data.ch_r_y * 5.0f;
|
cmd_for_gimbal.delta_pit = dr16.data.ch_r_y * 5.0f;
|
||||||
break;
|
break;
|
||||||
case DR16_SW_DOWN:
|
case DR16_SW_DOWN:
|
||||||
cmd_for_gimbal.mode = GIMBAL_MODE_ABSOLUTE;
|
if (dr16.data.sw_r == DR16_SW_UP || dr16.data.sw_r == DR16_SW_ERR) {
|
||||||
|
cmd_for_gimbal.mode = GIMBAL_MODE_RELATIVE;
|
||||||
|
} else {
|
||||||
|
cmd_for_gimbal.mode = GIMBAL_MODE_AI_CONTROL;
|
||||||
|
}
|
||||||
cmd_for_gimbal.delta_yaw = -dr16.data.ch_r_x * 5.0f;
|
cmd_for_gimbal.delta_yaw = -dr16.data.ch_r_x * 5.0f;
|
||||||
cmd_for_gimbal.delta_pit = dr16.data.ch_r_y * 5.0f;
|
cmd_for_gimbal.delta_pit = dr16.data.ch_r_y * 5.0f;
|
||||||
break;
|
break;
|
||||||
|
|||||||
@ -22,12 +22,12 @@ const osThreadAttr_t attr_atti_esit = {
|
|||||||
const osThreadAttr_t attr_ctrl_chassis = {
|
const osThreadAttr_t attr_ctrl_chassis = {
|
||||||
.name = "ctrl_chassis",
|
.name = "ctrl_chassis",
|
||||||
.priority = osPriorityNormal,
|
.priority = osPriorityNormal,
|
||||||
.stack_size = 256 * 8,
|
.stack_size = 256 * 4,
|
||||||
};
|
};
|
||||||
const osThreadAttr_t attr_ctrl_gimbal = {
|
const osThreadAttr_t attr_ctrl_gimbal = {
|
||||||
.name = "ctrl_gimbal",
|
.name = "ctrl_gimbal",
|
||||||
.priority = osPriorityNormal,
|
.priority = osPriorityNormal,
|
||||||
.stack_size = 256 * 8,
|
.stack_size = 256 * 4,
|
||||||
};
|
};
|
||||||
const osThreadAttr_t attr_monitor = {
|
const osThreadAttr_t attr_monitor = {
|
||||||
.name = "monitor",
|
.name = "monitor",
|
||||||
@ -42,5 +42,10 @@ const osThreadAttr_t attr_blink = {
|
|||||||
const osThreadAttr_t attr_ctrl_shoot = {
|
const osThreadAttr_t attr_ctrl_shoot = {
|
||||||
.name = "ctrl_shoot",
|
.name = "ctrl_shoot",
|
||||||
.priority = osPriorityNormal,
|
.priority = osPriorityNormal,
|
||||||
.stack_size = 256 * 8,
|
.stack_size = 256 * 4,
|
||||||
|
};
|
||||||
|
const osThreadAttr_t attr_ai = {
|
||||||
|
.name = "ai",
|
||||||
|
.priority = osPriorityNormal,
|
||||||
|
.stack_size = 256 * 4,
|
||||||
};
|
};
|
||||||
@ -19,6 +19,7 @@ extern "C" {
|
|||||||
#define MONITOR_FREQ (500.0)
|
#define MONITOR_FREQ (500.0)
|
||||||
#define BLINK_FREQ (500.0)
|
#define BLINK_FREQ (500.0)
|
||||||
#define CTRL_SHOOT_FREQ (500.0)
|
#define CTRL_SHOOT_FREQ (500.0)
|
||||||
|
#define AI_FREQ (500.0)
|
||||||
|
|
||||||
/* 任务初始化延时ms */
|
/* 任务初始化延时ms */
|
||||||
#define TASK_INIT_DELAY (100u)
|
#define TASK_INIT_DELAY (100u)
|
||||||
@ -29,6 +30,7 @@ extern "C" {
|
|||||||
#define MONITOR_INIT_DELAY (0)
|
#define MONITOR_INIT_DELAY (0)
|
||||||
#define BLINK_INIT_DELAY (0)
|
#define BLINK_INIT_DELAY (0)
|
||||||
#define CTRL_SHOOT_INIT_DELAY (0)
|
#define CTRL_SHOOT_INIT_DELAY (0)
|
||||||
|
#define AI_INIT_DELAY (0)
|
||||||
|
|
||||||
/* Exported defines --------------------------------------------------------- */
|
/* Exported defines --------------------------------------------------------- */
|
||||||
/* Exported macro ----------------------------------------------------------- */
|
/* Exported macro ----------------------------------------------------------- */
|
||||||
@ -45,6 +47,7 @@ typedef struct {
|
|||||||
osThreadId_t monitor;
|
osThreadId_t monitor;
|
||||||
osThreadId_t blink;
|
osThreadId_t blink;
|
||||||
osThreadId_t ctrl_shoot;
|
osThreadId_t ctrl_shoot;
|
||||||
|
osThreadId_t ai;
|
||||||
} thread;
|
} thread;
|
||||||
|
|
||||||
/* USER MESSAGE BEGIN */
|
/* USER MESSAGE BEGIN */
|
||||||
@ -58,6 +61,7 @@ typedef struct {
|
|||||||
struct {
|
struct {
|
||||||
osMessageQueueId_t imu;
|
osMessageQueueId_t imu;
|
||||||
osMessageQueueId_t cmd;
|
osMessageQueueId_t cmd;
|
||||||
|
osMessageQueueId_t ai_cmd;
|
||||||
}gimbal;
|
}gimbal;
|
||||||
struct {
|
struct {
|
||||||
osMessageQueueId_t shoot_cmd; /* 发射命令队列 */
|
osMessageQueueId_t shoot_cmd; /* 发射命令队列 */
|
||||||
@ -96,6 +100,7 @@ typedef struct {
|
|||||||
UBaseType_t monitor;
|
UBaseType_t monitor;
|
||||||
UBaseType_t blink;
|
UBaseType_t blink;
|
||||||
UBaseType_t ctrl_shoot;
|
UBaseType_t ctrl_shoot;
|
||||||
|
UBaseType_t ai;
|
||||||
} stack_water_mark;
|
} stack_water_mark;
|
||||||
|
|
||||||
/* 各任务运行频率 */
|
/* 各任务运行频率 */
|
||||||
@ -106,6 +111,7 @@ typedef struct {
|
|||||||
float monitor;
|
float monitor;
|
||||||
float blink;
|
float blink;
|
||||||
float ctrl_shoot;
|
float ctrl_shoot;
|
||||||
|
float ai;
|
||||||
} freq;
|
} freq;
|
||||||
|
|
||||||
/* 任务最近运行时间 */
|
/* 任务最近运行时间 */
|
||||||
@ -116,6 +122,7 @@ typedef struct {
|
|||||||
float monitor;
|
float monitor;
|
||||||
float blink;
|
float blink;
|
||||||
float ctrl_shoot;
|
float ctrl_shoot;
|
||||||
|
float ai;
|
||||||
} last_up_time;
|
} last_up_time;
|
||||||
|
|
||||||
} Task_Runtime_t;
|
} Task_Runtime_t;
|
||||||
@ -132,6 +139,7 @@ extern const osThreadAttr_t attr_ctrl_gimbal;
|
|||||||
extern const osThreadAttr_t attr_monitor;
|
extern const osThreadAttr_t attr_monitor;
|
||||||
extern const osThreadAttr_t attr_blink;
|
extern const osThreadAttr_t attr_blink;
|
||||||
extern const osThreadAttr_t attr_ctrl_shoot;
|
extern const osThreadAttr_t attr_ctrl_shoot;
|
||||||
|
extern const osThreadAttr_t attr_ai;
|
||||||
|
|
||||||
/* 任务函数声明 */
|
/* 任务函数声明 */
|
||||||
void Task_Init(void *argument);
|
void Task_Init(void *argument);
|
||||||
@ -142,6 +150,7 @@ void Task_ctrl_gimbal(void *argument);
|
|||||||
void Task_monitor(void *argument);
|
void Task_monitor(void *argument);
|
||||||
void Task_blink(void *argument);
|
void Task_blink(void *argument);
|
||||||
void Task_ctrl_shoot(void *argument);
|
void Task_ctrl_shoot(void *argument);
|
||||||
|
void Task_ai(void *argument);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user