diff --git a/MDK-ARM/R2_CHASSIS.uvoptx b/MDK-ARM/R2_CHASSIS.uvoptx
index d3de66b..fd90927 100644
--- a/MDK-ARM/R2_CHASSIS.uvoptx
+++ b/MDK-ARM/R2_CHASSIS.uvoptx
@@ -103,7 +103,7 @@
1
0
0
- 6
+ 3
@@ -114,9 +114,14 @@
- STLink\ST-LINKIII-KEIL_SWO.dll
+ BIN\CMSIS_AGDI.dll
+
+ 0
+ CMSIS_AGDI
+ -X"Any" -UAny -O718 -S9 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F407IGHx$CMSIS\Flash\STM32F4xx_1024.FLM)
+
0
ARMRTXEVENTFLAGS
@@ -135,12 +140,12 @@
0
ST-LINKIII-KEIL_SWO
- -U00260035480000034E575152 -O206 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(2BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8000 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F407IGHx$CMSIS\Flash\STM32F4xx_1024.FLM)
+ -U00260035480000034E575152 -O206 -SF5000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(2BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8000 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F407IGHx$CMSIS\Flash\STM32F4xx_1024.FLM)
0
DLGUARM
- (105=-1,-1,-1,-1,0)
+
0
@@ -210,6 +215,11 @@
1
cmd_fromnuc,0x0A
+
+ 12
+ 1
+ a
+
0
@@ -258,7 +268,7 @@
0
0
2
- 10000000
+ 5000000
diff --git a/MDK-ARM/R2_CHASSIS/R2_CHASSIS.axf b/MDK-ARM/R2_CHASSIS/R2_CHASSIS.axf
index 3aea999..0b8b1c2 100644
Binary files a/MDK-ARM/R2_CHASSIS/R2_CHASSIS.axf and b/MDK-ARM/R2_CHASSIS/R2_CHASSIS.axf differ
diff --git a/User/Module/Chassis.c b/User/Module/Chassis.c
index 051c4e8..d14fa45 100644
--- a/User/Module/Chassis.c
+++ b/User/Module/Chassis.c
@@ -70,11 +70,10 @@ int8_t Chassis_init(Chassis_t *c,const Chassis_Param_t *param,float target_freq)
{
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_IN),PID_POSITION,&(c->param->chassis_PICKWzPIDIN_param));
-
- PID_init(&(c->pid.chassis_PICKWzPID_OUT),PID_POSITION,&(c->param->chassis_PICKWzPIDOUT_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));
@@ -113,7 +112,7 @@ void Chassis_speed_calculate(Chassis_t *c,fp32 Vx,fp32 Vy,fp32 Vw) //底盘逆
// if(xArrive && yArrive) return true;
// else return false;
//}
-
+fp32 a,b,c,d;
int8_t Chassis_Control(Chassis_t *c,CMD_t *ctrl,CAN_Output_t *out)
{
@@ -146,18 +145,24 @@ int8_t Chassis_Control(Chassis_t *c,CMD_t *ctrl,CAN_Output_t *out)
case MID_NAVI: //雷达
// //这套是全向轮的方向,一定要注意这里的xy方向
- c->move_vec.Vw =ctrl->C_navi.wz ;
- c->move_vec.Vx =ctrl->C_navi.vy ;
- c->move_vec.Vy =ctrl->C_navi.vx ;
-
- 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);
-
+ c->move_vec.Vw =ctrl->C_navi.wz*1000 ;
+ c->move_vec.Vy =-ctrl->C_navi.vy*1000 ;
+ c->move_vec.Vx =-ctrl->C_navi.vx*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;
@@ -172,21 +177,30 @@ int8_t Chassis_Control(Chassis_t *c,CMD_t *ctrl,CAN_Output_t *out)
c->move_vec.Vx =ctrl->Vx*6000 ;
c->move_vec.Vy =ctrl->Vy *6000;
- c->move_vec .Vw = ctrl->C_pick .posx ;
-// c->move_vec.Vw =LowPassFilter2p_Apply(&(c->filled[1]),c->move_vec.Vw);
- if(abs_value(ctrl ->C_pick .posx )>10)
+ c->move_vec .Vw = -ctrl->C_pick .posx;
+
+
+
+ if(abs_value(ctrl ->C_pick .posx )>20)
{
- c->move_vec.Vw =PID_calc(&(c->pid.chassis_PICKWzPID_IN),-(ctrl ->C_pick .posx) ,0);
+ c->move_vec.Vw =PID_calc(&(c->pid.chassis_PICKWzPID_HIGN),(c->move_vec .Vw) ,0);
}
- else if(abs_value(ctrl ->C_pick .posx )<0.2)
- {c->move_vec.Vw =0;
+ else if(abs_value(ctrl ->C_pick .posx )<0.1)
+ {
+ c->move_vec.Vw =0;
}
else
- c->move_vec.Vw =PID_calc(&(c->pid.chassis_PICKWzPID_OUT),-(ctrl ->C_pick .posx) ,0);
+ 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->C_pick .posx;
+
+
-
-
break ;
diff --git a/User/Module/Chassis.h b/User/Module/Chassis.h
index 7f4f6c8..d5131e3 100644
--- a/User/Module/Chassis.h
+++ b/User/Module/Chassis.h
@@ -83,8 +83,8 @@ typedef struct
/*该部分决定PID的参数整定在config中修改*/
pid_param_t M3508_param;
- pid_param_t chassis_PICKWzPIDIN_param;
- pid_param_t chassis_PICKWzPIDOUT_param;
+ pid_param_t chassis_PICKWzPID_HIGN_param;
+ pid_param_t chassis_PICKWzPID_LOW_param;
pid_param_t NaviVx_param;
pid_param_t NaviVy_param;
@@ -160,8 +160,13 @@ typedef struct{
struct{
pid_type_def chassis_3508VecPID[4];
- pid_type_def chassis_PICKWzPID_IN;
- pid_type_def chassis_PICKWzPID_OUT;
+ /*视觉*/
+ /*存在较高误差*/
+ pid_type_def chassis_PICKWzPID_HIGN;
+ /*存在较低误差*/
+ pid_type_def chassis_PICKWzPID_LOW;
+
+
pid_type_def chassis_NaviWzPID;
pid_type_def chassis_NaviVxPID;
@@ -170,9 +175,6 @@ typedef struct{
pid_type_def sick_CaliforYPID;
pid_type_def sick_CaliforXPID;
-// pid_type_def Action_VxPID;
-// pid_type_def Action_VyPID;
-// pid_type_def Action_WzPID;
}pid;
fp32 vofa_send[8];
diff --git a/User/Module/config.c b/User/Module/config.c
index 8c82fd0..fa243e0 100644
--- a/User/Module/config.c
+++ b/User/Module/config.c
@@ -30,20 +30,23 @@ static const ConfigParam_t param_chassis ={
.i_limit = 200.0f,
.out_limit =6000.0f,
},
- .chassis_PICKWzPIDIN_param ={
- .p = 5.0f,
- .i = 0.0f,
- .d = 0.15f,
- .i_limit = 0.0f,
- .out_limit =5000.0f,
+ /*视觉*/
+ .chassis_PICKWzPID_HIGN_param ={ //高响应
+ .p = 1.0f,
+ .i = 0.03f,
+ .d = 0.03f,
+ .i_limit = 100.0f,
+ .out_limit =2000.0f,
},
- .chassis_PICKWzPIDOUT_param ={
- .p = 10.0f,
- .i = 0.02f,
- .d = 0.00f,
- .i_limit = 0.0f,
- .out_limit =5000.0f,
+ .chassis_PICKWzPID_LOW_param ={ //高精度
+ .p = 0.5f, //1.0 0.5
+ .i = 0.5f, //0.01 0.04
+ .d = 0.0f, //0.02 0.02
+ .i_limit = 50.0f,
+ .out_limit =1000.0f,
},
+
+
// .M3508_param = {
// .p = 10.0f,
// .i = 0.0f,
@@ -53,51 +56,51 @@ static const ConfigParam_t param_chassis ={
// },
////高速那一套
-// .NaviVx_param ={
-// .p = 1.15f,
-// .i = 0.0f,
-// .d = 0.15f,
-// .i_limit = 0.0f,
-// .out_limit =5000.0f,
-// },
-// .NaviVy_param ={
-// .p = 1.15f,
-// .i = 0.0f,
-// .d = 0.15f,
-// .i_limit = 0.0f,
-// .out_limit =5000.0f,
-// },
-// .NaviVw_param ={
-// .p = 1.15f,
-// .i = 0.0f,
-// .d = 0.15f,
-// .i_limit = 0.0f,
-// .out_limit =5000.0f,
-// },
-//
-
-//低速那一套
.NaviVx_param ={
- .p = 1.04f,
+ .p = 1.15f,
.i = 0.0f,
.d = 0.15f,
.i_limit = 0.0f,
.out_limit =5000.0f,
},
.NaviVy_param ={
- .p = 1.1f,
+ .p = 1.15f,
.i = 0.0f,
.d = 0.15f,
.i_limit = 0.0f,
.out_limit =5000.0f,
},
.NaviVw_param ={
- .p = 1.5f,
+ .p = 1.15f,
.i = 0.0f,
.d = 0.15f,
.i_limit = 0.0f,
.out_limit =5000.0f,
},
+//
+
+//低速那一套
+// .NaviVx_param ={
+// .p = 1.04f,
+// .i = 0.0f,
+// .d = 0.15f,
+// .i_limit = 0.0f,
+// .out_limit =5000.0f,
+// },
+// .NaviVy_param ={
+// .p = 1.1f,
+// .i = 0.0f,
+// .d = 0.15f,
+// .i_limit = 0.0f,
+// .out_limit =5000.0f,
+// },
+// .NaviVw_param ={
+// .p = 1.5f,
+// .i = 0.0f,
+// .d = 0.15f,
+// .i_limit = 0.0f,
+// .out_limit =5000.0f,
+// },
.Sick_CaliYparam ={
.p =2.5f,
.i =0.001f,
diff --git a/User/bsp/bsp_usart.c b/User/bsp/bsp_usart.c
index b22edd5..369a7d7 100644
--- a/User/bsp/bsp_usart.c
+++ b/User/bsp/bsp_usart.c
@@ -9,7 +9,7 @@ static BSP_UART_t UART_Get(UART_HandleTypeDef *huart) {
if (huart->Instance == USART3)
return BSP_UART_REMOTE;
else if (huart->Instance == USART1)
- return BSP_UART_NUC;
+ return BSP_UART_VOFA;
else if (huart->Instance == USART6)
return BSP_UART_NUC;
/*
@@ -94,7 +94,7 @@ UART_HandleTypeDef *BSP_UART_GetHandle(BSP_UART_t uart) {
switch (uart) {
case BSP_UART_REMOTE:
return &huart3;
- case BSP_UART_ACTION:
+ case BSP_UART_VOFA:
return &huart1;
case BSP_UART_NUC:
return &huart6;
diff --git a/User/bsp/bsp_usart.h b/User/bsp/bsp_usart.h
index ac2af10..cc8d13f 100644
--- a/User/bsp/bsp_usart.h
+++ b/User/bsp/bsp_usart.h
@@ -12,7 +12,7 @@
typedef enum {
BSP_UART_REMOTE,
- BSP_UART_ACTION,
+ BSP_UART_VOFA,
BSP_UART_NUC,
/* BSP_UART_XXX, */
BSP_UART_NUM,
diff --git a/User/device/cmd.c b/User/device/cmd.c
index 76b1653..39938b1 100644
--- a/User/device/cmd.c
+++ b/User/device/cmd.c
@@ -63,7 +63,7 @@ static void CMD_RcLogic(const CMD_RC_t *rc, CMD_t *cmd) {
cmd->Vx = rc->ch_r_x;
- cmd->Vy = -rc->ch_r_y;
+ cmd->Vy = rc->ch_r_y;
cmd->Vw = rc->ch_l_x;
cmd->poscamear = rc->ch_l_y;
diff --git a/User/device/vofa.c b/User/device/vofa.c
index 87da64f..0d584cc 100644
--- a/User/device/vofa.c
+++ b/User/device/vofa.c
@@ -1,5 +1,5 @@
#include "vofa.h"
-//#include "usart.h"
+#include "bsp_usart.h"
#include "usbd_cdc_if.h"
#include
//用来对需要的数据进行串口绘图 (未添加接收函数)
@@ -30,11 +30,11 @@ void vofa_tx_main(float *data)
/*在下面使用对应的串口发送函数*/
// HAL_UART_Transmit_DMA(&huart1, ( uint8_t *)fdata, sizeof(fdata));
// osDelay(1);
-// HAL_UART_Transmit_DMA(&huart1, tail, 4);
-// osDelay(1);
- CDC_Transmit_FS( ( uint8_t *)fdata, sizeof(fdata));
- osDelay(1);
- CDC_Transmit_FS( tail, 4);
+ HAL_UART_Transmit_DMA(BSP_UART_GetHandle(BSP_UART_VOFA), tail, 4);
+ osDelay(1);
+// CDC_Transmit_FS( ( uint8_t *)fdata, sizeof(fdata));
+// osDelay(1);
+// CDC_Transmit_FS( tail, 4);
}