diff --git a/MDK-ARM/.vscode/c_cpp_properties.json b/MDK-ARM/.vscode/c_cpp_properties.json index 114c2a6..fb4b89f 100644 --- a/MDK-ARM/.vscode/c_cpp_properties.json +++ b/MDK-ARM/.vscode/c_cpp_properties.json @@ -307,6 +307,114 @@ "__vfp_status(x,y)=0" ], "intelliSenseMode": "${default}" + }, + { + "name": "R2_CHASSIS", + "includePath": [ + "d:\\Desktop\\r2\\R2_CHASSIS\\Core\\Inc", + "d:\\Desktop\\r2\\R2_CHASSIS\\Drivers\\STM32F4xx_HAL_Driver\\Inc", + "d:\\Desktop\\r2\\R2_CHASSIS\\Drivers\\STM32F4xx_HAL_Driver\\Inc\\Legacy", + "d:\\Desktop\\r2\\R2_CHASSIS\\Middlewares\\Third_Party\\FreeRTOS\\Source\\include", + "d:\\Desktop\\r2\\R2_CHASSIS\\Middlewares\\Third_Party\\FreeRTOS\\Source\\CMSIS_RTOS_V2", + "d:\\Desktop\\r2\\R2_CHASSIS\\Middlewares\\Third_Party\\FreeRTOS\\Source\\portable\\RVDS\\ARM_CM4F", + "d:\\Desktop\\r2\\R2_CHASSIS\\Drivers\\CMSIS\\Device\\ST\\STM32F4xx\\Include", + "d:\\Desktop\\r2\\R2_CHASSIS\\Drivers\\CMSIS\\Include", + "d:\\Desktop\\r2\\R2_CHASSIS\\User", + "d:\\Desktop\\r2\\R2_CHASSIS\\User\\bsp", + "d:\\Desktop\\r2\\R2_CHASSIS\\User\\device", + "d:\\Desktop\\r2\\R2_CHASSIS\\User\\task", + "d:\\Desktop\\r2\\R2_CHASSIS\\User\\Algorithm", + "d:\\Desktop\\r2\\R2_CHASSIS\\User\\Module", + "d:\\Desktop\\r2\\R2_CHASSIS\\MDK-ARM", + "d:\\Desktop\\r2\\R2_CHASSIS\\USB_DEVICE\\App", + "d:\\Desktop\\r2\\R2_CHASSIS\\USB_DEVICE\\Target", + "d:\\Desktop\\r2\\R2_CHASSIS\\Middlewares\\ST\\STM32_USB_Device_Library\\Core\\Inc", + "d:\\Desktop\\r2\\R2_CHASSIS\\Middlewares\\ST\\STM32_USB_Device_Library\\Class\\CDC\\Inc", + "d:\\Desktop\\r2\\R2_CHASSIS\\Drivers\\CMSIS\\Lib\\ARM", + "d:\\Desktop\\r2\\R2_CHASSIS\\Core\\Src", + "d:\\Desktop\\r2\\R2_CHASSIS\\Drivers\\STM32F4xx_HAL_Driver\\Src", + "d:\\Desktop\\r2\\R2_CHASSIS\\Middlewares\\Third_Party\\FreeRTOS\\Source", + "d:\\Desktop\\r2\\R2_CHASSIS\\Middlewares\\Third_Party\\FreeRTOS\\Source\\portable\\MemMang", + "d:\\Desktop\\r2\\R2_CHASSIS\\Middlewares\\ST\\STM32_USB_Device_Library\\Core\\Src", + "d:\\Desktop\\r2\\R2_CHASSIS\\Middlewares\\ST\\STM32_USB_Device_Library\\Class\\CDC\\Src" + ], + "defines": [ + "USE_HAL_DRIVER", + "STM32F407xx", + "__CC_ARM", + "__arm__", + "__align(x)=", + "__ALIGNOF__(x)=", + "__alignof__(x)=", + "__asm(x)=", + "__forceinline=", + "__restrict=", + "__global_reg(n)=", + "__inline=", + "__int64=long long", + "__INTADDR__(expr)=0", + "__irq=", + "__packed=", + "__pure=", + "__smc(n)=", + "__svc(n)=", + "__svc_indirect(n)=", + "__svc_indirect_r7(n)=", + "__value_in_regs=", + "__weak=", + "__writeonly=", + "__declspec(x)=", + "__attribute__(x)=", + "__nonnull__(x)=", + "__register=", + "__breakpoint(x)=", + "__cdp(x,y,z)=", + "__clrex()=", + "__clz(x)=0U", + "__current_pc()=0U", + "__current_sp()=0U", + "__disable_fiq()=", + "__disable_irq()=", + "__dmb(x)=", + "__dsb(x)=", + "__enable_fiq()=", + "__enable_irq()=", + "__fabs(x)=0.0", + "__fabsf(x)=0.0f", + "__force_loads()=", + "__force_stores()=", + "__isb(x)=", + "__ldrex(x)=0U", + "__ldrexd(x)=0U", + "__ldrt(x)=0U", + "__memory_changed()=", + "__nop()=", + "__pld(...)=", + "__pli(...)=", + "__qadd(x,y)=0", + "__qdbl(x)=0", + "__qsub(x,y)=0", + "__rbit(x)=0U", + "__rev(x)=0U", + "__return_address()=0U", + "__ror(x,y)=0U", + "__schedule_barrier()=", + "__semihost(x,y)=0", + "__sev()=", + "__sqrt(x)=0.0", + "__sqrtf(x)=0.0f", + "__ssat(x,y)=0", + "__strex(x,y)=0U", + "__strexd(x,y)=0", + "__strt(x,y)=", + "__swp(x,y)=0U", + "__usat(x,y)=0U", + "__wfe()=", + "__wfi()=", + "__yield()=", + "__vfp_status(x,y)=0" + ], + "intelliSenseMode": "${default}" } ], "version": 4 diff --git a/MDK-ARM/.vscode/keil-assistant.log b/MDK-ARM/.vscode/keil-assistant.log index cef60ea..fa42cdc 100644 --- a/MDK-ARM/.vscode/keil-assistant.log +++ b/MDK-ARM/.vscode/keil-assistant.log @@ -449,3 +449,5 @@ [info] Log at : 2025/1/13|22:53:23|GMT+0800 +[info] Log at : 2025/3/28|21:46:16|GMT+0800 + diff --git a/MDK-ARM/R2_CHASSIS.uvoptx b/MDK-ARM/R2_CHASSIS.uvoptx index f3e593f..d3de66b 100644 --- a/MDK-ARM/R2_CHASSIS.uvoptx +++ b/MDK-ARM/R2_CHASSIS.uvoptx @@ -135,7 +135,7 @@ 0 ST-LINKIII-KEIL_SWO - -U-O206 -O206 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(2BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F407IGHx$CMSIS\Flash\STM32F4xx_1024.FLM) + -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) 0 @@ -160,13 +160,63 @@ 1 dr16,0x0A + + 2 + 1 + chassis,0x0A + + + 3 + 1 + nuc_raw,0x0A + + + 4 + 1 + nucbuf + + + 5 + 1 + dr16,0x0A + + + 6 + 1 + cmd_fromnuc,0x0A + + + 7 + 1 + ctrl,0x0A + + + 8 + 1 + can,0x0A + + + 9 + 1 + out,0x0A + + + 10 + 1 + can_out,0x0A + + + 11 + 1 + cmd_fromnuc,0x0A + 0 0 - 0 + 1 1 0 0 @@ -247,7 +297,7 @@ Application/User/Core - 0 + 1 0 0 0 @@ -659,7 +709,7 @@ Drivers/CMSIS - 0 + 1 0 0 0 @@ -679,7 +729,7 @@ Middlewares/FreeRTOS - 0 + 1 0 0 0 @@ -839,7 +889,7 @@ User/bsp - 0 + 1 0 0 0 @@ -1131,7 +1181,7 @@ User/Algorithm - 0 + 1 0 0 0 @@ -1211,7 +1261,7 @@ User/Device - 0 + 1 0 0 0 @@ -1303,7 +1353,7 @@ Application/User/USB_DEVICE/App - 0 + 1 0 0 0 @@ -1347,7 +1397,7 @@ Application/User/USB_DEVICE/Target - 0 + 1 0 0 0 @@ -1367,7 +1417,7 @@ Middlewares/USB_Device_Library - 0 + 1 0 0 0 diff --git a/MDK-ARM/R2_CHASSIS.uvprojx b/MDK-ARM/R2_CHASSIS.uvprojx index 35261e3..d639b59 100644 --- a/MDK-ARM/R2_CHASSIS.uvprojx +++ b/MDK-ARM/R2_CHASSIS.uvprojx @@ -10,6 +10,7 @@ R2_CHASSIS 0x4 ARM-ADS + 5060960::V5.06 update 7 (build 960)::.\ARMCC 5060960::V5.06 update 7 (build 960)::.\ARMCC 0 @@ -81,7 +82,7 @@ 0 - 1 + 0 0 diff --git a/MDK-ARM/R2_CHASSIS/R2_CHASSIS.axf b/MDK-ARM/R2_CHASSIS/R2_CHASSIS.axf new file mode 100644 index 0000000..3aea999 Binary files /dev/null and b/MDK-ARM/R2_CHASSIS/R2_CHASSIS.axf differ diff --git a/User/Algorithm/user_math.c b/User/Algorithm/user_math.c index 6d118c6..3d163b4 100644 --- a/User/Algorithm/user_math.c +++ b/User/Algorithm/user_math.c @@ -309,3 +309,12 @@ uint8_t average(uint8_t arr[], uint8_t n) { } return (float) sum / n; } + + +int abs_value(int num) { + if (num >= 0) { + return num; // 如果数是非负的,直接返回该数 + } else { + return -num; // 如果数是负的,返回它的相反数 + } +} \ No newline at end of file diff --git a/User/Algorithm/user_math.h b/User/Algorithm/user_math.h index 21cf578..766dc9a 100644 --- a/User/Algorithm/user_math.h +++ b/User/Algorithm/user_math.h @@ -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); + +int abs_value(int num); + #endif diff --git a/User/Module/Chassis.c b/User/Module/Chassis.c index d2f5a2f..051c4e8 100644 --- a/User/Module/Chassis.c +++ b/User/Module/Chassis.c @@ -71,23 +71,11 @@ 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_pitAngle6020),PID_POSITION,&(c->param->C6020pitAngle_param));//尝试位置控制角度 - PID_init((&c->pid.chassis_pitOmega6020),PID_POSITION,&(c->param->C6020pitOmega_param)); + PID_init(&(c->pid.chassis_PICKWzPID_IN),PID_POSITION,&(c->param->chassis_PICKWzPIDIN_param)); - PID_init((&c->pid.chassis_gimbal_yawAnglePID),PID_POSITION,&(c->param->Gimbal_yawAngle_param));//尝试位置控制角度 - - PID_init((&c->pid.chassis_gimbal_yawOmegaPID),PID_POSITION,&(c->param->Gimbal_yawOmega_param)); + PID_init(&(c->pid.chassis_PICKWzPID_OUT),PID_POSITION,&(c->param->chassis_PICKWzPIDOUT_param)); - PID_init((&c->pid.chassis_gimbal_pitchAnglePID),PID_POSITION,&(c->param->Gimbal_pitchAngle_param));//尝试位置控制角度 - - PID_init((&c->pid.chassis_gimbal_pitchOmegaPID),PID_POSITION,&(c->param->Gimbal_pitchOmega_param)); - - PID_init(&(c->pid.chassis_NaviVxPID),PID_POSITION,&(c->param->NaviVx_param)); - - PID_init(&(c->pid.chassis_NaviVyPID),PID_POSITION,&(c->param->NaviVy_param)); - - PID_init(&(c->pid.chassis_NaviWzPID),PID_POSITION,&(c->param->NaviVw_param)); PID_init(&(c->pid.sick_CaliforYPID),PID_POSITION,&(c->param->Sick_CaliYparam)); @@ -180,11 +168,25 @@ int8_t Chassis_Control(Chassis_t *c,CMD_t *ctrl,CAN_Output_t *out) break; - case PICK: - c->move_vec.Vw =ctrl->C_navi.wz ; - c->move_vec.Vx =ctrl->C_navi.vy ; - c->move_vec.Vy =ctrl->C_navi.vx ; + case PICK_t: + + 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 =PID_calc(&(c->pid.chassis_PICKWzPID_IN),-(ctrl ->C_pick .posx) ,0); + + } + else if(abs_value(ctrl ->C_pick .posx )<0.2) + {c->move_vec.Vw =0; + } + else + c->move_vec.Vw =PID_calc(&(c->pid.chassis_PICKWzPID_OUT),-(ctrl ->C_pick .posx) ,0); + + break ; diff --git a/User/Module/Chassis.h b/User/Module/Chassis.h index e906470..7f4f6c8 100644 --- a/User/Module/Chassis.h +++ b/User/Module/Chassis.h @@ -82,16 +82,10 @@ typedef struct /*该部分决定PID的参数整定在config中修改*/ pid_param_t M3508_param; - pid_param_t AngleCor_param; - pid_param_t OmegaCor_param; - pid_param_t DisCamera_param; - pid_param_t ImuCor_param; - pid_param_t C6020pitAngle_param; - pid_param_t C6020pitOmega_param; - pid_param_t Gimbal_yawAngle_param; - pid_param_t Gimbal_yawOmega_param; - pid_param_t Gimbal_pitchAngle_param; - pid_param_t Gimbal_pitchOmega_param; + + pid_param_t chassis_PICKWzPIDIN_param; + pid_param_t chassis_PICKWzPIDOUT_param; + pid_param_t NaviVx_param; pid_param_t NaviVy_param; pid_param_t NaviVw_param; @@ -166,21 +160,19 @@ typedef struct{ struct{ pid_type_def chassis_3508VecPID[4]; - pid_type_def chassis_pitAngle6020; - pid_type_def chassis_pitOmega6020; - pid_type_def chassis_gimbal_yawAnglePID; - pid_type_def chassis_gimbal_yawOmegaPID; - pid_type_def chassis_gimbal_pitchAnglePID; - pid_type_def chassis_gimbal_pitchOmegaPID; - pid_type_def chassis_NaviVxPID; - pid_type_def chassis_NaviVyPID; - pid_type_def chassis_NaviWzPID; + pid_type_def chassis_PICKWzPID_IN; + pid_type_def chassis_PICKWzPID_OUT; + + pid_type_def chassis_NaviWzPID; + pid_type_def chassis_NaviVxPID; + pid_type_def chassis_NaviVyPID; + 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_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 909b2ab..8c82fd0 100644 --- a/User/Module/config.c +++ b/User/Module/config.c @@ -8,21 +8,6 @@ #define DEG_TO_RAD(x) ((x) * (3.141592653 / 180.0)) //角度转弧度 -/*导航地图*/ -#define point_num 4 - -point_t map_point[point_num] ={ - - {0.0, 0, DEG_TO_RAD(90.0), 5.0}, - - {0, 0, DEG_TO_RAD(180.0), 5.0}, -// - {0.0, 0.0, DEG_TO_RAD(270.0), 5.0}, - - {0.0, 0.0, DEG_TO_RAD(360.0), 5.0}, - - -}; #ifdef DEBUG @@ -36,83 +21,7 @@ static const ConfigParam_t param_chassis ={ #endif .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, @@ -121,6 +30,20 @@ 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_PICKWzPIDOUT_param ={ + .p = 10.0f, + .i = 0.02f, + .d = 0.00f, + .i_limit = 0.0f, + .out_limit =5000.0f, + }, // .M3508_param = { // .p = 10.0f, // .i = 0.0f, diff --git a/User/device/cmd.c b/User/device/cmd.c index db1937d..76b1653 100644 --- a/User/device/cmd.c +++ b/User/device/cmd.c @@ -187,7 +187,7 @@ int8_t CMD_CtrlSet(CMD_t *cmd) { { if(cmd->key_ctrl_r==CMD_SW_UP) { - cmd->C_cmd.type = RC; + cmd->C_cmd.type = PICK_t; cmd->C_cmd.mode = RC_MODE3; } if(cmd->key_ctrl_r==CMD_SW_MID) diff --git a/User/device/nuc.c b/User/device/nuc.c index d05906f..05bc64a 100644 --- a/User/device/nuc.c +++ b/User/device/nuc.c @@ -6,7 +6,7 @@ static volatile uint32_t drop_message = 0; static osThreadId_t thread_alert; -uint8_t nucbuf[32]; +uint8_t nucbuf[31]; static void NUC_IdleCallback(void) { osThreadFlagsSet(thread_alert,SIGNAL_NUC_RAW_REDY); @@ -54,7 +54,7 @@ int8_t NUC_RawParse(CMD_NUC_t *n){ case MID://控制帧0x09 /* 协议格式 0xFF HEAD - 0x0X 控制帧 + 0x09 控制帧 0x01 相机帧 vx fp32 vy fp32