Compare commits

..

1 Commits

8 changed files with 148 additions and 78 deletions

View File

@ -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>6</nTsel>
<sDll></sDll> <sDll></sDll>
<sDllPa></sDllPa> <sDllPa></sDllPa>
<sDlgDll></sDlgDll> <sDlgDll></sDlgDll>
@ -114,7 +114,7 @@
<tDlgDll></tDlgDll> <tDlgDll></tDlgDll>
<tDlgPa></tDlgPa> <tDlgPa></tDlgPa>
<tIfile></tIfile> <tIfile></tIfile>
<pMon>BIN\CMSIS_AGDI.dll</pMon> <pMon>STLink\ST-LINKIII-KEIL_SWO.dll</pMon>
</DebugOpt> </DebugOpt>
<TargetDriverDllRegistry> <TargetDriverDllRegistry>
<SetRegEntry> <SetRegEntry>
@ -140,7 +140,7 @@
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
<Key>DLGUARM</Key> <Key>DLGUARM</Key>
<Name></Name> <Name>(105=-1,-1,-1,-1,0)</Name>
</SetRegEntry> </SetRegEntry>
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
@ -158,27 +158,27 @@
<Ww> <Ww>
<count>0</count> <count>0</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>Nor_Vx</ItemText> <ItemText>rc_ctrl,0x0A</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>1</count> <count>1</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>Nor_Vy</ItemText> <ItemText>LD_raw,0x0A</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>2</count> <count>2</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>count,0x0A</ItemText> <ItemText>can,0x0A</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>3</count> <count>3</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>count</ItemText> <ItemText>UP,0x0A</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>4</count> <count>4</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>NUC_StartSending,0x0A</ItemText> <ItemText>cmd_rc,0x0A</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>5</count> <count>5</count>
@ -188,37 +188,127 @@
<Ww> <Ww>
<count>6</count> <count>6</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>PIAN</ItemText> <ItemText>nuc_raw,0x0A</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>7</count> <count>7</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>shang_yaw</ItemText> <ItemText>nucbuf</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>8</count> <count>8</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>pian_yaw</ItemText> <ItemText>cmd_fromnuc</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>9</count> <count>9</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>pid,0x0A</ItemText> <ItemText>up_cmd,0x0A</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>10</count> <count>10</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>gyro_kp</ItemText> <ItemText>can_out</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>11</count> <count>11</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>rc_ctrl,0x0A</ItemText> <ItemText>Nor_Vx</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>38</count> <count>12</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>cmd_fromnuc</ItemText> <ItemText>Nor_Vy</ItemText>
</Ww>
<Ww>
<count>13</count>
<WinNumber>1</WinNumber>
<ItemText>b</ItemText>
</Ww>
<Ww>
<count>14</count>
<WinNumber>1</WinNumber>
<ItemText>count,0x0A</ItemText>
</Ww>
<Ww>
<count>15</count>
<WinNumber>1</WinNumber>
<ItemText>count</ItemText>
</Ww>
<Ww>
<count>16</count>
<WinNumber>1</WinNumber>
<ItemText>raw_rx1,0x0A</ItemText>
</Ww>
<Ww>
<count>17</count>
<WinNumber>1</WinNumber>
<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.

View File

@ -83,9 +83,6 @@ int8_t Chassis_init(Chassis_t *c,const Chassis_Param_t *param,float target_freq)
fp32 gyro_kp=1.0f; fp32 gyro_kp=1.0f;
fp32 PIAN=0; fp32 PIAN=0;
fp32 shang_yaw=0;
fp32 pian_yaw=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;//归一化后的数据
@ -95,41 +92,23 @@ void Chassis_speed_calculate(Chassis_t *c,fp32 Vx,fp32 Vy,fp32 Vw) //底盘逆
// c->hopemotorout.OmniSpeedOut[1] = -Vx-Vy+Vw;//右后 // c->hopemotorout.OmniSpeedOut[1] = -Vx-Vy+Vw;//右后
// c->hopemotorout.OmniSpeedOut[2] = Vx-Vy+Vw;//左后 // c->hopemotorout.OmniSpeedOut[2] = Vx-Vy+Vw;//左后
// c->hopemotorout.OmniSpeedOut[3] = Vx+Vy+Vw;//左前 // c->hopemotorout.OmniSpeedOut[3] = Vx+Vy+Vw;//左前
if(Vw) // 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[0] = -Nor_Vx+Nor_Vy+Vw ;//右前 // c->hopemotorout.OmniSpeedOut[2] = Nor_Vx-Nor_Vy+Vw + c->pos088 .bmi088.gyro.z;//左后
// c->hopemotorout.OmniSpeedOut[3] = Nor_Vx+Nor_Vy+Vw + c->pos088 .bmi088.gyro.z;//左前
c->hopemotorout.OmniSpeedOut[0] = -Nor_Vx+Nor_Vy+Vw ;//右前
c->hopemotorout.OmniSpeedOut[1] = -Nor_Vx-Nor_Vy+Vw ;//右后 c->hopemotorout.OmniSpeedOut[1] = -Nor_Vx-Nor_Vy+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 ;//左前
}
else {
c->hopemotorout.OmniSpeedOut[0] = -Nor_Vx+Nor_Vy+Vw + c->pos088 .bmi088.gyro.z*gyro_kp;//右前
c->hopemotorout.OmniSpeedOut[1] = -Nor_Vx-Nor_Vy+Vw + c->pos088 .bmi088.gyro.z*gyro_kp;//右后
c->hopemotorout.OmniSpeedOut[2] = Nor_Vx-Nor_Vy+Vw + c->pos088 .bmi088.gyro.z*gyro_kp;//左后
c->hopemotorout.OmniSpeedOut[3] = Nor_Vx+Nor_Vy+Vw + c->pos088 .bmi088.gyro.z*gyro_kp;//左前
}
//
// if(Vx || Vy){
// 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 ;//左前
// }
// else
// {
// PIAN = 0;
// shang_yaw=c->pos088 .imu_eulr .yaw ;
// pian_yaw=0;
// }
//
c->vofa_send[0]=c->pos088.bmi088.gyro.z;
c->vofa_send[1]=PIAN; // if(!Vw){
c->vofa_send[2]=c->pos088.imu_eulr.yaw; // PIAN = jiuzheng(c->pos088 .imu_eulr .yaw );
// c->vofa_send[3]= // }
// c->vofa_send[2]=c->motorfeedback .rotor_rpm3508 [1]; // c->hopemotorout.OmniSpeedOut[0] += PIAN ;//右前
// c->hopemotorout.OmniSpeedOut[1] += PIAN ;//右后
// c->hopemotorout.OmniSpeedOut[2] += PIAN ;//左后
// c->hopemotorout.OmniSpeedOut[3] += PIAN ;//左前
} }
@ -269,6 +248,8 @@ int8_t Chassis_Control(Chassis_t *c,CMD_t *ctrl,CAN_Output_t *out)
}; };
fp32 jiuzheng(fp32 yaw) fp32 jiuzheng(fp32 yaw)
{ {
static fp32 pian_yaw=0;
static fp32 shang_yaw=0;
static int is=0; static int is=0;
@ -278,9 +259,9 @@ fp32 jiuzheng(fp32 yaw)
is=1; is=1;
} }
pian_yaw+= (yaw - shang_yaw)*1000; pian_yaw+= (yaw - shang_yaw);
shang_yaw=yaw ; shang_yaw=yaw ;
return PID_calc (&pid,pian_yaw,0); return PID_calc(&pid,pian_yaw,0);
} }

View File

@ -1,4 +1,4 @@
#include "config.h" #include "config.h"
#include "flash.h" #include "flash.h"
#include "string.h" #include "string.h"
#define DEBUG #define DEBUG
@ -110,13 +110,13 @@ static const ConfigParam_t param ={
}, },
/*投球*/ /*投球*/
.PitchConfig_Config = { .PitchConfig_Config = {
.m2006_init_angle =-100, .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, //偏下
.go1_release_threshold =-210, .go1_release_threshold =-210,
.m2006_Screw_init=0, .m2006_Screw_init=0,
.Pitch_angle =58, .Pitch_angle =56,
}, },

View File

@ -317,7 +317,7 @@ int8_t UP_control(UP_t *u,CAN_Output_t *out,CMD_t *c)
{ {
if(u->DribbleContext.DribbleState== DRIBBLE_PREPARE){ if(u->DribbleContext.DribbleState== DRIBBLE_PREPARE){
u->DribbleContext .DribbleState=DRIBBLE_PROCESS_DOWN; u->DribbleContext .DribbleState=DRIBBLE_TRANSLATE;
} }
//光电状态更新 //光电状态更新
Dribble_Process(u,out); Dribble_Process(u,out);
@ -446,8 +446,8 @@ int8_t Dribble_Process(UP_t *u, CAN_Output_t *out)
case DRIBBLE_PROCESS_DOWN: case DRIBBLE_PROCESS_DOWN:
u->motor_target.Dribble_M3508_speed[0]=u->DribbleContext .DribbleConfig.m3508_dribble_speed; u->motor_target.Dribble_M3508_speed[0]=u->DribbleContext .DribbleConfig.m3508_dribble_speed;
u->motor_target.Dribble_M3508_speed[1]=u->DribbleContext .DribbleConfig.m3508_dribble_speed; u->motor_target.Dribble_M3508_speed[1]=-u->DribbleContext .DribbleConfig.m3508_dribble_speed;
u->motor_target.Dribble_M3508_speed[2]=u->DribbleContext .DribbleConfig.m3508_dribble_speed; u->motor_target.Dribble_M3508_speed[2]=-u->DribbleContext .DribbleConfig.m3508_dribble_speed;
if(is_reached_multiple(u->motorfeedback .DJmotor_feedback [0].rpm, if(is_reached_multiple(u->motorfeedback .DJmotor_feedback [0].rpm,
u->motorfeedback .DJmotor_feedback [1].rpm, u->motorfeedback .DJmotor_feedback [1].rpm,
@ -463,8 +463,8 @@ int8_t Dribble_Process(UP_t *u, CAN_Output_t *out)
if(common_speed_flag){ if(common_speed_flag){
if(u->DribbleContext .DribbleConfig .light_ball_flag == 0){//球下落检测,反转 if(u->DribbleContext .DribbleConfig .light_ball_flag == 0){//球下落检测,反转
u->motor_target.Dribble_M3508_speed[0]=u->DribbleContext .DribbleConfig.m3508_dribble_Reverse_speed; u->motor_target.Dribble_M3508_speed[0]=u->DribbleContext .DribbleConfig.m3508_dribble_Reverse_speed;
u->motor_target.Dribble_M3508_speed[1]=u->DribbleContext .DribbleConfig.m3508_dribble_Reverse_speed; u->motor_target.Dribble_M3508_speed[1]=-u->DribbleContext .DribbleConfig.m3508_dribble_Reverse_speed;
u->motor_target.Dribble_M3508_speed[2]=u->DribbleContext .DribbleConfig.m3508_dribble_Reverse_speed; u->motor_target.Dribble_M3508_speed[2]=-u->DribbleContext .DribbleConfig.m3508_dribble_Reverse_speed;
u->DribbleContext .DribbleState=DRIBBLE_PROCESS_UP; u->DribbleContext .DribbleState=DRIBBLE_PROCESS_UP;

View File

@ -93,8 +93,7 @@ void CAN_Encoder_Decode(CAN_EncoderFeedback_t *feedback,
{ {
case 0x01: case 0x01:
feedback->ecd =raw[3]|raw[4]<<8|raw[5]<<16|raw[6]<<24; feedback->ecd =raw[3]|raw[4]<<8|raw[5]<<16|raw[6]<<24;
feedback->angle=(fp32)(2048-(fp32)feedback->ecd)/(2048-1797)*(70.0f-48.0f)+48.0f; feedback->angle=(fp32)feedback->ecd*360/CAN_ENCODER_RESOLUTION-151.0f;
break; break;
} }
} }

View File

@ -5,15 +5,15 @@
/* Includes ----------------------------------------------------------------- */ /* Includes ----------------------------------------------------------------- */
#include "rc.h" #include "rc.h"
#include "cmd.h"
#include <string.h> #include <string.h>
#include "bsp_usart.h" #include "bsp_usart.h"
#include "error_detect.h" #include "error_detect.h"
#define DR16 //#define DR16
//#define LD_t #define LD_t
#ifdef DR16 #ifdef DR16
#define FRAME_LEN 36 #define FRAME_LEN 36
@ -100,15 +100,15 @@ int8_t LD_ParseRaw( LD_raw_t *raw, LD_Data_t *LD)
if (raw->ch[0] < 0) if (raw->ch[0] < 0)
raw->map_ch[0] = map_fp32(raw->ch[0], -700, -2, -1, 0); raw->map_ch[0] = map_fp32(raw->ch[0], -696, 2, -1, 0);
else else
raw->map_ch[0] = map_fp32(raw->ch[0], -2, 700, 0, 1); raw->map_ch[0] = map_fp32(raw->ch[0], 2, 704, 0, 1);
// ch[1] // ch[1]
if (raw->ch[1] < 0) if (raw->ch[1] < 0)
raw->map_ch[1] = map_fp32(raw->ch[1], -700, 4, -1, 0); raw->map_ch[1] = map_fp32(raw->ch[1], -638, 5, -1, 0);
else else
raw->map_ch[1] = map_fp32(raw->ch[1], 4, 700, 0, 1); 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); raw->map_ch[2] = map_fp32(raw->ch[2], 2, 1377, 0, 1);
@ -220,10 +220,8 @@ int8_t RC_ParseRC( DR16_t *dr16,LD_raw_t *LD_raw, LD_Data_t *LD, CMD_RC_t *rc) {
rc->dr16.ch_l_x = 2 * ((float)dr16->data.ch_l_x - RC_CH_VALUE_MID) / full_range; rc->dr16.ch_l_x = 2 * ((float)dr16->data.ch_l_x - RC_CH_VALUE_MID) / full_range;
rc->dr16.ch_l_y = 2 * ((float)dr16->data.ch_l_y - RC_CH_VALUE_MID) / full_range; rc->dr16.ch_l_y = 2 * ((float)dr16->data.ch_l_y - RC_CH_VALUE_MID) / full_range;
// rc->dr16.sw_l = (CMD_SwitchPos_DR16_t)dr16->data.sw_l; rc->dr16.sw_l = (CMD_SwitchPos_DR16_t)dr16->data.sw_l;
// rc->dr16.sw_r = (CMD_SwitchPos_DR16_t)dr16->data.sw_r; rc->dr16.sw_r = (CMD_SwitchPos_DR16_t)dr16->data.sw_r;
rc->dr16.sw_l = (CMD_SwitchPos_t)dr16->data.sw_l;
rc->dr16.sw_r = (CMD_SwitchPos_t)dr16->data.sw_r;
rc->dr16.key = dr16->data.key; rc->dr16.key = dr16->data.key;

View File

@ -28,11 +28,13 @@ void vofa_tx_main(float *data)
/*在下面使用对应的串口发送函数*/ /*在下面使用对应的串口发送函数*/
// CDC_Transmit_FS( ( uint8_t *)fdata, sizeof(fdata));
HAL_UART_Transmit_DMA(&huart6, ( uint8_t *)fdata, sizeof(fdata)); // osDelay(1);
osDelay(1); // CDC_Transmit_FS( tail, 4);
HAL_UART_Transmit_DMA(&huart6, tail, 4); // HAL_UART_Transmit_DMA(&huart1, ( uint8_t *)fdata, sizeof(fdata));
osDelay(1); // osDelay(1);
// HAL_UART_Transmit_DMA(&huart1, tail, 4);
// osDelay(1);
} }