主要内容

交互式地构建ABB YuMi机器人的轨迹

方法的使用interactiveRigidBodyTree对象来移动一个机器人,设计一个轨迹,并回放它。

加载机器人可视化和构建环境

加载“abbYumi”机器人模型。使用初始化交互图形interactiveRigidBodyTree.保存当前轴。

机器人=装载机器人(“abbYumi”“重力”, [0 0 -9.81]);iviz = interactiveRigidBodyTree(机器人);Ax = gca;

构建一个由代表地板的碰撞盒、两个带有物体的架子和一个中心桌子组成的环境。

plane = collionbox (1.5,1.5,0.05);飞机。姿态= trvec2tform([0.25 0 -0.025]);表演(飞机,“父”、ax);leftShelf = collionbox (0.25,0.1,0.2);leftShelf。姿态= trvec2tform([0.3 -.]65年0.1]);[~, patchObj] = show(leftShelf,“父”、ax);patchObj。FaceColor = [0 0 1];rightShelf = collionbox (0.25,0.1,0.2);rightShelf。Pose = trvec2tform([0.3 .65 0.1]);[~, patchObj] = show(rightShelf,“父”、ax);patchObj。FaceColor = [0 0 1];leftWidget = collisionCylinder(0.01, 0.07);leftWidget。Pose = trvec2tform([0.3 -0.65 0.225]);[~, patchObj] = show(leftWidget,“父”、ax);patchObj。FaceColor = [1 0 0];righttwidget = collisionBox(0.03, 0.02, 0.07);rightWidget。Pose = trvec2tform([0.3 0.65 0.225]);[~, patchObj] = show(righttwidget,“父”、ax);patchObj。FaceColor = [1 0 0];centerTable = collisionBox(0.5,0.3,0.05);centerTable。Pose = trvec2tform([0.75 0 0.025]);[~, patchObj] = show(centerTable,“父”、ax);patchObj。FaceColor = [0 1 0];

{

交互生成配置

使用交互式可视化来移动机器人并设置配置。当图形初始化时,机器人处于主构型,手臂交叉。放大并单击末端执行器以获取更多信息。

要选择主体作为结束执行器,右键单击主体进行选择。

标记体也可以在命令行中指定:

iviz。MarkerBodyName =“gripper_r_base”

设置完主体之后,使用提供的标记元素来移动标记,所选择的主体随之移动。拖动中间的灰色标记将在笛卡尔空间中移动标记。红色、绿色和蓝色轴将标记沿着xyz相互重合。圆圈围绕等效颜色的轴旋转标记。

您还可以通过右键单击关节并单击来移动单个关节切换标记控制方法。

MarkerControlMethod属性设置为“JointControl”

这些步骤也可以通过直接更改对象的属性来完成。

iviz。MarkerBodyName =“yumi_link_2_r”;iviz。MarkerControlMethod =“JointControl”

{

更改为关节控制会产生一个黄色标记,允许直接设置关节位置。

迭代地移动机器人,直到你有一个想要的配置。使用addConfiguration.方法将当前配置添加到StoredConfigurations财产。

addConfiguration (iviz)

定义轨迹的路点

类中提供了一组配置,以实现本例的目的.mat文件。

加载配置,并将其指定为存储的配置集。属性添加第一个配置配置财产和职业addConfiguration,您可以交互地完成该操作,但其余的操作只需通过赋值StoredConfigurations直接的财产。

负载abbYumiSaveTrajectoryWaypts.matremoveConfigurations (iviz)清除存储的配置%从有效的开始配置开始iviz。配置= startingConfig;

{

addConfiguration (iviz)指定整个路径点集iviz。StoredConfigurations = [startingConfig,]...graspApproachConfig,...graspPoseConfig,...graspDepartConfig,...placeApproachConfig,...placeConfig,...placeDepartConfig,...startingConfig];

生成轨迹并回放

一旦所有的路径点都存储好了,就可以构造一个机器人所遵循的轨迹。对于本例,使用trapveltraj.梯形速度剖面意味着机器人在每个航路点平稳地停止,但在运动中达到设定的最大速度。

numSamples = 100*size(iviz.)StoredConfigurations,2) + 1; [q,~,~, tvec] = trapveltraj(iviz.StoredConfigurations,numSamples,“EndTime”2);

通过迭代生成的轨迹来重放生成的轨迹矩阵,它表示在每个路径点之间移动的一系列关节配置。在这种情况下,使用速率控制对象来确保播放速度反映实际执行速度。

iviz。ShowMarker = false;showFigure(iviz) rateCtrlObj = rateControl(numSamples/(max(tvec) + tvec(2)));i = 1:numSamples iviz。配置= q(:,i); waitfor(rateCtrlObj);结束

{

图中显示机器人在所有定义的路径点之间执行平滑的轨迹。