Main Content

showdetails

Show details of robot model

Description

example

showdetails(robot)displays in the MATLAB®command window the details of each body in the robot model. These details include the body name, associated joint name, joint type, parent name, and children names.

Examples

collapse all

Add a rigid body and corresponding joint to a rigid body tree. EachrigidBodyobject contains arigidBodyJointobject and must be added to therigidBodyTreeusingaddBody.

创建一个rigid body tree.

rbtree = rigidBodyTree;

创建一个rigid body with a unique name.

body1 = rigidBody('b1');

创建一个revolute joint. By default, therigidBodyobject comes with a fixed joint. Replace the joint by assigning a newrigidBodyJointobject to thebody1.Jointproperty.

jnt1 = rigidBodyJoint('jnt1','revolute'); body1.Joint = jnt1;

Add the rigid body to the tree. Specify the body name that you are attaching the rigid body to. Because this is the first body, use the base name of the tree.

basename = rbtree.BaseName; addBody(rbtree,body1,basename)

Useshowdetailson the tree to confirm the rigid body and joint were added properly.

showdetails(rbtree)
-------------------- Robot: (1 bodies) Idx Body Name Joint Name Joint Type Parent Name(Idx) Children Name(s) --- --------- ---------- ---------- ---------------- ---------------- 1 b1 jnt1 revolute base(0) --------------------

Make changes to an existingrigidBodyTreeobject. You can get replace joints, bodies and subtrees in the rigid body tree.

Load example robots asrigidBodyTreeobjects.

loadexampleRobots.mat

View the details of the Puma robot usingshowdetails.

showdetails(puma1)
-------------------- 机器人:身体(6)Idx身体Name Joint Name Joint Type Parent Name(Idx) Children Name(s) --- --------- ---------- ---------- ---------------- ---------------- 1 L1 jnt1 revolute base(0) L2(2) 2 L2 jnt2 revolute L1(1) L3(3) 3 L3 jnt3 revolute L2(2) L4(4) 4 L4 jnt4 revolute L3(3) L5(5) 5 L5 jnt5 revolute L4(4) L6(6) 6 L6 jnt6 revolute L5(5) --------------------

Get a specific body to inspect the properties. The only child of theL3body is theL4body. You can copy a specific body as well.

body3 = getBody(puma1,'L3'); childBody = body3.Children{1}
childBody = rigidBody with properties: Name: 'L4' Joint: [1x1 rigidBodyJoint] Mass: 1 CenterOfMass: [0 0 0] Inertia: [1 1 1 0 0 0] Parent: [1x1 rigidBody] Children: {[1x1 rigidBody]} Visuals: {} Collisions: {}
body3Copy = copy(body3);

Replace the joint on theL3body. You must create a newJointobject and usereplaceJointto ensure the downstream body geometry is unaffected. CallsetFixedTransform如果有必要定义一个bod之间的变换ies instead of with the default identity matrices.

newJoint = rigidBodyJoint('prismatic'); replaceJoint(puma1,'L3',newJoint); showdetails(puma1)
-------------------- 机器人:身体(6)Idx身体Name Joint Name Joint Type Parent Name(Idx) Children Name(s) --- --------- ---------- ---------- ---------------- ---------------- 1 L1 jnt1 revolute base(0) L2(2) 2 L2 jnt2 revolute L1(1) L3(3) 3 L3 prismatic fixed L2(2) L4(4) 4 L4 jnt4 revolute L3(3) L5(5) 5 L5 jnt5 revolute L4(4) L6(6) 6 L6 jnt6 revolute L5(5) --------------------

Remove an entire body and get the resulting subtree usingremoveBody. The removed body is included in the subtree.

subtree = removeBody(puma1,'L4')
subtree = rigidBodyTree with properties: NumBodies: 3 Bodies: {[1x1 rigidBody] [1x1 rigidBody] [1x1 rigidBody]} Base: [1x1 rigidBody] BodyNames: {'L4' 'L5' 'L6'} BaseName: 'L3' Gravity: [0 0 0] DataFormat: 'struct'

Remove the modifiedL3body. Add the original copiedL3body to theL2body, followed by the returned subtree. The robot model remains the same. See a detailed comparison throughshowdetails.

removeBody(puma1,'L3'); addBody(puma1,body3Copy,'L2') addSubtree(puma1,'L3',subtree) showdetails(puma1)
-------------------- 机器人:身体(6)Idx身体Name Joint Name Joint Type Parent Name(Idx) Children Name(s) --- --------- ---------- ---------- ---------------- ---------------- 1 L1 jnt1 revolute base(0) L2(2) 2 L2 jnt2 revolute L1(1) L3(3) 3 L3 jnt3 revolute L2(2) L4(4) 4 L4 jnt4 revolute L3(3) L5(5) 5 L5 jnt5 revolute L4(4) L6(6) 6 L6 jnt6 revolute L5(5) --------------------

Use the Denavit-Hartenberg (DH) parameters of the Puma560® robot to build a robot. Each rigid body is added one at a time, with the child-to-parent transform specified by the joint object.

The DH parameters define the geometry of the robot with relation to how each rigid body is attached to its parent. For convenience, setup the parameters for the Puma560 robot in a matrix[1]. The Puma robot is a serial chain manipulator. The DH parameters are relative to the previous row in the matrix, corresponding to the previous joint attachment.

dhparams = [0 pi/2 0 0; 0.4318 0 0 0 0.0203 -pi/2 0.15005 0; 0 pi/2 0.4318 0; 0 -pi/2 0 0; 0 0 0 0];

创建一个rigid body tree object to build the robot.

robot = rigidBodyTree;

Create the first rigid body and add it to the robot. To add a rigid body:

  1. 创建一个rigidBodyobject and give it a unique name.

  2. 创建一个rigidBodyJointobject and give it a unique name.

  3. UsesetFixedTransformto specify the body-to-body transformation using DH parameters. The last element of the DH parameters,theta, is ignored because the angle is dependent on the joint position.

  4. CalladdBodyto attach the first body joint to the base frame of the robot.

body1 = rigidBody('body1'); jnt1 = rigidBodyJoint('jnt1','revolute'); setFixedTransform(jnt1,dhparams(1,:),'dh'); body1.Joint = jnt1; addBody(robot,body1,'base')

创建一个nd add other rigid bodies to the robot. Specify the previous body name when callingaddBodyto attach it. Each fixed transform is relative to the previous joint coordinate frame.

body2 = rigidBody('body2'); jnt2 = rigidBodyJoint('jnt2','revolute'); body3 = rigidBody('body3'); jnt3 = rigidBodyJoint('jnt3','revolute'); body4 = rigidBody('body4'); jnt4 = rigidBodyJoint('jnt4','revolute'); body5 = rigidBody(“body5”); jnt5 = rigidBodyJoint('jnt5','revolute'); body6 = rigidBody('body6'); jnt6 = rigidBodyJoint('jnt6','revolute'); setFixedTransform(jnt2,dhparams(2,:),'dh'); setFixedTransform(jnt3,dhparams(3,:),'dh'); setFixedTransform(jnt4,dhparams(4,:),'dh'); setFixedTransform(jnt5,dhparams(5,:),'dh'); setFixedTransform(jnt6,dhparams(6,:),'dh'); body2.Joint = jnt2; body3.Joint = jnt3; body4.Joint = jnt4; body5.Joint = jnt5; body6.Joint = jnt6; addBody(robot,body2,'body1') addBody(robot,body3,'body2') addBody(robot,body4,'body3') addBody(robot,body5,'body4') addBody(robot,body6,“body5”)

Verify that your robot was built properly by using theshowdetailsorshowfunction.showdetailslists all the bodies in the MATLAB® command window.showdisplays the robot with a given configuration (home by default). Calls toaxismodify the axis limits and hide the axis labels.

showdetails(robot)
-------------------- 机器人:身体(6)Idx身体Name Joint Name Joint Type Parent Name(Idx) Children Name(s) --- --------- ---------- ---------- ---------------- ---------------- 1 body1 jnt1 revolute base(0) body2(2) 2 body2 jnt2 revolute body1(1) body3(3) 3 body3 jnt3 revolute body2(2) body4(4) 4 body4 jnt4 revolute body3(3) body5(5) 5 body5 jnt5 revolute body4(4) body6(6) 6 body6 jnt6 revolute body5(5) --------------------
显示(机器人);axis([-0.5,0.5,-0.5,0.5,-0.5,0.5]) axisoff

References

[1] Corke, P. I., and B. Armstrong-Helouvry. “A Search for Consensus among Model Parameters Reported for the PUMA 560 Robot.”Proceedings of the 1994 IEEE International Conference on Robotics and Automation, IEEE Computer. Soc. Press, 1994, pp. 1608–13.DOI.org (Crossref), doi:10.1109/ROBOT.1994.351360.

Input Arguments

collapse all

Robot model, specified as arigidBodyTreeobject.

Version History

Introduced in R2016b