rm_balance/utils/Simulation-master/balance/series_legs/get_k.m
2025-09-18 21:09:22 +08:00

97 lines
4.5 KiB
Matlab
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.

%计算不同腿长下适合的K矩阵再进行多项式拟合得到2*6矩阵每个参数对应的多项式参数
tic
j=1;
leg=0.1:0.01:0.4;
for i=leg
k=get_k_length(i);
k11(j) = k(1,1);
k12(j) = k(1,2);
k13(j) = k(1,3);
k14(j) = k(1,4);
k15(j) = k(1,5);
k16(j) = k(1,6);
k21(j) = k(2,1);
k22(j) = k(2,2);
k23(j) = k(2,3);
k24(j) = k(2,4);
k25(j) = k(2,5);
k26(j) = k(2,6);
j=j+1;
fprintf('leg_length=%d\n', i);
end
a11=polyfit(leg,k11,3);
a12=polyfit(leg,k12,3);
a13=polyfit(leg,k13,3);
a14=polyfit(leg,k14,3);
a15=polyfit(leg,k15,3);
a16=polyfit(leg,k16,3);
a21=polyfit(leg,k21,3);
a22=polyfit(leg,k22,3);
a23=polyfit(leg,k23,3);
a24=polyfit(leg,k24,3);
a25=polyfit(leg,k25,3);
a26=polyfit(leg,k26,3);
toc
% 打印格式化的C代码结构可以直接复制到config.c中
fprintf('\n=========== 可直接复制的C代码 ===========\n');
fprintf('.lqr_gains = {\n');
fprintf(' .k11_coeff = { %.15ef, %.15ef, %.15ef, %.15ef }, // theta\n', a11(1), a11(2), a11(3), a11(4));
fprintf(' .k12_coeff = { %.15ef, %.15ef, %.15ef, %.15ef }, // d_theta\n', a12(1), a12(2), a12(3), a12(4));
fprintf(' .k13_coeff = { %.15ef, %.15ef, %.15ef, %.15ef }, // x\n', a13(1), a13(2), a13(3), a13(4));
fprintf(' .k14_coeff = { %.15ef, %.15ef, %.15ef, %.15ef }, // d_x\n', a14(1), a14(2), a14(3), a14(4));
fprintf(' .k15_coeff = { %.15ef, %.15ef, %.15ef, %.15ef }, // phi\n', a15(1), a15(2), a15(3), a15(4));
fprintf(' .k16_coeff = { %.15ef, %.15ef, %.15ef, %.15ef }, // d_phi\n', a16(1), a16(2), a16(3), a16(4));
fprintf(' .k21_coeff = { %.15ef, %.15ef, %.15ef, %.15ef }, // theta\n', a21(1), a21(2), a21(3), a21(4));
fprintf(' .k22_coeff = { %.15ef, %.15ef, %.15ef, %.15ef }, // d_theta\n', a22(1), a22(2), a22(3), a22(4));
fprintf(' .k23_coeff = { %.15ef, %.15ef, %.15ef, %.15ef }, // x\n', a23(1), a23(2), a23(3), a23(4));
fprintf(' .k24_coeff = { %.15ef, %.15ef, %.15ef, %.15ef }, // d_x\n', a24(1), a24(2), a24(3), a24(4));
fprintf(' .k25_coeff = { %.15ef, %.15ef, %.15ef, %.15ef }, // phi\n', a25(1), a25(2), a25(3), a25(4));
fprintf(' .k26_coeff = { %.15ef, %.15ef, %.15ef, %.15ef }, // d_phi\n', a26(1), a26(2), a26(3), a26(4));
fprintf('},\n');
fprintf('========================================\n\n');
% 可选:显示拟合曲线图
x0=leg; %步长为0.1
y11=polyval(a11,x0); %返回值y0是对应于x0的函数值
y12=polyval(a12,x0); %返回值y0是对应于x0的函数值
y13=polyval(a13,x0); %返回值y0是对应于x0的函数值
y14=polyval(a14,x0); %返回值y0是对应于x0的函数值
y15=polyval(a15,x0); %返回值y0是对应于x0的函数值
y16=polyval(a16,x0); %返回值y0是对应于x0的函数值
y21=polyval(a21,x0); %返回值y0是对应于x0的函数值
y22=polyval(a22,x0); %返回值y0是对应于x0的函数值
y23=polyval(a23,x0); %返回值y0是对应于x0的函数值
y24=polyval(a24,x0); %返回值y0是对应于x0的函数值
y25=polyval(a25,x0); %返回值y0是对应于x0的函数值
y26=polyval(a26,x0); %返回值y0是对应于x0的函数值
figure;
subplot(3,4,1);plot(leg,k11,'o',x0,y11,'r');xlabel('leg length');ylabel('k11');title('k11拟合');
subplot(3,4,2);plot(leg,k12,'o',x0,y12,'r');xlabel('leg length');ylabel('k12');title('k12拟合');
subplot(3,4,3);plot(leg,k13,'o',x0,y13,'r');xlabel('leg length');ylabel('k13');title('k13拟合');
subplot(3,4,4);plot(leg,k14,'o',x0,y14,'r');xlabel('leg length');ylabel('k14');title('k14拟合');
subplot(3,4,5);plot(leg,k15,'o',x0,y15,'r');xlabel('leg length');ylabel('k15');title('k15拟合');
subplot(3,4,6);plot(leg,k16,'o',x0,y16,'r');xlabel('leg length');ylabel('k16');title('k16拟合');
subplot(3,4,7);plot(leg,k21,'o',x0,y21,'r');xlabel('leg length');ylabel('k21');title('k21拟合');
subplot(3,4,8);plot(leg,k22,'o',x0,y22,'r');xlabel('leg length');ylabel('k22');title('k22拟合');
subplot(3,4,9);plot(leg,k23,'o',x0,y23,'r');xlabel('leg length');ylabel('k23');title('k23拟合');
subplot(3,4,10);plot(leg,k24,'o',x0,y24,'r');xlabel('leg length');ylabel('k24');title('k24拟合');
subplot(3,4,11);plot(leg,k25,'o',x0,y25,'r');xlabel('leg length');ylabel('k25');title('k25拟合');
subplot(3,4,12);plot(leg,k26,'o',x0,y26,'r');xlabel('leg length');ylabel('k26');title('k26拟合');
for i = 1:12
subplot(3,4,i);
grid on; %添加网格线
set(gca,'GridLineStyle',':','GridColor','k','GridAlpha',0.5); %将网格线变成虚线
legend('原始数据','拟合曲线','Location','best');
end
toc