Robot.plan_motion

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

Calculate a motion path.

Parameters:
  • goal_constraints (list 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_configuration (Configuration, 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.

  • group (str, optional) – The name of the group to plan for. Defaults to the robot’s main planning group.

  • options (dict, 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.])
>>> 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()