ode45求解变刚度阻尼双足机器人动力学方程,求某个参数对所有变量求偏导MATLA
时间: 2023-06-24 15:08:04 浏览: 159
下面是MATLAB的代码:
```matlab
function [dydx]=ode45_dynamics(x,y,m,lc,g,I,beta)
% x: independent variable (time)
% y: dependent variables (state variables)
% m: mass of each leg segment
% lc: length of each leg segment
% g: gravitational acceleration
% I: moment of inertia of each leg segment
% beta: stiffness and damping parameters
% Extract state variables
q1=y(1); q2=y(2); dq1=y(3); dq2=y(4);
% Compute mass matrix
M11=(m(1)+m(2))*lc(1)^2+m(2)*lc(2)^2+I(1)+I(2)+2*m(2)*lc(1)*lc(2)*cos(q2);
M12=m(2)*lc(2)^2+I(2)+m(2)*lc(1)*lc(2)*cos(q2);
M21=M12;
M22=m(2)*lc(2)^2+I(2);
% Compute Coriolis and centrifugal terms
C1=-m(2)*lc(1)*lc(2)*(2*dq1*dq2+dq2^2)*sin(q2);
C2=m(2)*lc(1)*lc(2)*dq1^2*sin(q2);
C=[C1; C2];
% Compute gravity term
G=[-(m(1)+m(2))*g*lc(1)*sin(q1)-m(2)*g*lc(2)*sin(q1+q2); -m(2)*g*lc(2)*sin(q1+q2)];
% Compute stiffness and damping terms
K=[-beta(1) 0; 0 -beta(2)];
B=[-beta(3) 0; 0 -beta(4)];
% Compute state derivatives
dydx=zeros(4,1);
dydx(1)=dq1;
dydx(2)=dq2;
dydx(3:4)=inv([M11 M12; M21 M22])*(-[C; G]+K*[q1;q2]+B*[dq1;dq2]);
% Compute partial derivatives
dM11dq1=-2*m(2)*lc(1)*lc(2)*sin(q2)*dq2;
dM11dq2=-m(2)*lc(1)*lc(2)*sin(q2)*dq1;
dM12dq1=m(2)*lc(1)*lc(2)*sin(q2)*dq2;
dM12dq2=m(2)*lc(2)*sin(q2)*dq1;
dM21dq1=dM12dq1;
dM21dq2=dM12dq2;
dM22dq1=0;
dM22dq2=0;
dC1dq1=-m(2)*lc(1)*lc(2)*dq2^2*cos(q2);
dC1dq2=-m(2)*lc(1)*lc(2)*(2*dq1+dq2)*cos(q2);
dC2dq1=m(2)*lc(1)*lc(2)*dq1*cos(q2);
dC2dq2=0;
dG1dq1=-(m(1)+m(2))*g*lc(1)*cos(q1)-m(2)*g*lc(2)*cos(q1+q2);
dG1dq2=-m(2)*g*lc(2)*cos(q1+q2);
dG2dq1=0;
dG2dq2=-m(2)*g*lc(2)*cos(q1+q2);
dKdq1=[-1 0; 0 0];
dKdq2=[0 0; 0 -1];
dBdq1=[0 0; 0 0];
dBdq2=[0 0; 0 0];
dFdq1=inv([M11 M12; M21 M22])*(-[dC1dq1 dC1dq2; dC2dq1 dC2dq2]+dKdq1*[q1;q2]+dBdq1*[dq1;dq2]);
dFdq2=inv([M11 M12; M21 M22])*(-[dC1dq1 dC1dq2; dC2dq1 dC2dq2]+dKdq2*[q1;q2]+dBdq2*[dq1;dq2]);
dfdx=[0 0 1 0; 0 0 0 1; dFdq1(1) dFdq2(1) 0 0; dFdq1(2) dFdq2(2) 0 0];
```
其中,输入参数为:
- `x`:独立变量(时间);
- `y`:依赖变量(状态变量),其中 `y(1)` 和 `y(2)` 分别表示两条腿的关节角度,`y(3)` 和 `y(4)` 分别表示两条腿的关节角速度;
- `m`:每个腿段的质量;
- `lc`:每个腿段的长度;
- `g`:重力加速度;
- `I`:每个腿段的转动惯量;
- `beta`:刚度和阻尼参数。
其中,`dydx` 表示状态变量的导数,`dfdx` 表示状态变量导数对参数的偏导数。
阅读全文