diff --git a/MDK-ARM/R2.uvoptx b/MDK-ARM/R2.uvoptx index 612ed0e..71503df 100644 --- a/MDK-ARM/R2.uvoptx +++ b/MDK-ARM/R2.uvoptx @@ -183,22 +183,22 @@ 5 1 - \\R2\../User/task/chassis_task.c\chassis.sick_cali.sickparam + cmd,0x0A 6 1 - cmd,0x0A + nucbuf,0x0A 7 1 - nucbuf,0x0A + cmd_fromnuc 8 1 - cmd_fromnuc + NUC_send,0x0A diff --git a/MDK-ARM/R2/R2.axf b/MDK-ARM/R2/R2.axf index 40d3460..ec604b4 100644 Binary files a/MDK-ARM/R2/R2.axf and b/MDK-ARM/R2/R2.axf differ diff --git a/User/Module/Chassis.c b/User/Module/Chassis.c index 0747bdd..3469010 100644 --- a/User/Module/Chassis.c +++ b/User/Module/Chassis.c @@ -99,7 +99,7 @@ int8_t Chassis_Control(Chassis_t *c, CMD_t *ctrl, CAN_Output_t *out) { /*初始数据*/ - c->NUC_send.send[0] = 0; + c->to_nuc.send = 0; c->sick_cali.is_reach = 0; c->vofa_send[0]= KalmanFilter(&c->extKalman[0] , c->sick_cali.sick_dis[0]); @@ -111,6 +111,7 @@ int8_t Chassis_Control(Chassis_t *c, CMD_t *ctrl, CAN_Output_t *out) { switch (c->chassis_ctrl.ctrl) { case RCcontrol: + c->to_nuc.send = 0; switch (c->chassis_ctrl.mode) { case Normal: c->move_vec.Vw = ctrl->Vw * 8000; @@ -129,7 +130,7 @@ int8_t Chassis_Control(Chassis_t *c, CMD_t *ctrl, CAN_Output_t *out) { case Chassis_Adjust_Sick: sick_calibration(c, ctrl, out); - c->NUC_send.send[0] = (c->sick_cali.is_reach == 1) ? 1 : 0; +// c->to_nuc.send = (c->sick_cali.is_reach == 1) ? 1 : 0; break; } @@ -138,13 +139,13 @@ int8_t Chassis_Control(Chassis_t *c, CMD_t *ctrl, CAN_Output_t *out) { case AUTO: switch (c->chassis_ctrl.mode) { case AUTO_MID360: - c->move_vec.Vw = ctrl->cmd_MID360.posw * 1000; - c->move_vec.Vy = -ctrl->cmd_MID360.posy * 1000; - c->move_vec.Vx = -ctrl->cmd_MID360.posx * 1000; - abs_limit_fp(&c->move_vec.Vx, 5000.0f); - abs_limit_fp(&c->move_vec.Vy, 5000.0f); - abs_limit_fp(&c->move_vec.Vw, 5000.0f); - // c->NUC_send.send[0] = 1; +// c->move_vec.Vw = ctrl->cmd_MID360.posw * 1000; +// c->move_vec.Vy = -ctrl->cmd_MID360.posy * 1000; +// c->move_vec.Vx = -ctrl->cmd_MID360.posx * 1000; +// abs_limit_fp(&c->move_vec.Vx, 5000.0f); +// abs_limit_fp(&c->move_vec.Vy, 5000.0f); +// abs_limit_fp(&c->move_vec.Vw, 5000.0f); + break; case AUTO_MID360_Pitch: c->move_vec.Vw = ctrl->cmd_MID360.posw * 1000; @@ -154,10 +155,8 @@ int8_t Chassis_Control(Chassis_t *c, CMD_t *ctrl, CAN_Output_t *out) { abs_limit_fp(&c->move_vec.Vy, 5000.0f); abs_limit_fp(&c->move_vec.Vw, 5000.0f); break; - case AUTO_MID360_Adjust: - c->move_vec.Vw = ctrl->Vw * 6000; - c->move_vec.Vx = ctrl->Vy * 6000; - c->move_vec.Vy = ctrl->Vx * 6000; + case REPOSITION: + c->to_nuc.send = 1; break; diff --git a/User/Module/Chassis.h b/User/Module/Chassis.h index 90930c5..8a5c3ec 100644 --- a/User/Module/Chassis.h +++ b/User/Module/Chassis.h @@ -103,12 +103,6 @@ typedef struct fp32 Vw; fp32 mul;//油门倍率 }ChassisMove_Vec; -typedef struct -{ - - fp32 send[4]; - -}NUC_send_t; /** * @brief @@ -184,9 +178,12 @@ typedef struct{ int is_reach; }sick_cali; - NUC_send_t NUC_send; + struct { + fp32 send; + }to_nuc; + }Chassis_t; int8_t Chassis_init(Chassis_t *c,const Chassis_Param_t *param,float target_freq); diff --git a/User/Module/config.c b/User/Module/config.c index 91ea5a6..2d56cc7 100644 --- a/User/Module/config.c +++ b/User/Module/config.c @@ -88,14 +88,15 @@ static const ConfigParam_t param ={ .go_init = -50, //仅用在go上电,初始位置 .go_release_pos=-200, .Pitch_angle =66, - + .go_up_speed =12, + .go_down_speed =6, }, .PassCfg={ .go_wait =-10, .go_release_pos =-150, .Pitch_angle=66, .go_up_speed =12, - .go_down_speed =5, + .go_down_speed =6, }, .MID360Cfg={ diff --git a/User/Module/up.c b/User/Module/up.c index f514f97..752a80f 100644 --- a/User/Module/up.c +++ b/User/Module/up.c @@ -313,6 +313,10 @@ int8_t Pitch_Process(UP_t *u, CAN_Output_t *out,CMD_t *c) up_motor_target_t *target=&u->motor_target ; LaunchContext_t *LaunchContext = &u->LaunchContext; // 可根据实际需要传入不同的起始和末位置,起始:当前位置 + LaunchContext->LaunchCfg.go_up_speed= cfg->go_up_speed; + LaunchContext->LaunchCfg.go_down_speed= cfg->go_down_speed + ; + Pitch_Launch_Sequence(u, LaunchContext, u->motorfeedback.go_data.Pos, cfg->go_release_pos, out); diff --git a/User/Module/up.h b/User/Module/up.h index d5c6fd9..898692c 100644 --- a/User/Module/up.h +++ b/User/Module/up.h @@ -73,6 +73,8 @@ typedef struct { fp32 go_init; // GO电机触发位置,初始位置,后续更改用于发射的位置 fp32 Pitch_angle; //俯仰角度,以oid为准 fp32 go_release_pos;//go松开,发射位置 + fp32 go_up_speed; + fp32 go_down_speed; } PitchCfg_t; diff --git a/User/device/cmd.c b/User/device/cmd.c index c8d6c43..d28e009 100644 --- a/User/device/cmd.c +++ b/User/device/cmd.c @@ -159,7 +159,7 @@ int8_t CMD_DR16(CMD_t *cmd,const CMD_RC_t *rc) { if(rc->dr16.sw_r ==CMD_SW_MID) cmd ->CMD_mode =AUTO_MID360; //左中,右中,无模式 - if(rc->dr16.sw_r ==CMD_SW_DOWN) cmd ->CMD_mode =Normal; //左中,右下,视觉 + if(rc->dr16.sw_r ==CMD_SW_DOWN) cmd ->CMD_mode =REPOSITION; //左中,右下,视觉 } else if(rc->dr16.sw_l==CMD_SW_DOWN) @@ -193,7 +193,7 @@ int8_t CMD_LD(CMD_t *cmd,const CMD_RC_t *rc){ if(cmd ->CMD_CtrlType ==AUTO){ /*自动下的*/ - if (rc->LD.key_C ==CMD_SW_UP) cmd ->CMD_mode =AUTO_MID360_Adjust; + if (rc->LD.key_C ==CMD_SW_UP) cmd ->CMD_mode =Normal; else { if(rc->LD.key_E ==CMD_SW_DOWN ) cmd ->CMD_mode =Normal; diff --git a/User/device/cmd.h b/User/device/cmd.h index fba1fb8..a7835da 100644 --- a/User/device/cmd.h +++ b/User/device/cmd.h @@ -26,7 +26,7 @@ typedef enum{ AUTO_MID360, AUTO_MID360_Pitch, - AUTO_MID360_Adjust,//雷达调整 + REPOSITION,//雷达调整 UP_Adjust,//上层调整 Chassis_Adjust_Sick, diff --git a/User/device/nuc.c b/User/device/nuc.c index 0685a15..da602d9 100644 --- a/User/device/nuc.c +++ b/User/device/nuc.c @@ -40,33 +40,6 @@ int8_t NUC_StartReceiving() return DEVICE_OK; return DEVICE_ERR; } -int8_t NUC_StartSending(fp32 *data) -{ - - union - { - float x[1]; - char data[4]; - } instance; - - // for (int i = 0; i < 1; i++) { - instance.x[0] = data[0]; - // } - - SendBuffer[0] = 0xFC; // 帧头 - SendBuffer[1] = 0x01; // 控制帧 - for (int i = 2; i < 6; i++) - { - SendBuffer[i] = instance.data[i - 2]; - } - SendBuffer[6] = 0xFD; // 帧尾 - - if (HAL_UART_Transmit_DMA(BSP_UART_GetHandle(BSP_UART_NUC), - (uint8_t *)SendBuffer, - sizeof(SendBuffer)) == HAL_OK) - return DEVICE_OK; - return DEVICE_ERR; -} int8_t NUC_Restart(void) { __HAL_UART_DISABLE(BSP_UART_GetHandle(BSP_UART_NUC)); @@ -179,7 +152,7 @@ int8_t NUC_HandleOffline(CMD_NUC_t *cmd, NUC_t *nuc) if (cmd == NULL) return DEVICE_ERR_NULL; nuc->unc_online = false; // 设置为离线状态 - // memset(cmd, 0, sizeof(*cmd)); + memset(cmd, 0, sizeof(*cmd)); return 0; } @@ -197,28 +170,34 @@ int8_t NUC_PackIMU(NUC_t *nuc, const AHRS_Quaternion_t *quat, const AHRS_Accl_t int8_t NUC_PackCMD(NUC_t *nuc, const NUC_send_t *send){ nuc->to_nuc.cmd.head = HEAD; nuc->to_nuc.cmd.id = IMU_ID; - nuc->to_nuc.cmd.type = TYPE; nuc->to_nuc.cmd.end = TAIL; - // memcpy((void *)&(nuc->to_nuc.cmd.package.status), (const void *)send,sizeof(*send)); + memcpy((void *)&(nuc->to_nuc.cmd.package.status), (const void *)send,sizeof(*send)); /*在这里添加你们的控制命令*/ return DEVICE_OK; } int8_t NUC_StartSend(NUC_t *nuc, bool cmd_update){ if (cmd_update) { +// if (HAL_UART_Transmit_DMA( +// BSP_UART_GetHandle(BSP_UART_NUC), (uint8_t *)&(nuc->to_nuc.cmd), +// sizeof(nuc->to_nuc.cmd) + sizeof(nuc->to_nuc.imu)) == HAL_OK) +/*仅发送cmd数据*/ if (HAL_UART_Transmit_DMA( BSP_UART_GetHandle(BSP_UART_NUC), (uint8_t *)&(nuc->to_nuc.cmd), - sizeof(nuc->to_nuc.cmd) + sizeof(nuc->to_nuc.imu)) == HAL_OK) + sizeof(nuc->to_nuc.cmd) ) == HAL_OK) + + return DEVICE_OK; else return DEVICE_ERR; - } else { - if (HAL_UART_Transmit_DMA(BSP_UART_GetHandle(BSP_UART_NUC), - (uint8_t *)&(nuc->to_nuc.imu), - sizeof(nuc->to_nuc.imu)) == HAL_OK) - return DEVICE_OK; - else - return DEVICE_ERR; - } + } +// else { +// if (HAL_UART_Transmit_DMA(BSP_UART_GetHandle(BSP_UART_NUC), +// (uint8_t *)&(nuc->to_nuc.imu), +// sizeof(nuc->to_nuc.imu)) == HAL_OK) +// return DEVICE_OK; +// else +// return DEVICE_ERR; +// } } diff --git a/User/device/nuc.h b/User/device/nuc.h index 866483a..70dda34 100644 --- a/User/device/nuc.h +++ b/User/device/nuc.h @@ -9,6 +9,11 @@ #include "Algorithm/ahrs.h" #include "Module/Chassis.h" +typedef struct +{ + fp32 send; + +}NUC_send_t; typedef struct { uint8_t id; @@ -25,7 +30,6 @@ typedef struct { typedef struct { uint8_t head; - uint8_t type; // 0x01 控制帧 uint8_t id; Protocol_UpDataCMD_t package; uint8_t end; @@ -51,7 +55,6 @@ typedef struct { int8_t NUC_Init(NUC_t *nuc); int8_t NUC_StartReceiving(void); -int8_t NUC_StartSending(fp32 *data) ; bool_t NUC_WaitDmaCplt(void); int8_t NUC_RawParse(CMD_NUC_t *n, NUC_t *nuc); int8_t NUC_HandleOffline(CMD_NUC_t *cmd, NUC_t *nuc); diff --git a/User/task/chassis_task.c b/User/task/chassis_task.c index 5a09e1f..8997ce1 100644 --- a/User/task/chassis_task.c +++ b/User/task/chassis_task.c @@ -88,7 +88,7 @@ void Task_Chassis(void *argument) osMessageQueueReset(task_runtime.msgq.can.output.chassis3508);//清空队列 osMessageQueuePut(task_runtime.msgq.can.output.chassis3508, &out.motor_CHASSIS3508, 0, 0); //发送数据 osMessageQueueReset(task_runtime.msgq.cmd.raw.nuc_send);//清空队列 - osMessageQueuePut(task_runtime.msgq.cmd.raw.nuc_send, &chassis.NUC_send, 0, 0); //发送数据 + osMessageQueuePut(task_runtime.msgq.cmd.raw.nuc_send, &chassis.to_nuc, 0, 0); //发送数据 vofa_send[0] = chassis.vofa_send[0]; vofa_send[1] = chassis.vofa_send[1]; vofa_send[2] = chassis.vofa_send[2]; diff --git a/User/task/init.c b/User/task/init.c index ff67827..f5a7fcf 100644 --- a/User/task/init.c +++ b/User/task/init.c @@ -11,7 +11,7 @@ #include "task\user_task.h" #include "can_use.h" #include "cmd.h" - +#include "nuc.h" /* Private typedef ---------------------------------------------------------- */ /* Private define ----------------------------------------------------------- */ /* Private macro ------------------------------------------------------------ */ diff --git a/User/task/nuc_task.c b/User/task/nuc_task.c index 9be52b0..3167ddb 100644 --- a/User/task/nuc_task.c +++ b/User/task/nuc_task.c @@ -21,6 +21,8 @@ NUC_send_t NUC_send; #endif fp32 send[4]={11.0f,45.0,1.f,4.0f}; int a=0; + + void Task_nuc(void *argument){ (void)argument; /**/ @@ -34,10 +36,7 @@ void Task_nuc(void *argument){ while (1) { #ifdef DEBUG - task_runtime.stack_water_mark.nuc= osThreadGetStackSpace(osThreadGetId()); - task_runtime .freq.nuc = TASK_FREQ_NUC; - task_runtime.last_up_time.nuc= tick; - + task_runtime.stack_water_mark.nuc= osThreadGetStackSpace(osThreadGetId()); #endif a++; NUC_StartReceiving(); @@ -58,19 +57,19 @@ void Task_nuc(void *argument){ osMessageQueueGet(task_runtime.msgq.nuc.accl, &(accl), NULL, 0); osMessageQueueGet(task_runtime.msgq.nuc.gyro, &(gyro), NULL, 0); - // osMessageQueueGet(task_runtime.msgq.cmd.raw.nuc_send, &NUC_send, NULL, 0); + //osMessageQueueGet(task_runtime.msgq.cmd.raw.nuc_send, &NUC_send, NULL, 0); bool cmd_update = (osMessageQueueGet(task_runtime.msgq.cmd.raw.nuc_send, &(NUC_send), NULL, 0) == osOK); - NUC_PackIMU(&nuc_raw, &quat, &accl, &gyro); +// NUC_PackIMU(&nuc_raw, &quat, &accl, &gyro); if (cmd_update) { NUC_PackCMD(&nuc_raw,&NUC_send); + + NUC_StartSend(&nuc_raw,cmd_update); + } - - NUC_StartSend(&nuc_raw, cmd_update); - tick += delay_tick; /* 计算下一个唤醒时刄1ķ*/ osDelayUntil(tick); }