Create a revolute, prismatic, and fixed joint constraints for a simple rigid body tree.

**Revolute Joint Constraint**

To demonstrate a revolute joint constraint, create a four-bar linkage by connecting the end of the last link, `link3`

, and the first link, `link0`

.

Create a generalized inverse kinematics solver with a revolute joint constraint and a joint bounds constraint.

To ensure repeatable IK solutions, disable random restarts.

Fix the first joint by setting `theta`

as both the minimum and maximum bound.

Create a revolute joint constraint with successor and predecessor bodies set to the last link `link3`

and the first link `link0,`

respectively. Specifiy predecessor and successor transforms that create intermediate frames `1`

meter away, in the *X*-axis, from their respective body. Once defined, these intermediate frames move such that their frame origins coincide when their *Z*-axes align.

Provide `[theta 0 0]`

as an initial guess to the solver, along with the constraints.

Visualize the robot to see the robot acting as a four-bar linkage. If the first joint rotates, the solver tries to keep the intermediate frames of the revolute joint constraint coincident, acting as a joint and resulting in four-bar motion.

ans =
Axes (Primary) with properties:
XLim: [-2.5000 2.5000]
YLim: [-2.5000 2.5000]
XScale: 'linear'
YScale: 'linear'
GridLineStyle: '-'
Position: [0.1300 0.1100 0.7750 0.8150]
Units: 'normalized'
Show all properties

**Prismatic Joint Constraint**

Use a prismatic joint constraint to create a slider-crank. Create a new solver with a prismatic joint constraint and a joint bounds constraint.

Create the prismatic joint constraint with `link3`

and `link0`

as the successor and predecessor bodies, respectively, and set the predecessor transfrom such that the predecessor intermediate frame is `1`

meter away on the *X*-axis and rotated `pi/2`

in the *Y*-axis from the predecessor body frame.

Provide `[theta 0 0]`

as an initial guess to the solver along with the constraints.

Visualize the robot to see the robot acting as a slider-crank. If the first joint rotates, the solver tries to keep the intermediate frames of the prismatic joint constraint coincident, acting as a joint and resulting in slider-crank motion.

ans =
Axes (Primary) with properties:
XLim: [-2.5000 2.5000]
YLim: [-2.5000 2.5000]
XScale: 'linear'
YScale: 'linear'
GridLineStyle: '-'
Position: [0.1300 0.1100 0.7750 0.8150]
Units: 'normalized'
Show all properties

**Fixed Joint Constraint**

To demonstrate a fixed joint constraint, create a triangle with the links that is preserved when the first joint moves. Create a new solver with a fixed joint constraint.

Create the fixed joint constraint with `link3`

and `link0`

as the successor and predecessor bodies, respectively, and set the successor transform such that the predecessor intermediate frame is `1`

meter away on the *X*-axis from the predecessor body frame.

Set the weight of the orientation constraint of the fixed joint constraint to `0`

.

Visualize the robot to see how the fixed constraint joint acts on the robot frame. If the first joint rotates, the solver tries to keep the intermediate frames of the fixed joint constraint coincident, acting as a fixed joint.

ans =
Axes (Primary) with properties:
XLim: [-2.5000 2.5000]
YLim: [-2.5000 2.5000]
XScale: 'linear'
YScale: 'linear'
GridLineStyle: '-'
Position: [0.1300 0.1100 0.7750 0.8150]
Units: 'normalized'
Show all properties