四足机器狗建模——单腿matlab 建模(示教,三维)

matlab 2023

坐标系: B,0,1,2,3 ,4

4 为足端坐标系。

三自由度,可计算但不考虑末端姿态。


轨迹规划非严格

clear 
clc
%注:以右前腿为例,电机ID分别为0,1,2
%设定初始化参数
m_l1 = 200;m_l2 = 200;  %大腿长。小腿长。旋转轴到旋转轴,旋转轴到足心
m_d1 = 100;  %关节2的连杆偏距
%角度转弧度? deg2rad(30)
m_theta_init_1 = -30/ 180 * pi;  %负的,电机1.2在初始零位时朝内侧的旋转角度,相对于水平
m_theta_init_2 = -60/ 180 * pi;  %负的,大腿杆线方向与重力方向夹角
m_theta_init_3 =  150/ 180 * pi; %正的,大腿杆线方向与小腿杆线方向的夹角,取外侧夹角,一般为钝角

theta1  = m_theta_init_1;
theta2  = m_theta_init_2;
theta3  = m_theta_init_3;
theta4  = 0;%不考虑足端姿态

theta1  = deg2rad(-45);
theta2  = deg2rad(45);
theta3  = deg2rad(45);
theta4  = 0;%不考虑足端姿态



%建立DH参数  
L1 = Link('d', 0, 'a', 0, 'alpha', 0  ,'modified');  %髋关节俯仰
L2 = Link( 'd', m_d1, 'a', 0, 'alpha', 90/180*pi ,'modified');  %髋关节横滚
L3 = Link( 'd', 0, 'a', m_l1, 'alpha', 0 ,'modified'); %膝关节横滚
L4 = Link( 'd', 0, 'a', m_l2, 'alpha', 0 ,'modified'); %足关节
% %关节限制
L(1).qlim=[-pi/6/pi*180,pi/3/pi*180];
L(2).qlim=[-pi*4/3/pi*180,pi/1.3/pi*180];
L(3).qlim=[pi/6/pi*180,pi*(5/6)/pi*180];
L(4).qlim=[-pi/pi*180,pi/pi*180];
%连成机器人
leg = SerialLink([L1 L2 L3 L4], 'name', 'Leg');
%leg = SerialLink([L1 L2 L3 ], 'name', 'Leg');
% 打印mod_DH机器人模型
leg.display();

% 设置关节初始位置
init_pos = [theta1,theta2,theta3,theta4];
syms q1 q2 q3 q4 real;
init_pos1 = [theta1,theta2,theta3,];

%输出三维
leg.plot(init_pos);

%示教
leg.teach();

%获取机器人关节角
theta1 = L1.theta;

%机器人运动学
T = leg.fkine(init_pos);
disp("末端执行器位姿:");
disp(T);

% 计算雅可比矩阵
J0 = leg.jacob0(init_pos);%关节速度映射到笛卡尔
disp("雅可比矩阵0:");
disp(J0);

Je= leg.jacobe(init_pos);%关节速度映射到笛卡尔
disp("雅可比矩阵e:");
%disp(Je)


init_pos_car = [
   0 ,        0  ,       1 ,        -12.11;
   0 ,        1  ,       0 ,        -108.5;
   1   ,      0 ,        0,        93.83;
   0  ,       0 ,        0 ,        1;
];
%init_pos_car = transl(12,12,12)
%机器人逆运动学
% Ti = leg.ikine(init_pos_car);
% disp("逆运动学:");
% disp(Ti);


% R40 = [         0 ,  43.7527, -153.2089;
%   -12.1091 ,  46.9139 ,  64.2788;
%  -108.4789 ,  81.2573,  111.3341;];
% R40J = [        0 ,  43.7527, -153.2089,0,0,0;
%   -12.1091 ,  46.9139 ,  64.2788,0,0,0;
%  -108.4789 ,  81.2573,  111.3341,0,0,0;
%  0,0,0,        0 ,  43.7527, -153.2089;
%     0,0,0,         -12.1091 ,  46.9139 ,  64.2788;
%    0,0,0,           -108.4789 ,  81.2573,  111.3341;
% ];
% J2 = R40J*Je;
% disp(J2)

%t = linspace(0,2,51); %等价于==0:0.04:2        %0-2s,进行51次插值
%[P,dP,ddP]=tpoly(0,3,t);

% 指定初末速度
%[P,dP,ddP]=tpoly(0,3,51,0.02,0.01);
% 0-3s内进行51次插值
%%

P1=[50,50,50];
P2=[250,-50,-50];
t=linspace(0,2,51);
Traj = mtraj(@tpoly,P1,P2,t);
n = size(Traj,1);
T = zeros(4,4,n);
for i=1:n
    T(:,:,i) = transl(Traj(i,:))*trotx(0);
end

Qtraj  = leg.ikunc(T);
%leg.plot(Qtraj);                   %只运动,不显示轨迹
leg.plot(Qtraj,'trail','b');           %录制轨迹
% % Five_dof.plot(Qtraj,'trail','b','movie','trail.gif');       %保存录像
%% 
hold on
plot(t,Traj(:,1),'.-',LineWidth=1)
plot(t,Traj(:,2),'.-',LineWidth=1)
plot(t,Traj(:,3),'.-',LineWidth=1)

grid on
legend('x','y','z');
xlabel('time');
ylabel('position');




% %B站
% T1 = transl(100,100,100)*trotx(150);
% T2 = transl(-100,100,100)*trotx(150);
% 
% q1  = leg.ikunc(T1);
% q2  = leg.ikunc(T2);
% 
% leg.plot(q1); 
% pause;
% leg.plot(q2);

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据提供的引用[1],可以使用MATLAB中的Robotics System Toolbox来进行机器臂三维建模。具体步骤如下: 1. 创建机器人模型:使用robotics.RigidBodyTree创建机器人模型,可以通过添加刚体和关节来定义机器人的结构。 2. 定义机器人的关节限制:可以使用rigidBodyJoint函数来定义机器人的关节限制,例如旋转关节或平移关节。 3. 定义机器人的运动学参数:可以使用robotics.RigidBody类来定义机器人的运动学参数,例如质量、惯性张量和几何形状。 4. 可视化机器人模型:可以使用show函数可视化机器人模型,以便更好地理解机器人的结构和运动。 下面是一个简单的MATLAB代码示例,用于创建一个机器人模型并可视化它: ```matlab % 创建机器人模型 robot = robotics.RigidBodyTree; % 添加刚体和关节 body1 = robotics.RigidBody('body1'); joint1 = robotics.Joint('joint1', 'revolute'); setFixedTransform(joint1,trvec2tform([0 0 0])); joint1.JointAxis = [0 0 1]; body1.Joint = joint1; addBody(robot, body1, 'base'); body2 = robotics.RigidBody('body2'); joint2 = robotics.Joint('joint2','revolute'); setFixedTransform(joint2, trvec2tform([0 0 1])); joint2.JointAxis = [0 1 0]; body2.Joint = joint2; addBody(robot, body2, 'body1'); % 定义机器人的运动学参数 body1.Mass = 1; body1.CenterOfMass = [0 0 0]; body1.Inertia = [0.1 0.1 0.1 0 0 0]; body1.Geometry = robotics.Box([1 1 1]); body2.Mass = 1; body2.CenterOfMass = [0 0 0]; body2.Inertia = [0.1 0.1 0.1 0 0 0]; body2.Geometry = robotics.Box([1 1 1]); % 可视化机器人模型 show(robot); ``` 该代码将创建一个由两个盒子组成的机器人模型,并将其可视化。第一个盒子是机器人的基座,第二个盒子是机器人的末端执行器。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值