diff --git a/MDK-ARM/R2.uvoptx b/MDK-ARM/R2.uvoptx index aeb487c..3ee1328 100644 --- a/MDK-ARM/R2.uvoptx +++ b/MDK-ARM/R2.uvoptx @@ -160,6 +160,41 @@ 1 LD_raw,0x0A + + 2 + 1 + can,0x0A + + + 3 + 1 + UP,0x0A + + + 4 + 1 + cmd_rc,0x0A + + + 5 + 1 + chassis + + + 6 + 1 + nuc_raw,0x0A + + + 7 + 1 + nucbuf + + + 8 + 1 + cmd_fromnuc + 0 @@ -387,7 +422,7 @@ Drivers/STM32F4xx_HAL_Driver - 0 + 1 0 0 0 @@ -659,7 +694,7 @@ Drivers/CMSIS - 0 + 1 0 0 0 @@ -679,7 +714,7 @@ Middlewares/FreeRTOS - 0 + 1 0 0 0 diff --git a/MDK-ARM/R2/R2.axf b/MDK-ARM/R2/R2.axf index 9d5cef0..5768f97 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 8d720c2..f05467b 100644 --- a/User/Module/Chassis.c +++ b/User/Module/Chassis.c @@ -99,9 +99,9 @@ int8_t Chassis_init(Chassis_t *c,const Chassis_Param_t *param,float target_freq) void Chassis_speed_calculate(Chassis_t *c,fp32 Vx,fp32 Vy,fp32 Vw) //底盘逆运动学的解算 { c->hopemotorout.OmniSpeedOut[3] = -Vx+Vy+Vw;//右前 - c->hopemotorout.OmniSpeedOut[1] = -Vx-Vy+Vw;//右后 + c->hopemotorout.OmniSpeedOut[0] = -Vx-Vy+Vw;//右后 c->hopemotorout.OmniSpeedOut[2] = Vx-Vy+Vw;//左后 - c->hopemotorout.OmniSpeedOut[0] = Vx+Vy+Vw;//左前 + c->hopemotorout.OmniSpeedOut[1] = Vx+Vy+Vw;//左前 } //bool isArrive(fp32 real_pos,fp32 target_pos,fp32 mistake) @@ -131,11 +131,23 @@ int8_t Chassis_Control(Chassis_t *c,CMD_t *ctrl,CAN_Output_t *out) /* 在cmd里对数据进行处理 包括方向和油门 6000为全向轮的倍率,遥控器坐标系和机器人坐标系不同*/ - if(c->chassis_ctrl .mode != Pitch){ + 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; @@ -174,8 +186,7 @@ int8_t Chassis_Control(Chassis_t *c,CMD_t *ctrl,CAN_Output_t *out) break; - - case AUTO_PICK: //自动视觉 + case AUTO_PICK: //自动视觉 c->move_vec.Vx =ctrl->Vx*6000 ; c->move_vec.Vy =ctrl->Vy *6000; @@ -208,7 +219,9 @@ int8_t Chassis_Control(Chassis_t *c,CMD_t *ctrl,CAN_Output_t *out) break ; + } + break ; } diff --git a/User/Module/config.c b/User/Module/config.c index 8be6541..263d6ec 100644 --- a/User/Module/config.c +++ b/User/Module/config.c @@ -76,11 +76,11 @@ static const ConfigParam_t param ={ }, /*投球*/ .PitchConfig_Config = { - .m2006_init_angle =-150, + .m2006_init_angle =-170, .m2006_trigger_angle =0, - .go1_init_position = 0, - .go1_release_threshold =0, - .m2006_Screw_init=0 + .go1_init_position = -50, + .go1_release_threshold =-210, + .m2006_Screw_init=0, }, diff --git a/User/Module/up.c b/User/Module/up.c index bcb2dca..1019da9 100644 --- a/User/Module/up.c +++ b/User/Module/up.c @@ -56,10 +56,12 @@ int8_t UP_UpdateFeedback(UP_t *u, const CAN_t *can, CMD_t *c) { - u->motorfeedback .VESC_5065_M1_rpm =can ->motor .chassis5065 .as_array [0].rotor_speed ; - u->motorfeedback .VESC_5065_M2_rpm =can ->motor .chassis5065 .as_array [1].rotor_speed ; + u->motorfeedback .VESC.VESC_5065_M1_rpm =can ->motor .chassis5065 .as_array [0].rotor_speed ; + u->motorfeedback .VESC.VESC_5065_M2_rpm =can ->motor .chassis5065 .as_array [1].rotor_speed ; + + u->motorfeedback .Encoder .angle = can ->Oid.angle ; + u->motorfeedback .Encoder .ecd = can ->Oid.ecd ; - for(int i=0;i<4;i++){ u->motorfeedback .DJmotor_feedback[i].rpm =can ->motor .up_motor3508 .as_array [i].rotor_speed ; u->motorfeedback .DJmotor_feedback[i].ecd =can ->motor .up_motor3508.as_array [i].rotor_ecd ; @@ -231,7 +233,7 @@ int8_t UP_control(UP_t *u,CAN_Output_t *out,CMD_t *c) // break; - + case Pitch : if (u->PitchContext .PitchState ==PITCH_PREPARE) { @@ -241,7 +243,13 @@ int8_t UP_control(UP_t *u,CAN_Output_t *out,CMD_t *c) Pitch_Process(u,out,c); break ; - + case UP_Adjust: + u->PitchContext.PitchConfig.go1_init_position += c->Vx ; + u->PitchContext.PitchConfig.m2006_Screw_init += c->Vy; + + u->motor_target .go_shoot=u->PitchContext.PitchConfig.go1_init_position; + u->motor_target .Pitch_M2006_angle=u->PitchContext.PitchConfig.m2006_Screw_init; + break ; case Dribble: { /*夹球 -> 3508 升起 ,同时go2翻转 -> 到位置后,继电器开,放球,同时3508降,go2翻回->接球,收 */ @@ -287,14 +295,10 @@ return 0; int8_t Pitch_Process(UP_t *u, CAN_Output_t *out,CMD_t *c) { - static fp32 go1_position,M2006_Screw_position ; - static int is_initialize=1; - if(is_initialize) - { - go1_position=u->PitchContext .PitchConfig .go1_init_position ; - M2006_Screw_position=u->PitchContext .PitchConfig .m2006_Screw_init; - is_initialize=0; - } + +// go1_position=u->PitchContext .PitchConfig .go1_init_position ; +// M2006_Screw_position=u->PitchContext .PitchConfig .m2006_Screw_init; + switch(u->PitchContext .PitchState){ @@ -313,12 +317,10 @@ int8_t Pitch_Process(UP_t *u, CAN_Output_t *out,CMD_t *c) if(u->motorfeedback .DJmotor_feedback [0].total_angle >-1) //当2006的总角度小于1,可以认为已经勾上,误差为1 { - u->motor_target .go_shoot = go1_position;//go下拉 - u->motor_target .Pitch_M2006_angle = M2006_Screw_position;//丝杠上的2006 - go1_position = go1_position + c->Vx ; - M2006_Screw_position=M2006_Screw_position+ c->Vy; - - + u->motor_target .go_shoot=u->PitchContext.PitchConfig.go1_init_position; +// u->PitchContext.PitchConfig.go1_init_position += c->Vx ; +// u->PitchContext.PitchConfig.m2006_Screw_init += c->Vy; + } break ; @@ -336,6 +338,13 @@ return 0; +int8_t Pitch_Adjust(UP_t *u, CAN_Output_t *out,CMD_t *c) +{ + + u->PitchContext.PitchConfig.go1_init_position += c->Vx ; + u->PitchContext.PitchConfig.m2006_Screw_init += c->Vy; + +} diff --git a/User/Module/up.h b/User/Module/up.h index 54ce955..efd0b09 100644 --- a/User/Module/up.h +++ b/User/Module/up.h @@ -157,15 +157,23 @@ typedef struct{ CMD_t *cmd; - struct{ - + struct{ + + struct{ fp32 VESC_5065_M1_rpm; fp32 VESC_5065_M2_rpm; + }VESC; GO_MotorData_t *go_data;//存放go电机数据 DJmotor_feedback_t DJmotor_feedback[4]; - + + struct { + uint32_t ecd; + float angle; + + }Encoder; + }motorfeedback; diff --git a/User/device/can_use.c b/User/device/can_use.c index 1d22015..c6e47c2 100644 --- a/User/device/can_use.c +++ b/User/device/can_use.c @@ -73,8 +73,8 @@ void CAN_Encoder_Decode(CAN_EncoderFeedback_t *feedback, switch(raw[2])//判断指令id { case 0x01: - feedback->ecd =raw[3]|raw[4]<<8|raw[5]<<16|raw[6]<<24;//接收编码器值 - feedback->angle=feedback->ecd*360/CAN_ENCODER_RESOLUTION; + feedback->ecd =raw[3]|raw[4]<<8|raw[5]<<16|raw[6]<<24; + feedback->angle=feedback->ecd*360/CAN_ENCODER_RESOLUTION-151.0f; break; } } @@ -396,7 +396,7 @@ int8_t CAN_StoreMsg(CAN_t *can, CAN_RawRx_t *can_rx) { // 存储消息到对应的电机结构体中 index = can_rx->rx_header.StdId - CAN_CHASSIS_M3508_M1_ID; can->recive_flag |= 1 << (index); - CAN_DJIMotor_Decode(&(can->motor.chassis5065.as_array[index]), can_rx->rx_data); + CAN_DJIMotor_Decode(&(can->motor.chassis_motor3508.as_array[index]), can_rx->rx_data); detect_hook(CHASSIS3508M1_TOE + index); break; diff --git a/User/device/cmd.c b/User/device/cmd.c index 2778cec..68e017f 100644 --- a/User/device/cmd.c +++ b/User/device/cmd.c @@ -61,17 +61,25 @@ static void CMD_RcLostLogic(CMD_t *cmd){ /* 机器人底盘运行模式恢复至放松模式 */ cmd->CMD_CtrlType = RELAXED; } -int8_t CMD_ParseRc(CMD_t *cmd,CMD_RC_t *rc){ +int8_t CMD_ParseRc(CMD_t *cmd,const CMD_RC_t *rc){ if (cmd == NULL) return -1; if (rc == NULL) return -1; - /*c当rc丢控时,恢复机器人至默认状态 */ - if ((rc->dr16.sw_l == CMD_SW_ERR) || (rc->dr16.sw_r == CMD_SW_ERR)) { - CMD_RcLostLogic(cmd); - } - else { - CMD_RcLogic(rc, cmd); - } + switch (rc->rc_type){ + + case RC_DR16: + CMD_DR16(cmd,rc); + break ; + + case RC_LD: + CMD_LD(cmd,rc); + break ; + + case Control_loss: + CMD_RcLostLogic(cmd); + break ; + } + return 0; } @@ -111,8 +119,8 @@ int8_t CMD_ParseNuc(CMD_t *cmd,CMD_NUC_t *n){ -/*遥控器,上下层通用,按键控制,统一到cmd*/ -int8_t CMD_ParseRC(CMD_t *cmd,const CMD_RC_t *rc) { +/*DR16遥控器数据分配*/ +int8_t CMD_DR16(CMD_t *cmd,const CMD_RC_t *rc) { if(cmd == NULL) return -1; @@ -162,3 +170,34 @@ int8_t CMD_ParseRC(CMD_t *cmd,const CMD_RC_t *rc) { return 0; } +int8_t CMD_LD(CMD_t *cmd,const CMD_RC_t *rc){ + + if(cmd == NULL) return -1; + + + cmd->Vx = rc->LD.ch_r_x; + cmd->Vy = rc->LD.ch_r_y; + cmd->Vw = rc->LD.ch_l_x; + cmd->poscamear = rc->LD.ch_l_y; + + + /*自动手动切换*/ + if(rc->LD.key_A ==CMD_SW_DOWN ) cmd ->CMD_CtrlType =RCcontrol; + else if(rc->LD.key_A ==CMD_SW_UP) cmd ->CMD_CtrlType =AUTO; + + + if(cmd ->CMD_CtrlType ==AUTO){ + +/*自动下的*/ + if(rc->LD.key_E ==CMD_SW_DOWN ) cmd ->CMD_mode =AUTO_NAVI; + else if(rc->LD.key_E ==CMD_SW_UP) cmd ->CMD_mode =AUTO_PICK; + else cmd ->CMD_mode =Normal ; + + } + else if(cmd ->CMD_CtrlType ==RCcontrol){ +/*手动下的*/ + if(rc->LD.key_G ==CMD_SW_DOWN ) cmd ->CMD_mode =UP_Adjust; + else if(rc->LD.key_G ==CMD_SW_UP) cmd ->CMD_mode =Pitch; + else cmd ->CMD_mode =Normal; + } +} diff --git a/User/device/cmd.h b/User/device/cmd.h index 0bc6543..c5082ab 100644 --- a/User/device/cmd.h +++ b/User/device/cmd.h @@ -21,8 +21,11 @@ typedef enum{ Normal, //无模式 + AUTO_NAVI, AUTO_PICK, + + UP_Adjust,//上层调整 Dribble , //运球 Pitch, //投篮,底盘锁定 @@ -57,6 +60,8 @@ typedef enum { CMD_SW_MID = 3, CMD_SW_DOWN = 2, } CMD_SwitchPos_t; + + typedef enum{ RC_DR16, RC_LD , @@ -87,14 +92,14 @@ typedef struct { fp32 ch_r_y ; fp32 ch_l_x ; fp32 ch_l_y ; - int16_t key_A ; -// int16_t key_B ;//无 - int16_t key_C ; -// int16_t key_D ;//无 - int16_t key_E ; - int16_t key_F; - int16_t key_G ; - int16_t key_H ; + CMD_SwitchPos_t key_A ; +// int16_t key_B ;//�� + CMD_SwitchPos_t key_C ; +// int16_t key_D ;//�� + CMD_SwitchPos_t key_E ; + CMD_SwitchPos_t key_F; + CMD_SwitchPos_t key_G ; + CMD_SwitchPos_t key_H ; int16_t knob_left;//左旋钮 int16_t knob_right;//右旋钮 @@ -148,10 +153,11 @@ int8_t CMD_Init(CMD_t *cmd); static void CMD_RcLogic(const CMD_RC_t *rc, CMD_t *cmd) ; static void CMD_RcLostLogic(CMD_t *cmd); -int8_t CMD_ParseRc(CMD_t *cmd,CMD_RC_t *rc); +int8_t CMD_ParseRc(CMD_t *cmd,const CMD_RC_t *rc); int8_t CMD_ParseNuc(CMD_t *cmd,CMD_NUC_t *n); -int8_t CMD_ParseRC(CMD_t *cmd,const CMD_RC_t *rc) ; +int8_t CMD_DR16(CMD_t *cmd,const CMD_RC_t *rc) ; +int8_t CMD_LD(CMD_t *cmd,const CMD_RC_t *rc); #endif diff --git a/User/device/rc.c b/User/device/rc.c index 7000eb8..a8cffe5 100644 --- a/User/device/rc.c +++ b/User/device/rc.c @@ -17,8 +17,8 @@ #ifdef DR16 #define FRAME_LEN 36 - -#elif defined(LD_t) +#endif +#ifdef LD_t #define FRAME_LEN 25 @@ -30,7 +30,7 @@ #define RC_CH_VALUE_MAX ((uint16_t)1684) static osThreadId_t thread_alert; -static uint8_t cbuf[FRAME_LEN]; //此处设置为两帧字节的长度 若为一帧会出现乱码的情况 + uint8_t cbuf[FRAME_LEN]; //此处设置为两帧字节的长度 若为一帧会出现乱码的情况 /*通用,初始化,串口回调注册,dma数据接收*/ int8_t RC_SBUS_Init(void ) @@ -39,6 +39,8 @@ int8_t RC_SBUS_Init(void ) BSP_UART_RegisterCallback(BSP_UART_REMOTE, BSP_UART_IDLE_LINE_CB, RC_SBUS_RxCpltCallback); + memset(cbuf, 0, sizeof(cbuf));//初始化清空数据包 + return DEVICE_OK; } @@ -98,40 +100,48 @@ int8_t LD_ParseRaw( LD_raw_t *raw, LD_Data_t *LD) raw->map_ch[0]=map_fp32(raw->ch[0],-719,680,-1,1); - raw->map_ch[1]=map_fp32(raw->ch[1],-567,832,-1,1); + raw->map_ch[1]=map_fp32(raw->ch[1],-653,746,-1,1); raw->map_ch[2]=map_fp32(raw->ch[2],95,1482,0,1); raw->map_ch[3]=map_fp32(raw->ch[3],-317,375,-1,1); /*非线性映射*/ - raw->map_ch[0]=expo_map(raw->map_ch[0], 0.7f); + raw->map_ch[0]=expo_map(raw->map_ch[0],0.7f); raw->map_ch[1]=expo_map(raw->map_ch[1],0.7f); raw->map_ch[2]=expo_map(raw->map_ch[2],0.7f); raw->map_ch[3]=expo_map(raw->map_ch[3],0.7f); - //死区(-30,30) - if(raw->map_ch[0]>-0.05f&&raw->map_ch[0]<0.05f) raw->map_ch[0]=0; - if(raw->map_ch[1]>-0.05f&&raw->map_ch[1]<0.05f) raw->map_ch[1]=0; - if(raw->map_ch[2]>-0.05f&&raw->map_ch[2]<0.05f) raw->map_ch[2]=0; - if(raw->map_ch[3]>-0.05f&&raw->map_ch[3]<0.05f) raw->map_ch[3]=0; - + //死区(-30,30) + if(raw->map_ch[0]>-0.002f&&raw->map_ch[0]<0.002f) raw->map_ch[0]=0; + if(raw->map_ch[1]>-0.002f&&raw->map_ch[1]<0.002f) raw->map_ch[1]=0; + if(raw->map_ch[2]>-0.002f&&raw->map_ch[2]<0.002f) raw->map_ch[2]=0; + if(raw->map_ch[3]>-0.002f&&raw->map_ch[3]<0.002f) raw->map_ch[3]=0; + /*dr16采用的是复制内存,这里因为内存顺序不同没用*/ - LD->ch_l_x= raw->map_ch[3]; - LD->ch_l_y =raw->map_ch[2]; - LD->ch_r_x= raw->map_ch[0]; - LD->ch_r_y =raw->map_ch[1]; - LD->key_A =raw->sw[0]; -// LD->key_B =rc_ctrl->sw[0] - LD->key_C =raw->sw[2]; -// LD->key_D =rc_ctrl->sw[0] - LD->key_E =raw->sw[5]; - LD->key_F =raw->sw[3]; - LD->key_G =raw->sw[7]; - LD->key_H =raw->sw[4]; - LD->knob_left=raw->sw[1]; - LD->knob_right =raw->sw[6]; - + LD->ch_l_x= raw->map_ch[3]; + LD->ch_l_y =raw->map_ch[2]; + LD->ch_r_x= raw->map_ch[0]; + LD->ch_r_y =raw->map_ch[1]; + +// LD->key_A =raw->sw[0]; +// // LD->key_B =rc_ctrl->sw[0] +// LD->key_C =raw->sw[2]; +// // LD->key_D =rc_ctrl->sw[0] +// LD->key_E =raw->sw[5]; +// LD->key_F =raw->sw[3]; +// LD->key_G =raw->sw[7]; +// LD->key_H =raw->sw[4]; +// LD->knob_left=raw->sw[1]; +// LD->knob_right =raw->sw[6]; + LD->key_A = MapSwitchState(raw->sw[0]); + LD->key_C = MapSwitchState(raw->sw[2]); + LD->key_E = MapSwitchState(raw->sw[5]); + LD->key_F = MapSwitchState(raw->sw[3]); + LD->key_G = MapSwitchState(raw->sw[7]); + LD->key_H = MapSwitchState(raw->sw[4]); + LD->knob_left = MapSwitchState(raw->sw[1]); + LD->knob_right = MapSwitchState(raw->sw[6]); return 1; @@ -195,8 +205,8 @@ int8_t RC_ParseRC( DR16_t *dr16,LD_raw_t *LD_raw, LD_Data_t *LD, CMD_RC_t *rc) { rc->dr16.ch_l_x = 2 * ((float)dr16->data.ch_l_x - RC_CH_VALUE_MID) / full_range; rc->dr16.ch_l_y = 2 * ((float)dr16->data.ch_l_y - RC_CH_VALUE_MID) / full_range; - rc->dr16.sw_l = (CMD_SwitchPos_t)dr16->data.sw_l; - rc->dr16.sw_r = (CMD_SwitchPos_t)dr16->data.sw_r; + rc->dr16.sw_l = (CMD_SwitchPos_DR16_t)dr16->data.sw_l; + rc->dr16.sw_r = (CMD_SwitchPos_DR16_t)dr16->data.sw_r; rc->dr16.key = dr16->data.key; @@ -211,10 +221,10 @@ int8_t RC_ParseRC( DR16_t *dr16,LD_raw_t *LD_raw, LD_Data_t *LD, CMD_RC_t *rc) { memcpy(&rc->LD, LD, sizeof(LD_Data_t)); /*离线处理,和dr16位置不同*/ - if(LD_raw->sw[7] != 393) + if(LD_raw->sw[7] == 300||LD_raw->sw[3]!=1694) { LD_HandleOffline(LD,rc); - memset(cbuf, 0, sizeof(cbuf)); //有时候会出现消息数组错位,所以直接清空,在离线和指定按键不对的情况下,原数据不可信 +// memset(cbuf, 0, sizeof(cbuf)); //有时候会出现消息数组错位,所以直接清空,在离线和指定按键不对的情况下,原数据不可信 } #endif return DEVICE_OK; @@ -230,6 +240,7 @@ int8_t DR16_HandleOffline(const DR16_t *dr16, CMD_RC_t *rc) { (void)dr16; memset(&rc->dr16 , 0, sizeof(DR16_t)); + return 0; } int8_t LD_HandleOffline(const LD_Data_t *LD, CMD_RC_t *rc) { @@ -240,4 +251,13 @@ int8_t LD_HandleOffline(const LD_Data_t *LD, CMD_RC_t *rc) { memset(&rc->LD , 0, sizeof(LD_Data_t)); return 0; +} + + + +/*乐迪用的按键封装 */ +CMD_SwitchPos_t MapSwitchState(int16_t value) { + return (value > 300 && value < 500) ? CMD_SW_DOWN : + (value >= 500 && value < 1500) ? CMD_SW_MID : + (value >= 1500 && value < 1700) ? CMD_SW_UP : CMD_SW_ERR; } \ No newline at end of file diff --git a/User/device/rc.h b/User/device/rc.h index 43665fe..e21aaa5 100644 --- a/User/device/rc.h +++ b/User/device/rc.h @@ -32,7 +32,7 @@ typedef struct { DR16_Data_t data; } DR16_t; -/*ԭʼ*/ +/*ԭʼ����*/ typedef __packed struct { fp32 map_ch[4]; @@ -48,17 +48,17 @@ typedef __packed struct fp32 ch_r_y ; fp32 ch_l_x ; fp32 ch_l_y ; - int16_t key_A ; -// int16_t key_B ;// - int16_t key_C ; -// int16_t key_D ;// - int16_t key_E ; - int16_t key_F; - int16_t key_G ; - int16_t key_H ; + CMD_SwitchPos_t key_A ; +// int16_t key_B ;//�� + CMD_SwitchPos_t key_C ; +// int16_t key_D ;//�� + CMD_SwitchPos_t key_E ; + CMD_SwitchPos_t key_F; + CMD_SwitchPos_t key_G ; + CMD_SwitchPos_t key_H ; - int16_t knob_left;//ť - int16_t knob_right;//ť + int16_t knob_left;//����ť + int16_t knob_right;//����ť } LD_Data_t; @@ -79,6 +79,7 @@ int8_t DR16_ParseRaw(DR16_t *dr16); int8_t RC_ParseRC( DR16_t *dr16,LD_raw_t *LD_raw, LD_Data_t *LD, CMD_RC_t *rc) ; int8_t DR16_HandleOffline(const DR16_t *dr16, CMD_RC_t *rc) ; int8_t LD_HandleOffline(const LD_Data_t *LD, CMD_RC_t *rc) ; +CMD_SwitchPos_t MapSwitchState(int16_t value) ; #endif diff --git a/User/task/cmd_task.c b/User/task/cmd_task.c index 651baa9..a1f64de 100644 --- a/User/task/cmd_task.c +++ b/User/task/cmd_task.c @@ -39,7 +39,6 @@ void Task_cmd(void *argument){ /*将各任务接收到的原始数据解析为通用的控制命令*/ - /*注意,不能将nuc和码盘导航一块使用*/ if(osMessageQueueGet(task_runtime.msgq.cmd.raw.nuc, &Nuc,0 ,0) ==osOK) //nuc @@ -54,6 +53,7 @@ void Task_cmd(void *argument){ /*将需要与其他任务共享的数据放到消息队列里 此处主要分享给底盘 后续会添加和上层机构的通信 */ osMessageQueueReset(task_runtime.msgq.cmd.CHASSIS_cmd_ctrl_t); osMessageQueuePut(task_runtime.msgq.cmd.CHASSIS_cmd_ctrl_t,&cmd,0,0); + osMessageQueueReset(task_runtime.msgq.cmd.UP_cmd_ctrl_t); osMessageQueuePut(task_runtime.msgq.cmd.UP_cmd_ctrl_t,&cmd,0,0);