Trajectory Planning#

Plan and execute joint and Cartesian trajectories with MoveIt2 (OMPL) or Isaac cuMotion. See Example Applications for the shared manipulator setup. All commands run through mros. For the programmatic /wmx/moveit2/* service API, see MoveIt2 Motion Planning.

Manipulator executing a planned trajectory

Basic movements on simulation#

Manipulator executing a planned trajectory

Basic movements on hardware-in-the-loop (HIL).#

Manipulator executing a planned trajectory

Basic movements on real-world scenario.#

  1. Open the scene:

    Open ~/workspaces/movensys-simulation/<MANIPULATOR_MODEL>/3a_trajectory_simulation.usd

    mros ros2 launch movensys_manipulator_description gazebo_trajectory_simulation.launch.py
    
  2. Run the simulator bridge:

    mros ros2 launch movensys_manipulator_moveit_config sim_bridge.launch.py \
         simulator:=isaacsim use_sim_time:=true
    
    mros ros2 launch movensys_manipulator_moveit_config sim_bridge.launch.py \
         simulator:=gazebo use_sim_time:=true
    
  3. Launch the planner and service API:

    mros ros2 launch movensys_manipulator_moveit_config moveit.launch.py use_sim_time:=true
    
    mros ros2 launch movensys_manipulator_isaac_ros_config isaac_cumotion.launch.py use_sim_time:=true
    

    Add rsp:=false if using Gazebo or ros2_control – both already publish /robot_description.

  4. (optional) Jog the arm from the keyboard (see Keyboard Jogging):

    mros ros2 run movensys_manipulator_moveit_config keyboard_teleop
    
  5. (optional) Execute the trajectory or coverage test:

    mros ros2 launch movensys_manipulator_moveit_config trajectory_test.launch.py use_sim_time:=true
    mros ros2 launch movensys_manipulator_moveit_config coverage_pose.launch.py use_sim_time:=true
    
  1. Open the scene:

    Open ~/workspaces/movensys-simulation/<MANIPULATOR_MODEL>/3b_trajectory_hil.usd

    mros ros2 launch movensys_manipulator_description gazebo_trajectory_hil.launch.py
    
  2. Start WMX R2 for the manipulator (real WMX runtime) with use_sim_time:=true (see ~/workspaces/movensys_ws/src/wmx-r2/doc/launch_<MANIPULATOR_MODEL>_manipulator.md).

  3. Launch the planner and service API with use_sim_time:=true:

    mros ros2 launch movensys_manipulator_moveit_config moveit.launch.py use_sim_time:=true
    
    mros ros2 launch movensys_manipulator_isaac_ros_config isaac_cumotion.launch.py use_sim_time:=true
    

    Add rsp:=false if using Gazebo or ros2_control – both already publish /robot_description.

  4. (optional) Jog the arm from the keyboard (see Keyboard Jogging):

    mros ros2 run movensys_manipulator_moveit_config keyboard_teleop
    
  5. (optional) Execute the trajectory or coverage test:

    mros ros2 launch movensys_manipulator_moveit_config trajectory_test.launch.py use_sim_time:=true
    mros ros2 launch movensys_manipulator_moveit_config coverage_pose.launch.py use_sim_time:=true
    
  1. (optional) Open the matching scene for visualization:

    Open ~/workspaces/movensys-simulation/<MANIPULATOR_MODEL>/3c_trajectory_real.usd

    mros ros2 launch movensys_manipulator_description gazebo_trajectory_real.launch.py
    
  2. Start WMX R2 for the manipulator on the robot (see ~/workspaces/movensys_ws/src/wmx-r2/doc/launch_<MANIPULATOR_MODEL>_manipulator.md).

  3. Launch the planner and service API:

    mros ros2 launch movensys_manipulator_moveit_config moveit.launch.py
    
    mros ros2 launch movensys_manipulator_isaac_ros_config isaac_cumotion.launch.py
    

    Add rsp:=false if using Gazebo or ros2_control – both already publish /robot_description.

  4. (optional) Jog the arm from the keyboard (see Keyboard Jogging):

    mros ros2 run movensys_manipulator_moveit_config keyboard_teleop
    
  5. (optional) Execute the trajectory or coverage test:

    mros ros2 launch movensys_manipulator_moveit_config trajectory_test.launch.py
    mros ros2 launch movensys_manipulator_moveit_config coverage_pose.launch.py
    

Keyboard Jogging#

keyboard_teleop drives the servo_node started by moveit.launch.py, so it works in any of the three modes once the planner is up. Pick a mode first (j / t / p), then jog.

Danger

q and Ctrl+C are not emergency stops. They terminate the keyboard_teleop process; motion stops only as a side effect, after Servo’s 0.1 s command timeout. Neither removes motor power, engages brakes, triggers STO, or stops a move_group trajectory that is already executing.

Note

This table is the key mapping only. For the configured jog speeds, the per-keypress step size, the command timeout, and the exact stopping behavior of each mode, see Keyboard jogging — speeds, steps, and stopping behavior. On a physical robot, do not use keyboard jogging as the first motion. Follow Commissioning and First Motion first.

Key

Action

j

JOINT mode – keys 16 jog joint 1…6

t

TWIST mode – Cartesian end-effector jog

p

POSE mode – nudge an absolute end-effector target pose

/

X (+ / −) – twist jog, or pose-target nudge

/

Y (− / +) – twist jog, or pose-target nudge

. / ;

Z (− / +) – twist jog, or pose-target nudge

16

Joint jog for joint 1 … 6 (JOINT mode)

w / e

Frame for TWIST jog and POSE nudge = base (world_manipulator) / eef (Link6)

r

Reverse jog direction (twist / joint)

q

Quit