Compare commits
3 Commits
5de502c448
...
fe1c02b130
Author | SHA1 | Date | |
---|---|---|---|
fe1c02b130 | |||
6cbf728f10 | |||
1488098d60 |
@ -145,23 +145,24 @@ Mcu.Pin24=PA4
|
||||
Mcu.Pin25=PC4
|
||||
Mcu.Pin26=PC5
|
||||
Mcu.Pin27=PE9
|
||||
Mcu.Pin28=PA7
|
||||
Mcu.Pin29=PB0
|
||||
Mcu.Pin28=PE11
|
||||
Mcu.Pin29=PA7
|
||||
Mcu.Pin3=PB3
|
||||
Mcu.Pin30=VP_CRC_VS_CRC
|
||||
Mcu.Pin31=VP_FREERTOS_VS_CMSIS_V2
|
||||
Mcu.Pin32=VP_SYS_VS_Systick
|
||||
Mcu.Pin33=VP_TIM4_VS_ClockSourceINT
|
||||
Mcu.Pin34=VP_TIM7_VS_ClockSourceINT
|
||||
Mcu.Pin35=VP_TIM10_VS_ClockSourceINT
|
||||
Mcu.Pin36=VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS
|
||||
Mcu.Pin30=PB0
|
||||
Mcu.Pin31=VP_CRC_VS_CRC
|
||||
Mcu.Pin32=VP_FREERTOS_VS_CMSIS_V2
|
||||
Mcu.Pin33=VP_SYS_VS_Systick
|
||||
Mcu.Pin34=VP_TIM4_VS_ClockSourceINT
|
||||
Mcu.Pin35=VP_TIM7_VS_ClockSourceINT
|
||||
Mcu.Pin36=VP_TIM10_VS_ClockSourceINT
|
||||
Mcu.Pin37=VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS
|
||||
Mcu.Pin4=PA14
|
||||
Mcu.Pin5=PA13
|
||||
Mcu.Pin6=PB7
|
||||
Mcu.Pin7=PB6
|
||||
Mcu.Pin8=PD0
|
||||
Mcu.Pin9=PC11
|
||||
Mcu.PinsNb=37
|
||||
Mcu.PinsNb=38
|
||||
Mcu.ThirdPartyNb=0
|
||||
Mcu.UserConstants=
|
||||
Mcu.UserName=STM32F407IGHx
|
||||
@ -272,9 +273,14 @@ PD14.GPIOParameters=GPIO_Label
|
||||
PD14.GPIO_Label=Buzzer
|
||||
PD14.Locked=true
|
||||
PD14.Signal=S_TIM4_CH3
|
||||
PE11.GPIOParameters=PinState,GPIO_PuPd
|
||||
PE11.GPIO_PuPd=GPIO_PULLDOWN
|
||||
PE11.Locked=true
|
||||
PE11.PinState=GPIO_PIN_SET
|
||||
PE11.Signal=GPIO_Output
|
||||
PE9.GPIOParameters=PinState,GPIO_PuPd,GPIO_Label
|
||||
PE9.GPIO_Label=FlagForUpper
|
||||
PE9.GPIO_PuPd=GPIO_PULLUP
|
||||
PE9.GPIO_PuPd=GPIO_PULLDOWN
|
||||
PE9.Locked=true
|
||||
PE9.PinState=GPIO_PIN_SET
|
||||
PE9.Signal=GPIO_Output
|
||||
|
@ -190,7 +190,7 @@
|
||||
#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */
|
||||
#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */
|
||||
#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */
|
||||
#define USE_HAL_UART_REGISTER_CALLBACKS 1U /* UART register callback disabled */
|
||||
#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */
|
||||
#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */
|
||||
#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */
|
||||
|
||||
|
@ -61,7 +61,7 @@ void MX_GPIO_Init(void)
|
||||
HAL_GPIO_WritePin(ACCL_CS_GPIO_Port, ACCL_CS_Pin, GPIO_PIN_SET);
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(FlagForUpper_GPIO_Port, FlagForUpper_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(GPIOE, FlagForUpper_Pin|GPIO_PIN_11, GPIO_PIN_SET);
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(GYRO_CS_GPIO_Port, GYRO_CS_Pin, GPIO_PIN_SET);
|
||||
@ -92,12 +92,12 @@ void MX_GPIO_Init(void)
|
||||
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pin : PtPin */
|
||||
GPIO_InitStruct.Pin = FlagForUpper_Pin;
|
||||
/*Configure GPIO pins : PEPin PE11 */
|
||||
GPIO_InitStruct.Pin = FlagForUpper_Pin|GPIO_PIN_11;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(FlagForUpper_GPIO_Port, &GPIO_InitStruct);
|
||||
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pin : PtPin */
|
||||
GPIO_InitStruct.Pin = GYRO_CS_Pin;
|
||||
|
@ -79,7 +79,8 @@ int main(void)
|
||||
|
||||
/* MCU Configuration--------------------------------------------------------*/
|
||||
|
||||
/* Reset of all peripherals, Initializes the Flash interface and the Systick. * HAL_Init();
|
||||
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
|
||||
HAL_Init();
|
||||
|
||||
/* USER CODE BEGIN Init */
|
||||
|
||||
@ -94,7 +95,6 @@ int main(void)
|
||||
|
||||
/* Initialize all configured peripherals */
|
||||
MX_GPIO_Init();
|
||||
|
||||
MX_DMA_Init();
|
||||
MX_SPI1_Init();
|
||||
MX_TIM4_Init();
|
||||
|
@ -140,7 +140,7 @@
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>CMSIS_AGDI</Key>
|
||||
<Name>-X"Horco CMSIS-DAP" -U8626380832 -O206 -S0 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO65554 -TC168000000 -TT168000000 -TP20 -TDS8010 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F407IGHx$CMSIS\Flash\STM32F4xx_1024.FLM)</Name>
|
||||
<Name>-X"Horco CMSIS-DAP" -U4626385832 -O206 -S0 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO65554 -TC168000000 -TT168000000 -TP20 -TDS8010 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F407IGHx$CMSIS\Flash\STM32F4xx_1024.FLM)</Name>
|
||||
</SetRegEntry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
@ -235,6 +235,11 @@
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>flaggg,0x0A</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>16</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>ddd</ItemText>
|
||||
</Ww>
|
||||
</WatchWindow1>
|
||||
<WatchWindow2>
|
||||
<Ww>
|
||||
@ -469,7 +474,7 @@
|
||||
|
||||
<Group>
|
||||
<GroupName>Drivers/STM32F4xx_HAL_Driver</GroupName>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
@ -741,7 +746,7 @@
|
||||
|
||||
<Group>
|
||||
<GroupName>Drivers/CMSIS</GroupName>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
|
Binary file not shown.
@ -309,3 +309,16 @@ uint8_t average(uint8_t arr[], uint8_t n) {
|
||||
}
|
||||
return (float) sum / n;
|
||||
}
|
||||
|
||||
|
||||
bool is_arrived(float target, float current, float mistake) {
|
||||
// 计算当前值与目标值的差值的绝对值
|
||||
float diff = fabs(target - current);
|
||||
|
||||
// 判断是否在误差范围内
|
||||
if (diff <= mistake) {
|
||||
return true; // 在误差范围内
|
||||
} else {
|
||||
return false; // 不在误差范围内
|
||||
}
|
||||
}
|
@ -157,4 +157,7 @@ PolarCoordinate_t addPolarVectors(PolarCoordinate_t v1, PolarCoordinate_t v2);
|
||||
/// @param n 元素数
|
||||
/// @return 平均值
|
||||
uint8_t average(uint8_t arr[], uint8_t n);
|
||||
/*判断是否在误差内*/
|
||||
bool is_arrived(float target, float current, float mistake) ;
|
||||
|
||||
#endif
|
||||
|
@ -7,18 +7,6 @@
|
||||
|
||||
#define DEG_TO_RAD(x) ((x) * (3.141592653 / 180.0)) //角度转弧度
|
||||
|
||||
//#ifdef DEBUG
|
||||
|
||||
//ConfigParam_t param_up ={
|
||||
|
||||
//#else
|
||||
//static const ConfigParam_t param_up ={
|
||||
//#endif
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//};
|
||||
|
||||
#ifdef DEBUG
|
||||
|
||||
@ -31,7 +19,9 @@ static const ConfigParam_t param_chassis ={
|
||||
|
||||
#endif
|
||||
.up={
|
||||
|
||||
|
||||
|
||||
/*上层pid参数*/
|
||||
.M2006_angle_param = {
|
||||
.p = 25.0f,
|
||||
.i = 0.0f,
|
||||
@ -46,6 +36,21 @@ static const ConfigParam_t param_chassis ={
|
||||
.i_limit = 2000.0f,
|
||||
.out_limit = 3000.0f,
|
||||
},
|
||||
.M3508_angle_param = {
|
||||
.p = 10.0f,
|
||||
.i = 0.0f,
|
||||
.d = 1.5f,
|
||||
.i_limit = 1000.0f,
|
||||
.out_limit = 3000.0f,
|
||||
},
|
||||
.M3508_speed_param={
|
||||
.p = 5.1f,
|
||||
.i = 0.02f,
|
||||
.d = 3.2f,
|
||||
.i_limit = 200.0f,
|
||||
.out_limit =6000.0f,
|
||||
},
|
||||
|
||||
.UP_GM6020_angle_param={
|
||||
.p = 30.0f,
|
||||
.i = 20.0f,
|
||||
@ -60,114 +65,34 @@ static const ConfigParam_t param_chassis ={
|
||||
.i_limit = 200.0f,
|
||||
.out_limit = 3000.0f
|
||||
},
|
||||
.M3508_speed_param={
|
||||
.p = 15.1f,
|
||||
.i = 0.02f,
|
||||
.d = 3.2f,
|
||||
.i_limit = 200.0f,
|
||||
.out_limit =6000.0f,
|
||||
},
|
||||
.go_param={
|
||||
|
||||
.go_param[0]={
|
||||
.rev = 0,
|
||||
.T=0.1,
|
||||
.W=0.1,
|
||||
.K_P=0.1,
|
||||
.K_W=0.1,
|
||||
}
|
||||
},
|
||||
.go_param[1]={
|
||||
.rev = 0,
|
||||
.T=0.1,
|
||||
.W=0.1,
|
||||
.K_P=0.10f,
|
||||
.K_W=0.1,
|
||||
},
|
||||
/*上层其他参数*/
|
||||
/*运球*/
|
||||
.DribbleConfig_Config = {
|
||||
.m3508_init_angle = 0,
|
||||
.m3508_high_angle = 900,
|
||||
.go2_init_angle = 35,
|
||||
.go2_flip_angle = -130,
|
||||
.flip_timing = 200,
|
||||
.release_threshold = -1.2f,
|
||||
},
|
||||
|
||||
|
||||
},
|
||||
|
||||
// .chassis = {/**/
|
||||
// .C6020pitAngle_param = {
|
||||
// .p = 15.0f,
|
||||
// .i = 0.3f,
|
||||
// .d =0.0f,
|
||||
// .i_limit = 200.0f,
|
||||
// .out_limit = 3000.0f,
|
||||
// },
|
||||
// .C6020pitOmega_param = {
|
||||
// .p =30.0f,
|
||||
// .i =0.3f,
|
||||
// .d =0.0f,
|
||||
// .i_limit = 200.0f,
|
||||
// .out_limit = 3000.0f
|
||||
// },
|
||||
//
|
||||
// .Gimbal_yawAngle_param = {
|
||||
// .p =8.0f,
|
||||
// .i =0.0f,
|
||||
// .d =0.0f,
|
||||
// .i_limit = 200.0f,
|
||||
// .out_limit = 3000.0f
|
||||
// },
|
||||
//
|
||||
// .Gimbal_yawOmega_param = {
|
||||
// .p =18.0f,
|
||||
// .i =0.0f,
|
||||
// .d =0.0f,
|
||||
// .i_limit = 200.0f,
|
||||
// .out_limit = 3000.0f
|
||||
// },
|
||||
//
|
||||
// .Gimbal_pitchAngle_param = {
|
||||
// .p =8.0f,
|
||||
// .i =0.0f,
|
||||
// .d =0.0f,
|
||||
// .i_limit = 200.0f,
|
||||
// .out_limit = 3000.0f
|
||||
// },
|
||||
//
|
||||
// .Gimbal_pitchOmega_param = {
|
||||
// .p =18.0f,
|
||||
// .i =0.0f,
|
||||
// .d =0.0f,
|
||||
// .i_limit = 200.0f,
|
||||
// .out_limit = 3000.0f
|
||||
// },
|
||||
// .AngleCor_param = {
|
||||
// .p =0.8f,
|
||||
// .i =0.0f,
|
||||
// .d =1.0f,
|
||||
// .i_limit = 0.0f,
|
||||
// .out_limit =5000.0f,
|
||||
// },
|
||||
//
|
||||
// .OmegaCor_param = {
|
||||
// .p =23.5f,
|
||||
// .i =0.0f,
|
||||
// .d =0.05f,
|
||||
// .i_limit = 0.0f,
|
||||
// .out_limit =5000.0f,
|
||||
// },
|
||||
//
|
||||
// .ImuCor_param = {
|
||||
// .p =95.0f,
|
||||
// .i =0.0f,
|
||||
// .d =0.0f,
|
||||
// .i_limit = 0.0f,
|
||||
// .out_limit =200.0f,
|
||||
// },
|
||||
//
|
||||
// .DisCamera_param = {
|
||||
// .p =80.0f,
|
||||
// .i =0.1f,
|
||||
// .d =0.0f,
|
||||
// .i_limit = 0.0f,
|
||||
// .out_limit =5000.0f,
|
||||
// },
|
||||
|
||||
// .M3508_param = {
|
||||
// .p = 15.1f,
|
||||
// .i = 0.02f,
|
||||
// .d = 3.2f,
|
||||
// .i_limit = 200.0f,
|
||||
// .out_limit =6000.0f,
|
||||
// }
|
||||
//
|
||||
|
||||
// },
|
||||
|
||||
|
||||
.can = {
|
||||
.pitch6020 = BSP_CAN_1,
|
||||
|
185
User/Module/up.c
185
User/Module/up.c
@ -11,11 +11,26 @@
|
||||
#define MOTOR2006_ECD_TO_ANGLE (360.0 / 8191.0 / (GEAR_RATIO_2006)) //2006编码值转轴角度
|
||||
#define MOTOR3508_ECD_TO_ANGLE (360.0 / 8191.0 / (GEAR_RATIO_3508)) //3508编码值转轴角度
|
||||
|
||||
/*投球*/
|
||||
#define M2006_INIT_ANGLE (-120) //初始和发射
|
||||
#define GO1_INIT_POSITION (0) //go初始
|
||||
|
||||
#define M2006_TRIGGER (0) //扳机
|
||||
#define GO_POSITION_TRIGGER (-300) //go发射控制值
|
||||
#define GO_POSITION_PITCH_FD (-4.8f) //反馈检测
|
||||
|
||||
|
||||
/*运球*/
|
||||
|
||||
|
||||
|
||||
#define M3508_INIT_ANGLE (0) //3508
|
||||
#define GO2_INIT_ANGLE (0) //go2的初始角度
|
||||
#define M3508_HIGH_ANGLE (900) //3508,升起角度
|
||||
#define GO2_Flip_timing (200) // go的翻转时机,以3508角度反馈值为准
|
||||
#define GO2_Flip_ANGLE (-160) //go2翻转角度
|
||||
#define BALL_REL_TIME (-1.2) //球放开时机,以go的反馈值为准
|
||||
// 定义继电器控制
|
||||
#define RELAY1_TOGGLE(state) HAL_GPIO_WritePin(GPIOE, GPIO_PIN_9, (state) ? GPIO_PIN_SET : GPIO_PIN_RESET)
|
||||
#define RELAY2_TOGGLE(state) HAL_GPIO_WritePin(GPIOE, GPIO_PIN_11, (state) ? GPIO_PIN_SET : GPIO_PIN_RESET)
|
||||
|
||||
int8_t up_init(UP_t *u,const UP_Param_t *param,float target_freq)
|
||||
{
|
||||
@ -37,14 +52,19 @@ int8_t up_init(UP_t *u,const UP_Param_t *param,float target_freq)
|
||||
|
||||
|
||||
for(int i=0;i<2;i++){ //go初始位置设置为0
|
||||
GO_M8010_send_data(BSP_UART_GetHandle(BSP_UART_RS485), i,u->param->go_param .rev ,u->param->go_param .T ,u->param->go_param .W ,0,u->param->go_param .K_P ,u->param->go_param .K_W );
|
||||
GO_M8010_send_data(BSP_UART_GetHandle(BSP_UART_RS485), i,u->param->go_param[i] .rev ,u->param->go_param[i] .T ,u->param->go_param[i] .W ,0,u->param->go_param [i].K_P ,u->param->go_param[i] .K_W );
|
||||
}
|
||||
|
||||
/**/
|
||||
|
||||
u->state .Dribble_flag =Not_started_dri;
|
||||
u->state. Pitch_flag=Not_started_Pit;
|
||||
u->state .last_state = Not_started_dri;
|
||||
// 初始化状态机
|
||||
if (!u->DribbleContext .is_initialized) { //检查是否为第一次运行状态机
|
||||
u->DribbleContext .DribbleConfig = u->param ->DribbleConfig_Config ;//赋值
|
||||
u->DribbleContext .DribbleState = STATE_GRAB_BALL; //状态更新,开始夹球
|
||||
u->DribbleContext .is_initialized = 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -78,7 +98,7 @@ int8_t UP_UpdateFeedback(UP_t *u, const CAN_t *can, CMD_t *c) {
|
||||
/*上层电机控制,使用can1的id1和2*/
|
||||
int8_t UP_angle_control(UP_t *u, fp32 target_angle,MotorType_t motor) {
|
||||
// 获取当前编码器角度
|
||||
int8_t cnt=0;
|
||||
int8_t cnt=0;
|
||||
fp32 angle ,delta;
|
||||
|
||||
switch(motor)
|
||||
@ -186,7 +206,7 @@ int8_t GM6020_control(UP_t *u,fp32 angle)
|
||||
int8_t GO_SendData(UP_t *u,int id,float pos)
|
||||
{
|
||||
|
||||
GO_M8010_send_data(BSP_UART_GetHandle(BSP_UART_RS485), id,u->param->go_param .rev ,u->param->go_param .T ,u->param->go_param .W ,AngleChange(RADIAN,pos),u->param->go_param .K_P ,u->param->go_param .K_W );
|
||||
GO_M8010_send_data(BSP_UART_GetHandle(BSP_UART_RS485), id,u->param->go_param[id] .rev ,u->param->go_param[id] .T ,u->param->go_param[id] .W ,AngleChange(RADIAN,pos),u->param->go_param [id].K_P ,u->param->go_param[id] .K_W );
|
||||
|
||||
}
|
||||
|
||||
@ -201,7 +221,7 @@ int8_t ALL_Motor_Control(UP_t *u,CAN_Output_t *out)
|
||||
|
||||
|
||||
|
||||
GO_SendData(u,0 ,u->motor_target .go_shoot );
|
||||
GO_SendData(u,0 ,u->motor_target .go_shoot );
|
||||
GO_SendData(u,1 ,u->motor_target .go_spin);
|
||||
|
||||
|
||||
@ -250,7 +270,6 @@ int8_t UP_control(UP_t *u,CAN_Output_t *out,CMD_t *c)
|
||||
{
|
||||
|
||||
if(u ==NULL) return 0;
|
||||
if(u ==NULL) return 0;
|
||||
|
||||
switch (c->CMD_CtrlType )
|
||||
{
|
||||
@ -261,29 +280,40 @@ int8_t UP_control(UP_t *u,CAN_Output_t *out,CMD_t *c)
|
||||
|
||||
case Normal :
|
||||
|
||||
u->state .Pitch_flag =Not_started_Pit;
|
||||
u->state .last_state = Not_started_Pit;
|
||||
u->Oper_control_state .Pitch_flag =Not_started_Pit;
|
||||
u->Oper_control_state .last_state = Not_started_Pit;
|
||||
|
||||
u->motor_target .go_shoot =0;
|
||||
u->motor_target .M2006_angle =-140;
|
||||
u->motor_target .M2006_angle =M2006_INIT_ANGLE;
|
||||
u->motor_target .go_spin =u->DribbleContext.DribbleConfig .go2_init_angle ;
|
||||
u->motor_target .M3508_angle =0;
|
||||
u->DribbleContext .DribbleState = STATE_GRAB_BALL; //状态更新,开始夹球
|
||||
|
||||
RELAY1_TOGGLE (1);//接球,1开0关
|
||||
RELAY2_TOGGLE (1);//夹球,0关1开
|
||||
|
||||
|
||||
break;
|
||||
|
||||
case Pitch_pull :
|
||||
if(u->state .last_state == Not_started_Pit)
|
||||
if(u->Oper_control_state .last_state == Not_started_Pit)
|
||||
{
|
||||
|
||||
u->motor_target .go_shoot =-300;
|
||||
|
||||
u->motor_target .go_shoot =-2050;
|
||||
u->motor_target .M2006_angle =-140;
|
||||
|
||||
if(u->motorfeedback .GO_motor_info[0]->Pos < (-4.8)) //到达位置后再扣扳机
|
||||
if(u->motorfeedback .GO_motor_info[0]->Pos < (-35.20)) //到达位置后再扣扳机
|
||||
u->motor_target .go_shoot =GO_POSITION_TRIGGER;
|
||||
|
||||
if(u->motorfeedback .GO_motor_info[0]->Pos < (GO_POSITION_PITCH_FD)) //到达位置后再扣扳机
|
||||
{
|
||||
u->motor_target .M2006_angle =0;
|
||||
u->motor_target .M2006_angle =M2006_INIT_ANGLE;
|
||||
if(u->motorfeedback .M2006.total_angle>-5)
|
||||
{//避免没勾上就拉
|
||||
u->motor_target .go_shoot =0;
|
||||
u->state .Pitch_flag = Launch_Ready ;
|
||||
u->state .last_state = Launch_Ready;
|
||||
u->motor_target .go_shoot =GO1_INIT_POSITION;
|
||||
u->Oper_control_state .Pitch_flag = Launch_Ready ;
|
||||
u->Oper_control_state .last_state = Launch_Ready;
|
||||
|
||||
}
|
||||
|
||||
@ -292,35 +322,46 @@ int8_t UP_control(UP_t *u,CAN_Output_t *out,CMD_t *c)
|
||||
|
||||
break ;
|
||||
case Pitch_shoot :
|
||||
if (u->state .last_state == Launch_Ready)
|
||||
if (u->Oper_control_state .last_state == Launch_Ready)
|
||||
{
|
||||
|
||||
u->motor_target .M2006_angle =-140;
|
||||
u->state .Pitch_flag = Done_Pit ;
|
||||
u->state .last_state = Done_Pit;
|
||||
u->motor_target .M2006_angle =M2006_INIT_ANGLE;
|
||||
u->Oper_control_state .Pitch_flag = Done_Pit ;
|
||||
u->Oper_control_state .last_state = Done_Pit;
|
||||
|
||||
}
|
||||
{
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
case Dribble:
|
||||
{
|
||||
/*夹球 -> 3508 升起 ,同时go2翻转 -> 到位置后,继电器开,放球,同时3508降,go2翻回->接球,收 */
|
||||
Dribble_Process(u,out);
|
||||
|
||||
}break ;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
case MID_NAVI :
|
||||
{
|
||||
}
|
||||
break ;
|
||||
|
||||
case PICK_t :
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
break;
|
||||
@ -334,5 +375,67 @@ int8_t UP_control(UP_t *u,CAN_Output_t *out,CMD_t *c)
|
||||
}
|
||||
|
||||
|
||||
int8_t Dribble_Process(UP_t *u, CAN_Output_t *out)
|
||||
{
|
||||
|
||||
switch (u->DribbleContext.DribbleState) {
|
||||
case STATE_GRAB_BALL://开始
|
||||
|
||||
RELAY2_TOGGLE (0);//夹球
|
||||
|
||||
u->motor_target.M3508_angle =u->DribbleContext .DribbleConfig .m3508_high_angle;//3508升起
|
||||
u->motor_target.go_spin =u->DribbleContext .DribbleConfig .go2_flip_angle;
|
||||
|
||||
|
||||
if((u->motorfeedback .M3508 .total_angle >400)) {
|
||||
RELAY1_TOGGLE (0);
|
||||
|
||||
|
||||
if((u->motorfeedback.GO_motor_info[1]->angle) <-53){
|
||||
|
||||
u->DribbleContext .DribbleState = STATE_RELEASE_BALL; //当go2到标准位置,标志位改变
|
||||
}
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case STATE_RELEASE_BALL:
|
||||
RELAY2_TOGGLE (1);//松球
|
||||
|
||||
|
||||
|
||||
|
||||
if((u->motorfeedback.GO_motor_info[1]->angle) <-60){
|
||||
u->motor_target.go_spin =u->DribbleContext .DribbleConfig .go2_init_angle ; //恢复go2位置
|
||||
u->DribbleContext .DribbleState = STATE_CATCH_PREP; //当go2到标准位置,标志位改变
|
||||
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case STATE_CATCH_PREP:
|
||||
if((u->motorfeedback.GO_motor_info[1]->angle) > -0){
|
||||
u->motor_target.M3508_angle =u->DribbleContext .DribbleConfig .m3508_init_angle ; //当go2到初始位置,3508降
|
||||
|
||||
RELAY1_TOGGLE (1);//接球
|
||||
}
|
||||
if(u->motorfeedback .M3508 .total_angle <5){
|
||||
u->DribbleContext .DribbleState = STATE_CATCH_DONE;
|
||||
}
|
||||
break;
|
||||
|
||||
case STATE_CATCH_DONE:
|
||||
RELAY2_TOGGLE (1);//松球
|
||||
RELAY1_TOGGLE (0);
|
||||
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -14,7 +14,38 @@
|
||||
#include "GO_M8010_6_Driver.h"
|
||||
#include "bsp_usart.h"
|
||||
|
||||
|
||||
/*
|
||||
状态机
|
||||
|
||||
状态结构体,触发标志位结构体
|
||||
|
||||
配置层,-->config.c
|
||||
|
|
||||
中间层,-->up.h,统一UP_t
|
||||
|
|
||||
运行函数,switch(状态) 运行相应函数
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
typedef enum
|
||||
{
|
||||
@ -25,25 +56,42 @@ typedef enum
|
||||
|
||||
}Pitch_flag_t;
|
||||
|
||||
typedef enum{
|
||||
/*运球*/
|
||||
typedef enum {
|
||||
STATE_GRAB_BALL, // 夹球升起阶段
|
||||
STATE_RELEASE_BALL, // 释放球体
|
||||
STATE_CATCH_PREP, // 接球准备
|
||||
STATE_CATCH_BALL, // 接球动作
|
||||
STATE_CATCH_DONE //完成
|
||||
} DribbleState_t;
|
||||
|
||||
/* 参数配置结构体 */
|
||||
typedef struct {
|
||||
fp32 m3508_init_angle; // 3508初始角度
|
||||
fp32 m3508_high_angle; // 3508升起角度
|
||||
fp32 go2_init_angle; // GO2初始角度
|
||||
fp32 go2_flip_angle; // GO2翻转角度
|
||||
fp32 flip_timing; // 翻转触发时机
|
||||
fp32 release_threshold; // 释放球
|
||||
} DribbleConfig_t;
|
||||
|
||||
/* 状态机上下文 */
|
||||
typedef struct {
|
||||
DribbleState_t DribbleState;
|
||||
DribbleConfig_t DribbleConfig;
|
||||
|
||||
uint8_t is_initialized;
|
||||
|
||||
Not_started_dri=0,//未开始
|
||||
No_ball =1, //抓上无球
|
||||
Have_ball_F=2, //刚开始有球
|
||||
Have_ball_S=3, //中途有球
|
||||
Done_dri =4 //已完成
|
||||
|
||||
}Dribble_flag_t;
|
||||
} DribbleContext_t;
|
||||
|
||||
/*运行控制中的控制*/
|
||||
|
||||
typedef struct{
|
||||
|
||||
/*投球过程*/
|
||||
Pitch_flag_t Pitch_flag;
|
||||
/*运球过程*/
|
||||
Dribble_flag_t Dribble_flag;
|
||||
|
||||
int last_state;
|
||||
|
||||
char last_state;
|
||||
|
||||
} Oper_control_state_t;
|
||||
|
||||
@ -76,8 +124,7 @@ typedef struct {
|
||||
/*角度环控制电机类型*/
|
||||
typedef enum {
|
||||
M2006 = 1,
|
||||
M3508
|
||||
|
||||
M3508
|
||||
} MotorType_t;
|
||||
|
||||
|
||||
@ -97,7 +144,9 @@ typedef struct
|
||||
pid_param_t M3508_speed_param;
|
||||
pid_param_t M3508_angle_param;
|
||||
|
||||
GO_param_t go_param;
|
||||
GO_param_t go_param[2];
|
||||
|
||||
DribbleConfig_t DribbleConfig_Config;
|
||||
|
||||
}UP_Param_t;
|
||||
|
||||
@ -119,11 +168,22 @@ typedef struct{
|
||||
uint8_t up_task_run;
|
||||
const UP_Param_t *param;
|
||||
|
||||
int state;
|
||||
|
||||
|
||||
|
||||
/*运球过程*/
|
||||
DribbleContext_t DribbleContext;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
UP_Imu_t pos088;
|
||||
|
||||
/*控制及状态*/
|
||||
CMD_t *cmd;
|
||||
Oper_control_state_t state;//上层机构的运行状态
|
||||
Oper_control_state_t Oper_control_state;//上层机构的运行状态
|
||||
|
||||
struct{
|
||||
fp32 rotor_pit6020ecd;
|
||||
@ -172,8 +232,8 @@ typedef struct{
|
||||
pid_type_def M2006_angle;
|
||||
pid_type_def M2006_speed;
|
||||
|
||||
pid_type_def M3508_angle;
|
||||
pid_type_def M3508_speed;
|
||||
pid_type_def M3508_angle;
|
||||
pid_type_def M3508_speed;
|
||||
|
||||
}pid;
|
||||
|
||||
@ -211,6 +271,7 @@ int8_t ALL_Motor_Control(UP_t *u,CAN_Output_t *out);
|
||||
int8_t UP_M2006_angle(UP_t *u,fp32 target_angle);
|
||||
int8_t UP_M3508_speed(UP_t *u,fp32 speed);
|
||||
|
||||
int8_t Dribble_Process(UP_t *u, CAN_Output_t *out);
|
||||
|
||||
|
||||
#endif
|
||||
|
@ -165,6 +165,7 @@ void GO_M8010_recv_data(uint8_t* Temp_buffer)
|
||||
motor->Temp = Temp;
|
||||
motor->MError = Temp_buffer[12] & 0x7;
|
||||
|
||||
motor ->angle = AngleChange(DEGREE,motor ->Pos);
|
||||
}
|
||||
|
||||
//力位混合控制
|
||||
|
@ -64,11 +64,13 @@ typedef struct {
|
||||
float T;
|
||||
float W;
|
||||
float Pos;
|
||||
|
||||
float angle;
|
||||
|
||||
int footForce;
|
||||
uint8_t buffer[17];
|
||||
uint8_t Rec_buffer[16];
|
||||
ControlData_t motor_send_data;
|
||||
|
||||
}GO_Motorfield;
|
||||
|
||||
|
||||
|
@ -61,9 +61,16 @@ int8_t CMD_ParseRC(CMD_t *cmd,const CMD_RC_t *rc) {
|
||||
{
|
||||
|
||||
if(rc->sw_r ==CMD_SW_UP) cmd ->CMD_CtrlType =MID_NAVI;; //左中,右上,雷达
|
||||
if(rc->sw_r ==CMD_SW_MID) cmd ->CMD_UP_mode =Normal; //左中,右中,无模式
|
||||
if(rc->sw_r ==CMD_SW_DOWN) cmd ->CMD_UP_mode =Dribble; //左中,右上,运球
|
||||
|
||||
if(rc->sw_r ==CMD_SW_MID)
|
||||
{
|
||||
cmd ->CMD_CtrlType =UP_RCcontrol;
|
||||
cmd ->CMD_UP_mode =Normal; //左中,右中,无模式
|
||||
}
|
||||
if(rc->sw_r ==CMD_SW_DOWN)
|
||||
{
|
||||
cmd ->CMD_UP_mode =Dribble; //左中,右上,运球
|
||||
cmd ->CMD_CtrlType =UP_RCcontrol;
|
||||
}
|
||||
}
|
||||
else if(rc->sw_l==CMD_SW_DOWN)
|
||||
{
|
||||
|
@ -34,6 +34,7 @@ static CMD_t up_cmd;
|
||||
float aaa=0;
|
||||
float bbb=0;
|
||||
float CCC=0;
|
||||
float ddd=0;
|
||||
|
||||
|
||||
/**
|
||||
@ -68,7 +69,17 @@ void Task_up(void *argument)
|
||||
//
|
||||
// GO_SendData(&UP, 1,CCC);
|
||||
// GO_SendData(&UP, 0,aaa);
|
||||
|
||||
UP_control(&UP,&UP_CAN_out,&up_cmd);
|
||||
// UP.motor_target .go_shoot =aaa;
|
||||
// UP.motor_target .M2006_angle =bbb ;
|
||||
|
||||
// UP_control(&UP,&UP_CAN_out,&up_cmd);
|
||||
// UP.motor_target .M3508_angle =CCC;
|
||||
// UP.motor_target .go_shoot =aaa;
|
||||
// UP.motor_target .M2006_angle =bbb;
|
||||
// UP.motor_target .go_spin =ddd;
|
||||
|
||||
ALL_Motor_Control(&UP,&UP_CAN_out);
|
||||
|
||||
osDelay(1);
|
||||
|
Loading…
Reference in New Issue
Block a user