diff --git a/MDK-ARM/R2.uvoptx b/MDK-ARM/R2.uvoptx index 58ce169..54c15c6 100644 --- a/MDK-ARM/R2.uvoptx +++ b/MDK-ARM/R2.uvoptx @@ -103,7 +103,7 @@ 1 0 0 - 3 + 6 @@ -114,7 +114,7 @@ - BIN\CMSIS_AGDI.dll + STLink\ST-LINKIII-KEIL_SWO.dll @@ -140,7 +140,7 @@ 0 DLGUARM - + (105=-1,-1,-1,-1,0) 0 @@ -310,6 +310,26 @@ 1 imu_temp + + 31 + 1 + cmd + + + 32 + 1 + NUC_send + + + 33 + 1 + BMI088_t + + + 34 + 1 + bmi088 + 0 diff --git a/MDK-ARM/R2/R2.axf b/MDK-ARM/R2/R2.axf index 8272b1a..acddb4c 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 d1ea42d..98b30d9 100644 --- a/User/Module/Chassis.c +++ b/User/Module/Chassis.c @@ -4,294 +4,180 @@ #include "bsp_buzzer.h" #include "bsp_delay.h" - - - - - -/*机器人坐标系,向前x,右y,上yaw - 不同于nuc (前x,左y,上yaw) */ -/* - x - | - --y - - +/* +机器人坐标系,向前x,右y,上yaw +不同于nuc (前x,左y,上yaw) + x + | + --y */ -static int8_t Chassis_SetCtrl(Chassis_t *c,CMD_t *ctrl){ - if (c == NULL) return CHASSIS_ERR_NULL; /*主结构体不能为空 */ - if (ctrl->CMD_CtrlType== c->chassis_ctrl.ctrl && ctrl->CMD_mode == c->chassis_ctrl.mode) return CHASSIS_OK; /*模式未改变直接返回*/ - c->chassis_ctrl.ctrl =ctrl->CMD_CtrlType ; - c->chassis_ctrl.mode =ctrl->CMD_mode ; - - return CHASSIS_OK; -} //设置控制模式 - - -/*该函数用来更新can任务获得的电机反馈值*/ +static int8_t Chassis_SetCtrl(Chassis_t *c, CMD_t *ctrl) { + if (c == NULL) return CHASSIS_ERR_NULL; + if (ctrl->CMD_CtrlType == c->chassis_ctrl.ctrl && ctrl->CMD_mode == c->chassis_ctrl.mode) + return CHASSIS_OK; + c->chassis_ctrl.ctrl = ctrl->CMD_CtrlType; + c->chassis_ctrl.mode = ctrl->CMD_mode; + return CHASSIS_OK; +} int8_t Chassis_UpdateFeedback(Chassis_t *c, const CAN_t *can) { - if (c == NULL) return CHASSIS_ERR_NULL; - if (can == NULL) return CHASSIS_ERR_NULL; - for (uint8_t i = 0; i < 4; i++) - { - c->motorfeedback.rotor_rpm3508[i] = can->motor.chassis_motor3508.as_array[i].rotor_speed; - c->motorfeedback.rotor_current3508[i] = can->motor.chassis_motor3508.as_array[i].torque_current; - } - - + if (c == NULL) return CHASSIS_ERR_NULL; + if (can == NULL) return CHASSIS_ERR_NULL; + for (uint8_t i = 0; i < 4; i++) { + c->motorfeedback.rotor_rpm3508[i] = can->motor.chassis_motor3508.as_array[i].rotor_speed; + c->motorfeedback.rotor_current3508[i] = can->motor.chassis_motor3508.as_array[i].torque_current; + } + return CHASSIS_OK; +} - return CHASSIS_OK; +int8_t Chassis_init(Chassis_t *c, const Chassis_Param_t *param, float target_freq) { + if (c == NULL) return CHASSIS_ERR_NULL; + c->param = param; + + for (int i = 0; i < 4; i++) { + PID_init(&(c->pid.chassis_3508VecPID[i]), PID_POSITION_D, &(c->param->M3508_param)); + } + PID_init(&(c->pid.chassis_PICKWzPID_HIGN), PID_POSITION, &(c->param->chassis_PICKWzPID_HIGN_param)); + PID_init(&(c->pid.chassis_PICKWzPID_LOW), PID_POSITION, &(c->param->chassis_PICKWzPID_LOW_param)); + PID_init(&(c->pid.sick_CaliforYPID), PID_POSITION, &(c->param->Sick_CaliYparam)); + PID_init(&(c->pid.sick_CaliforXPID), PID_POSITION, &(c->param->Sick_CaliXparam)); + + LowPassFilter2p_Init(&(c->filled[0]), target_freq, 80.0f); // 角加速度滤波 + LowPassFilter2p_Init(&(c->filled[1]), target_freq, 80.0f); // w滤波 + LowPassFilter2p_Init(&(c->filled[2]), target_freq, 80.0f); // y滤波 + LowPassFilter2p_Init(&(c->filled[3]), target_freq, 80.0f); // x滤波 + + return CHASSIS_OK; +} + +fp32 gyro_kp = 1.0f; +fp32 PIAN = 0; + +void Chassis_speed_calculate(Chassis_t *c, fp32 Vx, fp32 Vy, fp32 Vw) { + fp64 Nor_Vx, Nor_Vy; + normalize_vector(Vx, Vy, &Nor_Vx, &Nor_Vy); + + c->hopemotorout.OmniSpeedOut[0] = -Nor_Vx + Nor_Vy + Vw; // 右前 + c->hopemotorout.OmniSpeedOut[1] = -Nor_Vx - Nor_Vy + Vw; // 右后 + c->hopemotorout.OmniSpeedOut[2] = Nor_Vx - Nor_Vy + Vw; // 左后 + c->hopemotorout.OmniSpeedOut[3] = Nor_Vx + Nor_Vy + Vw; // 左前 +} + +int8_t Chassis_Control(Chassis_t *c, CMD_t *ctrl, CAN_Output_t *out) { + if (c == NULL) return CHASSIS_ERR_NULL; + if (ctrl == NULL) return CHASSIS_ERR_NULL; + + Chassis_SetCtrl(c, ctrl); + + // IMU加滤波修正 + c->pos088.bmi088.filtered_gyro.z = LowPassFilter2p_Apply(&(c->filled[0]), c->pos088.bmi088.gyro.z); + + switch (c->chassis_ctrl.ctrl) { + case RCcontrol: // 手动控制 + /* + 在cmd里对数据进行处理 包括方向和油门 + 6000为全向轮的倍率,遥控器坐标系和机器人坐标系不同 + */ + c->NUC_send .send [0]=0; + c->NUC_send .send [1]=0; + c->NUC_send .send [2]=10; + c->NUC_send .send [3]=100; + + switch (c->chassis_ctrl.mode) { + case Normal: + c->move_vec.Vw = ctrl->Vw * 6000; + c->move_vec.Vx = ctrl->Vy * 6000; + c->move_vec.Vy = ctrl->Vx * 6000; + break; + case Pitch: + c->move_vec.Vw = 0; + c->move_vec.Vx = 0; + c->move_vec.Vy = 0; + break; + case UP_Adjust: + c->move_vec.Vw = ctrl->Vw * 6000; + c->move_vec.Vx = 0; + c->move_vec.Vy = 0; + break; + default: + c->move_vec.Vw = 0; + c->move_vec.Vx = 0; + c->move_vec.Vy = 0; + break; + } + break; + + case AUTO: // 自动模式 + switch (c->chassis_ctrl.mode) { + + case AUTO_NAVI: // 自动雷达 + // 全向轮方向, 注意xy方向 + 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, 2000.0f); + abs_limit_fp(&c->move_vec.Vy, 2000.0f); + abs_limit_fp(&c->move_vec.Vw, 2000.0f); + + c->NUC_send .send [0]=0; + break; + + case AUTO_NAVI_Pitch: + c->move_vec.Vw = 0; + c->move_vec.Vy = 0; + c->move_vec.Vx = 0; + + c->NUC_send .send [0]=1; + break; + case AUTO_NAVI_Adjust: + c->move_vec.Vw = ctrl->Vw * 6000; + c->move_vec.Vx = ctrl->Vy * 6000; + c->move_vec.Vy = ctrl->Vx * 6000; + + c->NUC_send .send [0]=1; + break; + default: + c->move_vec.Vw = 0; + c->move_vec.Vx = 0; + c->move_vec.Vy = 0; + c->NUC_send .send [0]=0; + + break; + } + break; + + default: + c->move_vec.Vw = 0; + c->move_vec.Vx = 0; + c->move_vec.Vy = 0; + break; + } + + // 电机速度限幅 + abs_limit_fp(&c->move_vec.Vx, 6000.0f); + abs_limit_fp(&c->move_vec.Vy, 6000.0f); + abs_limit_fp(&c->move_vec.Vw, 6000.0f); + + Chassis_speed_calculate(c, c->move_vec.Vx, c->move_vec.Vy, c->move_vec.Vw); + + for (uint8_t i = 0; i < 4; i++) { + c->final_out.final_3508out[i] = PID_calc(&(c->pid.chassis_3508VecPID[i]), + c->motorfeedback.rotor_rpm3508[i], + c->hopemotorout.OmniSpeedOut[i]); + out->motor_CHASSIS3508.as_array[i] = c->final_out.final_3508out[i]; + } +c->NUC_send .send [1]=1; + return CHASSIS_OK; } -int8_t Chassis_init(Chassis_t *c,const Chassis_Param_t *param,float target_freq) -{ - if (c == NULL) return CHASSIS_ERR_NULL; - - c->param = param; /*初始化参数 */ - - for(int i =0 ; i < 4 ; i++) - { - PID_init(&(c->pid.chassis_3508VecPID[i]),PID_POSITION_D,&(c->param->M3508_param)); //带D项滤波 - } - - PID_init(&(c->pid.chassis_PICKWzPID_HIGN),PID_POSITION,&(c->param->chassis_PICKWzPID_HIGN_param)); - - PID_init(&(c->pid.chassis_PICKWzPID_LOW),PID_POSITION,&(c->param->chassis_PICKWzPID_LOW_param)); - - - PID_init(&(c->pid.sick_CaliforYPID),PID_POSITION,&(c->param->Sick_CaliYparam)); - - PID_init(&(c->pid.sick_CaliforXPID),PID_POSITION,&(c->param->Sick_CaliXparam)); - - LowPassFilter2p_Init(&(c->filled[0]),target_freq,80.0f); //给角加速度做滤波 - - - LowPassFilter2p_Init(&(c->filled[1]),target_freq,80.0f); //给w 做滤波 - - LowPassFilter2p_Init(&(c->filled[2]),target_freq,80.0f); //给y做滤波 - - LowPassFilter2p_Init(&(c->filled[3]),target_freq,80.0f); //给x 做滤波 - - // - - - return CHASSIS_OK; -} - -fp32 gyro_kp=1.0f; -fp32 PIAN=0; -void Chassis_speed_calculate(Chassis_t *c,fp32 Vx,fp32 Vy,fp32 Vw) //底盘逆运动学的解算, -{ - fp64 Nor_Vx,Nor_Vy;//归一化后的数据 - normalize_vector(Vx,Vy,&Nor_Vx,&Nor_Vy); - -// c->hopemotorout.OmniSpeedOut[0] = -Vx+Vy+Vw;//右前 -// c->hopemotorout.OmniSpeedOut[1] = -Vx-Vy+Vw;//右后 -// c->hopemotorout.OmniSpeedOut[2] = Vx-Vy+Vw;//左后 -// c->hopemotorout.OmniSpeedOut[3] = Vx+Vy+Vw;//左前 -// c->hopemotorout.OmniSpeedOut[0] = -Nor_Vx+Nor_Vy+Vw + c->pos088 .bmi088.gyro.z;//右前 -// c->hopemotorout.OmniSpeedOut[1] = -Nor_Vx-Nor_Vy+Vw + c->pos088 .bmi088.gyro.z;//右后 -// c->hopemotorout.OmniSpeedOut[2] = Nor_Vx-Nor_Vy+Vw + c->pos088 .bmi088.gyro.z;//左后 -// c->hopemotorout.OmniSpeedOut[3] = Nor_Vx+Nor_Vy+Vw + c->pos088 .bmi088.gyro.z;//左前 - c->hopemotorout.OmniSpeedOut[0] = -Nor_Vx+Nor_Vy+Vw ;//右前 - c->hopemotorout.OmniSpeedOut[1] = -Nor_Vx-Nor_Vy+Vw ;//右后 - c->hopemotorout.OmniSpeedOut[2] = Nor_Vx-Nor_Vy+Vw ;//左后 - c->hopemotorout.OmniSpeedOut[3] = Nor_Vx+Nor_Vy+Vw ;//左前 - -// if(!Vw){ -// PIAN = jiuzheng(c->pos088 .imu_eulr .yaw ); -// } -// c->hopemotorout.OmniSpeedOut[0] += PIAN ;//右前 -// c->hopemotorout.OmniSpeedOut[1] += PIAN ;//右后 -// c->hopemotorout.OmniSpeedOut[2] += PIAN ;//左后 -// c->hopemotorout.OmniSpeedOut[3] += PIAN ;//左前 - -} -int8_t Chassis_Control(Chassis_t *c,CMD_t *ctrl,CAN_Output_t *out) -{ - if(c ==NULL) return CHASSIS_ERR_NULL; - if(ctrl ==NULL) return CHASSIS_ERR_NULL; - - - Chassis_SetCtrl(c,ctrl); - - //此处对imu加滤波做修正 - c->pos088.bmi088.filtered_gyro.z =LowPassFilter2p_Apply(&(c->filled[0]),c->pos088.bmi088.gyro.z); - - switch (c->chassis_ctrl .ctrl) - { - case RCcontrol: //手动控制 - -/* - 在cmd里对数据进行处理 包括方向和油门 - 6000为全向轮的倍率,遥控器坐标系和机器人坐标系不同*/ - if(c->chassis_ctrl .mode == Pitch){ - c->move_vec.Vw = 0; - c->move_vec.Vx = 0; - c->move_vec.Vy = 0; - } - else if(c->chassis_ctrl .mode == UP_Adjust) - { - c->move_vec.Vw = ctrl->Vw*6000; - c->move_vec.Vx = 0; - c->move_vec.Vy = 0; - } - else { - c->move_vec.Vw = ctrl->Vw*6000; - c->move_vec.Vx = ctrl->Vy*6000; - c->move_vec.Vy = ctrl->Vx*6000; - } - - - - break; - - case AUTO : //在自动模式下 - - switch(c->chassis_ctrl.mode ){ - - - case AUTO_NAVI: //自动雷达 -// //这套是全向轮的方向,一定要注意这里的xy方向 - 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 ; -// c->move_vec.Vw =LowPassFilter2p_Apply(&(c->filled[1]),c->move_vec.Vw); -// c->move_vec.Vy =LowPassFilter2p_Apply(&(c->filled[2]),c->move_vec.Vy); -// c->move_vec.Vx =LowPassFilter2p_Apply(&(c->filled[3]),c->move_vec.Vx); -// -// c->move_vec.Vw =PID_calc(&(c->pid.chassis_NaviWzPID),c->pos088.bmi088.gyro.z,c->move_vec.Vw); -// c->move_vec.Vx =PID_calc(&(c->pid.chassis_NaviVxPID),c->pos088.bmi088.accl.y,c->move_vec.Vx); -// c->move_vec.Vy =PID_calc(&(c->pid.chassis_NaviVyPID),c->pos088.bmi088.accl.x,c->move_vec.Vy); -// //电机速度限幅 - - abs_limit_fp(&c->move_vec.Vx,2000.0f); - - abs_limit_fp(&c->move_vec.Vy,2000.0f); - - abs_limit_fp(&c->move_vec.Vw,2000.0f); - - if(ctrl->status[5] ==1) - { - c->move_vec.Vw = c->move_vec.Vw * 0.8f; - c->move_vec.Vx = c->move_vec.Vx * 0.5f; - c->move_vec.Vy = c->move_vec.Vy * 0.5f; - } - - break; - - case AUTO_NAVI_Pitch: //自动视觉 - - c->move_vec.Vw =0; - c->move_vec.Vy =0; - c->move_vec.Vx =0 ; - - - -// if(abs_value(ctrl ->cmd_pick .posx )>20) -// { -// c->move_vec.Vw =PID_calc(&(c->pid.chassis_PICKWzPID_HIGN),(c->move_vec .Vw) ,0); -// -// } -// else if(abs_value(ctrl ->cmd_pick .posx )<0.1) -// { -// c->move_vec.Vw =0; -// } -// else -// c->move_vec.Vw =PID_calc(&(c->pid.chassis_PICKWzPID_LOW),(c->move_vec .Vw) ,0); - -// c->move_vec.Vw =LowPassFilter2p_Apply(&(c->filled[1]),c->move_vec.Vw); - -// -// c->vofa_send[0]=c->move_vec.Vw; -// c->vofa_send[1]=-ctrl->cmd_pick .posx; -// - - - break ; - - } - break ; - -} - - - //电机速度限幅 - - abs_limit_fp(&c->move_vec.Vx,6000.0f); - - abs_limit_fp(&c->move_vec.Vy,6000.0f); - - abs_limit_fp(&c->move_vec.Vw,6000.0f); - - Chassis_speed_calculate(c,c->move_vec.Vx,c->move_vec.Vy,c->move_vec.Vw); - - - for (uint8_t i = 0 ; i <4 ; i++) - { - c->final_out.final_3508out[i] = PID_calc(&(c->pid.chassis_3508VecPID[i]),c->motorfeedback.rotor_rpm3508[i],c->hopemotorout.OmniSpeedOut[i]); - - out->motor_CHASSIS3508 .as_array[i] = c->final_out.final_3508out[i]; - } - -// c->vofa_send[0]=c->pos088.bmi088.gyro.z; - -// c->vofa_send[1]=c->motorfeedback .rotor_rpm3508 [0]; -// c->vofa_send[2]=c->motorfeedback .rotor_rpm3508 [1]; -// c->vofa_send[3]=c->motorfeedback .rotor_rpm3508 [2]; -// c->vofa_send[4]=c->motorfeedback .rotor_rpm3508 [3]; -// -// c->vofa_send[0]=c->hopemotorout .OmniSpeedOut [0]; -// c->vofa_send[1]=c->hopemotorout .OmniSpeedOut [0]; -//// c->vofa_send[2]=c->hopemotorout .OmniSpeedOut [2]; -// c->vofa_send[3]=c->hopemotorout .OmniSpeedOut [3]; - -//// c->vofa_send[4]=c->motorfeedback .rotor_rpm3508 [0]; -// c->vofa_send[0]=c->motorfeedback .rotor_rpm3508 [0]; -//// c->vofa_send[6]=c->motorfeedback .rotor_rpm3508 [2]; -// c->vofa_send[2]=c->motorfeedback .rotor_rpm3508 [3]; -// -// c->vofa_send[5]=c->pos088 .imu_eulr .yaw ; - - return CHASSIS_OK; - -} - pid_type_def pid; - - pid_param_t pid_param={ - .p = 0.50f, - .i = 0.0f, - .d = 0.0f, - .i_limit = 50.0f, - .out_limit = 100.0f - }; -fp32 jiuzheng(fp32 yaw) -{ - static fp32 pian_yaw=0; - static fp32 shang_yaw=0; - static int is=0; - - - if(is==0) - { - PID_init (&pid,PID_POSITION ,&pid_param); - is=1; - } - - pian_yaw+= (yaw - shang_yaw); - shang_yaw=yaw ; - - return PID_calc(&pid,pian_yaw,0); -} - diff --git a/User/Module/Chassis.h b/User/Module/Chassis.h index 919bb3e..bdc6868 100644 --- a/User/Module/Chassis.h +++ b/User/Module/Chassis.h @@ -90,7 +90,11 @@ typedef struct fp32 Vw; fp32 mul;//油门倍率 }ChassisMove_Vec; - +typedef struct +{ + fp32 send[4]; + +}NUC_send_t; /** * @brief @@ -160,6 +164,7 @@ typedef struct{ int32_t sick_dis[4]; //获取到的sick激光值 + NUC_send_t NUC_send; }Chassis_t; diff --git a/User/device/cmd.c b/User/device/cmd.c index eec5297..036881e 100644 --- a/User/device/cmd.c +++ b/User/device/cmd.c @@ -191,11 +191,14 @@ 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_NAVI_Adjust; + else { + if(rc->LD.key_E ==CMD_SW_DOWN ) cmd ->CMD_mode =Normal; else if(rc->LD.key_E ==CMD_SW_UP) cmd ->CMD_mode =AUTO_NAVI_Pitch; - else if(rc->LD .key_E ==CMD_SW_MID ) cmd ->CMD_mode =AUTO_NAVI; + else if(rc->LD .key_E ==CMD_SW_MID ) cmd ->CMD_mode =AUTO_NAVI; else cmd ->CMD_mode =Normal ; - + } } else if(cmd ->CMD_CtrlType ==RCcontrol){ /*手动下的*/ diff --git a/User/device/cmd.h b/User/device/cmd.h index 52d5703..bfb7904 100644 --- a/User/device/cmd.h +++ b/User/device/cmd.h @@ -25,6 +25,7 @@ typedef enum{ AUTO_NAVI, AUTO_NAVI_Pitch, + AUTO_NAVI_Adjust,//雷达调整 UP_Adjust,//上层调整 diff --git a/User/task/chassis_task.c b/User/task/chassis_task.c index 28549a0..c5bdfe5 100644 --- a/User/task/chassis_task.c +++ b/User/task/chassis_task.c @@ -85,13 +85,14 @@ 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); //发送数据 vofa_send[0] = chassis.vofa_send[0]; - vofa_send[1] = chassis.vofa_send[1]; + vofa_send[1] = chassis.vofa_send[1]; vofa_send[2] = chassis.vofa_send[2]; vofa_send[3] = chassis.vofa_send[3]; vofa_send[4] = chassis.vofa_send[4]; - vofa_send[5] = chassis.vofa_send[5]; + vofa_send[5] = chassis.vofa_send[5]; vofa_send[6] = chassis.vofa_send[6]; vofa_send[7] = chassis.vofa_send[7]; diff --git a/User/task/init.c b/User/task/init.c index 4f20970..9b3e7af 100644 --- a/User/task/init.c +++ b/User/task/init.c @@ -85,7 +85,9 @@ void Task_Init(void *argument) { task_runtime.msgq.cmd.raw.nuc = osMessageQueueNew(3u,sizeof(CMD_NUC_t), NULL); - + task_runtime.msgq.cmd.raw.nuc_send = + osMessageQueueNew(3u,sizeof(NUC_send_t), NULL); + osKernelUnlock(); osThreadTerminate(osThreadGetId()); /* 结束自身 */ } diff --git a/User/task/nuc_task.c b/User/task/nuc_task.c index cbe6d3d..4060af7 100644 --- a/User/task/nuc_task.c +++ b/User/task/nuc_task.c @@ -5,13 +5,15 @@ NUC_t nuc_raw; CMD_NUC_t cmd_fromnuc; + +NUC_send_t NUC_send; #else static NUC_t nuc_raw; static CMD_NUC_t cmd_fromnuc; - +NUC_send_t NUC_send; #endif -fp32 send[4]={11.0f,45.0,1.f,4.0f}; +//fp32 send[4]={11.0f,45.0,1.f,4.0f}; void Task_nuc(void *argument){ (void)argument; /**/ @@ -29,7 +31,7 @@ void Task_nuc(void *argument){ task_runtime.stack_water_mark.nuc= osThreadGetStackSpace(osThreadGetId()); #endif NUC_StartReceiving(); - NUC_StartSending(send); + NUC_StartSending(NUC_send.send); if (NUC_WaitDmaCplt()){ NUC_RawParse(&cmd_fromnuc); } @@ -38,7 +40,8 @@ void Task_nuc(void *argument){ } osMessageQueueReset(task_runtime.msgq.cmd.raw.nuc); osMessageQueuePut(task_runtime.msgq.cmd.raw.nuc,&(cmd_fromnuc),0,0); - + osMessageQueueGet(task_runtime.msgq.cmd.raw.nuc_send, &NUC_send, NULL, 0); + tick += delay_tick; /* 计算下一个唤醒时刄1ķ*/ osDelayUntil(tick); diff --git a/User/task/user_task.h b/User/task/user_task.h index 928f2ef..958b2c3 100644 --- a/User/task/user_task.h +++ b/User/task/user_task.h @@ -58,17 +58,15 @@ typedef struct { struct { struct { osMessageQueueId_t rc; - osMessageQueueId_t nuc; + osMessageQueueId_t nuc; // osMessageQueueId_t eulr;/*姿态结算得到的欧拉角*/ - + osMessageQueueId_t nuc_send; //给nuc发 }raw; /*控制分离*/ osMessageQueueId_t UP_cmd_ctrl_t; osMessageQueueId_t CHASSIS_cmd_ctrl_t; - - osMessageQueueId_t status; } cmd;