弹簧阻尼双足机器人周期行走单支撑阶段、双支撑阶段ode45编程matlab
时间: 2023-09-03 20:08:18 浏览: 62
matlab开发-双弹簧阻尼系统
弹簧阻尼双足机器人周期行走的单支撑阶段和双支撑阶段的ODE45编程MATLAB代码如下:
单支撑阶段:
```matlab
function dx = single_support(t,x,m,g,k,b,L)
%输入参数:t-时间,x-状态向量,m-质量,g-重力加速度,k-弹簧刚度,b-阻尼系数,L-腿长
%输出参数:dx-状态向量的导数
%状态向量:x=[y;y_dot;theta;theta_dot]
%计算腿的长度
L_leg = L*cos(x(3)) + x(1);
%计算弹簧的长度和弹力
L_spring = L_leg - L;
F_spring = -k*L_spring;
%计算阻尼力
F_damper = -b*x(2);
%计算合外力和加速度
F_total = m*g + F_spring + F_damper;
a = F_total/m;
%计算角加速度
alpha = F_total/L*cos(x(3)) - g*sin(x(3))/2;
%计算状态向量的导数
dx = [x(2); a; x(4); alpha];
end
```
双支撑阶段:
```matlab
function dx = double_support(t,x,m,g,k,b,L)
%输入参数:t-时间,x-状态向量,m-质量,g-重力加速度,k-弹簧刚度,b-阻尼系数,L-腿长
%输出参数:dx-状态向量的导数
%状态向量:x=[y;y_dot;theta;theta_dot]
%计算腿的长度
L_leg = L*cos(x(3)) + x(1);
%计算弹簧的长度和弹力
L_spring = L_leg - L;
F_spring = -k*L_spring;
%计算阻尼力
F_damper = -b*x(2);
%计算合外力和加速度
F_total = m*g + F_spring + F_damper;
a = F_total/m;
%计算状态向量的导数
dx = [x(2); a; x(4); 0];
end
```
其中,状态向量x=[y;y_dot;theta;theta_dot],y表示机器人的竖直位置,y_dot表示竖直速度,theta表示机器人的摆动角度,theta_dot表示角速度。m表示机器人的质量,g表示重力加速度,k表示弹簧的刚度,b表示阻尼系数,L表示腿的长度。在单支撑阶段,机器人只有一个腿着地,而在双支撑阶段,机器人两腿都着地。根据机器人的状态向量和运动学关系,可以计算出腿的长度、弹簧的长度和弹力、阻尼力、合外力和加速度、角加速度等物理量。根据牛顿第二定律和欧拉角动力学方程,可以计算出状态向量的导数。ODE45函数可以根据状态向量的导数和时间步长,求解出机器人在周期行走中的状态向量。
阅读全文