diff --git a/MDK-ARM/CtrBoard-H7_ALL.uvoptx b/MDK-ARM/CtrBoard-H7_ALL.uvoptx index 6dee191..20d3e7f 100644 --- a/MDK-ARM/CtrBoard-H7_ALL.uvoptx +++ b/MDK-ARM/CtrBoard-H7_ALL.uvoptx @@ -1291,6 +1291,18 @@ 0 0 + + 10 + 81 + 1 + 0 + 0 + 0 + ..\User\component\bezier_curve.c + bezier_curve.c + 0 + 0 + @@ -1301,7 +1313,7 @@ 0 11 - 81 + 82 1 0 0 @@ -1313,7 +1325,7 @@ 11 - 82 + 83 1 0 0 @@ -1325,7 +1337,7 @@ 11 - 83 + 84 1 0 0 @@ -1337,7 +1349,7 @@ 11 - 84 + 85 1 0 0 @@ -1357,7 +1369,7 @@ 0 12 - 85 + 86 1 0 0 @@ -1369,7 +1381,7 @@ 12 - 86 + 87 1 0 0 @@ -1381,7 +1393,7 @@ 12 - 87 + 88 1 0 0 @@ -1401,7 +1413,7 @@ 0 13 - 88 + 89 1 0 0 @@ -1413,7 +1425,7 @@ 13 - 89 + 90 1 0 0 @@ -1425,7 +1437,7 @@ 13 - 90 + 91 1 0 0 @@ -1437,7 +1449,7 @@ 13 - 91 + 92 5 0 0 @@ -1449,7 +1461,7 @@ 13 - 92 + 93 1 0 0 @@ -1461,7 +1473,7 @@ 13 - 93 + 94 1 0 0 @@ -1473,7 +1485,7 @@ 13 - 94 + 95 1 0 0 @@ -1485,7 +1497,7 @@ 13 - 95 + 96 1 0 0 @@ -1497,7 +1509,7 @@ 13 - 96 + 97 1 0 0 @@ -1509,7 +1521,7 @@ 13 - 97 + 98 1 0 0 @@ -1521,7 +1533,7 @@ 13 - 98 + 99 1 0 0 @@ -1541,7 +1553,7 @@ 0 14 - 99 + 100 1 0 0 @@ -1553,7 +1565,7 @@ 14 - 100 + 101 1 0 0 diff --git a/MDK-ARM/CtrBoard-H7_ALL.uvprojx b/MDK-ARM/CtrBoard-H7_ALL.uvprojx index 49064c2..95adbae 100644 --- a/MDK-ARM/CtrBoard-H7_ALL.uvprojx +++ b/MDK-ARM/CtrBoard-H7_ALL.uvprojx @@ -1458,6 +1458,11 @@ 1 ..\User\component\limiter.c + + bezier_curve.c + 1 + ..\User\component\bezier_curve.c + diff --git a/MDK-ARM/CtrBoard-H7_ALL/CtrBoard-H7_ALL.axf b/MDK-ARM/CtrBoard-H7_ALL/CtrBoard-H7_ALL.axf deleted file mode 100644 index 9000d26..0000000 Binary files a/MDK-ARM/CtrBoard-H7_ALL/CtrBoard-H7_ALL.axf and /dev/null differ diff --git a/User/component/bezier_curve.c b/User/component/bezier_curve.c new file mode 100644 index 0000000..a57193a --- /dev/null +++ b/User/component/bezier_curve.c @@ -0,0 +1,24 @@ +#include "bezier_curve.h" + +// 三次贝塞尔曲线,二维 +void bezier_curve_3rd(const float p0[2], const float p1[2], const float p2[2], const float p3[2], float t, float out[2]) { + float u = 1.0f - t; + float tt = t * t; + float uu = u * u; + float uuu = uu * u; + float ttt = tt * t; + out[0] = uuu * p0[0] + 3 * uu * t * p1[0] + 3 * u * tt * p2[0] + ttt * p3[0]; + out[1] = uuu * p0[1] + 3 * uu * t * p1[1] + 3 * u * tt * p2[1] + ttt * p3[1]; +} + +// 三次贝塞尔曲线,三维 +void bezier_curve_3rd_3d(const float p0[3], const float p1[3], const float p2[3], const float p3[3], float t, float out[3]) { + float u = 1.0f - t; + float tt = t * t; + float uu = u * u; + float uuu = uu * u; + float ttt = tt * t; + for (int i = 0; i < 3; ++i) { + out[i] = uuu * p0[i] + 3 * uu * t * p1[i] + 3 * u * tt * p2[i] + ttt * p3[i]; + } +} \ No newline at end of file diff --git a/User/component/bezier_curve.h b/User/component/bezier_curve.h new file mode 100644 index 0000000..3e89de9 --- /dev/null +++ b/User/component/bezier_curve.h @@ -0,0 +1,20 @@ +/* + 各类滤波器。 +*/ + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +// 三次贝塞尔曲线,二维 +void bezier_curve_3rd(const float p0[2], const float p1[2], const float p2[2], const float p3[2], float t, float out[2]); + +// 三次贝塞尔曲线,三维 +void bezier_curve_3rd_3d(const float p0[3], const float p1[3], const float p2[3], const float p3[3], float t, float out[3]); + + +#ifdef __cplusplus +} +#endif diff --git a/User/module/chassis.h b/User/module/chassis.h index 2b35bb9..c2485d9 100644 --- a/User/module/chassis.h +++ b/User/module/chassis.h @@ -98,7 +98,7 @@ typedef struct{ joint_params ratio; /* 关节减速比 */ joint_limits limit; /* 关节的最小和最大角度,单位:弧度 */ Kinematics_LinkLength_t length; /* 关节长度,单位:米 */ - Kinematics_LegOffset_t offset; /* 关节偏移,单位:米 */ + // Kinematics_LegOffset_t offset; /* 关节偏移,单位:米 */ Kinematics_DirectionSign_t sign; /* 关节侧向标志(左前/左后为-1,右前/右后为1) */ }Chassis_Mech_Params_t; diff --git a/User/module/config.c b/User/module/config.c new file mode 100644 index 0000000..9160b7b --- /dev/null +++ b/User/module/config.c @@ -0,0 +1,144 @@ +/* + * 配置相关 + */ + +#include "config.h" + +#include +#include + +#include "bsp/flash.h" + +#define CONFIG_BASE_ADDRESS (ADDR_FLASH_SECTOR_11) + +#define JOINT_CALF_OFFSET (2.7321f * 12.66) + +Config_t param_default = { + + .uart = { + .left_leg = BSP_UART_LEFT_LEG, + .right_leg = BSP_UART_RIGHT_LEG, + }, + .cali = { + .bmi088 = { + .gyro_offset = {0.0f, 0.0f, 0.0f}, + }, + }, + .chassis = { + .type = CHASSIS_TYPE_QUADRUPED, + + .torque_pid_param = { + .k = 1.0f, /* 控制器增益 */ + .p = 1.0f, /* 比例项增益 */ + .i = 0.0f, /* 积分项增益 */ + .d = 0.0f, /* 微分项增益 */ + .i_limit = 0.0f, /* 积分项上限 */ + .out_limit = 0.0f, /* 输出绝对值限制 */ + .d_cutoff_freq = 10.0f, /* D项低通截止频率 */ + .range = -1.0f, /* 计算循环误差时使用,大于0时启用 */ + }, + + .low_pass_cutoff_freq = { + .in = -1.0f, + .out = -1.0f, + }, + + .mech_param = { + .length = { + .hip = 0.05f, + .thigh = 0.20f, + .calf = 0.20f, + }, + .limit = { + .max = { + .named = { + .lf_hip = 1.57f, /* 左前腿髋关节最大角度,单位:弧度 */ + .lf_thigh = 1.57f, /* 左前腿大腿最大角度,单位:弧度 */ + .lf_calf = 1.57f, /* 左前腿小腿最大角度,单位:弧度 */ + .rf_hip = 1.57f, /* 右前腿髋关节最大角度,单位:弧度 */ + .rf_thigh = 1.57f, /* 右前腿大腿最大角度,单位:弧度 */ + .rf_calf = 1.57f, /* 右前腿小腿最大角度,单位:弧度 */ + .lr_hip = 1.57f, /* 左后腿髋关节最大角度,单位:弧度 */ + .lr_thigh = 1.57f, /* 左后腿大腿最大角度,单位:弧度 */ + .lr_calf = 1.57f, /* 左后腿小腿最大角度,单位:弧度 */ + .rr_hip = 1.57f, /* 右后腿髋关节最大角度,单位:弧度 */ + .rr_thigh = 1.57f, /* 右后腿大腿最大角度,单位:弧度 */ + .rr_calf = 1.57f, /* 右后腿小腿最大角度,单位:弧度 */ + } + }, + .min = { + .named = { + .lf_hip = 1.57f, /* 左前腿髋关节最大角度,单位:弧度 */ + .lf_thigh = 1.57f, /* 左前腿大腿最大角度,单位:弧度 */ + .lf_calf = 1.57f, /* 左前腿小腿最大角度,单位:弧度 */ + .rf_hip = 1.57f, /* 右前腿髋关节最大角度,单位:弧度 */ + .rf_thigh = 1.57f, /* 右前腿大腿最大角度,单位:弧度 */ + .rf_calf = 1.57f, /* 右前腿小腿最大角度,单位:弧度 */ + .lr_hip = 1.57f, /* 左后腿髋关节最大角度,单位:弧度 */ + .lr_thigh = 1.57f, /* 左后腿大腿最大角度,单位:弧度 */ + .lr_calf = 1.57f, /* 左后腿小腿最大角度,单位:弧度 */ + .rr_hip = 1.57f, /* 右后腿髋关节最大角度,单位:弧度 */ + .rr_thigh = 1.57f, /* 右后腿大腿最大角度,单位:弧度 */ + .rr_calf = 1.57f, /* 右后腿小腿最大角度,单位:弧度 */ + } + } + }, + .zero_point = { + .named = { + .lf_hip = 1.98f, /* 左前腿髋关节零点角度,单位:弧度 */ + .lf_thigh = -2.86f, /* 左前腿大腿零点角度,单位:弧度 */ + .lf_calf = -32.367f, /* 左前腿小腿零点角度,单位:弧度 */ + .rf_hip = 5.56f, /* 右前腿髋关节零点角度,单位:弧度 */ + .rf_thigh = 12.92f, /* 右前腿大腿零点角度,单位:弧度 */ + .rf_calf = 37.047f, /* 右前腿小腿零点角度,单位:弧度 */ + .lr_hip = 4.76f, /* 左后腿髋关节零点角度,单位:弧度 */ + .lr_thigh = -4.57f, /* 左后腿大腿零点角度,单位:弧度 */ + .lr_calf = -35.847f, /* 左后腿小腿零点角度,单位:弧度 */ + .rr_hip = 2.42f, /* 右后腿髋关节零点角度,单位:弧度 */ + .rr_thigh = 8.85f, /* 右后腿大腿零点角度,单位:弧度 */ + .rr_calf = 38.55f, /* 右后腿小腿零点角度,单位:弧度 */ + } + }, + .sign = { + .leg = { + [0] = { .hip = -1, .thigh = -1, .calf = -1 }, /* 左前腿 */ + [1] = { .hip = 1, .thigh = 1, .calf = 1 }, /* 右前腿 */ + [2] = { .hip = -1, .thigh = -1, .calf = -1 }, /* 左后腿 */ + [3] = { .hip = 1, .thigh = 1, .calf = 1 }, /* 右后腿 */ + } + }, + .ratio = { + .named = { + .lf_hip = 6.33f, /* 左前腿髋关节减速比 */ + .lf_thigh = 6.33f, /* 左前腿大腿减速比 */ + .lf_calf = 12.66f, /* 左前腿小腿减速比 */ + .rf_hip = 6.33f, /* 右前腿髋关节减速比 */ + .rf_thigh = 6.33f, /* 右前腿大腿减速比 */ + .rf_calf = 12.66f, /* 右前腿小腿减速比 */ + .lr_hip = 6.33f, /* 左后腿髋关节减速比 */ + .lr_thigh = 6.33f, /* 左后腿大腿减速比 */ + .lr_calf = 12.66f, /* 左后腿小腿减速比 */ + .rr_hip = 6.33f, /* 右后腿髋关节减速比 */ + .rr_thigh = 6.33f, /* 右后腿大腿减速比 */ + .rr_calf = 12.66f, /* 右后腿小腿减速比 */ + } + }, + + }, + + + }, +}; /* param_default */ + + + +/** + * \brief 获取配置信息 + * + * \param cfg 配置信息 + */ +void Config_Get(Config_t *cfg) { + //直接把param_default传进去 + if (cfg == NULL) return; // 检查参数是否为NULL + memcpy(cfg, ¶m_default, sizeof(Config_t)); // 复制默认配置到cfg +}