主要内容

建立基本刚体树模型

这个例子展示了如何使用刚体树机器人模型的元素来构建一个具有五自由度的基本机械臂。在这个例子中建立的模型代表了一个由伺服和集成电路板组成的普通桌面机器人手臂。

要从一组常见的商用机器人加载机器人模型,请使用loadrobot函数。示例请参见负载预定义机器人模型

如果您的机器人有一个URDF文件或Simscape多体™模型,您可以使用导入作为刚体树importrobot.示例请参见导入Simscape多体模型。

创建刚体元素

首先,创建一个rigidBodyTree机器人模型。刚体树机器人模型代表整个机器人,它由刚体和连接它们的关节组成。机器人的底座是一个固定的框架,它定义了世界坐标。添加第一个主体,将主体连接到基础上。

机器人= rigidBodyTree (“DataFormat”“列”);基础= robot.Base;

然后,创建一系列的链接rigidBody对象。该机器人由一个旋转底座、三个矩形臂和一个夹持器组成。

rotatingBase = rigidBody (“rotating_base”);arm1 = rigidBody (“arm1”);arm2 = rigidBody (“arm2”);arm3 = rigidBody (“arm3”);爪= rigidBody (“爪”);

为每个刚体创建不同形状和尺寸的碰撞对象。当您创建碰撞对象时,坐标帧默认位于对象的中间。设置构成属性将框架移动到每个主体的底部z设在。模型的夹持器作为一个简单的球体。

collBase = collisionCylinder (0.05, 0.04);%缸:半径、长度collBase。构成= trvec2tform([0 0 0.04/2]); coll1 = collisionBox(0.01,0.02,0.15);% box:长,宽,高(x,y,z)coll1。构成= trvec2tform([0 0 0.15/2]); coll2 = collisionBox(0.01,0.02,0.15);% box:长,宽,高(x,y,z)coll2。构成= trvec2tform([0 0 0.15/2]); coll3 = collisionBox(0.01,0.02,0.15);% box:长,宽,高(x,y,z)coll3。构成= trvec2tform([0 0 0.15/2]); collGripper = collisionSphere(0.025);%范围:半径collGripper。构成= trvec2tform([0 -0.015 0.025/2]);

将碰撞体添加到刚体对象中。

addCollision(rotatingBase,collBase) addCollision(arm1,coll1) addCollision(arm2,coll2) addCollision(arm3,coll3)

连接接头

每个刚体用一个转动关节连接。创建rigidBodyJoint每个主体的对象。指定x-轴为直角臂关节的旋转轴。指定y-轴为夹持器。默认的轴是z设在。

jntBase = rigidBodyJoint (“base_joint”“转动”);jnt1 = rigidBodyJoint (“jnt1”“转动”);jnt2 = rigidBodyJoint (“jnt2”“转动”);jnt3 = rigidBodyJoint (“jnt3”“转动”);jntGripper = rigidBodyJoint (“gripper_joint”“转动”);jnt1。JointAxis = [10 0 0];%轴jnt2。JointAxis = [10 0 0];jnt3。JointAxis = [10 0 0];jntGripper。JointAxis = [0 1 0]%轴
类型:'revolute'名称:'gripper_joint' JointAxis: [0 1 0] PositionLimits: [-3.1416 3.1416] HomePosition: 0 JointToParentTransform: [4x4 double] ChildToJointTransform: [4x4 double]

设置物体间关节连接的变换。每次变换都是基于之前刚体长度的尺寸(z设在)。偏移手臂关节在x-轴,以避免在旋转过程中发生碰撞。

setFixedTransform(jnt1,trvec2tform([0.015 0 0.04])) setFixedTransform(jnt2,trvec2tform([-0.015 0 0.15])) setFixedTransform(jnt3,trvec2tform([0.015 0 0.15])) setFixedTransform(jntGripper,trvec2tform([0 0 0.15]))

组装机器人

为身体和关节创建一个对象数组,包括原始的基础。将每个关节添加到主体中,然后将主体添加到树中。可视化每一步。

身体={基地,rotatingBase, arm1、arm2 arm3,爪};关节= {[],jntBase、jnt1 jnt2, jnt3, jntGripper};图(“名称”“组装机器人”“可见”“上”我= 2:长度(身体)%跳过基础。通过添加主体和关节进行迭代。{我}。联合关节= {};addBody(机器人,{我}尸体,尸体张{}. name)显示(机器人,“碰撞”“上”“帧”“关闭”);drawnow;结束

{

调用showdetails函数查看最终树信息的列表。确保亲子关系和关节类型正确。

showdetails(机器人)
-------------------- 机器人:(5)Idx身体名称联合名称联合类型父母名字(Idx)孩子的名字(s ) --- --------- ---------- ---------- ---------------- ---------------- 1 rotating_base base_joint转动基地(0)arm1 (2) 2 arm1 jnt1转动rotating_base (1) arm2 (3) 3 arm2 jnt2转动arm1 (2) arm3 (4) 4 arm3 jnt3转动arm2(3)爪(5)5爪gripper_joint转动arm3 (4 ) --------------------

与机器人模型互动

可视化机器人模型,确定尺寸使用interactiveRigidBodyTree对象。使用交互式GUI来移动模型。您可以选择特定的物体并设置它们的关节位置。要与机器人系统工具箱™提供的更详细的模型交互,请参见负载预定义机器人模型或者是loadrobot函数。

图(“名称”“交互式GUI”gui = interactiveRigidBodyTree(机器人,“MarkerScaleFactor”, 0.25);

{

移动互动标记来测试不同的期望夹持位置。该图形用户界面使用逆运动学生成最佳关节配置。有关交互式GUI的更多信息,请参见interactiveRigidBodyTree对象。

下一个步骤

现在您已经在MATLAB中构建了您的模型,您可能想要做许多不同的事情。

  • 执行逆运动学得到基于期望末端执行器位置的关节构型。指定除模型参数外的其他机器人约束,包括瞄准约束、笛卡尔边界或姿态目标。

  • 生成轨迹生成与跟踪基于路径点和其他具有梯形速度剖面、b样条或多项式轨迹的参数。

  • Peform机械手运动规划利用你的机器人模型和一个快速探索随机树(RRT)路径规划器。

  • 检查碰撞检测在您的环境中设置障碍物,以确保您的机器人安全有效地运动。

Baidu
map