Merge branch 'main' of ssh://gitea.qutrobot.top:222/LYL/R2_NEW
This commit is contained in:
commit
bd16e41962
@ -26,9 +26,9 @@
|
|||||||
<ToolsetNumber>0x4</ToolsetNumber>
|
<ToolsetNumber>0x4</ToolsetNumber>
|
||||||
<ToolsetName>ARM-ADS</ToolsetName>
|
<ToolsetName>ARM-ADS</ToolsetName>
|
||||||
<TargetOption>
|
<TargetOption>
|
||||||
<CLKADS>12000000</CLKADS>
|
<CLKADS>25000000</CLKADS>
|
||||||
<OPTTT>
|
<OPTTT>
|
||||||
<gFlags>1</gFlags>
|
<gFlags>0</gFlags>
|
||||||
<BeepAtEnd>1</BeepAtEnd>
|
<BeepAtEnd>1</BeepAtEnd>
|
||||||
<RunSim>0</RunSim>
|
<RunSim>0</RunSim>
|
||||||
<RunTarget>1</RunTarget>
|
<RunTarget>1</RunTarget>
|
||||||
@ -77,7 +77,7 @@
|
|||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<IsCurrentTarget>1</IsCurrentTarget>
|
<IsCurrentTarget>1</IsCurrentTarget>
|
||||||
</OPTFL>
|
</OPTFL>
|
||||||
<CpuCode>18</CpuCode>
|
<CpuCode>0</CpuCode>
|
||||||
<DebugOpt>
|
<DebugOpt>
|
||||||
<uSim>0</uSim>
|
<uSim>0</uSim>
|
||||||
<uTrg>1</uTrg>
|
<uTrg>1</uTrg>
|
||||||
@ -103,7 +103,7 @@
|
|||||||
<bEvRecOn>1</bEvRecOn>
|
<bEvRecOn>1</bEvRecOn>
|
||||||
<bSchkAxf>0</bSchkAxf>
|
<bSchkAxf>0</bSchkAxf>
|
||||||
<bTchkAxf>0</bTchkAxf>
|
<bTchkAxf>0</bTchkAxf>
|
||||||
<nTsel>3</nTsel>
|
<nTsel>0</nTsel>
|
||||||
<sDll></sDll>
|
<sDll></sDll>
|
||||||
<sDllPa></sDllPa>
|
<sDllPa></sDllPa>
|
||||||
<sDlgDll></sDlgDll>
|
<sDlgDll></sDlgDll>
|
||||||
@ -114,39 +114,9 @@
|
|||||||
<tDlgDll></tDlgDll>
|
<tDlgDll></tDlgDll>
|
||||||
<tDlgPa></tDlgPa>
|
<tDlgPa></tDlgPa>
|
||||||
<tIfile></tIfile>
|
<tIfile></tIfile>
|
||||||
<pMon>BIN\CMSIS_AGDI.dll</pMon>
|
<pMon>BIN\UL2CM3.DLL</pMon>
|
||||||
</DebugOpt>
|
</DebugOpt>
|
||||||
<TargetDriverDllRegistry>
|
<TargetDriverDllRegistry>
|
||||||
<SetRegEntry>
|
|
||||||
<Number>0</Number>
|
|
||||||
<Key>ST-LINKIII-KEIL_SWO</Key>
|
|
||||||
<Name>-U00160029510000164E574E32 -O206 -SF1000 -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 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F407IGHx$CMSIS\Flash\STM32F4xx_1024.FLM)</Name>
|
|
||||||
</SetRegEntry>
|
|
||||||
<SetRegEntry>
|
|
||||||
<Number>0</Number>
|
|
||||||
<Key>ARMRTXEVENTFLAGS</Key>
|
|
||||||
<Name>-L70 -Z18 -C0 -M0 -T1</Name>
|
|
||||||
</SetRegEntry>
|
|
||||||
<SetRegEntry>
|
|
||||||
<Number>0</Number>
|
|
||||||
<Key>DLGTARM</Key>
|
|
||||||
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0)</Name>
|
|
||||||
</SetRegEntry>
|
|
||||||
<SetRegEntry>
|
|
||||||
<Number>0</Number>
|
|
||||||
<Key>ARMDBGFLAGS</Key>
|
|
||||||
<Name></Name>
|
|
||||||
</SetRegEntry>
|
|
||||||
<SetRegEntry>
|
|
||||||
<Number>0</Number>
|
|
||||||
<Key>DLGUARM</Key>
|
|
||||||
<Name></Name>
|
|
||||||
</SetRegEntry>
|
|
||||||
<SetRegEntry>
|
|
||||||
<Number>0</Number>
|
|
||||||
<Key>CMSIS_AGDI</Key>
|
|
||||||
<Name>-X"Any" -UAny -O206 -S0 -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)</Name>
|
|
||||||
</SetRegEntry>
|
|
||||||
<SetRegEntry>
|
<SetRegEntry>
|
||||||
<Number>0</Number>
|
<Number>0</Number>
|
||||||
<Key>UL2CM3</Key>
|
<Key>UL2CM3</Key>
|
||||||
@ -206,13 +176,13 @@
|
|||||||
</Tracepoint>
|
</Tracepoint>
|
||||||
<DebugFlag>
|
<DebugFlag>
|
||||||
<trace>0</trace>
|
<trace>0</trace>
|
||||||
<periodic>1</periodic>
|
<periodic>0</periodic>
|
||||||
<aLwin>1</aLwin>
|
<aLwin>0</aLwin>
|
||||||
<aCover>0</aCover>
|
<aCover>0</aCover>
|
||||||
<aSer1>0</aSer1>
|
<aSer1>0</aSer1>
|
||||||
<aSer2>0</aSer2>
|
<aSer2>0</aSer2>
|
||||||
<aPa>0</aPa>
|
<aPa>0</aPa>
|
||||||
<viewmode>1</viewmode>
|
<viewmode>0</viewmode>
|
||||||
<vrSel>0</vrSel>
|
<vrSel>0</vrSel>
|
||||||
<aSym>0</aSym>
|
<aSym>0</aSym>
|
||||||
<aTbox>0</aTbox>
|
<aTbox>0</aTbox>
|
||||||
@ -245,10 +215,10 @@
|
|||||||
<pMultCmdsp></pMultCmdsp>
|
<pMultCmdsp></pMultCmdsp>
|
||||||
<DebugDescription>
|
<DebugDescription>
|
||||||
<Enable>1</Enable>
|
<Enable>1</Enable>
|
||||||
<EnableFlashSeq>0</EnableFlashSeq>
|
<EnableFlashSeq>1</EnableFlashSeq>
|
||||||
<EnableLog>0</EnableLog>
|
<EnableLog>0</EnableLog>
|
||||||
<Protocol>2</Protocol>
|
<Protocol>2</Protocol>
|
||||||
<DbgClock>1000000</DbgClock>
|
<DbgClock>10000000</DbgClock>
|
||||||
</DebugDescription>
|
</DebugDescription>
|
||||||
</TargetOption>
|
</TargetOption>
|
||||||
</Target>
|
</Target>
|
||||||
@ -287,7 +257,7 @@
|
|||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
<GroupName>Application/User/Core</GroupName>
|
<GroupName>Application/User/Core</GroupName>
|
||||||
<tvExp>1</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<cbSel>0</cbSel>
|
<cbSel>0</cbSel>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
@ -427,7 +397,7 @@
|
|||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
<GroupName>Drivers/STM32F4xx_HAL_Driver</GroupName>
|
<GroupName>Drivers/STM32F4xx_HAL_Driver</GroupName>
|
||||||
<tvExp>1</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<cbSel>0</cbSel>
|
<cbSel>0</cbSel>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
@ -699,7 +669,7 @@
|
|||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
<GroupName>Drivers/CMSIS</GroupName>
|
<GroupName>Drivers/CMSIS</GroupName>
|
||||||
<tvExp>1</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<cbSel>0</cbSel>
|
<cbSel>0</cbSel>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
@ -719,7 +689,7 @@
|
|||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
<GroupName>Middlewares/FreeRTOS</GroupName>
|
<GroupName>Middlewares/FreeRTOS</GroupName>
|
||||||
<tvExp>1</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<cbSel>0</cbSel>
|
<cbSel>0</cbSel>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
@ -847,7 +817,7 @@
|
|||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
<GroupName>User/Module</GroupName>
|
<GroupName>User/Module</GroupName>
|
||||||
<tvExp>1</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<cbSel>0</cbSel>
|
<cbSel>0</cbSel>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
@ -903,7 +873,7 @@
|
|||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
<GroupName>User/bsp</GroupName>
|
<GroupName>User/bsp</GroupName>
|
||||||
<tvExp>1</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<cbSel>0</cbSel>
|
<cbSel>0</cbSel>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
@ -1055,7 +1025,7 @@
|
|||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
<GroupName>User/Task</GroupName>
|
<GroupName>User/Task</GroupName>
|
||||||
<tvExp>1</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<cbSel>0</cbSel>
|
<cbSel>0</cbSel>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
@ -1183,7 +1153,7 @@
|
|||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
<GroupName>User/Algorithm</GroupName>
|
<GroupName>User/Algorithm</GroupName>
|
||||||
<tvExp>1</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<cbSel>0</cbSel>
|
<cbSel>0</cbSel>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
@ -1263,7 +1233,7 @@
|
|||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
<GroupName>User/Device</GroupName>
|
<GroupName>User/Device</GroupName>
|
||||||
<tvExp>1</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<cbSel>0</cbSel>
|
<cbSel>0</cbSel>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
@ -1355,7 +1325,7 @@
|
|||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
<GroupName>Application/User/USB_DEVICE/App</GroupName>
|
<GroupName>Application/User/USB_DEVICE/App</GroupName>
|
||||||
<tvExp>1</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<cbSel>0</cbSel>
|
<cbSel>0</cbSel>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
@ -1399,7 +1369,7 @@
|
|||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
<GroupName>Application/User/USB_DEVICE/Target</GroupName>
|
<GroupName>Application/User/USB_DEVICE/Target</GroupName>
|
||||||
<tvExp>1</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<cbSel>0</cbSel>
|
<cbSel>0</cbSel>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
@ -1419,7 +1389,7 @@
|
|||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
<GroupName>Middlewares/USB_Device_Library</GroupName>
|
<GroupName>Middlewares/USB_Device_Library</GroupName>
|
||||||
<tvExp>1</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<cbSel>0</cbSel>
|
<cbSel>0</cbSel>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
|
@ -17,8 +17,8 @@
|
|||||||
<TargetCommonOption>
|
<TargetCommonOption>
|
||||||
<Device>STM32F407IGHx</Device>
|
<Device>STM32F407IGHx</Device>
|
||||||
<Vendor>STMicroelectronics</Vendor>
|
<Vendor>STMicroelectronics</Vendor>
|
||||||
<PackID>Keil.STM32F4xx_DFP.3.0.0</PackID>
|
<PackID>Keil.STM32F4xx_DFP.2.15.0</PackID>
|
||||||
<PackURL>https://www.keil.com/pack/</PackURL>
|
<PackURL>http://www.keil.com/pack/</PackURL>
|
||||||
<Cpu>IRAM(0x20000000-0x2001BFFF) IRAM2(0x2001C000-0x2001FFFF) IROM(0x8000000-0x80FFFFF) CLOCK(25000000) FPU2 CPUTYPE("Cortex-M4") TZ</Cpu>
|
<Cpu>IRAM(0x20000000-0x2001BFFF) IRAM2(0x2001C000-0x2001FFFF) IROM(0x8000000-0x80FFFFF) CLOCK(25000000) FPU2 CPUTYPE("Cortex-M4") TZ</Cpu>
|
||||||
<FlashUtilSpec></FlashUtilSpec>
|
<FlashUtilSpec></FlashUtilSpec>
|
||||||
<StartupFile></StartupFile>
|
<StartupFile></StartupFile>
|
||||||
|
@ -72,19 +72,19 @@ int8_t Chassis_init(Chassis_t *c, const Chassis_Param_t *param, float target_fre
|
|||||||
|
|
||||||
|
|
||||||
c->sick_cali .sickparam=c->param ->sickparam ;
|
c->sick_cali .sickparam=c->param ->sickparam ;
|
||||||
|
|
||||||
|
c->ang_cail.is_open=1;
|
||||||
return CHASSIS_OK;
|
return CHASSIS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
fp32 pian_yaw;
|
|
||||||
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] = -Nor_Vx + Nor_Vy + Vw+pian_yaw; // 右前
|
c->hopemotorout.OmniSpeedOut[0] = -Nor_Vx + Nor_Vy + Vw+c->ang_cail.out; // 右前
|
||||||
c->hopemotorout.OmniSpeedOut[1] = -Nor_Vx - Nor_Vy + Vw+pian_yaw; // 右后
|
c->hopemotorout.OmniSpeedOut[1] = -Nor_Vx - Nor_Vy + Vw+c->ang_cail.out; // 右后
|
||||||
c->hopemotorout.OmniSpeedOut[2] = Nor_Vx - Nor_Vy + Vw +pian_yaw; // 左后
|
c->hopemotorout.OmniSpeedOut[2] = Nor_Vx - Nor_Vy + Vw +c->ang_cail.out; // 左后
|
||||||
c->hopemotorout.OmniSpeedOut[3] = Nor_Vx + Nor_Vy + Vw +pian_yaw; // 左前
|
c->hopemotorout.OmniSpeedOut[3] = Nor_Vx + Nor_Vy + Vw +c->ang_cail.out; // 左前
|
||||||
|
|
||||||
Chassis_AngleCompensate(c);
|
Chassis_AngleCompensate(c);
|
||||||
|
|
||||||
@ -148,8 +148,8 @@ int8_t Chassis_Control(Chassis_t *c, CMD_t *ctrl, CAN_Output_t *out) {
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
case AUTO_MID360_Pitch:
|
case AUTO_MID360_Pitch:
|
||||||
c->move_vec.Vw = ctrl->cmd_MID360.posw * 1000;
|
c->move_vec.Vw = -ctrl->cmd_MID360.posw * 1000;
|
||||||
c->move_vec.Vy = -ctrl->cmd_MID360.posy * 1000;
|
c->move_vec.Vy = ctrl->cmd_MID360.posy * 1000;
|
||||||
c->move_vec.Vx = -ctrl->cmd_MID360.posx * 1000;
|
c->move_vec.Vx = -ctrl->cmd_MID360.posx * 1000;
|
||||||
abs_limit_fp(&c->move_vec.Vx, 5000.0f);
|
abs_limit_fp(&c->move_vec.Vx, 5000.0f);
|
||||||
abs_limit_fp(&c->move_vec.Vy, 5000.0f);
|
abs_limit_fp(&c->move_vec.Vy, 5000.0f);
|
||||||
@ -174,8 +174,8 @@ int8_t Chassis_Control(Chassis_t *c, CMD_t *ctrl, CAN_Output_t *out) {
|
|||||||
break ;
|
break ;
|
||||||
case PB_MID:
|
case PB_MID:
|
||||||
case PB_DOWN:
|
case PB_DOWN:
|
||||||
c->move_vec.Vw = ctrl->cmd_MID360.posw * 1000;
|
c->move_vec.Vw = -ctrl->cmd_MID360.posw * 1000;
|
||||||
c->move_vec.Vy = -ctrl->cmd_MID360.posy * 1000;
|
c->move_vec.Vy = ctrl->cmd_MID360.posy * 1000;
|
||||||
c->move_vec.Vx = -ctrl->cmd_MID360.posx * 1000;
|
c->move_vec.Vx = -ctrl->cmd_MID360.posx * 1000;
|
||||||
abs_limit_fp(&c->move_vec.Vx, 5000.0f);
|
abs_limit_fp(&c->move_vec.Vx, 5000.0f);
|
||||||
abs_limit_fp(&c->move_vec.Vy, 5000.0f);
|
abs_limit_fp(&c->move_vec.Vy, 5000.0f);
|
||||||
@ -292,17 +292,21 @@ int8_t sick_calibration(Chassis_t *c, CMD_t *ctrl, CAN_Output_t *out)
|
|||||||
int8_t Chassis_AngleCompensate(Chassis_t *c)
|
int8_t Chassis_AngleCompensate(Chassis_t *c)
|
||||||
{
|
{
|
||||||
if (c == NULL) return CHASSIS_ERR_NULL;
|
if (c == NULL) return CHASSIS_ERR_NULL;
|
||||||
|
if(c->ang_cail.is_open==0) return 0;
|
||||||
|
|
||||||
static fp32 pian_angel,cur_angle;
|
static fp32 pian_angel,cur_angle;
|
||||||
|
|
||||||
if((c->move_vec.Vx || c->move_vec.Vy) && (c->move_vec.Vw== 0))
|
if((c->move_vec.Vx || c->move_vec.Vy) && (c->move_vec.Vw== 0))
|
||||||
{
|
{
|
||||||
pian_angel=cur_angle-AngleChange(DEGREE,c->pos088.imu_eulr.yaw);
|
c->ang_cail.ang_error=cur_angle-AngleChange(DEGREE,c->pos088.imu_eulr.yaw);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
else {
|
else {
|
||||||
cur_angle=AngleChange(DEGREE,c->pos088.imu_eulr.yaw);
|
c->ang_cail.ang_cur=AngleChange(DEGREE,c->pos088.imu_eulr.yaw);
|
||||||
pian_angel=0;
|
c->ang_cail.ang_error=0;
|
||||||
}
|
}
|
||||||
pian_yaw = PID_calc(&c->pid.Chassis_AngleAdjust,pian_angel,0);
|
c->ang_cail.out = PID_calc(&c->pid.Chassis_AngleAdjust,pian_angel,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -171,6 +171,16 @@ typedef struct{
|
|||||||
extKalman_t extKalman[3];
|
extKalman_t extKalman[3];
|
||||||
LowPassFilter2p_t filled[8]; /* 输出滤波器滤波器数组 */
|
LowPassFilter2p_t filled[8]; /* 输出滤波器滤波器数组 */
|
||||||
|
|
||||||
|
/*角度偏转修正 */
|
||||||
|
struct{
|
||||||
|
|
||||||
|
int is_open;
|
||||||
|
fp32 ang_error;
|
||||||
|
fp32 ang_cur;
|
||||||
|
fp32 out;
|
||||||
|
|
||||||
|
|
||||||
|
}ang_cail;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
fp32 sick_dis[4]; //获取到的sick激光值
|
fp32 sick_dis[4]; //获取到的sick激光值
|
||||||
|
@ -80,7 +80,7 @@ static const ConfigParam_t param ={
|
|||||||
.go_pull_pos = -214.0f, // go上升去合并扳机,扳机位置
|
.go_pull_pos = -214.0f, // go上升去合并扳机,扳机位置
|
||||||
.go_up_speed = 12.0f, // 上升速度
|
.go_up_speed = 12.0f, // 上升速度
|
||||||
.go_down_speed = 6.0f, // 下降速度
|
.go_down_speed = 6.0f, // 下降速度
|
||||||
.Pitch_angle = 66, //俯仰角
|
.Pitch_angle = 58, //俯仰角
|
||||||
.go_init = -50
|
.go_init = -50
|
||||||
},
|
},
|
||||||
.PitchCfg = {
|
.PitchCfg = {
|
||||||
|
@ -182,15 +182,10 @@ int8_t UP_control(UP_t *u,CAN_Output_t *out,CMD_t *c)
|
|||||||
/*部分数据更新*/
|
/*部分数据更新*/
|
||||||
static int is_pitch=1;
|
static int is_pitch=1;
|
||||||
posss=CurveChange(LowPassFilter2p_Apply(&u->filled[0],c->pos),3.4,4.2,&u->MID360Context.Curve);
|
posss=CurveChange(LowPassFilter2p_Apply(&u->filled[0],c->pos),3.4,4.2,&u->MID360Context.Curve);
|
||||||
// if (u->PitchContext.Curve == CURVE_58) {
|
u->vofa_send[0] = u->MID360Context.MID360Cfg.go_release_pos;
|
||||||
// target->Pitch_angle = 58;
|
u->vofa_send[1] = u->motorfeedback.go_data.Pos;
|
||||||
// } else {
|
u->vofa_send[2] = c->pos;
|
||||||
// target->Pitch_angle = 66;
|
|
||||||
// }
|
|
||||||
u->vofa_send [2] = c->pos;
|
|
||||||
u->vofa_send [3] = LowPassFilter2p_Apply(&u->filled[0],c->pos);
|
|
||||||
u->vofa_send [4] =1;
|
|
||||||
|
|
||||||
switch (c->CMD_CtrlType )
|
switch (c->CMD_CtrlType )
|
||||||
{
|
{
|
||||||
case RCcontrol: //在手动模式下
|
case RCcontrol: //在手动模式下
|
||||||
@ -263,13 +258,23 @@ return 0;
|
|||||||
|
|
||||||
//复用发射,
|
//复用发射,
|
||||||
int8_t Pitch_Launch_Sequence(UP_t *u, LaunchContext_t *LaunchContext,fp32 StartPos,fp32 EndPos,CAN_Output_t *out){
|
int8_t Pitch_Launch_Sequence(UP_t *u, LaunchContext_t *LaunchContext,fp32 StartPos,fp32 EndPos,CAN_Output_t *out){
|
||||||
|
/*电机位置到达判断*/
|
||||||
|
|
||||||
|
bool is_GoStartReach=is_reached(u->motorfeedback.go_data.Pos,StartPos,1.0f); //go开始位置
|
||||||
|
bool is_GoSpeedReach=is_reached(u->motorfeedback.go_data.W,0,1.0f) ; //go速度归零判断
|
||||||
|
bool is_GoEndReach =(u->motorfeedback .go_data .Pos < -209); //go去上拉钩子位置,判断到达
|
||||||
|
bool is_HookDone=(u->motorfeedback .DJmotor_feedback [4].total_angle>-10); //2006钩子放下判断
|
||||||
|
bool is_Shoot=(u->motorfeedback.DJmotor_feedback[4].total_angle<-10);//是否发射判断
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
switch(LaunchContext->LaunchState){
|
switch(LaunchContext->LaunchState){
|
||||||
case Launch_Stop: break;
|
case Launch_Stop: break;
|
||||||
case Launch_PREPARE:
|
case Launch_PREPARE:
|
||||||
u->motor_target.go_shoot = StartPos;
|
u->motor_target.go_shoot = StartPos;
|
||||||
if(is_reached(u->motorfeedback.go_data.Pos,StartPos,1.0f)&&
|
if(is_GoStartReach&& is_GoSpeedReach){
|
||||||
is_reached(u->motorfeedback.go_data.W,0,1.0f)){
|
|
||||||
//根据位置和速度判断是否到达初始位置
|
//根据位置和速度判断是否到达初始位置
|
||||||
LaunchContext->LaunchState = Launch_START;
|
LaunchContext->LaunchState = Launch_START;
|
||||||
|
|
||||||
@ -278,7 +283,7 @@ int8_t Pitch_Launch_Sequence(UP_t *u, LaunchContext_t *LaunchContext,fp32 StartP
|
|||||||
case Launch_START:
|
case Launch_START:
|
||||||
u->motor_target.go_pull_speed=LaunchContext->LaunchCfg.go_up_speed;
|
u->motor_target.go_pull_speed=LaunchContext->LaunchCfg.go_up_speed;
|
||||||
u->motor_target.go_shoot = u->LaunchContext.LaunchCfg.go_pull_pos;
|
u->motor_target.go_shoot = u->LaunchContext.LaunchCfg.go_pull_pos;
|
||||||
if(u->motorfeedback .go_data .Pos < -209){ //检测go位置到达最上面,这里的检测条件可以更改
|
if(is_GoEndReach){ //检测go位置到达最上面,这里的检测条件可以更改
|
||||||
u->motor_target.Shoot_M2006_angle = u->LaunchContext.LaunchCfg.m2006_trig ;//设置2006角度,关闭
|
u->motor_target.Shoot_M2006_angle = u->LaunchContext.LaunchCfg.m2006_trig ;//设置2006角度,关闭
|
||||||
|
|
||||||
LaunchContext->LaunchState = Launch_TRIGGER;
|
LaunchContext->LaunchState = Launch_TRIGGER;
|
||||||
@ -286,7 +291,7 @@ int8_t Pitch_Launch_Sequence(UP_t *u, LaunchContext_t *LaunchContext,fp32 StartP
|
|||||||
|
|
||||||
case Launch_TRIGGER:
|
case Launch_TRIGGER:
|
||||||
|
|
||||||
if( u->motorfeedback .DJmotor_feedback [4].total_angle>-1){ //当2006的总角度小于1,可以认为已经勾上,误差为1
|
if( is_HookDone ){ //当2006的总角度小于1,可以认为已经勾上,误差为1
|
||||||
u->motor_target.go_pull_speed=LaunchContext->LaunchCfg.go_down_speed;
|
u->motor_target.go_pull_speed=LaunchContext->LaunchCfg.go_down_speed;
|
||||||
u->motor_target.go_shoot = EndPos ;
|
u->motor_target.go_shoot = EndPos ;
|
||||||
// if(is_reached(u->motorfeedback.go_data.Pos,EndPos,1.0f))
|
// if(is_reached(u->motorfeedback.go_data.Pos,EndPos,1.0f))
|
||||||
@ -294,11 +299,10 @@ int8_t Pitch_Launch_Sequence(UP_t *u, LaunchContext_t *LaunchContext,fp32 StartP
|
|||||||
} break;
|
} break;
|
||||||
|
|
||||||
case Launch_SHOOT_WAIT:
|
case Launch_SHOOT_WAIT:
|
||||||
if(u->motorfeedback.DJmotor_feedback[4].total_angle<-1) //认为发射
|
if(is_Shoot) //认为发射
|
||||||
LaunchContext->LaunchState = Launch_DONE;
|
LaunchContext->LaunchState = Launch_DONE;
|
||||||
break;
|
break;
|
||||||
case Launch_DONE:
|
default:break;
|
||||||
break ;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -360,7 +364,7 @@ int8_t Pass_Process(UP_t *u,CAN_Output_t *out,CMD_t *c)
|
|||||||
|
|
||||||
|
|
||||||
PassCfg ->go_release_pos =
|
PassCfg ->go_release_pos =
|
||||||
CurveChange(LowPassFilter2p_Apply(&u->filled[0],c->pos)+0.15,3,4,&u->PassContext.Curve);
|
CurveChange(LowPassFilter2p_Apply(&u->filled[0],c->pos),3,4,&u->PassContext.Curve);
|
||||||
|
|
||||||
switch (*state) { //遥控器按键进行状态切换
|
switch (*state) { //遥控器按键进行状态切换
|
||||||
case PASS_STOP:
|
case PASS_STOP:
|
||||||
@ -399,7 +403,7 @@ int8_t UP_AUTO_Control(UP_t *u,CAN_Output_t *out,CMD_t *c){
|
|||||||
LaunchContext_t *LaunchContext = &u->LaunchContext;
|
LaunchContext_t *LaunchContext = &u->LaunchContext;
|
||||||
MID360Context_t *MID360Context=&u->MID360Context;
|
MID360Context_t *MID360Context=&u->MID360Context;
|
||||||
MID360Cfg_t *MID360Cfg = &u->MID360Context.MID360Cfg;
|
MID360Cfg_t *MID360Cfg = &u->MID360Context.MID360Cfg;
|
||||||
MID360Cfg->go_release_pos=CurveChange(LowPassFilter2p_Apply(&u->filled[0],c->pos)+0.15,3.2,4.3,&u->MID360Context.Curve);
|
MID360Cfg->go_release_pos=CurveChange(LowPassFilter2p_Apply(&u->filled[0],c->pos)-0.05,3.2,4.3,&u->MID360Context.Curve);
|
||||||
if (u->MID360Context.Curve == CURVE_58) {
|
if (u->MID360Context.Curve == CURVE_58) {
|
||||||
target->Pitch_angle = 58;
|
target->Pitch_angle = 58;
|
||||||
} else {
|
} else {
|
||||||
|
@ -1,29 +1,32 @@
|
|||||||
#include "up_utils.h"
|
#include "up_utils.h"
|
||||||
#include "up.h"
|
#include "up.h"
|
||||||
|
|
||||||
int8_t DJ_processdata(DJmotor_feedback_t *f,fp32 ecd_to_angle)
|
int8_t DJ_processdata(DJmotor_feedback_t *f, fp32 ecd_to_angle)
|
||||||
{
|
{
|
||||||
int8_t cnt=0;
|
fp32 angle, delta;
|
||||||
fp32 angle ,delta;
|
|
||||||
|
angle = f->ecd;
|
||||||
angle = f->ecd;
|
|
||||||
|
// 初始化阶段,记录 offset
|
||||||
if (f->init_cnt < 50) {
|
if (f->init_cnt < 50) {
|
||||||
f->orig_angle= angle;
|
f->offset_ecd = (uint16_t)angle; // 记录初始偏移
|
||||||
f->last_angle = angle;
|
f->orig_angle = angle - f->offset_ecd; // orig_angle 归零
|
||||||
f->init_cnt++;
|
f->last_angle = angle - f->offset_ecd;
|
||||||
return 0;
|
f->init_cnt++;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 使用 offset 修正
|
||||||
delta = angle - f->last_angle;
|
angle = angle - f->offset_ecd;
|
||||||
|
|
||||||
|
delta = angle - f->last_angle;
|
||||||
if (delta > 4096) {
|
if (delta > 4096) {
|
||||||
f->round_cnt--;
|
f->round_cnt--;
|
||||||
} else if (delta < -4096) {
|
} else if (delta < -4096) {
|
||||||
f->round_cnt++;
|
f->round_cnt++;
|
||||||
}
|
}
|
||||||
f->last_angle = angle;
|
f->last_angle = angle;
|
||||||
f->total_angle=(f->round_cnt*8191+(angle -f->orig_angle ))*ecd_to_angle;
|
f->total_angle=(f->round_cnt*8191+(angle -f->orig_angle ))*ecd_to_angle;
|
||||||
|
|
||||||
}
|
}
|
||||||
/*go电机控制*/
|
/*go电机控制*/
|
||||||
|
|
||||||
@ -65,13 +68,13 @@ int8_t GO_SendData( GO_MotorData_t *go_data,GO_MotorCmd_t *go_cmd,float pos, flo
|
|||||||
// 计算66度曲线(偏上)
|
// 计算66度曲线(偏上)
|
||||||
// 计算66度曲线(偏上)
|
// 计算66度曲线(偏上)
|
||||||
static float curve_66(float d) {
|
static float curve_66(float d) {
|
||||||
return 4.0310f * d * d + 8.9026f * d -139.5156;
|
return 3.7028f * d * d + 11.2126f * d -142.9446f;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 计算58度曲线(偏下)
|
// 计算58度曲线(偏下)
|
||||||
// 计算58度曲线(偏下)
|
// 计算58度曲线(偏下)
|
||||||
static float curve_58(float d) {
|
static float curve_58(float d) {
|
||||||
return -1.9776f * d * d + 42.8499f * d - 204.2442f;
|
return 0.9242f * d * d + 19.4246f * d - 154.9055f;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -33,6 +33,8 @@ typedef struct
|
|||||||
int32_t round_cnt;
|
int32_t round_cnt;
|
||||||
int init_cnt;
|
int init_cnt;
|
||||||
fp32 total_angle;
|
fp32 total_angle;
|
||||||
|
uint16_t offset_ecd;
|
||||||
|
uint32_t msg_cnt;
|
||||||
}DJmotor_feedback_t;
|
}DJmotor_feedback_t;
|
||||||
|
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ typedef enum{
|
|||||||
}CMD_mode_t;
|
}CMD_mode_t;
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t status_fromnuc;
|
uint8_t status_fromnuc;
|
||||||
uint8_t ctrl_status; //取其中每一个二进制位用作通信
|
uint8_t ctrl_status;
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
fp32 vx;
|
fp32 vx;
|
||||||
@ -52,6 +52,7 @@ typedef struct {
|
|||||||
|
|
||||||
fp32 pos;
|
fp32 pos;
|
||||||
fp32 angle;
|
fp32 angle;
|
||||||
|
|
||||||
char flag;
|
char flag;
|
||||||
|
|
||||||
}MID360;
|
}MID360;
|
||||||
|
@ -23,6 +23,8 @@ fp32 send[4]={11.0f,45.0,1.f,4.0f};
|
|||||||
int a=0;
|
int a=0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void Task_nuc(void *argument){
|
void Task_nuc(void *argument){
|
||||||
(void)argument; /**/
|
(void)argument; /**/
|
||||||
|
|
||||||
@ -70,6 +72,9 @@ void Task_nuc(void *argument){
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// NUC_StartSend(&nuc_raw, cmd_update);
|
||||||
|
|
||||||
tick += delay_tick; /* 计算下一个唤醒时刄1ķ*/
|
tick += delay_tick; /* 计算下一个唤醒时刄1ķ*/
|
||||||
osDelayUntil(tick);
|
osDelayUntil(tick);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user