Robot.plan_motion

Robot.plan_motion(goal_constraints, start_configuration=None, group=None, options=None)[source]

Calculate a motion path.

Parameters:
goal_constraintslist of Constraint

The goal to be achieved, defined in a set of constraints. Constraints can be very specific, for example defining value domains for each joint, such that the goal configuration is included, or defining a volume in space, to which a specific robot link (e.g. the end-effector) is required to move to.

start_configurationConfiguration, optional

The robot’s full configuration, i.e. values for all configurable joints of the entire robot, at the starting position. Defaults to the all-zero configuration.

groupstr, optional

The name of the group to plan for. Defaults to the robot’s main planning group.

optionsdict, optional

Dictionary containing the following key-value pairs:

  • path_constraints :: list of Constraint, optional

    Optional constraints that can be imposed along the solution path. Note that path calculation won’t work if the start_configuration violates these constraints. Defaults to None.

  • attached_collision_meshes :: list of compas_fab.robots.AttachedCollisionMesh

    Defaults to None.

There are additional options that are specific to the backend in use. Check the API reference of the motion planner backend implementation for more details.

Returns:
JointTrajectory

The calculated trajectory.

Examples

Using position and orientation constraints:

>>> ros = RosClient()  
>>> ros.run()  
>>> robot = ros.load_robot()  
>>> frame = Frame([0.4, 0.3, 0.4], [0, 1, 0], [0, 0, 1])  
>>> tolerance_position = 0.001  
>>> tolerances_axes = [math.radians(1)] * 3  
>>> start_configuration = Configuration.from_revolute_values(
...     [-0.042, 4.295, 0, -3.327, 4.755, 0.0]
... )  
>>> group = robot.main_group_name  
>>> goal_constraints = robot.constraints_from_frame(
...     frame, tolerance_position, tolerances_axes, group
... )  
>>> trajectory = robot.plan_motion(
...     goal_constraints, start_configuration, group, {"planner_id": "RRTConnect"}
... )  
>>> trajectory.fraction  
1.0
>>> len(trajectory.points) > 1  
True
>>> ros.close()  

Using joint constraints (to the UP configuration):

>>> ros = RosClient()  
>>> ros.run()  
>>> robot = ros.load_robot()  
>>> configuration = Configuration.from_revolute_values([0.0, -1.5707, 0.0, -1.5707, 0.0, 0.0])  
>>> tolerances_above = [math.radians(5)] * len(configuration.joint_values)  
>>> tolerances_below = [math.radians(5)] * len(configuration.joint_values)  
>>> group = robot.main_group_name  
>>> goal_constraints = robot.constraints_from_configuration(
...     configuration, tolerances_above, tolerances_below, group
... )  
>>> trajectory = robot.plan_motion(
...     goal_constraints, start_configuration, group, {"planner_id": "RRTConnect"}
... )  
>>> trajectory.fraction  
1.0
>>> len(trajectory.points) > 1  
True
>>> ros.close()