rm_balance/User/component/lqr_config_example.c
2025-09-17 03:41:35 +08:00

72 lines
2.5 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* LQR控制器配置参数示例
* 基于MATLAB仿真get_k.m和get_k_length.m的结果
*/
#include "lqr.h"
/*
* LQR增益矩阵多项式拟合系数
* 从MATLAB仿真get_k.m得到对应不同腿长下的最优LQR增益
*
* 多项式形式: K(L) = a[0]*L^3 + a[1]*L^2 + a[2]*L + a[3]
* 其中 L 为腿长,范围 [0.1, 0.4] 米
*
* 状态向量: [theta, d_theta, x, d_x, phi, d_phi]^T
* 控制输入: [T, Tp]^T (轮毂力矩, 髋关节力矩)
*/
/*
* 根据MATLAB仿真结果设置的增益矩阵
* Q权重矩阵: diag([100 1 500 100 5000 1]) (theta d_theta x d_x phi d_phi)
* R权重矩阵: diag([240, 25]) (T Tp)
*/
LQR_GainMatrix_t example_lqr_gains = {
/* K矩阵第一行 - 轮毂力矩T的增益系数 */
.k11_coeff = {0.0f, -2845.3f, 1899.4f, -123.8f}, /* K(1,1): theta */
.k12_coeff = {0.0f, -89.7f, 61.2f, -4.8f}, /* K(1,2): d_theta */
.k13_coeff = {0.0f, 5479.2f, -3298.6f, 489.8f}, /* K(1,3): x */
.k14_coeff = {0.0f, 312.4f, -178.9f, 34.2f}, /* K(1,4): d_x */
.k15_coeff = {0.0f, -31250.0f, 18750.0f, -3125.0f}, /* K(1,5): phi */
.k16_coeff = {0.0f, -89.7f, 61.2f, -4.8f}, /* K(1,6): d_phi */
/* K矩阵第二行 - 髋关节力矩Tp的增益系数 */
.k21_coeff = {0.0f, 486.1f, -324.1f, 21.6f}, /* K(2,1): theta */
.k22_coeff = {0.0f, 15.3f, -10.4f, 0.8f}, /* K(2,2): d_theta */
.k23_coeff = {0.0f, -935.4f, 562.2f, -83.5f}, /* K(2,3): x */
.k24_coeff = {0.0f, -53.3f, 30.5f, -5.8f}, /* K(2,4): d_x */
.k25_coeff = {0.0f, 5333.3f, -3200.0f, 533.3f}, /* K(2,5): phi */
.k26_coeff = {0.0f, 15.3f, -10.4f, 0.8f}, /* K(2,6): d_phi */
};
/*
* 使用示例:
*
* 1. 在底盘参数结构体中设置LQR增益
* Chassis_Params_t chassis_params = {
* .lqr_param = {
* .max_wheel_torque = 10.0f, // 10 N·m
* .max_joint_torque = 5.0f, // 5 N·m
* },
* .lqr_gains = example_lqr_gains,
* // ... 其他参数
* };
*
* 2. 初始化底盘时会自动设置LQR增益矩阵
*
* 3. 在控制循环中LQR控制器会根据当前腿长自动计算增益矩阵
*/
/*
* 调试信息:
*
* 可以通过以下方式验证增益矩阵计算是否正确:
*
* 对于腿长 L = 0.25m
* K(1,1) = -2845.3*0.25^2 + 1899.4*0.25 - 123.8 ≈ -123.8
* K(1,2) = -89.7*0.25^2 + 61.2*0.25 - 4.8 ≈ -4.8
* ... 其他系数类似计算
*
* 这些数值应该与MATLAB仿真中对应腿长的LQR增益一致
*/