这个例子展示了如何计算一个简单的2D机械手使用inverseKinematics
类。机械臂机器人是一种具有转动关节的简单的2自由度平面机械臂,由刚体装配成一个具有转动关节的平面机械臂rigidBodyTree
对象。在二维平面上创建一个圆形轨迹,并作为点给出给逆运动学求解器。求解器计算所需的关节位置,以实现这一轨迹。最后,动画显示机器人实现圆轨迹的构型。
创建一个rigidBodyTree
物体和刚体及其相关关节。指定每个刚体的几何属性并将其添加到机器人中。
从一个空白的刚体树模型开始。
机器人= rigidBodyTree (“DataFormat”,“列”,“MaxNumBodies”3);
指定机器人手臂的手臂长度。
L1 = 0.3;L2 = 0.3;
添加“link1”
的身体“joint1”
关节。
身体= rigidBody (“link1”);联合= rigidBodyJoint (“joint1”,“转动”);setFixedTransform(关节,trvec2tform ([0 0 0]));关节。JointAxis = [0 0 1];的身体。联合=联合;addBody(机器人,身体,“基地”);
添加“link2”
的身体“joint2”
关节。
身体= rigidBody (“link2”);联合= rigidBodyJoint (“joint2”,“转动”);setFixedTransform(关节,trvec2tform ((L1, 0, 0)));关节。JointAxis = [0 0 1];的身体。联合=联合;addBody(机器人,身体,“link1”);
添加“工具”
终端执行器与“fix1”
固定的联合。
身体= rigidBody (“工具”);联合= rigidBodyJoint (“fix1”,“固定”);setFixedTransform(joint, trvec2tform([L2, 0, 0]));的身体。联合=联合;addBody(机器人,身体,“link2”);
显示机器人的详细信息以验证输入属性。机器人的刚体应具有两个非固定关节,末端执行器应具有一个固定关节。
showdetails(机器人)
-------------------- 机器人:(3)Idx身体名称联合名称联合类型父母名字(Idx)孩子的名字(s ) --- --------- ---------- ---------- ---------------- ---------------- 1 link1 joint1转动基地(0)link2 (2) 2 link2 joint2转动link1(1)(3) 3工具fix1固定link2 (2 ) --------------------
定义一个要在10秒内追踪的圆。这个圆在xy半径为0.15的平面。
t =(0:0.2:10)”;%的时间数=长度(t);中心= [0.3 0.1 0];半径= 0.15;θ= t *(2 *π/ t(结束));点=中心+半径*[cos(theta) sin(theta) 0 (size(theta))];
使用一个inverseKinematics
目标是找到一个机器人构型的解决方案,以实现给定的末端执行器位置沿轨迹。
以矩阵的形式预分配配置方案万博 尤文图斯qs
.
q0 = homeConfiguration(机器人);ndof =长度(q0);q = 0 (count, ndof);
创建逆运动学求解器。因为xy笛卡儿点是此工作流末端执行器姿态的唯一重要因素,为第四和第五元素指定非零权重重量
向量。所有其他元素都设置为零。
本土知识= inverseKinematics (“RigidBodyTree”,机器人);Weights = [0, 0, 0, 1, 1, 0];endEffector =“工具”;
通过循环点的轨迹来追踪圆。调用本土知识
对象生成达到末端执行器位置的关节构型。存储稍后使用的配置。
qInitial = q0处;%使用home配置作为初始猜测为i = 1:计数%求解满足所需末端执行器的配置%的位置点=点(我:);本土知识qSol = (endEffector trvec2tform(点),重量、qInitial);%存储配置qs(我:)= qSol;%从之前的解决方案开始qInitial = qSol;结束
使用特定的机器人配置为解决方案的每个框架绘制机器人。同样,画出想要的轨迹。
以轨迹的第一个配置显示机器人。调整绘图以显示绘制圆的二维平面。画出想要的轨迹。
图显示(机器人,qs (: 1) ');视图(2)ax = gca;斧子。投影=“拼写”;持有在情节(点(:1),点(:,2),“k”轴([-0.1 0.7 -0.3 0.5])
建立了一个rateControl
对象以每秒15帧的固定速率显示机器人轨迹。从逆运动学求解器中显示每个构型的机器人。观察手臂沿着所示的圆形轨迹运动。
framesPerSecond = 15;r = rateControl (framesPerSecond);为I = 1:count show(robot,qs(I,:)',“PreservePlot”、假);drawnow waitfor (r);结束
inverseKinematics
|rigidBody
|rigidBodyJoint
|rigidBodyTree