四足机器人仿真 Matlab

Adams模型导入

导入模型为parasolid所产生文件

文件->导入->文件类型->Parasolid->读取文件选择文件路径->模型名称右键->模型->创建

添加转动副

连接->运动副->旋转副->右击主体1选择->右击主体2选择->在关节出设置坐标系

添加驱动

驱动->转动驱动

设置状态变量

Adams快捷键

T+左键 平动模型
R+左键 旋转模型
Z+左键 动态缩放
F或Ctrl+F 以最大比例全面显示模型

matlab

足端轨迹绘制

参考了B站大佬视频

函数

axis

axis( [xmin xmax ymin ymax] ): 设置当前坐标轴 x轴 和 y轴的限制范围
axis equal: 设置屏幕高宽比,使得每个坐标轴的具有均匀的刻度间隔

hold on

hold on: 主要是用于添加新绘图的时候保留当前绘图

linspace

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

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

Simulink仿真

B站参考视频

模型导入

  1. 模型下载
    宇树科技官方CAD下载地址
  2. 利用UG完成零件坐标设置如下图
    在这里插入图片描述

身体在这里插入图片描述
左上肢
注意z轴与旋转轴重合
在这里插入图片描述
右上肢
在这里插入图片描述
髋关节
在这里插入图片描述
小腿
在这里插入图片描述
4. 模型导入simulink
1. smnew快捷键打开物理建模
在这里插入图片描述
在这里插入图片描述
产生一平面
在这里插入图片描述

导入3D模型,拖动至simulink界面中(Ctrl+R可旋转)在这里插入图片描述
在这里插入图片描述
双击file solid
在这里插入图片描述

注:由于宇树科技官方结构坐标系方向设置遇到障碍,故改用视频配套结构
仿真结果
在这里插入图片描述
身体上各个关节位置坐标转换
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
仿真后可观察到坐标对应成功

腿部模型导入

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Ctrl+G封装
在这里插入图片描述
添加旋转副
在这里插入图片描述
在这里插入图片描述
关节运动方式改为角度输入
在这里插入图片描述
在这里插入图片描述
同侧腿一致,可以直接复制,但是要改一个参数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

加入力反馈

在这里插入图片描述
在这里插入图片描述
下载对应版本解压并添加到目录
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

仿真会报错
在这里插入图片描述此处改为warning
在这里插入图片描述

加入六自由度变化

在这里插入图片描述
仿真结果在这里插入图片描述

  • 10
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值