/* * 配置相关 */ /* Includes ----------------------------------------------------------------- */ #include "module/config.h" #include "bsp/fdcan.h" #include "device/motor_dm.h" #include "module/cmd/cmd.h" #include #include "device/gimbal_imu.h" /* Private typedef ---------------------------------------------------------- */ /* Private define ----------------------------------------------------------- */ /* Private macro ------------------------------------------------------------ */ /* Private variables -------------------------------------------------------- */ /* Exported variables ------------------------------------------------------- */ // 机器人参数配置 Config_RobotParam_t robot_config = { .ai_param = { .can = BSP_FDCAN_2, .vision_id = 0x104, }, .imu_param = { .can=BSP_FDCAN_2, .accl_id=0x100, .gyro_id=0x101, .eulr_id=0x102, .quat_id=0x103, }, .chassis_param = { /* DJI3508µç»ú*/ .motor_param = { { .can = BSP_FDCAN_3, .id = 0x201, .module = MOTOR_M3508, .reverse = false, .gear = true }, { .can = BSP_FDCAN_3, .id = 0x202, .module = MOTOR_M3508, .reverse = false, .gear = true }, { .can = BSP_FDCAN_3, .id = 0x203, .module = MOTOR_M3508, .reverse = false, .gear = true }, { .can = BSP_FDCAN_3, .id = 0x204, .module = MOTOR_M3508, .reverse = false, .gear = true }, }, .type = CHASSIS_TYPE_MECANUM, /* PID */ .pid = { /* µ×Å̵ç»ú PID */ .motor_pid_param = { .k = 0.0015f, .p = 1.0f, .i = 0.0f, .d = 0.0f, .i_limit = 1.0f, .out_limit = 1.0f, .d_cutoff_freq = -1.0f, .range = -1.0f, }, /* ¸úËæ */ .follow_pid_param = { .k = 1.2f, .p = 1.0f, .i = 0.5f, .d = 0.01f, .i_limit = 1.0f, .out_limit = 1.0f, .d_cutoff_freq = -1.0f, .range = M_2PI, }, }, .low_pass_cutoff_freq = { .in = 50.0f, .out = 50.0f, }, .reverse = { .yaw = true, }, .limit = { .max_vx = 3.0f, .max_vy = 3.0f, .max_wz = 2.0f, .max_current = 16000.0f }, }, .gimbal_param = { .pid = { .absolute = { .yaw_omega = { .k = 1.0f,//1 .p = 1.0f, .i = 0.3f, .d = 0.0f, .i_limit = 1.0f, .out_limit = 1.0f, .d_cutoff_freq = -1.0f, .range = -1.0f, }, .yaw_angle = { .k = 4.0f, .p = 5.0f, .i = 0.0f, .d = 0.0f, .i_limit = 0.0f, .out_limit = 10.0f, .d_cutoff_freq = -1.0f, .range = M_2PI, }, .pit_omega = { .k = 1.0f,//0.4 .p = 1.0f, .i = 0.0f, .d = 0.0f, .i_limit = 1.0f, .out_limit = 1.0f, .d_cutoff_freq = -1.0f, .range = -1.0f, }, .pit_angle = { .k = 6.0f, .p = 3.0f, .i = 2.0f, .d = 0.0f, .i_limit = 2.0f, .out_limit = 10.0f, .d_cutoff_freq = -1.0f, .range = M_2PI, }, }, .relative = { .yaw_omega = { .k = 0.8f, .p = 0.8f, .i = 0.3f, .d = 0.0f, .i_limit = 1.0f, .out_limit = 1.0f, .d_cutoff_freq = -1.0f, .range = -1.0f, }, .yaw_angle = { .k = 5.0f, .p = 2.5f, .i = 0.0f, .d = 0.0f, .i_limit = 0.0f, .out_limit = 10.0f, .d_cutoff_freq = -1.0f, .range = M_2PI, }, .pit_omega = { .k = 0.8f,//0.4 .p = 0.8f, .i = 0.3f, .d = 0.0f, .i_limit = 1.0f, .out_limit = 1.0f, .d_cutoff_freq = -1.0f, .range = -1.0f, }, .pit_angle = { .k = 5.0f, .p = 2.0f, .i = 0.0f, .d = 0.25f, .i_limit = 2.0f, .out_limit = 10.0f, .d_cutoff_freq = -1.0f, .range = M_2PI, }, }, }, .mech_zero = { .yaw = 0.0f, .pit = 3.15f, }, .travel = { .yaw = -1.0f, .pit = 0.6f, }, .low_pass_cutoff_freq = { .out = -1.0f, .gyro = 1000.0f, }, .pit_motor ={ .can = BSP_FDCAN_2, .can_id = 0x2, .master_id = 0x12, .module = MOTOR_DM_J4310, .reverse = false, }, .yaw_motor = { .can = BSP_FDCAN_2, .can_id = 0x50, .master_id = 0x60, .module = MOTOR_DM_J4310, .reverse = false, } }, .shoot_param = { .basic={ .projectileType=SHOOT_PROJECTILE_42MM, .fric_num=6, .extra_deceleration_ratio=1.0f, .num_trig_tooth=5, .shot_freq=1.0f, .shot_burst_num=3, .ratio_multilevel = {0.8f, 1.0f}, }, .jamDetection={ .enable=true, .threshold=310.0f, .suspectedTime=0.5f, }, .motor={ .fric = { { .param = { .can = BSP_FDCAN_1, .id = 0x201, .module = MOTOR_M3508, .reverse = false, .gear = false, }, .level=1, }, { .param = { .can = BSP_FDCAN_1, .id = 0x202, .module = MOTOR_M3508, .reverse = true, .gear = false, }, .level=1, }, { .param = { .can = BSP_FDCAN_1, .id = 0x203, .module = MOTOR_M3508, .reverse = true, .gear = false, }, .level=1, }, { .param = { .can = BSP_FDCAN_1, .id = 0x204, .module = MOTOR_M3508, .reverse = false, .gear = false, }, .level=2, }, { .param = { .can = BSP_FDCAN_1, .id = 0x205, .module = MOTOR_M3508, .reverse = true, .gear = false, }, .level=2, }, { .param = { .can = BSP_FDCAN_1, .id = 0x206, .module = MOTOR_M3508, .reverse = true, .gear = false, }, .level=2, } }, .trig = { .can = BSP_FDCAN_2, .id = 0x205, .module = MOTOR_M3508, .reverse = false, .gear=true, }, }, .pid={ .fric_follow = { .k=1.0f, .p=1.5f, .i=0.3f, .d=0.0f, .i_limit=0.2f, .out_limit=0.9f, .d_cutoff_freq=-1.0f, .range=-1.0f, }, .fric_err = { .k=0.0f, .p=4.0f, .i=0.4f, .d=0.0f, .i_limit=0.25f, .out_limit=0.25f, .d_cutoff_freq=-1.0f, .range=-1.0f, }, .trig_2006 = { .k=2.5f, .p=1.0f, .i=0.1f, .d=0.04f, .i_limit=0.4f, .out_limit=1.0f, .d_cutoff_freq=-1.0f, .range=M_2PI, }, .trig_omg_2006 = { .k=1.0f, .p=1.5f, .i=0.3f, .d=0.5f, .i_limit=0.2f, .out_limit=1.0f, .d_cutoff_freq=-1.0f, .range=-1.0f, }, .trig_3508 = { .k=0.5f, .p=1.8f, .i=0.3f, .d=0.1f, .i_limit=0.15f, .out_limit=1.0f, .d_cutoff_freq=-1.0f, .range=M_2PI, }, .trig_omg_3508 = { .k=1.0f, .p=1.0f, .i=0.0f, .d=0.0f, .i_limit=0.0f, .out_limit=1.0f, .d_cutoff_freq=-1.0f, .range=-1.0f, }, }, .filter={ .fric = { .in = 30.0f, .out = 30.0f, }, .trig = { .in = 30.0f, .out = 30.0f, }, }, }, .cmd_param={ .source_priority = { CMD_SRC_RC, CMD_SRC_PC, CMD_SRC_NUC, CMD_SRC_REF, }, .sensitivity = { .mouse_sens = 2.0f, .move_sens = 1.0f, .move_fast_mult = 1.5f, .move_slow_mult = 0.5f, }, .rc_mode_map = { .sw_left_up = CHASSIS_MODE_RELAX, .sw_left_mid = CHASSIS_MODE_FOLLOW_GIMBAL, .sw_left_down = CHASSIS_MODE_RELAX, .gimbal_sw_up = GIMBAL_MODE_ABSOLUTE, .gimbal_sw_mid = GIMBAL_MODE_RELATIVE, .gimbal_sw_down = GIMBAL_MODE_ABSOLUTE, .track_sw_up = false, .track_sw_mid = true, .track_sw_down = false, }, }, .track_param={ .motor = { { .can = BSP_FDCAN_3, .id = 0x205, .module = MOTOR_M3508, .reverse = false, .gear = true, }, { .can = BSP_FDCAN_3, .id = 0x206, .module = MOTOR_M3508, .reverse = true, .gear = true, }, }, .pid = { { .k = 0.75f, .p = 1.0f, .i = 0.0f, .d = 0.0f, .i_limit = 1.0f, .out_limit = 1.0f, .d_cutoff_freq = -1.0f, .range = -1.0f, }, { .k = 0.75f, .p = 1.0f, .i = 0.0f, .d = 0.0f, .i_limit = 1.0f, .out_limit = 1.0f, .d_cutoff_freq = -1.0f, .range = -1.0f, }, }, .pid_w ={ .k = 0.5f, .p = 1.0f, .i = 0.0f, .d = 0.0f, .i_limit = 1.0f, .out_limit = 1.0f, .d_cutoff_freq = -1.0f, .range = M_2PI, }, }, }; power_model_t cha= { .motor_num =4, .constant= 0.7910660075305308, .k1 = 98.97509148647588, .k2= 0.00018014375383727376, .toque_coefficient =0.4568913750568248, .power = (float[4]){} }; power_model_t cha2= { .motor_num =4, .constant= 2.354223704504904, .k1 = 94.85324024176896, .k2= 0.00012622263917529537, .toque_coefficient =0.3680225540649464, .power = (float[4]){} }; /* Private function prototypes ---------------------------------------------- */ /* Exported functions ------------------------------------------------------- */ /** * @brief 获取机器人配置参数 * @return 机器人配置参数指针 */ Config_RobotParam_t* Config_GetRobotParam(void) { return &robot_config; }