go和nuc串口更换,根据位置自动发go的位置
This commit is contained in:
		
							parent
							
								
									b2efd7c822
								
							
						
					
					
						commit
						8ffef38518
					
				| @ -46,7 +46,7 @@ void MX_USART1_UART_Init(void) | |||||||
| 
 | 
 | ||||||
|   /* USER CODE END USART1_Init 1 */ |   /* USER CODE END USART1_Init 1 */ | ||||||
|   huart1.Instance = USART1; |   huart1.Instance = USART1; | ||||||
|   huart1.Init.BaudRate = 115200; |   huart1.Init.BaudRate = 4000000; | ||||||
|   huart1.Init.WordLength = UART_WORDLENGTH_8B; |   huart1.Init.WordLength = UART_WORDLENGTH_8B; | ||||||
|   huart1.Init.StopBits = UART_STOPBITS_1; |   huart1.Init.StopBits = UART_STOPBITS_1; | ||||||
|   huart1.Init.Parity = UART_PARITY_NONE; |   huart1.Init.Parity = UART_PARITY_NONE; | ||||||
| @ -104,7 +104,7 @@ void MX_USART6_UART_Init(void) | |||||||
| 
 | 
 | ||||||
|   /* USER CODE END USART6_Init 1 */ |   /* USER CODE END USART6_Init 1 */ | ||||||
|   huart6.Instance = USART6; |   huart6.Instance = USART6; | ||||||
|   huart6.Init.BaudRate = 4000000; |   huart6.Init.BaudRate = 115200; | ||||||
|   huart6.Init.WordLength = UART_WORDLENGTH_8B; |   huart6.Init.WordLength = UART_WORDLENGTH_8B; | ||||||
|   huart6.Init.StopBits = UART_STOPBITS_1; |   huart6.Init.StopBits = UART_STOPBITS_1; | ||||||
|   huart6.Init.Parity = UART_PARITY_NONE; |   huart6.Init.Parity = UART_PARITY_NONE; | ||||||
|  | |||||||
| @ -223,27 +223,92 @@ | |||||||
|         <Ww> |         <Ww> | ||||||
|           <count>13</count> |           <count>13</count> | ||||||
|           <WinNumber>1</WinNumber> |           <WinNumber>1</WinNumber> | ||||||
|           <ItemText>a</ItemText> |           <ItemText>b</ItemText> | ||||||
|         </Ww> |         </Ww> | ||||||
|         <Ww> |         <Ww> | ||||||
|           <count>14</count> |           <count>14</count> | ||||||
|           <WinNumber>1</WinNumber> |           <WinNumber>1</WinNumber> | ||||||
|           <ItemText>b</ItemText> |           <ItemText>count,0x0A</ItemText> | ||||||
|         </Ww> |         </Ww> | ||||||
|         <Ww> |         <Ww> | ||||||
|           <count>15</count> |           <count>15</count> | ||||||
|           <WinNumber>1</WinNumber> |           <WinNumber>1</WinNumber> | ||||||
|           <ItemText>count,0x0A</ItemText> |           <ItemText>count</ItemText> | ||||||
|         </Ww> |         </Ww> | ||||||
|         <Ww> |         <Ww> | ||||||
|           <count>16</count> |           <count>16</count> | ||||||
|           <WinNumber>1</WinNumber> |           <WinNumber>1</WinNumber> | ||||||
|           <ItemText>count</ItemText> |           <ItemText>raw_rx1,0x0A</ItemText> | ||||||
|         </Ww> |         </Ww> | ||||||
|         <Ww> |         <Ww> | ||||||
|           <count>17</count> |           <count>17</count> | ||||||
|           <WinNumber>1</WinNumber> |           <WinNumber>1</WinNumber> | ||||||
|           <ItemText>raw_rx1,0x0A</ItemText> |           <ItemText>gyro_kp,0x0A</ItemText> | ||||||
|  |         </Ww> | ||||||
|  |         <Ww> | ||||||
|  |           <count>18</count> | ||||||
|  |           <WinNumber>1</WinNumber> | ||||||
|  |           <ItemText>nucbuf,0x0A</ItemText> | ||||||
|  |         </Ww> | ||||||
|  |         <Ww> | ||||||
|  |           <count>19</count> | ||||||
|  |           <WinNumber>1</WinNumber> | ||||||
|  |           <ItemText>vofa_send,0x0A</ItemText> | ||||||
|  |         </Ww> | ||||||
|  |         <Ww> | ||||||
|  |           <count>20</count> | ||||||
|  |           <WinNumber>1</WinNumber> | ||||||
|  |           <ItemText>SendBuffer,0x10</ItemText> | ||||||
|  |         </Ww> | ||||||
|  |         <Ww> | ||||||
|  |           <count>21</count> | ||||||
|  |           <WinNumber>1</WinNumber> | ||||||
|  |           <ItemText>NUC_StartSending,0x0A</ItemText> | ||||||
|  |         </Ww> | ||||||
|  |         <Ww> | ||||||
|  |           <count>22</count> | ||||||
|  |           <WinNumber>1</WinNumber> | ||||||
|  |           <ItemText>PIAN</ItemText> | ||||||
|  |         </Ww> | ||||||
|  |         <Ww> | ||||||
|  |           <count>23</count> | ||||||
|  |           <WinNumber>1</WinNumber> | ||||||
|  |           <ItemText>pid</ItemText> | ||||||
|  |         </Ww> | ||||||
|  |         <Ww> | ||||||
|  |           <count>24</count> | ||||||
|  |           <WinNumber>1</WinNumber> | ||||||
|  |           <ItemText>bmi088</ItemText> | ||||||
|  |         </Ww> | ||||||
|  |         <Ww> | ||||||
|  |           <count>25</count> | ||||||
|  |           <WinNumber>1</WinNumber> | ||||||
|  |           <ItemText>ist8310</ItemText> | ||||||
|  |         </Ww> | ||||||
|  |         <Ww> | ||||||
|  |           <count>26</count> | ||||||
|  |           <WinNumber>1</WinNumber> | ||||||
|  |           <ItemText>imu_eulr,0x0A</ItemText> | ||||||
|  |         </Ww> | ||||||
|  |         <Ww> | ||||||
|  |           <count>27</count> | ||||||
|  |           <WinNumber>1</WinNumber> | ||||||
|  |           <ItemText>imu_temp,0x0A</ItemText> | ||||||
|  |         </Ww> | ||||||
|  |         <Ww> | ||||||
|  |           <count>28</count> | ||||||
|  |           <WinNumber>1</WinNumber> | ||||||
|  |           <ItemText>htim10,0x0A</ItemText> | ||||||
|  |         </Ww> | ||||||
|  |         <Ww> | ||||||
|  |           <count>29</count> | ||||||
|  |           <WinNumber>1</WinNumber> | ||||||
|  |           <ItemText>pulse</ItemText> | ||||||
|  |         </Ww> | ||||||
|  |         <Ww> | ||||||
|  |           <count>30</count> | ||||||
|  |           <WinNumber>1</WinNumber> | ||||||
|  |           <ItemText>imu_temp</ItemText> | ||||||
|         </Ww> |         </Ww> | ||||||
|       </WatchWindow1> |       </WatchWindow1> | ||||||
|       <Tracepoint> |       <Tracepoint> | ||||||
|  | |||||||
										
											Binary file not shown.
										
									
								
							| @ -81,13 +81,17 @@ int8_t Chassis_init(Chassis_t *c,const Chassis_Param_t *param,float target_freq) | |||||||
| 	 return CHASSIS_OK; | 	 return CHASSIS_OK; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | fp32 gyro_kp=1.0f; | ||||||
|  | fp32 PIAN=0; | ||||||
| void Chassis_speed_calculate(Chassis_t *c,fp32 Vx,fp32 Vy,fp32 Vw)  //底盘逆运动学的解算,
 | void Chassis_speed_calculate(Chassis_t *c,fp32 Vx,fp32 Vy,fp32 Vw)  //底盘逆运动学的解算,
 | ||||||
| {		 | {		 | ||||||
| 	  fp64 Nor_Vx,Nor_Vy;//归一化后的数据
 | 	  fp64 Nor_Vx,Nor_Vy;//归一化后的数据
 | ||||||
| 	  normalize_vector(Vx,Vy,&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[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[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[2] = Nor_Vx-Nor_Vy+Vw   + c->pos088 .bmi088.gyro.z;//左后
 | ||||||
| @ -97,6 +101,14 @@ void Chassis_speed_calculate(Chassis_t *c,fp32 Vx,fp32 Vy,fp32 Vw)  //底盘逆 | |||||||
| 		c->hopemotorout.OmniSpeedOut[2] = Nor_Vx-Nor_Vy+Vw   ;//左后
 | 		c->hopemotorout.OmniSpeedOut[2] = Nor_Vx-Nor_Vy+Vw   ;//左后
 | ||||||
| 		c->hopemotorout.OmniSpeedOut[3] = 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   ;//左前
 | ||||||
|  | 
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -173,32 +185,32 @@ int8_t Chassis_Control(Chassis_t *c,CMD_t *ctrl,CAN_Output_t *out) | |||||||
| 
 | 
 | ||||||
| 	    break; | 	    break; | ||||||
| 		  | 		  | ||||||
| 		 	case AUTO_PICK:  //自动视觉
 | 		 	case AUTO_NAVI_Pitch:  //自动视觉
 | ||||||
| 	     | 	     | ||||||
| 	    c->move_vec.Vx =ctrl->Vx*6000 ; | 	    c->move_vec.Vw =0; | ||||||
| 	    c->move_vec.Vy =ctrl->Vy *6000;	 | 	    c->move_vec.Vy =0; | ||||||
| 	    c->move_vec .Vw = -ctrl->cmd_pick  .posx; | 	    c->move_vec.Vx =0 ; | ||||||
| 	 | 	 | ||||||
| 	 | 	 | ||||||
| 	 | 	 | ||||||
|       if(abs_value(ctrl ->cmd_pick .posx )>20) | //      if(abs_value(ctrl ->cmd_pick .posx )>20)
 | ||||||
| 			{ | //			{
 | ||||||
| 			  c->move_vec.Vw =PID_calc(&(c->pid.chassis_PICKWzPID_HIGN),(c->move_vec .Vw) ,0); | //			  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);
 | ||||||
| 			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; |  | ||||||
| 
 | 
 | ||||||
|  | //			
 | ||||||
|  | //       	c->vofa_send[0]=c->move_vec.Vw;
 | ||||||
|  | //	      c->vofa_send[1]=-ctrl->cmd_pick .posx;
 | ||||||
|  | //		
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 	 | 	 | ||||||
| @ -232,17 +244,54 @@ int8_t Chassis_Control(Chassis_t *c,CMD_t *ctrl,CAN_Output_t *out) | |||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 
 | 
 | ||||||
| //	c->vofa_send[0]=c->pos088.bmi088.gyro.x;
 | 
 | ||||||
| //	c->vofa_send[1]=c->pos088.bmi088.gyro.y;
 | //	c->vofa_send[0]=c->pos088.bmi088.gyro.z;
 | ||||||
| //	c->vofa_send[2]=c->pos088.bmi088.gyro.z;
 | 	 | ||||||
| //	c->vofa_send[3]=c->pos088.bmi088.accl.x;
 | //	c->vofa_send[1]=c->motorfeedback .rotor_rpm3508 [0];
 | ||||||
| //	c->vofa_send[4]=c->pos088.bmi088.accl.y;
 | //	c->vofa_send[2]=c->motorfeedback .rotor_rpm3508 [1];
 | ||||||
| //	c->vofa_send[5]=c->pos088.bmi088.accl.z;
 | //	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; | 	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); | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -190,6 +190,7 @@ int8_t Chassis_UpdateFeedback(Chassis_t *c, const CAN_t *can); | |||||||
| int8_t Chassis_Control(Chassis_t *c,CMD_t *ctrl,CAN_Output_t *out); | int8_t Chassis_Control(Chassis_t *c,CMD_t *ctrl,CAN_Output_t *out); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | fp32  jiuzheng(fp32 yaw); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -110,7 +110,7 @@ static const ConfigParam_t param ={ | |||||||
| }, | }, | ||||||
|     /*投球*/ |     /*投球*/ | ||||||
|     .PitchConfig_Config = { |     .PitchConfig_Config = { | ||||||
|     .m2006_init_angle =-170,     |     .m2006_init_angle =-90,     | ||||||
| 	  .m2006_trigger_angle =0, | 	  .m2006_trigger_angle =0, | ||||||
|     .go1_init_position = -50,  |     .go1_init_position = -50,  | ||||||
| 		.go1_Receive_ball  = -5, //偏下	
 | 		.go1_Receive_ball  = -5, //偏下	
 | ||||||
|  | |||||||
| @ -49,6 +49,8 @@ int8_t up_init(UP_t *u,const UP_Param_t *param,float target_freq) | |||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 	u->go_cmd =u->param ->go_cmd ; | 	u->go_cmd =u->param ->go_cmd ; | ||||||
|  | 	LowPassFilter2p_Init(&(u->filled[0]),target_freq,100.0f);   | ||||||
|  | 
 | ||||||
| 	 | 	 | ||||||
| 	// 初始化上层状态机
 | 	// 初始化上层状态机
 | ||||||
| 	if (!u->DribbleContext .is_initialized) { //检查是否为第一次运行状态机,运球
 | 	if (!u->DribbleContext .is_initialized) { //检查是否为第一次运行状态机,运球
 | ||||||
| @ -97,6 +99,7 @@ int8_t UP_UpdateFeedback(UP_t *u, const CAN_t *can, CMD_t *c) { | |||||||
| 	u->DribbleContext .DribbleConfig .light_ball_flag =HAL_GPIO_ReadPin(LIGHT_C_GPIO_Port  ,LIGHT_C_Pin); | 	u->DribbleContext .DribbleConfig .light_ball_flag =HAL_GPIO_ReadPin(LIGHT_C_GPIO_Port  ,LIGHT_C_Pin); | ||||||
| 	u->DribbleContext .DribbleConfig .light_3508_flag =HAL_GPIO_ReadPin(LIGHT_B_GPIO_Port  ,LIGHT_B_Pin); | 	u->DribbleContext .DribbleConfig .light_3508_flag =HAL_GPIO_ReadPin(LIGHT_B_GPIO_Port  ,LIGHT_B_Pin); | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -284,28 +287,30 @@ int8_t UP_control(UP_t *u,CAN_Output_t *out,CMD_t *c) | |||||||
|     u->motor_target .Dribble_translate_M3508_angle =u->DribbleContext .DribbleConfig .m3508_translate_angle; |     u->motor_target .Dribble_translate_M3508_angle =u->DribbleContext .DribbleConfig .m3508_translate_angle; | ||||||
| 	  u->DribbleContext .DribbleState  = DRIBBLE_PREPARE; //重置最初状态
 | 	  u->DribbleContext .DribbleState  = DRIBBLE_PREPARE; //重置最初状态
 | ||||||
| 			 | 			 | ||||||
|  | 			 | ||||||
|  | 
 | ||||||
| 				break; | 				break; | ||||||
| 			 | 			 | ||||||
| 		case Pitch : | 		case Pitch : | ||||||
| //				if (u->PitchContext .PitchState  ==PITCH_PREPARE) 
 |  | ||||||
| //				{
 |  | ||||||
| //		      u->PitchContext .PitchState=PITCH_START;//置标志位用于启动投篮
 |  | ||||||
| //				}
 |  | ||||||
| 
 |  | ||||||
| //			 Pitch_Process(u,out);
 |  | ||||||
| 				if (u->PitchContext .PitchState  ==PITCH_PREPARE)  | 				if (u->PitchContext .PitchState  ==PITCH_PREPARE)  | ||||||
| 				{ | 				{ | ||||||
| 				     u->CoContext .CoState =CoTRANSLATE_OUT; | 		      u->PitchContext .PitchState=PITCH_START;//置标志位用于启动投篮
 | ||||||
| 				} | 				} | ||||||
|         Co_Process(u,out); | 
 | ||||||
|  | 			 Pitch_Process(u,out); | ||||||
|  | //				if (u->PitchContext .PitchState  ==PITCH_PREPARE) 
 | ||||||
|  | //				{
 | ||||||
|  | //				     u->CoContext .CoState =CoTRANSLATE_OUT;
 | ||||||
|  | //				}		
 | ||||||
|  | //        Co_Process(u,out);
 | ||||||
| 
 | 
 | ||||||
| 				 break ; | 				 break ; | ||||||
| 		case UP_Adjust: //测试用
 | 		case UP_Adjust: //测试用
 | ||||||
| 			 | 			 | ||||||
| 				u->PitchContext.PitchConfig.go1_init_position += c->Vx ; | 				u->PitchContext.PitchConfig.go1_Receive_ball += c->Vx ; | ||||||
| 	      u->PitchContext.PitchConfig.Pitch_angle += c->Vy/100; | 	      u->PitchContext.PitchConfig.Pitch_angle += c->Vy/100; | ||||||
| 	 | 	 | ||||||
| 		    u->motor_target .go_shoot=u->PitchContext.PitchConfig.go1_init_position; | 		    u->motor_target .go_shoot=u->PitchContext.PitchConfig.go1_Receive_ball; | ||||||
| 		    u->motor_target .Shoot_Pitch_angle=u->PitchContext.PitchConfig.Pitch_angle; | 		    u->motor_target .Shoot_Pitch_angle=u->PitchContext.PitchConfig.Pitch_angle; | ||||||
| 			break ; | 			break ; | ||||||
| 		case Dribble: | 		case Dribble: | ||||||
| @ -323,7 +328,32 @@ int8_t UP_control(UP_t *u,CAN_Output_t *out,CMD_t *c) | |||||||
| 	default: | 	default: | ||||||
| 		break; | 		break; | ||||||
| 	} | 	} | ||||||
|  | 	case AUTO: | ||||||
|  | 		switch(c-> CMD_mode) | ||||||
|  | 		{ | ||||||
|  | 			case 	AUTO_NAVI_Pitch: | ||||||
|  | 		 u->PitchContext .PitchConfig .go1_Receive_ball=LowPassFilter2p_Apply(&u->filled[0],c->pos); | ||||||
| 
 | 
 | ||||||
|  | 			if (u->PitchContext .PitchState  ==PITCH_PREPARE)  | ||||||
|  | 				{ | ||||||
|  | 		      u->PitchContext .PitchState=PITCH_START;//置标志位用于启动投篮
 | ||||||
|  | 				} | ||||||
|  | 				/*根据距离实时计算所需pos*/ | ||||||
|  | 				 | ||||||
|  | //       u->PitchContext .PitchConfig .go1_release_threshold=c->pos;
 | ||||||
|  | 			 Pitch_Process(u,out); | ||||||
|  | 			break ; | ||||||
|  | 				 | ||||||
|  | 			case AUTO_NAVI: | ||||||
|  | 						u->motor_target .Shoot_M2006_angle =u->PitchContext .PitchConfig .m2006_init_angle ; | ||||||
|  | 
 | ||||||
|  | 						u->PitchContext .PitchState   = PITCH_PREPARE;   | ||||||
|  | 
 | ||||||
|  | 			 | ||||||
|  | 			 | ||||||
|  | 				break ; | ||||||
|  | 			 | ||||||
|  | 		} | ||||||
| 			 | 			 | ||||||
| 			 | 			 | ||||||
| return 0; | return 0; | ||||||
| @ -372,14 +402,14 @@ int8_t Pitch_Process(UP_t *u, CAN_Output_t *out) | |||||||
| 				u->PitchContext .PitchState=PITCH_LAUNCHING;			 | 				u->PitchContext .PitchState=PITCH_LAUNCHING;			 | ||||||
| 			  } | 			  } | ||||||
| 			} | 			} | ||||||
| 		   |  | ||||||
| 
 |  | ||||||
| 			 |  | ||||||
| 			break ; | 			break ; | ||||||
| 		 | 		 | ||||||
| 		case PITCH_LAUNCHING: //等待发射	
 | 		case PITCH_LAUNCHING: //等待发射	
 | ||||||
|  | 			u->PitchContext .PitchState=PITCH_COMPLETE;	 | ||||||
| 		break ; | 		break ; | ||||||
| 		case PITCH_COMPLETE:  //发射完成
 | 		case PITCH_COMPLETE:  //发射完成
 | ||||||
|  | 			 | ||||||
|  | 		 | ||||||
| 	  break ; | 	  break ; | ||||||
| 		 | 		 | ||||||
| 	 | 	 | ||||||
|  | |||||||
| @ -9,9 +9,9 @@ static BSP_UART_t UART_Get(UART_HandleTypeDef *huart) { | |||||||
|   if (huart->Instance == USART3) |   if (huart->Instance == USART3) | ||||||
|     return BSP_UART_REMOTE; |     return BSP_UART_REMOTE; | ||||||
|   else if (huart->Instance == USART1) |   else if (huart->Instance == USART1) | ||||||
|     return BSP_UART_NUC; |  | ||||||
|   else if (huart->Instance == USART6) |  | ||||||
|     return BSP_UART_RS485; |     return BSP_UART_RS485; | ||||||
|  |   else if (huart->Instance == USART6) | ||||||
|  |     return BSP_UART_NUC; | ||||||
|   /*
 |   /*
 | ||||||
|   else if (huart->Instance == USARTX) |   else if (huart->Instance == USARTX) | ||||||
|                   return BSP_UART_XXX; |                   return BSP_UART_XXX; | ||||||
| @ -95,9 +95,9 @@ UART_HandleTypeDef *BSP_UART_GetHandle(BSP_UART_t uart) { | |||||||
|     case BSP_UART_REMOTE: |     case BSP_UART_REMOTE: | ||||||
|       return &huart3; |       return &huart3; | ||||||
|     case BSP_UART_RS485: |     case BSP_UART_RS485: | ||||||
|       return &huart6; |  | ||||||
|     case BSP_UART_NUC: |  | ||||||
|       return &huart1; |       return &huart1; | ||||||
|  |     case BSP_UART_NUC: | ||||||
|  |       return &huart6; | ||||||
|     /*
 |     /*
 | ||||||
|     case BSP_UART_XXX: |     case BSP_UART_XXX: | ||||||
|             return &huartX; |             return &huartX; | ||||||
|  | |||||||
| @ -13,6 +13,7 @@ typedef enum { | |||||||
|   BSP_UART_REMOTE, |   BSP_UART_REMOTE, | ||||||
|   BSP_UART_RS485, |   BSP_UART_RS485, | ||||||
|   BSP_UART_NUC, |   BSP_UART_NUC, | ||||||
|  | 	BSP_UART_VOFA, | ||||||
|   /* BSP_UART_XXX, */ |   /* BSP_UART_XXX, */ | ||||||
|   BSP_UART_NUM, |   BSP_UART_NUM, | ||||||
|   BSP_UART_ERR, |   BSP_UART_ERR, | ||||||
|  | |||||||
| @ -19,11 +19,11 @@ int8_t BSP_PWM_Start(BSP_PWM_Channel_t ch) { | |||||||
|   return BSP_OK; |   return BSP_OK; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |       uint16_t pulse; | ||||||
| 
 | 
 | ||||||
| int8_t BSP_PWM_Set(BSP_PWM_Channel_t ch, float duty_cycle) { | int8_t BSP_PWM_Set(BSP_PWM_Channel_t ch, float duty_cycle) { | ||||||
|   if (duty_cycle < 0.0f) duty_cycle = 0.f; |   if (duty_cycle < 0.0f) duty_cycle = 0.f; | ||||||
| 
 | 
 | ||||||
|       uint16_t pulse; |  | ||||||
|   /* 通过PWM通道对应定时器重载值和给定占空比,计算PWM周期值 */ |   /* 通过PWM通道对应定时器重载值和给定占空比,计算PWM周期值 */ | ||||||
|   switch (ch) { |   switch (ch) { | ||||||
|     case BSP_PWM_IMU_HEAT: |     case BSP_PWM_IMU_HEAT: | ||||||
| @ -38,7 +38,9 @@ int8_t BSP_PWM_Set(BSP_PWM_Channel_t ch, float duty_cycle) { | |||||||
|         break; |         break; | ||||||
|     } |     } | ||||||
|   } else { |   } else { | ||||||
| //    BSP_PWM_Stop(ch);
 |     pulse =0; | ||||||
|  | 		__HAL_TIM_SET_COMPARE(&htim10, TIM_CHANNEL_1, pulse); | ||||||
|  |     //BSP_PWM_Stop(ch);
 | ||||||
|   } |   } | ||||||
|   return BSP_OK; |   return BSP_OK; | ||||||
| } | } | ||||||
|  | |||||||
| @ -102,6 +102,8 @@ int8_t CMD_ParseNuc(CMD_t *cmd,CMD_NUC_t *n){ | |||||||
| 			cmd->cmd_MID360.posx = n->navi.vx; | 			cmd->cmd_MID360.posx = n->navi.vx; | ||||||
| 			cmd->cmd_MID360.posy = n->navi.vy; | 			cmd->cmd_MID360.posy = n->navi.vy; | ||||||
| 			cmd->cmd_MID360.posw = n->navi.wz; | 			cmd->cmd_MID360.posw = n->navi.wz; | ||||||
|  | 			 | ||||||
|  | 			cmd->pos =n->navi .pos ; | ||||||
| 			break; | 			break; | ||||||
| 			 | 			 | ||||||
| 			case PICK : | 			case PICK : | ||||||
| @ -155,7 +157,7 @@ int8_t CMD_DR16(CMD_t *cmd,const CMD_RC_t *rc) { | |||||||
| 		 | 		 | ||||||
| 		if(rc->dr16.sw_r ==CMD_SW_MID) cmd ->CMD_mode =Normal; //左中,右中,无模式	
 | 		if(rc->dr16.sw_r ==CMD_SW_MID) cmd ->CMD_mode =Normal; //左中,右中,无模式	
 | ||||||
| 		 | 		 | ||||||
| 	  if(rc->dr16.sw_r ==CMD_SW_DOWN) cmd ->CMD_mode =AUTO_PICK; //左中,右下,视觉
 | 	  if(rc->dr16.sw_r ==CMD_SW_DOWN) cmd ->CMD_mode =AUTO_NAVI_Pitch; //左中,右下,视觉
 | ||||||
| 		 | 		 | ||||||
| 	} | 	} | ||||||
| 	else if(rc->dr16.sw_l==CMD_SW_DOWN) | 	else if(rc->dr16.sw_l==CMD_SW_DOWN) | ||||||
| @ -189,8 +191,9 @@ int8_t CMD_LD(CMD_t *cmd,const CMD_RC_t *rc){ | |||||||
| 	if(cmd ->CMD_CtrlType ==AUTO){ | 	if(cmd ->CMD_CtrlType ==AUTO){ | ||||||
| 	 | 	 | ||||||
| /*自动下的*/	 | /*自动下的*/	 | ||||||
| 	if(rc->LD.key_E ==CMD_SW_DOWN ) cmd ->CMD_mode =AUTO_NAVI;  | 	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_PICK; | 	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 cmd ->CMD_mode =Normal ; | 	else cmd ->CMD_mode =Normal ; | ||||||
| 	 | 	 | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -9,6 +9,7 @@ | |||||||
| 
 | 
 | ||||||
| #define MID (0x09) | #define MID (0x09) | ||||||
| #define PICK (0x06) | #define PICK (0x06) | ||||||
|  | #define NUC (0x08) | ||||||
| 
 | 
 | ||||||
| typedef enum{ | typedef enum{ | ||||||
| 	RCcontrol,//遥控器控制,左按键上,控制上层
 | 	RCcontrol,//遥控器控制,左按键上,控制上层
 | ||||||
| @ -23,7 +24,7 @@ typedef  enum{ | |||||||
| 		Normal,    //无模式
 | 		Normal,    //无模式
 | ||||||
| 	 | 	 | ||||||
| 	  AUTO_NAVI, | 	  AUTO_NAVI, | ||||||
| 	  AUTO_PICK, | 	  AUTO_NAVI_Pitch, | ||||||
| 	 | 	 | ||||||
| 	  UP_Adjust,//上层调整
 | 	  UP_Adjust,//上层调整
 | ||||||
| 
 | 
 | ||||||
| @ -41,6 +42,11 @@ typedef struct { | |||||||
|   fp32 vx; |   fp32 vx; | ||||||
|   fp32 vy; |   fp32 vy; | ||||||
|   fp32 wz; |   fp32 wz; | ||||||
|  | 		 | ||||||
|  | 	fp32 pos; | ||||||
|  | 	fp32 angle; | ||||||
|  | 	char  flag;	 | ||||||
|  | 		 | ||||||
|   }navi; |   }navi; | ||||||
|  struct  |  struct  | ||||||
|  { |  { | ||||||
| @ -52,6 +58,8 @@ typedef struct { | |||||||
| 	{ | 	{ | ||||||
| 		fp32 angle; | 		fp32 angle; | ||||||
| 	}sick_cali; | 	}sick_cali; | ||||||
|  | 	 | ||||||
|  | 
 | ||||||
| } CMD_NUC_t; | } CMD_NUC_t; | ||||||
| /* 拨杆位置 */ | /* 拨杆位置 */ | ||||||
| typedef enum { | typedef enum { | ||||||
| @ -122,6 +130,8 @@ typedef struct { | |||||||
|    fp32 key_ctrl_l; |    fp32 key_ctrl_l; | ||||||
|    fp32 key_ctrl_r; |    fp32 key_ctrl_r; | ||||||
| 	 | 	 | ||||||
|  | 	fp32 pos;//雷达反馈go位置
 | ||||||
|  | 	 | ||||||
| 	 fp32 Vx; | 	 fp32 Vx; | ||||||
|    fp32 Vy; |    fp32 Vy; | ||||||
|    fp32 Vw; |    fp32 Vw; | ||||||
|  | |||||||
| @ -8,6 +8,7 @@ static osThreadId_t thread_alert; | |||||||
| 
 | 
 | ||||||
| uint8_t nucbuf[31]; | uint8_t nucbuf[31]; | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| static void NUC_IdleCallback(void) {	 | static void NUC_IdleCallback(void) {	 | ||||||
| 	osThreadFlagsSet(thread_alert,SIGNAL_NUC_RAW_REDY); | 	osThreadFlagsSet(thread_alert,SIGNAL_NUC_RAW_REDY); | ||||||
| 	detect_hook(NUC_TOE); | 	detect_hook(NUC_TOE); | ||||||
| @ -26,6 +27,35 @@ int8_t NUC_StartReceiving() { | |||||||
|                            sizeof(nucbuf)) == HAL_OK) |                            sizeof(nucbuf)) == HAL_OK) | ||||||
|     return DEVICE_OK; |     return DEVICE_OK; | ||||||
|   return DEVICE_ERR; |   return DEVICE_ERR; | ||||||
|  | } | ||||||
|  |   char SendBuffer[19]; | ||||||
|  | 
 | ||||||
|  | int8_t NUC_StartSending(fp32 *data) { | ||||||
|  | 
 | ||||||
|  |    	union  | ||||||
|  | 	{ | ||||||
|  | 		float x[4]; | ||||||
|  | 		char data[16]; | ||||||
|  | 	}instance; | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |       for (int i = 0; i < 4; i++) { | ||||||
|  |         instance.x[i] = data[i]; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |   SendBuffer[0] = 0xFC; //发送ID
 | ||||||
|  |   SendBuffer[1] = 0x01; //控制帧
 | ||||||
|  |   for(int i = 2; i < 18; i++) | ||||||
|  |   { | ||||||
|  |     SendBuffer[i] = instance.data[i-2]; | ||||||
|  |   } | ||||||
|  |   SendBuffer[18] = 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) { | int8_t NUC_Restart(void) { | ||||||
|   __HAL_UART_DISABLE(BSP_UART_GetHandle(BSP_UART_NUC)); |   __HAL_UART_DISABLE(BSP_UART_GetHandle(BSP_UART_NUC)); | ||||||
| @ -42,8 +72,8 @@ int8_t NUC_RawParse(CMD_NUC_t *n){ | |||||||
| 	if(n ==NULL) return DEVICE_ERR_NULL; | 	if(n ==NULL) return DEVICE_ERR_NULL; | ||||||
|  	union  |  	union  | ||||||
| 	{ | 	{ | ||||||
| 		float x[3]; | 		float x[5]; | ||||||
| 		char data[12]; | 		char data[20]; | ||||||
| 	}instance; | 	}instance; | ||||||
|   if(nucbuf[0]!=HEAD) goto error;  //发送ID不是底盘
 |   if(nucbuf[0]!=HEAD) goto error;  //发送ID不是底盘
 | ||||||
|   else{ |   else{ | ||||||
| @ -51,7 +81,34 @@ int8_t NUC_RawParse(CMD_NUC_t *n){ | |||||||
| 		n->ctrl_status =nucbuf[2]; | 		n->ctrl_status =nucbuf[2]; | ||||||
|     switch (n->status_fromnuc) |     switch (n->status_fromnuc) | ||||||
|     { |     { | ||||||
| 		case MID://控制帧0x09
 | //		case MID://控制帧0x09
 | ||||||
|  | //				/* 协议格式 
 | ||||||
|  | //		   0xFF  HEAD
 | ||||||
|  | //		   0x09  控制帧
 | ||||||
|  | //		   0x01  相机帧
 | ||||||
|  | //		   vx    fp32
 | ||||||
|  | //		   vy    fp32
 | ||||||
|  | //		   wz    fp32
 | ||||||
|  | //		   0xFE  TAIL
 | ||||||
|  | //		  */
 | ||||||
|  | ////		if(nucbuf[15]!=TAIL)goto error;
 | ||||||
|  | //       instance.data[3] = nucbuf[6];
 | ||||||
|  | //       instance.data[2] = nucbuf[5];
 | ||||||
|  | //       instance.data[1] = nucbuf[4];
 | ||||||
|  | //       instance.data[0] = nucbuf[3];
 | ||||||
|  | //      n->navi.vx = instance.x[0]; //
 | ||||||
|  | //       instance.data[7] = nucbuf[10];
 | ||||||
|  | //       instance.data[6] = nucbuf[9];
 | ||||||
|  | //       instance.data[5] = nucbuf[8];
 | ||||||
|  | //       instance.data[4] = nucbuf[7];
 | ||||||
|  | //      n->navi.vy = instance.x[1];//
 | ||||||
|  | //       instance.data[11] = nucbuf[14];
 | ||||||
|  | //       instance.data[10] = nucbuf[13];
 | ||||||
|  | //       instance.data[9] = nucbuf[12];
 | ||||||
|  | //       instance.data[8] = nucbuf[11];
 | ||||||
|  | //      n->navi.wz = instance.x[2];//
 | ||||||
|  | //      break;
 | ||||||
|  | 		case MID ://控制帧0x08
 | ||||||
| 				/* 协议格式 
 | 				/* 协议格式 
 | ||||||
| 		   0xFF  HEAD | 		   0xFF  HEAD | ||||||
| 		   0x09  控制帧 | 		   0x09  控制帧 | ||||||
| @ -61,7 +118,7 @@ int8_t NUC_RawParse(CMD_NUC_t *n){ | |||||||
| 		   wz    fp32 | 		   wz    fp32 | ||||||
| 		   0xFE  TAIL | 		   0xFE  TAIL | ||||||
| 		  */ | 		  */ | ||||||
| 		if(nucbuf[15]!=TAIL)goto error; | 		if(nucbuf[24]!=TAIL)goto error; | ||||||
|        instance.data[3] = nucbuf[6]; |        instance.data[3] = nucbuf[6]; | ||||||
|        instance.data[2] = nucbuf[5]; |        instance.data[2] = nucbuf[5]; | ||||||
|        instance.data[1] = nucbuf[4]; |        instance.data[1] = nucbuf[4]; | ||||||
| @ -77,53 +134,21 @@ int8_t NUC_RawParse(CMD_NUC_t *n){ | |||||||
|        instance.data[9] = nucbuf[12]; |        instance.data[9] = nucbuf[12]; | ||||||
|        instance.data[8] = nucbuf[11]; |        instance.data[8] = nucbuf[11]; | ||||||
|       n->navi.wz = instance.x[2];//
 |       n->navi.wz = instance.x[2];//
 | ||||||
|  | 			 instance.data[15] = nucbuf[18]; | ||||||
|  |        instance.data[14] = nucbuf[17]; | ||||||
|  |        instance.data[13] = nucbuf[16]; | ||||||
|  |        instance.data[12] = nucbuf[15]; | ||||||
|  |       n->navi.pos = instance.x[3];//
 | ||||||
|  | 			 instance.data[19] = nucbuf[22]; | ||||||
|  |        instance.data[18] = nucbuf[21]; | ||||||
|  |        instance.data[17] = nucbuf[20]; | ||||||
|  |        instance.data[16] = nucbuf[19]; | ||||||
|  |       n->navi.angle  = instance.x[4];//
 | ||||||
|  | 
 | ||||||
|  |       n->navi.flag = nucbuf[23];//
 | ||||||
|       break; |       break; | ||||||
|     case PICK: | 
 | ||||||
| 			/* 协议格式 
 | 
 | ||||||
| 		   0xFF  HEAD |  | ||||||
| 		   0x0X  控制帧 |  | ||||||
| 		   0x01  相机帧 |  | ||||||
| 		   cmd   8位 |  | ||||||
| 		   dis   相机深度值 |  | ||||||
| 		   posx  相机yaw轴值 |  | ||||||
| 		   posy  相机pitch轴值 |  | ||||||
| 		   0xFE  TAIL |  | ||||||
| 		  */ |  | ||||||
| //		  if(nucbuf[15]!=TAIL)goto error;
 |  | ||||||
|        instance.data[3] = nucbuf[6]; |  | ||||||
|        instance.data[2] = nucbuf[5]; |  | ||||||
|        instance.data[1] = nucbuf[4]; |  | ||||||
|        instance.data[0] = nucbuf[3]; |  | ||||||
|       n->pick.posx = instance.x[0]; //距离球中心的角度值
 |  | ||||||
|        instance.data[7] = nucbuf[10]; |  | ||||||
|        instance.data[6] = nucbuf[9]; |  | ||||||
|        instance.data[5] = nucbuf[8]; |  | ||||||
|        instance.data[4] = nucbuf[7]; |  | ||||||
| 		 n->pick.posy = instance.x[1];// 相机yaw轴
 |  | ||||||
| 		   instance.data[11]  = nucbuf[14]; |  | ||||||
| 		   instance.data[10]  = nucbuf[13]; |  | ||||||
| 		   instance.data[9]  = nucbuf[12]; |  | ||||||
| 		   instance.data[8]  = nucbuf[11]; |  | ||||||
| 		 n->pick.posw= instance.x[2];// 暂未用到
 |  | ||||||
|        break; |  | ||||||
| //		case SICK_CAIL:
 |  | ||||||
| //			if(nucbuf[15]!=TAIL)goto error;
 |  | ||||||
| //       instance.data[3] = nucbuf[14];
 |  | ||||||
| //       instance.data[2] = nucbuf[13];
 |  | ||||||
| //       instance.data[1] = nucbuf[12];
 |  | ||||||
| //       instance.data[0] = nucbuf[11];
 |  | ||||||
| //      n->sick_cali.angle = instance.x[0]; //
 |  | ||||||
| //       instance.data[7] = nucbuf[10];
 |  | ||||||
| //       instance.data[6] = nucbuf[9];
 |  | ||||||
| //       instance.data[5] = nucbuf[8];
 |  | ||||||
| //       instance.data[4] = nucbuf[7];
 |  | ||||||
| //		 n->sick_cali.isleft = instance.x[1];// 
 |  | ||||||
| //		   instance.data[11]  = nucbuf[14];
 |  | ||||||
| //		   instance.data[10]  = nucbuf[13];
 |  | ||||||
| //		   instance.data[9]  = nucbuf[12];
 |  | ||||||
| //		   instance.data[8]  = nucbuf[11];
 |  | ||||||
| //		 n->pick.posw= instance.x[2];// 暂未用到
 |  | ||||||
| //		   break;
 |  | ||||||
|     } |     } | ||||||
|      return DEVICE_OK; |      return DEVICE_OK; | ||||||
|   } |   } | ||||||
|  | |||||||
| @ -23,12 +23,13 @@ typedef struct { | |||||||
|   NUC_UpPackageMCU_t to_nuc; //发送的数据协议
 |   NUC_UpPackageMCU_t to_nuc; //发送的数据协议
 | ||||||
| 
 | 
 | ||||||
|   uint8_t status;//控制状态
 |   uint8_t status;//控制状态
 | ||||||
| 	uint8_t pit_status;//pit相机朝向
 | 
 | ||||||
| } NUC_t; | } NUC_t; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| int8_t NUC_Init(NUC_t *nuc); | int8_t NUC_Init(NUC_t *nuc); | ||||||
| int8_t NUC_StartReceiving(void); | int8_t NUC_StartReceiving(void); | ||||||
|  | int8_t NUC_StartSending(fp32 *data) ; | ||||||
| bool_t NUC_WaitDmaCplt(void); | bool_t NUC_WaitDmaCplt(void); | ||||||
| int8_t NUC_RawParse(CMD_NUC_t *n); | int8_t NUC_RawParse(CMD_NUC_t *n); | ||||||
| int8_t NUC_HandleOffline(CMD_NUC_t *cmd); | int8_t NUC_HandleOffline(CMD_NUC_t *cmd); | ||||||
|  | |||||||
| @ -99,10 +99,25 @@ int8_t LD_ParseRaw( LD_raw_t *raw, LD_Data_t *LD) | |||||||
| 		raw->ch[3] = 0.5*(raw->ch[3]);		//w
 | 		raw->ch[3] = 0.5*(raw->ch[3]);		//w
 | ||||||
| 		 | 		 | ||||||
| 		 | 		 | ||||||
| 		raw->map_ch[0]=map_fp32(raw->ch[0],-719,680,-1,1); | if (raw->ch[0] < 0) | ||||||
| 		raw->map_ch[1]=map_fp32(raw->ch[1],-653,746,-1,1); |     raw->map_ch[0] = map_fp32(raw->ch[0], -696, 2, -1, 0); | ||||||
| 		raw->map_ch[2]=map_fp32(raw->ch[2],95,1482,0,1); | else | ||||||
| 		raw->map_ch[3]=map_fp32(raw->ch[3],-317,375,-1,1); |     raw->map_ch[0] = map_fp32(raw->ch[0], 2, 704, 0, 1); | ||||||
|  | 
 | ||||||
|  | // ch[1]
 | ||||||
|  | if (raw->ch[1] < 0) | ||||||
|  |     raw->map_ch[1] = map_fp32(raw->ch[1], -638, 5, -1, 0); | ||||||
|  | else | ||||||
|  |     raw->map_ch[1] = map_fp32(raw->ch[1], 5, 762, 0, 1); | ||||||
|  | 
 | ||||||
|  |     raw->map_ch[2] = map_fp32(raw->ch[2], 2, 1377, 0, 1); | ||||||
|  | 
 | ||||||
|  | // ch[3]
 | ||||||
|  | if (raw->ch[3] < 0) | ||||||
|  |     raw->map_ch[3] = map_fp32(raw->ch[3], -344, 0, -1, 0); | ||||||
|  | else | ||||||
|  |     raw->map_ch[3] = map_fp32(raw->ch[3], 0, 348, 0, 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); | ||||||
|  | |||||||
| @ -28,13 +28,14 @@ void vofa_tx_main(float *data) | |||||||
| 	 | 	 | ||||||
| 		 | 		 | ||||||
| 	/*在下面使用对应的串口发送函数*/ | 	/*在下面使用对应的串口发送函数*/ | ||||||
|  | //	CDC_Transmit_FS( ( uint8_t *)fdata, sizeof(fdata));
 | ||||||
|  | //	osDelay(1);
 | ||||||
|  | //	CDC_Transmit_FS( tail, 4);
 | ||||||
| //	HAL_UART_Transmit_DMA(&huart1, ( uint8_t *)fdata, sizeof(fdata));
 | //	HAL_UART_Transmit_DMA(&huart1, ( uint8_t *)fdata, sizeof(fdata));
 | ||||||
| //	osDelay(1);
 | //	osDelay(1);
 | ||||||
| //	HAL_UART_Transmit_DMA(BSP_UART_GetHandle(BSP_UART_VOFA), tail, 4);
 | //	HAL_UART_Transmit_DMA(&huart1, tail, 4);
 | ||||||
| //  osDelay(1);
 | //	osDelay(1);
 | ||||||
| 	CDC_Transmit_FS( ( uint8_t *)fdata, sizeof(fdata)); | 
 | ||||||
| 	osDelay(1); |  | ||||||
| //	CDC_Transmit_FS( tail, 4);
 |  | ||||||
| 		 | 		 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -11,7 +11,7 @@ static CMD_NUC_t cmd_fromnuc; | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #endif | #endif | ||||||
| 
 | fp32 send[4]={11.0f,45.0,1.f,4.0f}; | ||||||
| void Task_nuc(void *argument){ | void Task_nuc(void *argument){ | ||||||
|  (void)argument; /**/ |  (void)argument; /**/ | ||||||
| 
 | 
 | ||||||
| @ -29,6 +29,7 @@ void Task_nuc(void *argument){ | |||||||
|     task_runtime.stack_water_mark.nuc= osThreadGetStackSpace(osThreadGetId()); |     task_runtime.stack_water_mark.nuc= osThreadGetStackSpace(osThreadGetId()); | ||||||
| #endif | #endif | ||||||
| 			NUC_StartReceiving(); | 			NUC_StartReceiving(); | ||||||
|  | 			 NUC_StartSending(send); | ||||||
|       if (NUC_WaitDmaCplt()){ |       if (NUC_WaitDmaCplt()){ | ||||||
|          NUC_RawParse(&cmd_fromnuc); |          NUC_RawParse(&cmd_fromnuc); | ||||||
|       } |       } | ||||||
|  | |||||||
| @ -70,7 +70,6 @@ void Task_up(void *argument) | |||||||
| 			ALL_Motor_Control(&UP,&UP_CAN_out); | 			ALL_Motor_Control(&UP,&UP_CAN_out); | ||||||
| 
 | 
 | ||||||
| 		osDelay(1); | 		osDelay(1); | ||||||
| 			 |  | ||||||
| 	/*can上设备数据获取*/	 | 	/*can上设备数据获取*/	 | ||||||
| 	osMessageQueueGet(task_runtime.msgq.can.feedback.UP_CAN_feedback, &can, NULL, 0); | 	osMessageQueueGet(task_runtime.msgq.can.feedback.UP_CAN_feedback, &can, NULL, 0); | ||||||
| 					 | 					 | ||||||
| @ -92,8 +91,8 @@ void Task_up(void *argument) | |||||||
| 		osMessageQueuePut(task_runtime.msgq.can.output.shoot5065 ,&UP_CAN_out.chassis5065, 0, 0);  | 		osMessageQueuePut(task_runtime.msgq.can.output.shoot5065 ,&UP_CAN_out.chassis5065, 0, 0);  | ||||||
| 	 | 	 | ||||||
| 
 | 
 | ||||||
|    vofa_send [0]=UP.vofa_send [0]; | //   vofa_send [0]=UP.vofa_send [0];
 | ||||||
|    vofa_send [1]=UP.vofa_send [1]; | //   vofa_send [1]=UP.vofa_send [1];
 | ||||||
| 	 vofa_tx_main (vofa_send); | 	 vofa_tx_main (vofa_send); | ||||||
| 	  | 	  | ||||||
| 	tick += delay_tick; | 	tick += delay_tick; | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user