Main Content

updatePose

Update pose of collision capsule of rigid body

Since R2022b

    Description

    updatePose(capapprox,bodyname,pose) updates the pose of the first collision capsule of the rigid body with the new pose.

    example

    updatePose(___,idx) updates the pose of the collision capsule at index idx, in addition to the arguments from the previous syntax.

    Examples

    collapse all

    Load a robot into the workspace and visualize it.

    robotIRB = loadrobot("abbIrb120");
    show(robotIRB);

    Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 24 objects of type patch, line. These objects represent base_link, base, link_1, link_2, link_3, link_4, link_5, link_6, tool0, link_1_mesh, link_2_mesh, link_3_mesh, link_4_mesh, link_5_mesh, link_6_mesh, base_link_mesh.

    Create a capsule approximation of the robot, and visualize the capsule-approximated robot model.

    capsIRB = capsuleApproximation(robotIRB);
    figure
    show(capsIRB,homeConfiguration(capsIRB.RigidBodyTree));

    Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 31 objects of type patch, line. These objects represent base_link, base, link_1, link_2, link_3, link_4, link_5, link_6, tool0, link_1_mesh, link_2_mesh, link_3_mesh, link_4_mesh, link_5_mesh, link_6_mesh, base_link_mesh, link_1_coll_mesh, link_2_coll_mesh, link_3_coll_mesh, link_4_coll_mesh, link_5_coll_mesh, link_6_coll_mesh, base_link_coll_mesh.

    Use the getCapsules function to see if the end effector, "tool0", has any collision capsules. Because tool0 is just a frame, it has no collision mesh to approximate as a collision capsule.

    capsulesTool = getCapsules(capsIRB,"tool0")
    capsulesTool =
    
      1x0 empty cell array
    

    Add a capsule to tool0, at a position 0.15 meters along the x-axis, with a radius of 0.15 and a length of 0.

    addCapsule(capsIRB,"tool0",[0.15 0],trvec2tform([0.15 0 0]))
    show(capsIRB,homeConfiguration(capsIRB.RigidBodyTree));

    Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 32 objects of type patch, line. These objects represent base_link, base, link_1, link_2, link_3, link_4, link_5, link_6, tool0, link_1_mesh, link_2_mesh, link_3_mesh, link_4_mesh, link_5_mesh, link_6_mesh, base_link_mesh, link_1_coll_mesh, link_2_coll_mesh, link_3_coll_mesh, link_4_coll_mesh, link_5_coll_mesh, link_6_coll_mesh, base_link_coll_mesh, tool0_coll_mesh.

    Again check tool0 for a collision capsule, and verify the properties of the detected capsule.

    capsulesTool = getCapsules(capsIRB,"tool0")
    capsulesTool = 1x1 cell array
        {1x1 collisionCapsule}
    
    
    capsulesTool{1}
    ans = 
      collisionCapsule with properties:
    
        Radius: 0.1500
        Length: 0
          Pose: [4x4 double]
    
    

    Remove the capsule from the base link. Then, reduce the collision capsule size of tool0, and move it -0.05 meters from the previous position along the x-axis.

    removeCapsule(capsIRB,"base_link",1)
    updatePose(capsIRB,"tool0",trvec2tform([-0.05 0 0]),1)
    updateGeometry(capsIRB,"tool0",[.1 0.01],1)
    show(capsIRB,homeConfiguration(capsIRB.RigidBodyTree));

    Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 31 objects of type patch, line. These objects represent base_link, base, link_1, link_2, link_3, link_4, link_5, link_6, tool0, link_1_mesh, link_2_mesh, link_3_mesh, link_4_mesh, link_5_mesh, link_6_mesh, base_link_mesh, link_1_coll_mesh, link_2_coll_mesh, link_3_coll_mesh, link_4_coll_mesh, link_5_coll_mesh, link_6_coll_mesh, base_link_coll_mesh, tool0_coll_mesh.

    Input Arguments

    collapse all

    Capsule approximation of a rigid body tree, specified as a capsuleApproximation object.

    Name of the rigid body, specified as a string scalar or character vector. The rigid body must exist in the rigidBodyTree object of the RigidBodyTree property of capsapprox.

    Example: "EndEffectorTool"

    Data Types: char | string

    Index of the collision capsule in the rigid body, specified as a nonnegative integer.

    Example: 5

    Updated pose for the collision capsule, specified as a 4-by-4 homogeneous transformation matrix defined with respect to the frame of the rigid body bodyname.

    Example: eye(4)

    Extended Capabilities

    C/C++ Code Generation
    Generate C and C++ code using MATLAB® Coder™.

    Version History

    Introduced in R2022b