Main Content

addCapsule

Add collision capsule to rigid body

Since R2022b

    Description

    addCapsule(capapprox,bodyname,parameters,pose) adds a collision capsule at the next index of the rigid body bodyname with the specified pose and geometry parameters.

    example

    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 to add the capsule to, specified as a string scalar or character vector. The rigid body must exist in the rigidBodyTree object of the RigidBodyTree property of capapprox.

    Example: "EndEffectorTool"

    Data Types: char | string

    Radius and length of the added collision capsule, specified as a two-element row vector of the form [radius length], in meters. The radius is the radius of the spherical ends of the capsule, and the length is the length of the central line segment of the capsule.

    Example: [1 2]

    Pose for the added 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