From 5de502c448574bea3876fc53dc8901801c4f042e Mon Sep 17 00:00:00 2001 From: ZHAISHUI04 <3150778793@qq.com> Date: Sat, 29 Mar 2025 14:16:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=AA=E6=8F=90=E4=BA=A4=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E5=90=8E=E7=9A=84=EF=BC=8C=E9=81=A5=E6=8E=A7=E5=99=A8=E6=8A=95?= =?UTF-8?q?=E7=AF=AE=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Core/Src/main.c | 1 - MDK-ARM/.vscode/keil-assistant.log | 2 + MDK-ARM/AUTO_CHASSIS.uvoptx | 138 +++++++----- MDK-ARM/AUTO_CHASSIS.uvprojx | 76 +++++-- MDK-ARM/ELE_CHASSIS/AUTO_CHASSIS.axf | Bin 3364516 -> 2759920 bytes User/Module/Chassis.c | 231 ------------------- User/Module/Chassis.h | 232 -------------------- User/Module/config.h | 2 - User/Module/up.c | 317 +++++++++++++++++++++------ User/Module/up.h | 102 ++++++--- User/device/Action.c | 203 ----------------- User/device/Action.h | 59 ----- User/device/GO_M8010_6_Driver.h | 4 +- User/device/cmd.c | 189 ++++------------ User/device/cmd.h | 177 +++++---------- User/task/action_task.c | 75 ------- User/task/action_task.h | 1 - User/task/chassis_task.c | 94 -------- User/task/chassis_task.h | 23 -- User/task/cmd_task.c | 27 +-- User/task/init.c | 3 +- User/task/navi_task.c | 68 ------ User/task/navi_task.h | 1 - User/task/nuc_task.c | 2 + User/task/up_task.c | 25 ++- User/task/user_task.h | 45 +--- 26 files changed, 584 insertions(+), 1513 deletions(-) delete mode 100644 User/Module/Chassis.c delete mode 100644 User/Module/Chassis.h delete mode 100644 User/device/Action.c delete mode 100644 User/device/Action.h delete mode 100644 User/task/action_task.c delete mode 100644 User/task/action_task.h delete mode 100644 User/task/chassis_task.c delete mode 100644 User/task/chassis_task.h delete mode 100644 User/task/navi_task.c delete mode 100644 User/task/navi_task.h diff --git a/Core/Src/main.c b/Core/Src/main.c index 244ccf3..39a953b 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -32,7 +32,6 @@ /* USER CODE BEGIN Includes */ #include "bsp_delay.h" #include "bsp_can.h" -#include "Action.h" //#include "bsp_dwt.h" /* USER CODE END Includes */ diff --git a/MDK-ARM/.vscode/keil-assistant.log b/MDK-ARM/.vscode/keil-assistant.log index de52ba5..429293f 100644 --- a/MDK-ARM/.vscode/keil-assistant.log +++ b/MDK-ARM/.vscode/keil-assistant.log @@ -475,3 +475,5 @@ Log at : 2025/2/23|14:39:36|GMT+0800 [info] Log at : 2025/3/11|21:09:29|GMT+0800 +[info] Log at : 2025/3/28|21:47:12|GMT+0800 + diff --git a/MDK-ARM/AUTO_CHASSIS.uvoptx b/MDK-ARM/AUTO_CHASSIS.uvoptx index a88a95b..5fb0e6c 100644 --- a/MDK-ARM/AUTO_CHASSIS.uvoptx +++ b/MDK-ARM/AUTO_CHASSIS.uvoptx @@ -145,7 +145,7 @@ 0 DLGUARM - + (105=-1,-1,-1,-1,0) 0 @@ -195,6 +195,46 @@ 1 GO_motor_info + + 8 + 1 + cbuf[36] + + + 9 + 1 + dr16,0x0A + + + 10 + 1 + cmd,0x0A + + + 11 + 1 + rc_ctrl,0x0A + + + 12 + 1 + up_cmd,0x0A + + + 13 + 1 + angle + + + 14 + 1 + can_ZZ + + + 15 + 1 + flaggg,0x0A + @@ -1116,18 +1156,6 @@ 0 0 0 - ..\User\task\nuc_task.c - nuc_task.c - 0 - 0 - - - 8 - 68 - 1 - 0 - 0 - 0 ..\User\task\error_detect_task.c error_detect_task.c 0 @@ -1135,7 +1163,7 @@ 8 - 69 + 68 1 0 0 @@ -1147,7 +1175,7 @@ 8 - 70 + 69 1 0 0 @@ -1157,6 +1185,30 @@ 0 0 + + 8 + 70 + 1 + 0 + 0 + 0 + ..\User\task\cmd_task.c + cmd_task.c + 0 + 0 + + + 8 + 71 + 1 + 0 + 0 + 0 + ..\User\task\nuc_task.c + nuc_task.c + 0 + 0 + @@ -1167,7 +1219,7 @@ 0 9 - 71 + 72 1 0 0 @@ -1177,18 +1229,6 @@ 0 0 - - 9 - 72 - 1 - 0 - 0 - 0 - ..\User\task\cmd_task.c - cmd_task.c - 0 - 0 - 9 73 @@ -1249,18 +1289,6 @@ 0 0 - - 9 - 78 - 1 - 0 - 0 - 0 - ..\User\Algorithm\navi.c - navi.c - 0 - 0 - @@ -1271,7 +1299,7 @@ 0 10 - 79 + 78 1 0 0 @@ -1283,7 +1311,7 @@ 10 - 80 + 79 1 0 0 @@ -1295,7 +1323,7 @@ 10 - 81 + 80 1 0 0 @@ -1307,7 +1335,7 @@ 10 - 82 + 81 1 0 0 @@ -1319,7 +1347,7 @@ 10 - 83 + 82 1 0 0 @@ -1331,7 +1359,7 @@ 10 - 84 + 83 1 0 0 @@ -1343,7 +1371,7 @@ 10 - 85 + 84 1 0 0 @@ -1363,7 +1391,7 @@ 0 11 - 86 + 85 1 0 0 @@ -1375,7 +1403,7 @@ 11 - 87 + 86 1 0 0 @@ -1387,7 +1415,7 @@ 11 - 88 + 87 1 0 0 @@ -1407,7 +1435,7 @@ 0 12 - 89 + 88 1 0 0 @@ -1427,7 +1455,7 @@ 0 13 - 90 + 89 1 0 0 @@ -1439,7 +1467,7 @@ 13 - 91 + 90 1 0 0 @@ -1451,7 +1479,7 @@ 13 - 92 + 91 1 0 0 @@ -1463,7 +1491,7 @@ 13 - 93 + 92 1 0 0 diff --git a/MDK-ARM/AUTO_CHASSIS.uvprojx b/MDK-ARM/AUTO_CHASSIS.uvprojx index eee0eb5..8e40444 100644 --- a/MDK-ARM/AUTO_CHASSIS.uvprojx +++ b/MDK-ARM/AUTO_CHASSIS.uvprojx @@ -1208,11 +1208,6 @@ 1 ..\User\task\can_task.c - - nuc_task.c - 1 - ..\User\task\nuc_task.c - error_detect_task.c 1 @@ -1228,6 +1223,67 @@ 1 ..\User\task\up_task.c + + cmd_task.c + 1 + ..\User\task\cmd_task.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + nuc_task.c + 1 + ..\User\task\nuc_task.c + @@ -1238,11 +1294,6 @@ 1 ..\User\Algorithm\filter.c - - cmd_task.c - 1 - ..\User\task\cmd_task.c - ahrs.c 1 @@ -1268,11 +1319,6 @@ 1 ..\User\Algorithm\pid.c - - navi.c - 1 - ..\User\Algorithm\navi.c - diff --git a/MDK-ARM/ELE_CHASSIS/AUTO_CHASSIS.axf b/MDK-ARM/ELE_CHASSIS/AUTO_CHASSIS.axf index 5253c10882025dd78bff6d10ce587778c7de9ce6..669a09dc3eac6868071d2839271ced72a01f4c6f 100644 GIT binary patch delta 142145 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�f+Mb=xO~+#0>*~zF{XDgnT3jmMESP? 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.type== c->ctrl && ctrl->C_cmd.mode== c->mode) return CHASSIS_OK; /*模式未改变直接返回*/ - //此处源代码处做了pid的reset 待添加 - c->ctrl =ctrl->C_cmd.type; - c->mode =ctrl->C_cmd.mode; - - return CHASSIS_OK; -} //设置控制模式 - - -/*该函数用来更新can任务获得的电机反馈值*/ - -int8_t Chassis_UpdateFeedback(Chassis_t *c, const CAN_t *can) { - if (c == NULL) return CHASSIS_ERR_NULL; - if (can == NULL) return CHASSIS_ERR_NULL; - for (uint8_t i = 0; i < 4; i++) - { - c->motorfeedback.rotor_rpm3508[i] = can->motor.motor3508.as_array[i].rotor_speed; - c->motorfeedback.rotor_current3508[i] = can->motor.motor3508.as_array[i].torque_current; - } - - - c->motorfeedback.rotor_pit6020angle = can->motor.pit6020.as_array[0].rotor_ecd; - c->motorfeedback.rotor_pit6020rpm = can->motor.pit6020.as_array[0].rotor_speed; - - c->motorfeedback.rotor_gimbal_yawangle = can->motor.chassis6020.as_array[0].rotor_ecd; - c->motorfeedback.rotor_gimbal_yawrpm = can->motor.chassis6020.as_array[0].rotor_speed; - - c->motorfeedback.rotor_gimbal_pitchangle = can->motor.chassis6020.as_array[1].rotor_ecd; - c->motorfeedback.rotor_gimbal_pitchrpm = can->motor.chassis6020.as_array[1].rotor_speed; - - c->sick_dis[0] = can->sickfed.raw_dis[0]; - c->sick_dis[1] = can->sickfed.raw_dis[1]; - c->sick_dis[2] = can->sickfed.raw_dis[2]; - c->sick_dis[3] = can->sickfed.raw_dis[3]; - - return CHASSIS_OK; -} - - -int8_t Chassis_init(Chassis_t *c,const Chassis_Param_t *param,float target_freq) -{ - if (c == NULL) return CHASSIS_ERR_NULL; - - c->param = param; /*初始化参数 */ - - for(int i =0 ; i < 4 ; i++) - { - 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_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_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)); - - PID_init(&(c->pid.sick_CaliforXPID),PID_POSITION,&(c->param->Sick_CaliXparam)); - - LowPassFilter2p_Init(&(c->filled[0]),target_freq,80.0f); //给角加速度做滤波 - - - LowPassFilter2p_Init(&(c->filled[1]),target_freq,80.0f); //给w 做滤波 - - LowPassFilter2p_Init(&(c->filled[2]),target_freq,80.0f); //给y做滤波 - - LowPassFilter2p_Init(&(c->filled[3]),target_freq,80.0f); //给x 做滤波 - - // - - - return CHASSIS_OK; -} - - -void Chassis_speed_calculate(Chassis_t *c,fp32 Vx,fp32 Vy,fp32 Vw) //底盘逆运动学的解算 -{ - c->hopemotorout.OmniSpeedOut[3] = -Vx+Vy+Vw;//右前 - c->hopemotorout.OmniSpeedOut[0] = -Vx-Vy+Vw;//右后 - c->hopemotorout.OmniSpeedOut[1] = Vx-Vy+Vw;//左后 - c->hopemotorout.OmniSpeedOut[2] = Vx+Vy+Vw;//左前 -} - - -//bool isArrive(fp32 real_pos,fp32 target_pos,fp32 mistake) -//{ -// uint16_t xArrive = 0, yArrive = 0; -// xArrive = abs_float_double(real_pos,target_pos) < mistake ? 1:0; -// yArrive = abs_float_double(real_pos,target_pos) < mistake ? 1:0; -// if(xArrive && yArrive) return true; -// else return false; -//} - - -int8_t Chassis_Control(Chassis_t *c,CMD_t *ctrl,CAN_Output_t *out) -{ - if(c ==NULL) return CHASSIS_ERR_NULL; - if(ctrl ==NULL) return CHASSIS_ERR_NULL; - - - Chassis_SetCtrl(c,ctrl); - - //此处对imu加滤波做修正 - c->pos088.bmi088.filtered_gyro.z =LowPassFilter2p_Apply(&(c->filled[0]),c->pos088.bmi088.gyro.z); - - switch (c->ctrl) - { - case RC: - -/* - 在cmd里对数据进行处理 包括方向和油门 - 6000为全向轮的倍率,遥控器坐标系和机器人坐标系不同*/ - c->move_vec.Vw = ctrl->Vw*6000; - c->move_vec.Vx = -ctrl->Vy*6000; - c->move_vec.Vy = ctrl->Vx*6000; - if(c->mode == RC_MODE1 ){ - } - - - break; - - 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); - - if(ctrl->status[5] ==1) - { - c->move_vec.Vw = c->move_vec.Vw * 0.8f; - c->move_vec.Vx = c->move_vec.Vx * 0.5f; - c->move_vec.Vy = c->move_vec.Vy * 0.5f; - } - - break; - - } -/*怎么用*/ - switch (c->mode) - { - case RELAXED: - c->move_vec.Vx =0; - c->move_vec.Vy =0; - c->move_vec.Vw =0; - break; - case NORMAL: - break; - - case GYRO_STAY://陀螺仪yaw修正 - c->move_vec.Vw = c->move_vec.Vw +c->pos088.bmi088.gyro.z *2000; - break; - -} - - //电机速度限幅 - -// 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); - Chassis_speed_calculate(c,c->move_vec.Vx,c->move_vec.Vy,c->move_vec.Vw); - - - for (uint8_t i = 0 ; i <4 ; i++) - { - c->final_out.final_3508out[i] = PID_calc(&(c->pid.chassis_3508VecPID[i]),c->motorfeedback.rotor_rpm3508[i],c->hopemotorout.OmniSpeedOut[i]); - - out->motor3508.as_array[i] = c->final_out.final_3508out[i]; - } - - -// c->vofa_send[0]=c->pos088.bmi088.gyro.x; -// c->vofa_send[1]=c->pos088.bmi088.gyro.y; -// c->vofa_send[2]=c->pos088.bmi088.gyro.z; -// c->vofa_send[3]=c->pos088.bmi088.accl.x; -// c->vofa_send[4]=c->pos088.bmi088.accl.y; -// c->vofa_send[5]=c->pos088.bmi088.accl.z; - - return CHASSIS_OK; - -} - - - - diff --git a/User/Module/Chassis.h b/User/Module/Chassis.h deleted file mode 100644 index d3f15ad..0000000 --- a/User/Module/Chassis.h +++ /dev/null @@ -1,232 +0,0 @@ -#ifndef CHASSIS_H - -/** - * @brief 底盘控制类头文件 - * - * 本头文件定义了底盘控制类的接口和数据结构,用于控制车辆的底盘。 - * - * @param ChassisImu_t 底盘的 IMU 数据结构体 - * @param ops_t 操作数据结构体 - * @param Chassis_t 底盘数据结构体 - * - * @brief 底盘控制类的功能包括: - * 速度控制 - * 方向控制 - * PID 控制 - * 速度和方向的综合控制 - * - * @attention PID 控制器的配置需要在 config 文件中设置 - * - */ - - -#define CHASSIS_H - -#include "struct_typedef.h" -#include "pid.h" -#include "bmi088.h" -#include "map.h" -#include "user_math.h" -#include "ahrs.h" -#include "can_use.h" -#include "cmd.h" -#include "filter.h" -#include "Action.h" - -#define CHASSIS_OK (0) -#define CHASSIS_ERR (-1) -#define CHASSIS_ERR_NULL (-2) -#define CHASSIS_ERR_MODE (-3) /*CMD_ChassisMode_t */ -#define CHASSIS_ERR_TYPE (-4) /*Chassis_Type_t */ - -//m3508的电机转速转换为底盘的实际速度 -#define M3508_MOTOR_RPM_TO_VECTOR 0.0008809748903494517209f - - -#define M6020_MOTOR_RPM_TO_VECTOR 0.003664f -#define PI 3.1415926535f - -typedef struct { - - BMI088_t bmi088; - - /*可通过该枚举类型来决定Imu的数据量纲*/ - enum { - IMU_DEGREE,//角度值(0-360) - IMU_RADIAN//弧度制(0-2pi) - }angle_mode; - - AHRS_Eulr_t imu_eulr;//解算后存放欧拉角(弧度制) -}ChassisImu_t; - -/*底盘的类型*/ -typedef enum { - CHASSIS_TYPE_MECANUM, /* 麦轮 */ - CHASSIS_TYPE_OMNI_CROSS, /* 全向轮*/ - CHASSIS_TYPE_AGV, /* AGV舵轮 */ -} Chassis_Type_e; - -/*底盘的电机轮组*/ -typedef enum { - DJI_M3508, - DJI_G6020, - AGV_Group, -}Chassis_Motortype_e; - - -/* 该结构体用于存取固定的一些参数 在config.c中更改后不再变化 */ -typedef struct -{ - Chassis_Type_e chassis_type; /* */ - Chassis_Motortype_e motor_type; /**/ - - - /*该部分决定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 NaviVx_param; - pid_param_t NaviVy_param; - pid_param_t NaviVw_param; - pid_param_t Sick_CaliYparam; - pid_param_t Sick_CaliXparam; - - - -}Chassis_Param_t; - - -/*该结构体用于底盘的期望运动向量*/ -typedef struct -{ - fp32 Vx; - fp32 Vy; - fp32 Vw; - fp32 mul;//油门倍率 -}ChassisMove_Vec; - - -/** - * @brief - * - */ -typedef struct{ - - uint8_t chassis_task_run; //线程的运行 - - const Chassis_Param_t *param; //一些固定的参数 - - ChassisImu_t pos088; //088的实时姿态 - Action_POS_t Action_pos; - CMD_Chassis_CtrlType_e ctrl; - CMD_Chassis_mode_e mode; - - ChassisMove_Vec move_vec; //由控制任务决定 - - struct{ - - fp32 rotor_rpm3508[4]; - fp32 rotor_current3508[4]; - - fp32 rotor_pit6020angle; - fp32 rotor_pit6020rpm; - - fp32 rotor_gimbal_yawangle; - fp32 rotor_gimbal_yawrpm; - - fp32 rotor_gimbal_pitchangle; - fp32 rotor_gimbal_pitchrpm; - - }motorfeedback; - - - /*期望的底盘输出值*/ - struct{ - fp32 OmniSpeedOut[4]; - - }hopemotorout; - - - /*经PID计算后的实际发送给电机的实时输出值*/ - struct - { - fp32 final_3508out[4]; - fp32 final_pitchout; - fp32 final_gimbal_yawout; - fp32 final_gimbal_pitchout; - - }final_out; - - 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 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]; - - LowPassFilter2p_t filled[6]; /* 输出滤波器滤波器数组 */ - - - int32_t sick_dis[4]; //获取到的sick激光值 - - - -}Chassis_t; - -/** - * @brief - * - * @param c - * @param param - * @param mech_zero - * @param wheelPolar - * @return - */ - int8_t Chassis_init(Chassis_t *c,const Chassis_Param_t *param,float target_freq); - - -/** - * \brief - - */ -int8_t Chassis_UpdateFeedback(Chassis_t *c, const CAN_t *can); - - -/** - * \brief - - */ -int8_t Chassis_Control(Chassis_t *c,CMD_t *ctrl,CAN_Output_t *out); - - - - - - -/// @brief -/// @param c -void vesc_current_detection(Chassis_t *c); -#endif diff --git a/User/Module/config.h b/User/Module/config.h index dd2b1aa..324fd11 100644 --- a/User/Module/config.h +++ b/User/Module/config.h @@ -1,14 +1,12 @@ #ifndef _CONFIG_H #define _CONFIG_H -#include "Chassis.h" #include "can_use.h" #include "ahrs.h" #include "map.h" #include "up.h" typedef struct{ -Chassis_Param_t chassis; /**/ UP_Param_t up; CAN_Params_t can; AHRS_Eulr_t mech_zero[4]; diff --git a/User/Module/up.c b/User/Module/up.c index 70c51ce..9c35bbd 100644 --- a/User/Module/up.c +++ b/User/Module/up.c @@ -4,102 +4,158 @@ #include "bsp_buzzer.h" #include "bsp_delay.h" -#define GEAR_RATIO (36) // 2006减速比 +#define GEAR_RATIO_2006 (36) // 2006减速比 +#define GEAR_RATIO_3508 (19) + #define CAN_MOTOR_ENC_RES 8191 // 编码器分辨率 -#define MOTOR2006_ECD_TO_ANGLE (360.0 / 8191.0 / (GEAR_RATIO)) //2006编码值转轴角度 +#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编码值转轴角度 + + + + + int8_t up_init(UP_t *u,const UP_Param_t *param,float target_freq) { - u->param = param; /*初始化参数 */ - + u->param = param; /*初始化参数 */ + /*go电机初始化*/ GO_M8010_init(); + /*pid初始化*/ PID_init (&u->pid.VESC_5065_M1 ,PID_POSITION ,&(u->param ->VESC_5065_M1_param )); PID_init (&u->pid.VESC_5065_M2 ,PID_POSITION ,&(u->param ->VESC_5065_M2_param )); PID_init (&u->pid .M2006_angle ,PID_POSITION ,&(u->param->M2006_angle_param )); PID_init (&u->pid .M2006_speed ,PID_POSITION ,&(u->param->M2006_speed_param )); + PID_init (&u->pid .M3508_angle ,PID_POSITION ,&(u->param->M3508_angle_param )); + PID_init (&u->pid .M3508_speed ,PID_POSITION ,&(u->param->M3508_speed_param )); + PID_init (&u->pid .GM6020_speed,PID_POSITION ,&(u->param ->UP_GM6020_speed_param )); PID_init (&u->pid .GM6020_angle,PID_POSITION ,&(u->param ->UP_GM6020_angle_param )); - - u->M2006 .motor =M2006 ; - u->M3508 .motor =M3508 ; - - for(int i=0;i<3;i++){ - PID_init (&u->pid .M3508_speed[i] ,PID_POSITION ,&(u->param ->M3508_speed_param )); - } - - for(int i=0;i<2;i++){ //go初始位置设置为0 - u->GO_motor_info[i] = getGoPoint(i); + + + 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 ); } + + /**/ + + u->state .Dribble_flag =Not_started_dri; + u->state. Pitch_flag=Not_started_Pit; + u->state .last_state = Not_started_dri; + } - -int8_t UP_UpdateFeedback(UP_t *u, const CAN_t *can) { - - u->motorfeedback .M2006_angle=can ->motor .motor3508 .as_array [0].rotor_ecd ; - u->motorfeedback .M2006_rpm =can ->motor .motor3508 . as_array [0].rotor_speed ; +/*can,上层状态更新*/ +int8_t UP_UpdateFeedback(UP_t *u, const CAN_t *can, CMD_t *c) { + for(int i=0;i<2;i++){ //go初始位置设置为0 + u->motorfeedback .GO_motor_info [i] = getGoPoint(i); + } + u->motorfeedback .M2006 .motor =M2006; + u->motorfeedback .M3508 .motor =M3508; + u->motorfeedback .VESC_5065_M1_rpm =can ->motor .chassis5065 .as_array [0].rotor_speed ; u->motorfeedback .VESC_5065_M2_rpm =can ->motor .chassis5065 .as_array [1].rotor_speed ; u->motorfeedback .rotor_pit6020ecd =can ->motor .chassis6020.as_array [2].rotor_ecd ; u->motorfeedback .rotor_pit6020rpm =can ->motor .chassis6020.as_array [2].rotor_speed ; - for(int i=0;i<3;i++){ - u->motorfeedback .M3508_speed[i] =can ->motor .motor3508 .as_array [i+1].rotor_speed ; + + for(int i=0;i<4;i++){ + u->motorfeedback .M3508_rpm[i] =can ->motor .motor3508 .as_array [i].rotor_speed ; + u->motorfeedback .M3508_angle [i]=can ->motor .motor3508 .as_array [i].rotor_ecd ; } + + u->cmd =c; + + return 0; } - int8_t cnt=0; -/*上层电机控制*/ -int8_t UP_angle(UP_t *u, fp32 target_angle) { + +/*上层电机控制,使用can1的id1和2*/ +int8_t UP_angle_control(UP_t *u, fp32 target_angle,MotorType_t motor) { // 获取当前编码器角度 - -// switch (u->) - float angle = u->motorfeedback.M2006_angle; - // 初始化阶段:前50次循环记录初始值 - if (u->M2006.init_cnt < 50) { - u->M2006.orig_angle = angle; // 记录初始编码器值 - u->M2006.last_angle = angle; + int8_t cnt=0; + fp32 angle ,delta; + + switch(motor) + { + case M2006 : + angle = u->motorfeedback.M3508_angle[0]; + if (u->motorfeedback .M2006 .init_cnt < 50) { + u->motorfeedback .M2006.orig_angle = angle; // 记录初始编码器值 + u->motorfeedback .M2006.last_angle = angle; - u->M2006.init_cnt++; // 初始化计数器递增 + u->motorfeedback .M2006.init_cnt++; // 初始化计数器递增 return 0; } - - - float delta = angle - u->M2006.last_angle; + + delta = angle - u->motorfeedback .M2006.last_angle; + delta = angle - u->motorfeedback .M2006.last_angle; if (delta > 4096) { - u->M2006.round_cnt--; // 逆时针跨圈 + u->motorfeedback .M2006.round_cnt--; // 逆时针跨圈 } else if (delta < -4096) { - u->M2006.round_cnt++; // 顺时针跨圈 + u->motorfeedback .M2006.round_cnt++; // 顺时针跨圈 } - - u->M2006.last_angle = angle; - - // 计算总角度 - float total_angle = (u->M2006.round_cnt * 8191 + (angle - u->M2006.orig_angle)) * MOTOR2006_ECD_TO_ANGLE; - u->M2006 .total_angle =total_angle; + u->motorfeedback.M2006.last_angle = angle; + // 计算总角度 + float total_angle = (u->motorfeedback.M2006 .round_cnt * 8191 + (angle - u->motorfeedback.M2006.orig_angle)) * MOTOR2006_ECD_TO_ANGLE; + u->motorfeedback.M2006.total_angle =total_angle; float delta_angle = PID_calc(&u->pid.M2006_angle, total_angle, target_angle); - float delta_speed = PID_calc(&u->pid.M2006_speed, u->motorfeedback.M2006_rpm, delta_angle); + float delta_speed = PID_calc(&u->pid.M2006_speed, u->motorfeedback.M3508_rpm [0], delta_angle); u->motor_target.M2006_angle = target_angle; - u->final_out .final_2006out =delta_speed; + u->final_out .final_3508out [0] =delta_speed; + + break ; + + case M3508 : + + angle = u->motorfeedback.M3508_angle[1]; + if (u->motorfeedback .M3508 .init_cnt < 50) { + u->motorfeedback .M3508.orig_angle = angle; // 记录初始编码器值 + u->motorfeedback .M3508.last_angle = angle; + + u->motorfeedback .M3508.init_cnt++; // 初始化计数器递增 + return 0; + } + + delta = angle - u->motorfeedback .M3508.last_angle; + delta = angle - u->motorfeedback .M3508.last_angle; + if (delta > 4096) { + u->motorfeedback .M3508.round_cnt--; // 逆时针跨圈 + } else if (delta < -4096) { + u->motorfeedback .M3508.round_cnt++; // 顺时针跨圈 + } + u->motorfeedback.M3508.last_angle = angle; + // 计算总角度 + total_angle = (u->motorfeedback.M3508 .round_cnt * 8191 + (angle - u->motorfeedback.M3508.orig_angle)) * MOTOR2006_ECD_TO_ANGLE; + u->motorfeedback.M3508.total_angle =total_angle; + delta_angle = PID_calc(&u->pid.M3508_angle , total_angle, target_angle); + delta_speed = PID_calc(&u->pid.M3508_speed , u->motorfeedback.M3508_rpm [1], delta_angle); + + u->motor_target.M3508_angle = target_angle; + u->final_out .final_3508out[1] =delta_speed; + + break ; + + } return 0; } -int8_t UP_M3508_speed(UP_t *u,fp32 speed) -{ - u->motor_target .M3508_speed =speed; - for(int i=0;i<3;i++){ - u->final_out .final_3508out [i] = - PID_calc (&(u->pid .M3508_speed[i] ),u->motorfeedback .M3508_speed [i],speed ); - } - -} +//int8_t UP_M3508_speed(UP_t *u,fp32 speed) +//{ +// u->motor_target .M3508_speed [] =speed; +// for(int i=0;i<3;i++){ +// u->final_out .final_3508out [i] = +// PID_calc (&(u->pid .M3508_speed[i] ),u->motorfeedback .M3508_speed [i],speed ); +// } +// +//} int8_t VESC_M5065_Control(UP_t *u,fp32 speed) @@ -107,16 +163,17 @@ int8_t VESC_M5065_Control(UP_t *u,fp32 speed) u->motor_target .VESC_5065_M1_rpm =speed; u->motor_target .VESC_5065_M2_rpm =speed; - u->final_out .final_VESC_5065_M1out =u->motor_target .VESC_5065_M1_rpm; - u->final_out .final_VESC_5065_M2out =-u->motor_target .VESC_5065_M2_rpm; + u->final_out .final_VESC_5065_M1out =-u->motor_target .VESC_5065_M1_rpm; + u->final_out .final_VESC_5065_M2out =u->motor_target .VESC_5065_M2_rpm; } + int8_t GM6020_control(UP_t *u,fp32 angle) { fp32 delat_speed; - Clip(&angle,90,270); +// Clip(&angle,90,270); delat_speed = PID_calc (&(u->pid .GM6020_angle ),u->motorfeedback .rotor_pit6020ecd ,(angle /360*8191)); @@ -124,6 +181,7 @@ int8_t GM6020_control(UP_t *u,fp32 angle) PID_calc (&(u->pid .GM6020_speed ),u->motorfeedback.rotor_pit6020rpm ,delat_speed); u->motor_target .rotor_pit6020angle =angle ; } + /*go电机控制*/ int8_t GO_SendData(UP_t *u,int id,float pos) { @@ -133,35 +191,148 @@ int8_t GO_SendData(UP_t *u,int id,float pos) } + int8_t ALL_Motor_Control(UP_t *u,CAN_Output_t *out) { //电机控制 ,传进can - out ->motor3508 .as_array [0]=u->final_out .final_2006out ; - for(int i=1;i<4;i++){ - out ->motor3508 .as_array[i]=u->final_out.final_3508out [i-1] ; + UP_angle_control(u,u->motor_target .M2006_angle ,M2006); + UP_angle_control(u,u->motor_target .M3508_angle ,M3508 ); + + + + GO_SendData(u,0 ,u->motor_target .go_shoot ); + GO_SendData(u,1 ,u->motor_target .go_spin); + + + for(int i=0;i<4;i++){ + out ->motor3508 .as_array[i]=u->final_out.final_3508out [i] ; } - out ->chassis5065 .erpm [0]=u->final_out .final_VESC_5065_M1out ; - out ->chassis5065 .erpm [1]=u->final_out .final_VESC_5065_M2out ; - + out ->chassis5065 .erpm [0]= u->final_out .final_VESC_5065_M1out ; + out ->chassis5065 .erpm [1]= -u->final_out .final_VESC_5065_M2out ; out ->chassis6020 .as_array [2]=u->final_out .final_pitchout ; + + } -int8_t UP_control(UP_t *u,CAN_Output_t *out) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +int8_t UP_control(UP_t *u,CAN_Output_t *out,CMD_t *c) { -// if(u ==NULL) return 0; -// if(u ==NULL) return 0; -// UP_M2006_angle(u,2500); - switch (u->ctrl) + + if(u ==NULL) return 0; + if(u ==NULL) return 0; + + switch (c->CMD_CtrlType ) { - case STATE_IDLE : break ; - case STATE_PRE_DRIBBLE : break ; - case STATE_POST_DRIBBLE : break ; - case STATE_PRE_LAUNCH : break ; - case STATE_POST_LAUNCH : break ; + case UP_RCcontrol: //在手动模式下 + + switch (c->CMD_UP_mode ) + { + + case Normal : + + u->state .Pitch_flag =Not_started_Pit; + u->state .last_state = Not_started_Pit; + + u->motor_target .go_shoot =0; + u->motor_target .M2006_angle =-140; + + break; + + case Pitch_pull : + if(u->state .last_state == Not_started_Pit) + { + + u->motor_target .go_shoot =-300; + u->motor_target .M2006_angle =-140; + + if(u->motorfeedback .GO_motor_info[0]->Pos < (-4.8)) //到达位置后再扣扳机 + { + u->motor_target .M2006_angle =0; + 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; + + } + + } + } + + break ; + case Pitch_shoot : + if (u->state .last_state == Launch_Ready) + { + + u->motor_target .M2006_angle =-140; + u->state .Pitch_flag = Done_Pit ; + u->state .last_state = Done_Pit; + + } + { + + } + break; + + + + } + break; + + case MID_NAVI : + { + } + break ; + + case PICK_t : + { + } + + + break; + + default: + break; } + + + + + + } + + diff --git a/User/Module/up.h b/User/Module/up.h index afc21a6..6630a7b 100644 --- a/User/Module/up.h +++ b/User/Module/up.h @@ -5,26 +5,47 @@ #include "struct_typedef.h" #include "pid.h" #include "bmi088.h" -#include "map.h" #include "user_math.h" #include "ahrs.h" #include "can_use.h" #include "cmd.h" #include "filter.h" -#include "Action.h" -#include "chassis.h" #include "vofa.h" #include "GO_M8010_6_Driver.h" - -typedef enum { - STATE_IDLE, // 空闲状态 - STATE_PRE_DRIBBLE, // 运球前 - STATE_POST_DRIBBLE, // 运球后 - STATE_PRE_LAUNCH, // 发射前 - STATE_POST_LAUNCH // 发射后 -} OperationState; +#include "bsp_usart.h" + +typedef enum +{ + Not_started_Pit=0,//未开始 + Launch_Ready=1, //准备发射 + Launch_complete=2,//发射完成 + Done_Pit=3 //已完成 + +}Pitch_flag_t; + +typedef enum{ + + Not_started_dri=0,//未开始 + No_ball =1, //抓上无球 + Have_ball_F=2, //刚开始有球 + Have_ball_S=3, //中途有球 + Done_dri =4 //已完成 + +}Dribble_flag_t; + +/*运行控制中的控制*/ +typedef struct{ + + /*投球过程*/ + Pitch_flag_t Pitch_flag; + /*运球过程*/ + Dribble_flag_t Dribble_flag; + + int last_state; + +} Oper_control_state_t; typedef struct { @@ -52,17 +73,18 @@ typedef struct { float K_W; }GO_param_t; - +/*角度环控制电机类型*/ typedef enum { M2006 = 1, M3508 + } MotorType_t; typedef struct { - /*该部分决定PID的参数整定在config中修改*/ + pid_param_t VESC_5065_M1_param; pid_param_t VESC_5065_M2_param; @@ -73,6 +95,8 @@ typedef struct pid_param_t M2006_angle_param; pid_param_t M3508_speed_param; + pid_param_t M3508_angle_param; + GO_param_t go_param; }UP_Param_t; @@ -80,6 +104,7 @@ typedef struct typedef struct { MotorType_t motor; + float orig_angle; float last_angle; int32_t round_cnt; @@ -93,26 +118,30 @@ typedef struct{ uint8_t up_task_run; const UP_Param_t *param; - UP_Imu_t pos088; - OperationState ctrl; - motor_angle_data M2006; - motor_angle_data M3508; - GO_Motorfield *GO_motor_info[GO_NUM];//存放go电机数据 - - struct{ - + UP_Imu_t pos088; + + /*控制及状态*/ + CMD_t *cmd; + Oper_control_state_t state;//上层机构的运行状态 + + struct{ fp32 rotor_pit6020ecd; fp32 rotor_pit6020rpm; fp32 VESC_5065_M1_rpm; fp32 VESC_5065_M2_rpm; - fp32 M2006_rpm; - fp32 M2006_angle; + motor_angle_data M2006; + motor_angle_data M3508; - fp32 M3508_speed[3]; + GO_Motorfield *GO_motor_info[GO_NUM];//存放go电机数据 + fp32 M3508_angle[4]; + fp32 M3508_rpm [4]; + + int flag; + }motorfeedback; @@ -125,7 +154,10 @@ typedef struct{ fp32 VESC_5065_M2_rpm; fp32 M2006_angle; - fp32 M3508_speed; + fp32 M3508_angle; + + fp32 go_shoot; + fp32 go_spin; }motor_target; @@ -133,33 +165,35 @@ typedef struct{ pid_type_def GM6020_speed; pid_type_def GM6020_angle; + pid_type_def VESC_5065_M1; pid_type_def VESC_5065_M2; + pid_type_def M2006_angle; pid_type_def M2006_speed; - pid_type_def M3508_speed[3]; + + pid_type_def M3508_angle; + pid_type_def M3508_speed; }pid; - - - /*经PID计算后的实际发送给电机的实时输出值*/ struct { - fp32 final_2006out; - fp32 final_3508out[3]; + fp32 final_3508out[4]; fp32 final_pitchout; fp32 final_VESC_5065_M1out; fp32 final_VESC_5065_M2out; + }final_out; LowPassFilter2p_t filled[6]; /* 输出滤波器滤波器数组 */ fp32 vofa_send[8]; + } UP_t; @@ -167,12 +201,12 @@ typedef struct{ int8_t up_init(UP_t *u,const UP_Param_t *param,float target_freq); -int8_t UP_UpdateFeedback(UP_t *u, const CAN_t *can) ; +int8_t UP_UpdateFeedback(UP_t *u, const CAN_t *can, CMD_t *c) ; int8_t GM6020_control(UP_t *u,fp32 angle); int8_t VESC_M5065_Control(UP_t *u,fp32 speed); int8_t GO_SendData(UP_t *u,int id,float pos); -int8_t UP_angle(UP_t *u, fp32 target_angle) ; -int8_t UP_control(UP_t *u,CAN_Output_t *out); +int8_t UP_angle_control(UP_t *u, fp32 target_angle,MotorType_t motor); +int8_t UP_control(UP_t *u,CAN_Output_t *out,CMD_t *c); 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); diff --git a/User/device/Action.c b/User/device/Action.c deleted file mode 100644 index 0277d8a..0000000 --- a/User/device/Action.c +++ /dev/null @@ -1,203 +0,0 @@ - -/** - * 东北大学ACTION码盘驱动 - * - * 本驱动采用ops_9定位系统,负责收发码盘的原始数据,并在任务中解析出相应的位置坐标。 - * 解析后的位置坐标将被交给导航处理模块,生成期望的运动向量。 - * - * 使用手册: - * 请参阅相关文档了解如何使用本驱动。 - * - * 注意: - * 本驱动仅适用于东北大学ACTION码盘。 - - *删去Action_HandleOffline错误处理函数中对结构体清0的函数 - - */ - -/* Includes ----------------------------------------------------------------- */ -#include "tim.h" -#include "Action.h" -#include - -static osThreadId_t thread_alert; - - -uint8_t rxbuf[RS232_FRAME_LENGTH]; - -static void Ops10msTimerCallback(void *arg){ - (void)arg; - osThreadFlagsSet(thread_alert,SIGNAL_OPSTIMER_REDY); -} - -/* Private function -------------------------------------------------------- */ -static void ACTION_IdleCallback(void) { - osThreadFlagsSet(thread_alert,SIGNAL_ACTION_RAW_REDY); -} - -/* Exported functions ------------------------------------------------------- */ -int8_t ACTIONRECV_Init(Action_POS_t *pos){ - if(pos == NULL) return DEVICE_ERR_NULL; - - pos->Action_ready =0;//码盘校准标志位初始化 - - if((thread_alert = osThreadGetId()) == NULL ) return DEVICE_ERR_NULL; - pos->action_timer_Id = - osTimerNew(Ops10msTimerCallback, osTimerPeriodic,NULL,NULL); - - osTimerStart(pos->action_timer_Id,10);//此处ticks 理解为1个tick为1ms 此处为每10ms触发一次回调函数 - - BSP_UART_RegisterCallback(BSP_UART_ACTION,BSP_UART_IDLE_LINE_CB, - ACTION_IdleCallback); - - return DEVICE_OK; -} - -int8_t ACTION_StartReceiving() { - if (HAL_UARTEx_ReceiveToIdle_DMA(BSP_UART_GetHandle(BSP_UART_ACTION), - (uint8_t *)rxbuf, - sizeof(rxbuf)) == HAL_OK) - return DEVICE_OK; - return DEVICE_ERR; -} - -bool_t ACTION_WaitDmaCplt(void) { - return(osThreadFlagsWait(SIGNAL_ACTION_RAW_REDY, osFlagsWaitAll,400) == - SIGNAL_ACTION_RAW_REDY); -} - - -/* * - - -*/ -int8_t ACTION_Parse(Action_POS_t *pos) -{ - if (pos == NULL) return DEVICE_ERR_NULL; - - static union - { - fp32 pos_data[3]; - char rxbuff[12]; - } pos_rxbuf; - - - if (rxbuf[0] == 0x0D && rxbuf[1] == 0x0A) - { - if (rxbuf[26] == 0x0A && rxbuf[27] == 0x0D) - { - - pos_rxbuf.rxbuff[0]=rxbuf[2]; - pos_rxbuf.rxbuff[1]=rxbuf[3]; - pos_rxbuf.rxbuff[2]=rxbuf[4]; - pos_rxbuf.rxbuff[3]=rxbuf[5]; - - - pos_rxbuf.rxbuff[4]=rxbuf[14]; - pos_rxbuf.rxbuff[5]=rxbuf[15]; - pos_rxbuf.rxbuff[6]=rxbuf[16]; - pos_rxbuf.rxbuff[7]=rxbuf[17]; - - - pos_rxbuf.rxbuff[8]=rxbuf[18]; - pos_rxbuf.rxbuff[9]=rxbuf[19]; - pos_rxbuf.rxbuff[10]=rxbuf[20]; - pos_rxbuf.rxbuff[11]=rxbuf[21]; - - - - // 数据解析 - pos->pos_yaw = pos_rxbuf.pos_data[0]; - // 按照安装方向决定正负号 - pos->pos_x = pos_rxbuf.pos_data[1]; - pos->pos_y = pos_rxbuf.pos_data[2]; - - pos ->Action_ready =1;//码盘校准完成 - } - } - else - { - return -1; - } - return DEVICE_OK; -} - -//该函数用来计算速度(利用获取的位置来计算相应的速度) -//此处获取的是真实的位置(mm)后每10ms做一次微分处理 -int8_t ACTION_DataRefresh(Action_POS_t *pos){ - if (pos == NULL) return DEVICE_ERR_NULL; - - if (osThreadFlagsGet() & SIGNAL_OPSTIMER_REDY){ - osThreadFlagsClear(SIGNAL_OPSTIMER_REDY); - //计算每毫秒的速度 该函数每10ms调用 - pos->pos_Vx = (pos->pos_x - pos->pos_lastX) / 10; - pos->pos_Vy = (pos->pos_y - pos->pos_lastY) / 10; - - pos->pos_lastX = pos->pos_x; - pos->pos_lastY = pos->pos_y; - } - return DEVICE_OK; -} - - - -int8_t Action_HandleOffline(Action_POS_t *pos) { - if (pos == NULL) return DEVICE_ERR_NULL; - - (void)pos; - -// memset(pos, 0, sizeof(*pos)); - return 0; -} - -/* 将字符串拼接 */ -void Strcat(char str1[], char str2[], uint8_t num) -{ - int i = 0, j = 0; - - while (str1[i] != '\0') - i++; - - for (j = 0; j < num; j++) - { - str1[i++] = str2[j]; - } -} - -/* 该部分函数用于码盘的重定位系统 */ -/* ----------------------------- */ - -/* 手动标定,用于校正 */ -void ACT_Calibration(void) -{ - HAL_UART_Transmit(&huart1, (uint8_t *)"ACTR", 4, 100); -} - -/* 清零 */ -/* 将当前位置设置为 (0, 0) */ -void ACT_ZeroClear(void) -{ - HAL_UART_Transmit(&huart1, (uint8_t *)"ACT0", 4, 100); -} - -/* 更新 XY 坐标 */ -/* 将当前位置更新为指定的 X 和 Y */ -void ACT_UpdateXY(float pos_x, float pos_y) -{ - char update_xy[12] = "ACTD"; // 命令前缀为 "ACTD" - static union - { - float XY[2]; // 两个浮点数表示 X 和 Y 坐标 - char data[8]; // 将浮点数视为字节数据 - } set; - - set.XY[0] = pos_x; - set.XY[1] = pos_y; - - Strcat(update_xy, set.data, 8); - - HAL_UART_Transmit(&huart1, (uint8_t *)update_xy, sizeof(update_xy), 100); -} - - - diff --git a/User/device/Action.h b/User/device/Action.h deleted file mode 100644 index c0b8186..0000000 --- a/User/device/Action.h +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef _ACTION_H_ -#define _ACTION_H_ - -#define RS232_FRAME_LENGTH 28u -#define REF_LEN_RX_BUFF 0xFF - -#include -#include "device.h" -#include "bsp_usart.h" -#include "cmd.h" - - -typedef struct -{ - osTimerId_t action_timer_Id; - /*原始数据*/ - fp32 pos_x; - fp32 pos_y; - fp32 pos_yaw; // 航向角速度 - /*处理数据*/ - fp32 pos_Vx; - fp32 pos_Vy; - fp32 pos_lastX; - fp32 pos_lastY; - - int Action_ready;//码盘校准标志位 - - -}Action_POS_t; - - - - - -int8_t ACTIONRECV_Init(Action_POS_t*pos); - -int8_t ACTION_StartReceiving(void); - -bool_t ACTION_WaitDmaCplt(void); - -int8_t ACTION_Parse(Action_POS_t*pos); - -int8_t ACTION_DataRefresh(Action_POS_t*pos); - -int8_t Action_HandleOffline(Action_POS_t *pos); - -void ACT_UpdateXY(float pos_x,float pos_y); - -void ACT_ZeroClear(void); - - - - - - - - -#endif - diff --git a/User/device/GO_M8010_6_Driver.h b/User/device/GO_M8010_6_Driver.h index 265e862..b4bab93 100644 --- a/User/device/GO_M8010_6_Driver.h +++ b/User/device/GO_M8010_6_Driver.h @@ -8,6 +8,7 @@ extern "C"{ #include "usart.h" #include "string.h" #include +#include "user_math.h" #define GO_NUM 2 /** * @brief @@ -62,7 +63,8 @@ typedef struct { float tar_w; float T; float W; - float Pos; + float Pos; + int footForce; uint8_t buffer[17]; uint8_t Rec_buffer[16]; diff --git a/User/device/cmd.c b/User/device/cmd.c index 997135f..3e0fbad 100644 --- a/User/device/cmd.c +++ b/User/device/cmd.c @@ -8,79 +8,32 @@ /* Includes ----------------------------------------------------------------- */ #include "cmd.h" #include "gpio.h" - + #include /* Private function -------------------------------------------------------- */ /*Export function --------------------------------------------------------------*/ -int8_t CMD_Init(CMD_t *cmd){ - /*若主结构体为空 自动返回错误 */ - if(cmd == NULL) return-1; - /**/ - cmd->C_cmd.type =RC; - cmd->C_cmd.mode =NORMAL; - -return 0; -} - - -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->Vw = rc->ch_l_x; - - cmd->poscamear = rc->ch_l_y; - - cmd->key_ctrl_l = rc->sw_l; - cmd->key_ctrl_r = rc->sw_r ; - -} - - - -/** - * @brief rc失控时机器人恢复放松模式 - * - * @param cmd 主结构体 - */ -static void CMD_RcLostLogic(CMD_t *cmd){ - /* 机器人底盘运行模式恢复至放松模式 */ - cmd->C_cmd.mode = RELAXED; -} -int8_t CMD_ParseRc(CMD_t *cmd,CMD_RC_t *rc){ - if (cmd == NULL) return -1; - if (rc == NULL) return -1; - /*c当rc丢控时,恢复机器人至默认状态 */ - if ((rc->sw_l == CMD_SW_ERR) || (rc->sw_r == CMD_SW_ERR)) { - CMD_RcLostLogic(cmd); - } else { - CMD_RcLogic(rc, cmd); - } -return 0; -} - +/*nuc数据统一到cmd*/ int8_t CMD_ParseNuc(CMD_t *cmd,CMD_NUC_t *n){ if(cmd == NULL) return -1; if(n == NULL) return -1; - cmd->cmd_status = n->status_fromnuc; - cmd->raw_status = n->ctrl_status; + cmd->NAVI_t .cmd_status = n->status_fromnuc; + cmd->NAVI_t .raw_status = n->ctrl_status; for (int i = 0; i < 7; ++i) { // 从最低位到最高位遍历 - cmd->status[i] = ((cmd->raw_status) & (1 << i)) ? 1 : 0; + cmd->NAVI_t .status[i] = ((cmd->NAVI_t .raw_status) & (1 << i)) ? 1 : 0; } - switch(cmd->cmd_status){ + switch(cmd->NAVI_t .cmd_status){ + + case PICK : + cmd ->NAVI_t .pick .posx =n->pick .posx ; + cmd ->NAVI_t .pick .posy =n->pick .posy ; + cmd ->NAVI_t .pick .posw =n->pick .posw ; - case MID: - cmd->C_navi.vx = n->navi.vx; - cmd->C_navi.vy = n->navi.vy; - cmd->C_navi.wz = n->navi.wz; break; @@ -88,108 +41,40 @@ int8_t CMD_ParseNuc(CMD_t *cmd,CMD_NUC_t *n){ return 0; } - - -/* - 遥控器模式重新分配 - - 这一部分没有设置具体的模式名,后期根据需要修改 - 遥控器模式(RC): - 左按键 --- 右按键 - mode1 - up no_mode - mode2 - - - mode3 - down no_mode - mode4 - - mid auto_navi(0x09)雷达导航 - -*/ -int8_t CMD_CtrlSet(CMD_t *cmd) { +/*遥控器,上下层通用,按键控制,统一到cmd*/ +int8_t CMD_ParseRC(CMD_t *cmd,const CMD_RC_t *rc) { if(cmd == NULL) return -1; - if(cmd->key_ctrl_l == CMD_SW_UP)//当左拨杆打到最上面时 强制使用遥控器控制 - { - /*遥控器模式下,右按键三种状态分配*/ - if(cmd->key_ctrl_r==CMD_SW_UP) - { - cmd->C_cmd.type = RC; - cmd->C_cmd.mode = RC_MODE1; - } - if(cmd->key_ctrl_r==CMD_SW_MID) - { - cmd->C_cmd.type = RC; - cmd->C_cmd.mode = RC_NO_MODE; - } - if(cmd->key_ctrl_r==CMD_SW_DOWN)//遥控器控制模式下,右拨杆上时启动 - { - cmd->C_cmd.type = RC; - cmd->C_cmd.mode =RC_MODE2; - } - - } - else if(cmd->key_ctrl_l ==CMD_SW_DOWN) + if ((rc->sw_l == CMD_SW_ERR) || (rc->sw_r == CMD_SW_ERR)) { + cmd->CMD_CtrlType =RELAXED; + } + else if(rc->sw_l==CMD_SW_UP) { - if(cmd->key_ctrl_r==CMD_SW_UP) - { - cmd->C_cmd.type = RC; - cmd->C_cmd.mode = RC_MODE3; - } - if(cmd->key_ctrl_r==CMD_SW_MID) - { - cmd->C_cmd.type = RC; - cmd->C_cmd.mode = RC_NO_MODE; - } - if(cmd->key_ctrl_r==CMD_SW_DOWN)//遥控器控制模式下,右拨杆上时启动 - { - cmd->C_cmd.type = RC; - cmd->C_cmd.mode = RC_MODE4; - } - + cmd ->CMD_CtrlType =UP_RCcontrol; + if(rc->sw_r ==CMD_SW_UP) cmd ->CMD_UP_mode =Normal; //左上,右上,投篮 + if(rc->sw_r ==CMD_SW_MID) cmd ->CMD_UP_mode =Pitch_pull; //左上,右中,无模式 + if(rc->sw_r ==CMD_SW_DOWN) cmd ->CMD_UP_mode =Pitch_shoot; //左上,右上,投篮 } - else //左按键打到中间,自动模式 - { - if( cmd->key_ctrl_l==CMD_SW_MID ){ - cmd->C_cmd.type = MID_NAVI; - cmd->C_cmd.mode = RC_NO_MODE; - - switch(cmd->cmd_status) -{ - case MID://雷达,视觉导航 - cmd->C_cmd.type = MID_NAVI; - break; - } - } - - } -return 0; -} -//接收码盘导航的返回数据,传入cmd_t结构体 -int8_t CMD_ParseAction(CMD_t *cmd,CMD_ACTION_t *act) -{ - if(cmd == NULL) return -1; - if(act == NULL) return -1; - - if(cmd->key_ctrl_l ==CMD_SW_MID ) + + else if(rc->sw_l==CMD_SW_MID) { - if(cmd->key_ctrl_r == CMD_SW_UP) - act->flag =1; - - if(cmd->key_ctrl_r == CMD_SW_DOWN ) - act->flag =-1; - } - - cmd->C_navi .vx =act ->out .Vx ; - cmd ->C_navi .vy =act ->out .Vy ; - cmd ->C_navi .wz =act ->out .Vw ; + 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; //左中,右上,运球 - - return 0; + } + else if(rc->sw_l==CMD_SW_DOWN) + { + cmd ->CMD_CtrlType =PICK_t; + if(rc->sw_r ==CMD_SW_UP) cmd ->CMD_UP_mode =Normal; //左下,右上,投篮 + if(rc->sw_r ==CMD_SW_MID) cmd ->CMD_UP_mode =Normal; //左下,右中,无模式 + if(rc->sw_r ==CMD_SW_DOWN) cmd ->CMD_UP_mode =Normal; //左下,右上,投篮 + } + + return 0; } + diff --git a/User/device/cmd.h b/User/device/cmd.h index a412f6e..8f064b1 100644 --- a/User/device/cmd.h +++ b/User/device/cmd.h @@ -1,19 +1,3 @@ -/* - -该任务用于接收来自各个不同的控制方式所期望的控制指令 将其集中统一化后分发给各个模块 - -*/ - - -/* - 按键控制逻辑 - RC模式,左按键打到最上,右按键启用,中间无状态,上下各代表模式1、模式2 - 雷达导航,左按键打到中间,右按键禁用 - 左按键打到下面,保留,未启用 - -*/ - - #ifndef _CMD_H @@ -23,38 +7,45 @@ #define MID (0x09) +#define PICK (0x06) typedef enum{ - RC,//遥控器控制,左按键上 + UP_RCcontrol,//遥控器控制,左按键上,控制上层 MID_NAVI,//雷达导航 - }CMD_Chassis_CtrlType_e; + PICK_t, + RELAXED,//异常模式 + + }CMD_CtrlType_t; typedef enum{ - RELAXED,//异常模式 - NORMAL, - GYRO_STAY, - - RC_MODE1, - RC_NO_MODE, - RC_MODE2, - - RC_MODE3, - RC_MODE4, - - AUTO_NAVI - }CMD_Chassis_mode_e; -/*该结构体负责接收和解析地盘模块所需要的控制指令*/ -typedef struct{ - - CMD_Chassis_CtrlType_e type; - - CMD_Chassis_mode_e mode; - - -}CMD_Chassis_Ctrl_t; - + + Normal, //无模式 + Dribble , //运球 + Pitch_pull , //投篮 + Pitch_shoot , //投篮 + }CMD_UP_mode_t; +typedef struct { + uint8_t status_fromnuc; + uint8_t ctrl_status; //取其中每一个二进制位用作通信 + struct + { + fp32 vx; + fp32 vy; + fp32 wz; + }navi; + struct + { + fp32 posx; + fp32 posy; + fp32 posw; + }pick; + struct + { + fp32 angle; + }sick_cali; +} CMD_NUC_t; /* 拨杆位置 */ typedef enum { CMD_SW_ERR = 0, @@ -82,102 +73,38 @@ typedef struct { } __attribute__((packed))CMD_RC_t; -typedef struct - { - fp32 Vx; - fp32 Vy; - fp32 Vw; - }OpsHopeVector_t; - - -typedef struct - { - fp32 x; - fp32 y; - fp32 z; - int cnt_point;//计数点 - }ops_point; - - typedef struct { - - OpsHopeVector_t out; - - int flag;//传递flag触发标志位 - -} CMD_ACTION_t; - -typedef struct { - uint8_t status_fromnuc; - uint8_t ctrl_status; //取其中每一个二进制位用作通信 - struct - { - fp32 vx; - fp32 vy; - fp32 wz; - }navi; - struct - { - fp32 posx; - fp32 posy; - fp32 posw; - }pick; - struct - { - fp32 angle; - }sick_cali; -} CMD_NUC_t; - -typedef struct{ - fp32 posy; - fp32 posx; - fp32 posw; -}CMD_FOR_PICK; -typedef struct { - fp32 vx; - fp32 vy; - fp32 wz; - - -}CMD_FOR_NAVI; - -typedef struct { - uint8_t cmd_status; - uint8_t raw_status; - - uint8_t status[7]; - - fp32 Vx; - fp32 Vy; - fp32 Vw; - - fp32 poscamear; - fp32 key_ctrl_l; fp32 key_ctrl_r; - - fp32 forsick_wz; - CMD_Chassis_Ctrl_t C_cmd; - CMD_FOR_NAVI C_navi; + /*视觉*/ + struct { + uint8_t cmd_status; + uint8_t raw_status; + uint8_t status[7]; + struct + { + fp32 posx; + fp32 posy; + fp32 posw; + }pick; + + }NAVI_t; + + + CMD_UP_mode_t CMD_UP_mode; + CMD_CtrlType_t CMD_CtrlType; + } CMD_t; -int8_t CMD_Init(CMD_t *cmd); - -int8_t CMD_ParseRc(CMD_t *cmd,CMD_RC_t *rc); - -int8_t CMD_ParseAction(CMD_t *cmd,CMD_ACTION_t *act); - +/*nuc数据统一到cmd*/ int8_t CMD_ParseNuc(CMD_t *cmd,CMD_NUC_t *n); - -int8_t CMD_SwitchStatus(CMD_t *cmd); - -int8_t CMD_CtrlSet(CMD_t *cmd); +int8_t CMD_ParseRC(CMD_t *cmd,const CMD_RC_t *rc) ; #endif diff --git a/User/task/action_task.c b/User/task/action_task.c deleted file mode 100644 index cae95a2..0000000 --- a/User/task/action_task.c +++ /dev/null @@ -1,75 +0,0 @@ -/* - 码盘解析任务 - - 处理码盘测量的实际距离 - - 将需要的数据共享给其他的线程 - -*/ -#include "action_task.h" -#include "Action.h" -#include "user_task.h" - - -#ifdef DEBUG - -Action_POS_t pos; -#else - -static Action_POS pos; - -#endif - -void Task_action(void *argument) -{ - (void)argument; -// osDelay(TASK_INIT_DELAY_ACTION); - - const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_ACTION; - - - ACTIONRECV_Init(&pos); - - - uint32_t tick = osKernelGetTickCount(); /* 获取当前控制任务运行频率的tick*/ - - while (1) - { -#ifdef DEBUG - /* 记录任务使用的的栈空闄*/ - task_runtime.stack_water_mark.action = - osThreadGetStackSpace(osThreadGetId()); -#endif - ACTION_StartReceiving(); - ACTION_DataRefresh(&pos); - - - - /* 使用下面的错误处理函数遇到一些问题 - 每10ms置标志位, ACTION_WaitDmaCplt 判断此标志位,通过后会执行速度计算 - 根据计算,任务运行频率大于中断产生频率,每一次运行判断标志位不通过,会导致结构体内数据清0的操作 - 目前的处理方法:注释掉Action_HandleOffline函数中,对结构体数据清零的函数memset - - - */ - - if(ACTION_WaitDmaCplt()){ - - ACTION_Parse(&pos); - - } - else{ - Action_HandleOffline(&pos); - } - - - //将解算后的码盘位置值放入消息队列供其他任务使用 - osMessageQueueReset(task_runtime.msgq.cmd.raw.Action); - osMessageQueuePut(task_runtime.msgq.cmd.raw.Action,(&pos),0,0); - - - tick += delay_tick; /* 计算下一个唤醒时刻*/ - osDelayUntil(tick); - } -} - diff --git a/User/task/action_task.h b/User/task/action_task.h deleted file mode 100644 index 8b13789..0000000 --- a/User/task/action_task.h +++ /dev/null @@ -1 +0,0 @@ - diff --git a/User/task/chassis_task.c b/User/task/chassis_task.c deleted file mode 100644 index e5ee151..0000000 --- a/User/task/chassis_task.c +++ /dev/null @@ -1,94 +0,0 @@ -/* - 底盘控制任务 -*/ -/* Includes ----------------------------------------------------------------- */ - -#include "Chassis.h" -#include "user_task.h" -#include "can_use.h" -#include -#include "up.h" -#include "vofa.h" - -static CAN_t can; - - - -#ifdef DEBUG - -CAN_Output_t out; - -Chassis_t chassis ; - -CMD_t ctrl; - -UP_t upp; -#else - -static CAN_Output_t out; - -static Chassis_t chassis; - -static Chassis_Ctrl_t ctrl; - -static UP_t upp; - - -#endif - - - -/** - * \brief 底盘任务 - * - * \param argument - */ -void Task_Chassis(void *argument) -{ - - (void)argument; /* 未使用argument,消除警告*/ - const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_UP; - - - uint32_t tick = osKernelGetTickCount(); -// -// -//// HAL_GPIO_WritePin(FlagForUpper_GPIO_Port,FlagForUpper_Pin,GPIO_PIN_RESET); //拉低电平 避免未清除 -// - while(1) - { -#ifdef DEBUG - task_runtime.stack_water_mark.chassis = osThreadGetStackSpace(osThreadGetId()); -#endif - -// /*imu数据获取*/ -// osMessageQueueGet(task_runtime.msgq.imu.eulr, &chassis.pos088.imu_eulr, NULL, 0); -// -// osMessageQueueGet(task_runtime.msgq.imu.gyro, &chassis.pos088.bmi088.gyro,NULL, 0); -// -// osMessageQueueGet(task_runtime.msgq.imu.accl, &chassis.pos088.bmi088.accl,NULL, 0); -// /*can上设备数据获取*/ -// osMessageQueueGet(task_runtime.msgq.can.feedback.CAN_feedback, &can, NULL, 0); -// -// osMessageQueueGet(task_runtime.msgq.cmd.raw.Action, &chassis.Action_pos , NULL, 0); - - /*底盘控制信息获取,目前dji遥控器*/ - osMessageQueueGet(task_runtime.msgq.cmd.chassis,&ctrl, NULL, 0); - - /*锁定RTOS(实时操作系统)内核,防止任务切换,直到 osKernelUnlock() 被调用*/ -// osKernelLock(); - - /*更新电机反馈 */ - Chassis_UpdateFeedback(&chassis, &can); - - /*底盘控制*/ - Chassis_Control(&chassis,&ctrl,&out); - - /*解锁*/ -// osKernelUnlock(); - - tick += delay_tick; - osDelayUntil(tick); - } - -} diff --git a/User/task/chassis_task.h b/User/task/chassis_task.h deleted file mode 100644 index 98ed1de..0000000 --- a/User/task/chassis_task.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef CHASSIS_TASK_H - - -#define CHASSIS_TASK_H - - - - - - - - - -extern void Task_Chassis(void *argument); - - - - - - - -#endif - diff --git a/User/task/cmd_task.c b/User/task/cmd_task.c index 83bd681..94730ad 100644 --- a/User/task/cmd_task.c +++ b/User/task/cmd_task.c @@ -4,16 +4,14 @@ #ifdef DEBUG CMD_t cmd; -CMD_RC_t rc_ctrl; CMD_NUC_t Nuc; -CMD_ACTION_t cmd_ops_out; +CMD_RC_t rc_ctrl; #else static CMD_t cmd; -static CMD_RC_t rc_ctrl; static CMD_NUC_t Nuc; -static CMD_ACTION_t cmd_ops_out; +static CMD_RC_t rc_ctrl; #endif @@ -26,7 +24,6 @@ void Task_cmd(void *argument){ /* 计算到下一次调度任务所需要的tick数 */ const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_CTRL_CMD; /**/ - CMD_Init(&cmd); uint32_t tick = osKernelGetTickCount(); /*控制任务运行频率的计时 */ while(1){ @@ -40,25 +37,17 @@ void Task_cmd(void *argument){ /*将各任务接收到的原始数据解析为通用的控制命令*/ - - - /*注意,不能将nuc和码盘导航一块使用*/ + if(osMessageQueueGet(task_runtime.msgq.cmd.raw.rc, &rc_ctrl, 0, 0) == osOK)//遥控器 + CMD_ParseRC(&cmd, &rc_ctrl); if(osMessageQueueGet(task_runtime.msgq.cmd.raw.nuc, &Nuc,0 ,0) ==osOK) //nuc CMD_ParseNuc(&cmd,&Nuc); - - CMD_CtrlSet(&cmd); - - if(osMessageQueueGet(task_runtime.msgq.cmd.raw.rc, &rc_ctrl, 0, 0) == osOK)//遥控器 - CMD_ParseRc(&cmd, &rc_ctrl); - - if(osMessageQueueGet(task_runtime.msgq.cmd.raw .ops_9_out , &cmd_ops_out, 0, 0) == osOK)//码盘 - CMD_ParseAction (&cmd ,&cmd_ops_out); + osKernelUnlock(); /* 同上 解锁RTOS内核 */ - /*将需要与其他任务共享的数据放到消息队列里 此处主要分享给底盘 后续会添加和上层机构的通信 */ - osMessageQueueReset(task_runtime.msgq.cmd.chassis); - osMessageQueuePut(task_runtime.msgq.cmd.chassis,&cmd,0,0); + osMessageQueueReset(task_runtime.msgq.cmd.up_ctrl); + + osMessageQueuePut(task_runtime.msgq.cmd.up_ctrl,&cmd,0,0); tick += delay_tick; /*计算下一个唤醒时刻*/ osDelayUntil(tick); /*绝对延时 等待下一个唤醒时刻 */ diff --git a/User/task/init.c b/User/task/init.c index 54d4c71..d2cbadb 100644 --- a/User/task/init.c +++ b/User/task/init.c @@ -11,7 +11,6 @@ #include "task\user_task.h" #include "can_use.h" #include "cmd.h" -#include "Action.h" /* Private typedef ---------------------------------------------------------- */ /* Private define ----------------------------------------------------------- */ @@ -86,6 +85,8 @@ void Task_Init(void *argument) { osMessageQueueNew(3u, sizeof(CMD_RC_t), NULL); task_runtime.msgq.cmd.raw.nuc = osMessageQueueNew(3u,sizeof(CMD_NUC_t), NULL); + task_runtime.msgq.cmd.up_ctrl = + osMessageQueueNew(3u,sizeof(CMD_t), NULL); osKernelUnlock(); osThreadTerminate(osThreadGetId()); /* 结束自身 */ diff --git a/User/task/navi_task.c b/User/task/navi_task.c deleted file mode 100644 index 78dba44..0000000 --- a/User/task/navi_task.c +++ /dev/null @@ -1,68 +0,0 @@ -#include "user_task.h" -#include "navi.h" -#include "map.h" - -#ifdef DEBUG -ops_t o; -Action_POS_t pos_get; -CMD_ACTION_t ops_out;//经过导航算法解算后输出的期望控制值 - -#else - -static ops_t o; -static Action_POS_t pos_get; -static CMD_ACTION_t ops_out; - - -#endif - - -void Task_Navi(void *argument){ - - (void)argument; - - const uint32_t delay_tick = osKernelGetTickFreq() /TASK_FREQ_NAVI; - - Action_init(&o,&(task_runtime.config.chassis_config->ops),&pos_get); - - - uint32_t tick = osKernelGetTickCount(); /* 获取当前控制任务运行频率的tick*/ - - while (1) - { -#ifdef DEBUG - /* 记录任务使用的的栈空间 */ - task_runtime.stack_water_mark.action = - osThreadGetStackSpace(osThreadGetId()); -#endif - osMessageQueueGet(task_runtime.msgq.imu.gyro,&o.ops_gyro,NULL,0); - - osMessageQueueGet(task_runtime.msgq.imu.eulr,&o.ops_imu_pos,NULL,0); - - osMessageQueueGet(task_runtime.msgq.cmd .raw .Action ,&pos_get,NULL,0); - - go_path(&o,&ops_out); - - //将解算后的导航期望运动值放入消息队列供其他任务使用 - osMessageQueueReset(task_runtime.msgq.cmd.raw.ops_9_out); - osMessageQueuePut(task_runtime.msgq.cmd.raw.ops_9_out,(&ops_out),0,0); - - tick += delay_tick; /* 计算下一个唤醒时刻*/ - osDelayUntil(tick); - } - -} - - - - -// -// -// -// -// -// -// - - - diff --git a/User/task/navi_task.h b/User/task/navi_task.h deleted file mode 100644 index 6f01d09..0000000 --- a/User/task/navi_task.h +++ /dev/null @@ -1 +0,0 @@ -#include "navi.h" \ No newline at end of file diff --git a/User/task/nuc_task.c b/User/task/nuc_task.c index 4956f3b..98d9c81 100644 --- a/User/task/nuc_task.c +++ b/User/task/nuc_task.c @@ -6,6 +6,8 @@ NUC_t nuc_raw; CMD_NUC_t cmd_fromnuc; #else +static NUC_t nuc_raw; +static CMD_NUC_t cmd_fromnuc; #endif diff --git a/User/task/up_task.c b/User/task/up_task.c index 7634fe9..1fe2e44 100644 --- a/User/task/up_task.c +++ b/User/task/up_task.c @@ -10,7 +10,7 @@ #include "vofa.h" -static CAN_t can; +static CAN_t can; #ifdef DEBUG @@ -19,6 +19,7 @@ CAN_Output_t UP_CAN_out; UP_t UP ; +CMD_t up_cmd; #else @@ -27,6 +28,7 @@ static CAN_Output_t up_can_out; static UP_t UP; +static CMD_t up_cmd; #endif float aaa=0; @@ -53,21 +55,21 @@ void Task_up(void *argument) #ifdef DEBUG task_runtime.stack_water_mark.up = osThreadGetStackSpace(osThreadGetId()); #endif - UP_UpdateFeedback(&UP, &can) ; + UP_UpdateFeedback(&UP, &can,&up_cmd) ; // GM6020_control(&UP, 100) ; - UP_angle(&UP, bbb); // UP_M3508_speed(&UP, 500); - - +// UP_angle_control(&UP,0,M2006); +// +// // VESC_M5065_Control(&UP, 20000); - - GO_SendData(&UP, 1,CCC); - GO_SendData(&UP, 0,aaa); - - ALL_Motor_Control(&UP,&UP_CAN_out); +// +// GO_SendData(&UP, 1,CCC); +// GO_SendData(&UP, 0,aaa); + UP_control(&UP,&UP_CAN_out,&up_cmd); + ALL_Motor_Control(&UP,&UP_CAN_out); osDelay(1); @@ -81,7 +83,8 @@ void Task_up(void *argument) /*can上设备数据获取*/ osMessageQueueGet(task_runtime.msgq.can.feedback.CAN_feedback, &can, NULL, 0); - + osMessageQueueGet(task_runtime.msgq.cmd .up_ctrl , &up_cmd, NULL, 0); + /*锁定RTOS(实时操作系统)内核,防止任务切换,直到 osKernelUnlock() 被调用*/ osKernelLock(); diff --git a/User/task/user_task.h b/User/task/user_task.h index c045325..0741e55 100644 --- a/User/task/user_task.h +++ b/User/task/user_task.h @@ -42,16 +42,12 @@ typedef struct { /* 任务 */ struct { osThreadId_t atti_esti; -// osThreadId_t chassis; osThreadId_t dr16; -// osThreadId_t action_ops; osThreadId_t up; + osThreadId_t nuc; -// osThreadId_t ai; osThreadId_t can; osThreadId_t cmd; - osThreadId_t nuc; -// osThreadId_t navi; osThreadId_t error_detect; } thread; @@ -66,14 +62,12 @@ typedef struct { struct { struct { osMessageQueueId_t rc; - osMessageQueueId_t nuc; + osMessageQueueId_t nuc; + osMessageQueueId_t eulr;/*姿态结算得到的欧拉角*/ - osMessageQueueId_t Action; - osMessageQueueId_t ops_9_out; - }raw; - osMessageQueueId_t chassis; + osMessageQueueId_t up_ctrl; osMessageQueueId_t status; } cmd; /* can任务放入、读取,电机或电容的输入输出 */ @@ -108,40 +102,29 @@ typedef struct { UBaseType_t can; UBaseType_t atti_esti; UBaseType_t dr16; - UBaseType_t action; UBaseType_t cmd; - UBaseType_t nuc; - UBaseType_t navi; UBaseType_t error_detect; + UBaseType_t nuc; UBaseType_t up; } stack_water_mark; /* stack使用 */ struct { -// float chassis; float can; float atti_esti; float r12ds; float cmd; - float nuc; -// float action; -// float navi; float error_detect; float up; } freq; /* 任务运行频率 */ struct { -// float chassis; float can; float atti_esti; -// float ai; float r12ds; float cmd; - float nuc; -// float navi; -// float action; float error_detect; float up; @@ -156,21 +139,15 @@ extern const osThreadAttr_t attr_init; extern const osThreadAttr_t attr_atti_esti; -//extern const osThreadAttr_t attr_chassis; - extern const osThreadAttr_t attr_can; extern const osThreadAttr_t attr_cmd; -//extern const osThreadAttr_t attr_ops_9pos; - -extern const osThreadAttr_t attr_nuc; - extern const osThreadAttr_t attr_error_detect; extern const osThreadAttr_t attr_dr16; -//extern const osThreadAttr_t attr_navi; +extern const osThreadAttr_t attr_nuc; extern const osThreadAttr_t attr_up; /* Exported functions prototypes -------------------------------------------- */ @@ -178,20 +155,14 @@ void Task_Init(void *argument); void Task_AttiEsti(void *argument); -//void Task_Chassis(void *argument); - void Task_can(void *argument); void Task_cmd(void *argument); -void Task_nuc(void *argument); - -//void Task_action(void *argument); - -//void Task_Navi(void *argument); - void Task_up(void *argument); +void Task_nuc(void *argument); + void Task_error_detect(void *argument); void Task_dr16(void *argument);