赞
踩
文件->导入->文件类型->Parasolid->读取文件选择文件路径->模型名称右键->模型->创建
连接->运动副->旋转副->右击主体1选择->右击主体2选择->在关节出设置坐标系
驱动->转动驱动
T+左键 平动模型
R+左键 旋转模型
Z+左键 动态缩放
F或Ctrl+F 以最大比例全面显示模型
参考了B站大佬视频
axis( [xmin xmax ymin ymax] ): 设置当前坐标轴 x轴 和 y轴的限制范围
axis equal: 设置屏幕高宽比,使得每个坐标轴的具有均匀的刻度间隔
hold on: 主要是用于添加新绘图的时候保留当前绘图
linspace: Matlab中的均分计算指令,用于产生x1,x2之间的N点行线性的矢量。
eg:X=linspace(5,100,20)将输出:
X =5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100
length: 函数主要是求数组元素的个数
axis([-3 5 -2 8]); axis equal; hold on; x=0:0.01:3;xi=x; yi=-0.5*xi.*(xi-3); plot(xi,yi,'color','r');%足端轨迹 yz=linspace(6,6,length(x)); plot([x,3],[yz,6],'color','r');%上端横线 %x1=0:0.2:3;%上端移动 %x3=x1;%上端移动 x1=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];%上端不动 x3=0:0.2:3;%上端不动 y1=linspace(6,6,length(x1)); pp=spline(xi,yi); y3=ppval(pp,x3); [x2,y2]=solvepoint2(x1,y1,x3,y3); for i=1:length(x1) hold on; plot([x1(i),x2(i),x3(i)],[y1(i),y2(i),y3(i)],'color','b'); pause(0.1); end hold on;
%% 支撑相 clear;clc;clf; axis equal; axis([-6 5 -2 8]);% 坐标范围 hold on; grid; %xyzlabel; plot([0],[0],'Marker','diamond'); plot([-3],[6],'Marker','diamond'); plot([3],[6],'Marker','diamond'); text(0,0,' 支撑点','color','b'); text(-3,6,' 初始髋关节点','color','b'); text(3,6,' 末髋关节点','color','b'); x1=-3:0.5:3; y1=linspace(6,6,length(x1)); x3=zeros(length(x1),1)';y3=zeros(length(x1),1)'; plot([x1(1),x1(length(x1))],[y1(1),y1(length(y1))],'color','r'); % [x2,y2]=solvepoint2(x1,y1,x3,y3); for i=1:length(x1) hold on; [x2(i),y2(i)]=solvepoint2(x1(i),y1(i),x3(i),y3(i)); plot([x1(i),x2(i),x3(i)],[y1(i),y2(i),y3(i)],'color','b'); % axis([-6 5 -2 8]); pause(0.1); end
%% 摆动相 clear;clc;clf; axis equal; axis([-3 15 -1 7]);% 坐标范围 hold on; grid; %xyzlabel; plot([0],[0],'Marker','diamond');text(0,0,' 初支撑点','color','b','HorizontalAlignment','right'); plot([9],[6],'Marker','diamond');text(9,6,' 末髋关节点','color','b'); plot([3],[6],'Marker','diamond');text(3,6,' 初髋关节点','color','b','HorizontalAlignment','right'); plot([12],[0],'Marker','diamond');text(12,0,' 末支撑点','color','b'); a=6; b=6; x1=0.5*a:0.5:1.5*a; y1=linspace(b,b,length(x1)); step_x3=2*a/(length(x1)-1); x3=0:step_x3:2*a; y3=-0.03*x3.*(x3-2*a); plot([x1(1),x1(length(x1))],[y1(1),y1(length(y1))],'color','r'); plot(x3,y3,'color','r'); for i=1:length(x1) hold on; [x2(i),y2(i)]=solvepoint2(x1(i),y1(i),x3(i),y3(i)); plot([x1(i),x2(i),x3(i)],[y1(i),y2(i),y3(i)],'color','b'); % axis([-6 5 -2 8]); pause(0.1); end %%
function [x2,y2]=solvepoint2(x1,y1,x3,y3)
l1=4;l2=4;% 两条腿长
l3=sqrt((x1-x3).*(x1-x3)+(y1-y3).*(y1-y3));
theta3=acos((l2.*l2+l3.*l3-l1.*l1)/(2*l2.*l3));
theta2=acos((l1.*l1+l2.*l2-l3.*l3)/(2*l1.*l2));
if x1 > x3
theta_need=theta2-(pi-atan((y1-y3)./(x1-x3))-theta3);
elseif x1==x3
theta_need=theta2-(pi/2-theta3);
else
theta_need=theta2-(atan((y1-y3)./(x3-x1))-theta3);
end
x2=x1-l1*cos(theta_need);
y2=y1-l1*sin(theta_need);
end
身体
左上肢
注意z轴与旋转轴重合
右上肢
髋关节
小腿
4. 模型导入simulink
1. smnew快捷键打开物理建模
产生一平面
导入3D模型,拖动至simulink界面中(Ctrl+R可旋转)
双击file solid
注:由于宇树科技官方结构坐标系方向设置遇到障碍,故改用视频配套结构
仿真结果
身体上各个关节位置坐标转换
仿真后可观察到坐标对应成功
Ctrl+G封装
添加旋转副
关节运动方式改为角度输入
同侧腿一致,可以直接复制,但是要改一个参数
下载对应版本解压并添加到目录
仿真会报错
此处改为warning
仿真结果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。