moveit / moveit_task_constructor

A hierarchical multi-stage manipulation planner
https://moveit.github.io/moveit_task_constructor
BSD 3-Clause "New" or "Revised" License
184 stars 152 forks source link

Solution trajectory does not include time parameterization #591

Closed Carson-Stark closed 4 months ago

Carson-Stark commented 4 months ago

I am following the moveit tutorial here with the MTC humble branch.

I am able to get a successful plan for the pick operation, but the "move to pick" connection stage fails when executing. [ur_ros2_control_node-1] [ERROR] [1720466677.224820132] [scaled_joint_trajectory_controller]: Time between points 0 and 1 is not strictly increasing, it is 0.000000 and 0.000000 respectively

I inspected the trajectory published to /solution, and it seems like time_from_start, velocity, and acceleration are all 0 for every point. I suspect that I am missing something in my config or a property when the planner is initialized. I am able to visualize the solution in rviz without any issues.

rhaschke commented 4 months ago

It's a problem of the ROS controller that such a trajectory is not executed. Are the two corresponding waypoints identical?

Carson-Stark commented 4 months ago

Here is a snippet from the solution trajectory. The waypoints show different positions but they are all at time 0.

trajectory: joint_trajectory: header: stamp: sec: 0 nanosec: 0 frame_id: world joint_names:

rhaschke commented 4 months ago

Sorry, I didn't read your initial issue report carefully enough. Indeed, your trajectory is missing the time parameterization. This is added via a planning request adapter, that needs to be configured in your ompl_planning_pipeline.launch.xml as follows:

  <!-- The request adapters (plugins) used when planning with OMPL. ORDER MATTERS! -->
  <arg name="planning_adapters"
       default="default_planner_request_adapters/AddTimeParameterization
                default_planner_request_adapters/ResolveConstraintFrames
                default_planner_request_adapters/FixWorkspaceBounds
                default_planner_request_adapters/FixStartStateBounds
                default_planner_request_adapters/FixStartStateCollision
                default_planner_request_adapters/FixStartStatePathConstraints"
                />

See the tutorial for details: https://moveit.github.io/moveit_tutorials/doc/time_parameterization/time_parameterization_tutorial.html

Carson-Stark commented 4 months ago

That worked. I was missing moveit_config.planning_pipelines in my launch file so the ompl_planning.yaml file was not being loaded properly.

pick_place_task = Node(
        package="pick_and_place",
        executable="pick_and_place_node",
        output="screen",
        parameters=[
            moveit_config.joint_limits,
            moveit_config.planning_pipelines,
            moveit_config.robot_description,
            moveit_config.robot_description_semantic,
            moveit_config.robot_description_kinematics,
        ],
    )