主要内容

checkCollision

检查机器人平台和目标的身体碰撞

自从R2023a

    描述

    (iscolliding,separationdist,witnesspts)= checkCollision (平台,targetbody)检查之间的碰撞rigidBodyTree基于机器人平台平台和一组目标的身体targetbody

    例子

    (___)= checkCollision (___,名称=值)指定使用一个或多个名称参数选项,除了所有参数从之前的语法。

    例子

    全部折叠

    创建一个robotScenario对象。

    场景= robotScenario (UpdateRate = 1, StopTime = 10);

    创建一个rigidBodyTree对象的Franka Emika熊猫机械手使用loadrobot

    robotRBT = loadrobot (“frankaEmikaPanda”);

    创建一个rigidBodyTreerobotPlatform使用机械手模型对象。

    机器人= robotPlatform (“操纵者”场景,RigidBodyTree = robotRBT);

    创建一个非rigidBodyTreerobotPlatform一个盒子来操纵的对象。指定网格类型和大小。

    盒= robotPlatform (“盒子”场景中,碰撞=“网”,InitialBasePosition = [0.5 0.15 0.278]);updateMesh(盒子,“长方体”碰撞=“网”、大小= (0.06 0.06 0.1))

    想象的场景。

    ax = show3D(场景中,碰撞=“上”);视图(79年,36)光

    指定的初始和拾音器联合配置机械手,将机械手从最初对接近。

    initialConfig = homeConfiguration (robot.RigidBodyTree);pickUpConfig = [0.2371 -0.0200 0.0542 -2.2272 0.00132.2072 -0.9670 0.0400 0.0400);

    创建一个RRT路径规划使用manipulatorRRT对象,并指定机械手模型。

    规划师= manipulatorRRT (robot.RigidBodyTree scenario.CollisionMeshes);计划。IgnoreSelfCollision = true;

    计划之间的路径的初始和拾音器联合配置。然后,想象整个路径,插入路径成小步骤。

    rng (“默认”)路径=计划(计划、initialConfig pickUpConfig);路径=插入(规划师,路径,25);

    建立了模拟。

    设置(场景)

    之前检查碰撞机械手拿起盒子。

    checkCollision(机器人,“盒子”,IgnoreSelfCollision =“上”)
    ans =逻辑0

    移动机械手的关节沿路径和可视化的场景。

    helperRobotMove(路径,机器人,场景,ax)

    检查碰撞后机械手拿起盒子。

    checkCollision(机器人,“盒子”,IgnoreSelfCollision =“上”)
    ans =逻辑1

    使用附加函数把盒子机械手的夹持。

    附加(机器人,“盒子”,“panda_hand”,ChildToParentTransform = trvec2tform ([0 0 0.1]))

    指定的下降联合配置机械手移动机械手的上车对箱子下车姿势。

    dropOffConfig = [-0.6564 0.2885 -0.3187 -1.5941 0.11031.8678 -0.2344 0.04 0.04);

    计划之间的道路上车和下车联合配置。

    路径=计划(计划、pickUpConfig dropOffConfig);路径=插入(规划师,路径,25);

    移动机械手的关节沿路径和可视化的场景。

    helperRobotMove(路径,机器人,场景,ax)

    使用分离函数分离机械手爪的盒子。

    分离(机器人)

    计划下降之间的路径和初始联合配置移动机械手从盒子下降对初始姿势。

    路径=计划(计划、dropOffConfig initialConfig);路径=插入(规划师,路径,25);

    移动机械手的关节沿路径和可视化的场景。

    helperRobotMove(路径,机器人,场景,ax)

    图包含一个坐标轴对象。坐标轴对象包含东(m), ylabel北(m)包含47块类型的对象,线。这些对象代表panda_link1_coll_mesh, panda_link2_coll_mesh、panda_link3_coll_mesh panda_link4_coll_mesh, panda_link5_coll_mesh, panda_link6_coll_mesh, panda_link7_coll_mesh, panda_hand_coll_mesh, panda_leftfinger_coll_mesh, panda_rightfinger_coll_mesh panda_link0_coll_mesh。

    Helper函数移动机械手的关节。

    函数helperRobotMove(路径,机器人,场景,ax)idx = 1:尺寸(路径,1)jointConfig =路径(idx:);(移动机器人,“联合”jointConfig) show3D(场景,fastUpdate = true,父母= ax,碰撞=“上”);drawnow推进(场景);结束结束

    输入参数

    全部折叠

    rigidBodyTree基于机器人平台,作为一个指定robotPlatform对象。

    rigidBodyTree的目标平台,指定为字符串标量,特征向量,特征向量的字符串数组,数组或单元。

    例子:“盒子”

    例子:“盒子”

    例子:(“盒”,“可以”)

    例子:{“盒”,“可以”}

    数据类型:字符|字符串

    名称-值参数

    指定可选的双参数作为Name1 = Value1,…,以=家,在那里的名字参数名称和吗价值相应的价值。名称-值参数必须出现在其他参数,但对的顺序无关紧要。

    例子:详尽的= " "

    详尽的检查所有的碰撞,指定为“上”“关闭”。设置这个“关闭”当第一个发现碰撞中断碰撞检查。如果回来早,separationdistwitnesspts值不完整的检查。设置这个“上”计算分离距离和见证点对。

    例子:详尽的= " "

    数据类型:字符|字符串

    跳过检查机器人的身体和基础之间的碰撞,指定为“上”“关闭”

    例子:IgnoreSelfCollision = " "

    数据类型:字符|字符串

    身体对跳过检查self-collisions,指定为“父”“附近”

    • “父”——孩子和家长之间跳过碰撞检查身体。

    • “附近”-跳过碰撞检查身体之间相邻的指数。

    例子:SkippedSelfCollisions =“邻”

    数据类型:字符|字符串

    输出参数

    全部折叠

    指标与目标体自碰撞和碰撞,作为双元素返回逻辑向量或逻辑标量。如果IgnoreSelfCollision被设置为“上”,然后iscolliding是一个逻辑标量来指示机器人平台与目标的身体碰撞。

    数据类型:逻辑

    分离距离目标机构和机器人平台机构包括基地,作为一个返回(N+ 1)——- - - - - -(N++ 1)矩阵。N是机器人平台的数量。是目标体的数量。如果IgnoreSelfCollision被设置为“上”,separationdist是一个(N+ 1)——- - - - - -矩阵的列索引对应目标的身体。

    返回不完整的检查。

    数据类型:

    机器人平台的见证点之间的身体包括基地,作为一个返回3 (N+ 1)——- - - - - -2 (N+ 1)矩阵。N是身体的数量。矩阵的格式:

    ( W r 1 _ 1 W r 1 _ 2 W r 1 _ ( N ) W r 2 _ 1 W r 2 _ 2 W r 2 _ ( N ) W r ( N + 1 ) _ 1 W r ( N + 1 ) _ 2 W r ( N + 1 ) _ ( N ) W r 1 _ ( N + 1 ) W r 2 _ ( N + 1 ) W r ( N + 1 ) _ ( N + 1 ) ]

    每一个元素,或者说是出最近的,是一个3×2矩阵(xyz]点相对应的两个身体的机器人平台。最后一行和列对应于机器人平台的基础。

    返回不完整的检查。

    数据类型:

    版本历史

    介绍了R2023a