Skip to main content
Version: 8

1. Basic Usage

đź•’ Duration: 1-2 hours
đź’Ş Level: Beginner

Four Course Overview​

Welcome to MoveIt Pro's four part tutorial series for teaching you how to use MoveIt Pro. These four tutorials are self-paced, and can be completed independently within two hours each. If you prefer a more guided experience, the same material is also covered in our monthly live training sessions, but with expert engineers available to answer questions and guide you through the material.

Training Goals​

The tutorials all build on top of each other, and assume you have completed the previous tutorial:

  • Tutorial 1 leverages our optional, yet comprehensive, user interface, to make the beginner experience easy.
  • Tutorial 2 covers how to use MoveIt Pro without its frontend, diving into the runtime SDK, Python integrations, and how to build Behavior plugins / extensions.
  • Tutorial 3 teaches more advanced Behavior Tree concepts with subtrees, as well as using more computer vision and machine learning.
  • Tutorial 4 teaches advanced motion planning and control concepts, including the many types of dynamic trajectory generation, collision checking, and Cartesian control.

Tutorial 1 Basic Usage - Overview​

This tutorial is designed to be your first hands-on introduction to the high level functionality of the platform, giving you a general overview of MoveIt Pro, including how to:

  • Create and run your own robot applications (Objectives) using Behavior Trees.
  • Leverage teleoperation tools
  • Build a pick-and-place workflows
  • Set up keep-out zones
  • Integrate human-in-the-loop recovery

Pre-reqs​

We assume you have already installed MoveIt Pro and have some familiarity with robotic arms.

Start MoveIt Pro​

Launch the application if you haven't already, using:

moveit_pro run -c lab_sim

Exploring the User Interface​

You should a UI similar to the following, though the exact view pane layout may vary as it is customizable:

UI Layout

Panes Overview​

blank

Make sure the Run tab is selected.

info

An Objective is basically an application in MoveIt Pro, though it can also be a lower level function (a subtree) that is then combined into a higher level Objective. Objectives are created using behavior trees, which are similar to state machines. Behavior Trees are composed of Behaviors, which are the low-level nodes or skills. An example of a Behavior is opening a gripper or moving to a pose. To learn more about Behaviors, see the Behaviors Concepts Page.

Customizing the Panes​

Your configuration of panes may vary depending on previously saved settings. The following diagram highlights some of the ways to customize your view panes:

Customizations

Try it yourself:

  • Use "Change view pane option" to change the bottom right pane to /wrist_camera/color. This will allow you to see the camera view of the camera mounted on the robot’s wrist.

wrist_camera_color

  • Change the number of windows available by clicking on the Pane Selection menu in the top right. Select the 3 pane view option
info

More information about each pane:

Visualization Pane​

Displays a rendering of what the robot understands of the world, similar to the common Rviz visualizer in ROS. In MoveIt Pro this understanding of the world is stored in a Planning Scene. The Planning scene is a combination of our robot’s URDF model, point clouds, octomaps, meshes, and geometric primitives. These data sources are used to avoid collision with the robot and the world.

For lab_sim, you should see a robot arm on a rail. We shouldn't see any other objects from the simulated scene, since the robot has not 'perceived' them yet. The view of the scene can be adjusted by clicking within the pane and dragging the mouse around. The left mouse button rotates the scene, and the right mouse button drags the scene.

Camera Feeds​

The /scene_camera/color, /scene_camera/depth, /wrist_camera/color, and /wrist_camera/depth panes show the camera feeds from the underlying simulator. If you were connected to hardware, these cameras would show the real world and not simulations. By default, these are set to the scene cameras, which are simulated third-person views of the robot, both in color, and depth respectively.

Behavior Tree Pane​

In this pane the most recently run Objective is shown, if any. While running an Objective, this pane will highlight which Behavior is currently executing, which is useful for debugging and introspection.

Blackboard Pane​

This pane shows the variables being passed around on the Behavior Tree blackboard. These parameters are the key data that is passed around between Behavior nodes.

Scan the environment into the scene​

You might notice our virtual world in the Visualization pane is a bit empty - let’s scan in the entire environment by running the _Scan Scene Objective. We can find it in three different ways:

  • In the favorites toolbar (clicking runs automatically)
  • By scrolling through the Objectives sidebar categories
  • Or by typing in the name of the Objective in the sidebar search area

If using the sidebar, click the play icon next to _Scan Scene to run the Objective, and you should see:

Scan Scene

info

Planning Scene

The planning scene is a representation of the robot's environment, including the robot itself, obstacles, and other objects. It is used by motion planners to determine valid paths and trajectories for the robot. In MoveIt Pro, the planning scene is represented by the moveit_msgs::PlanningScene message type.

Obstacles can be added manually from the UI (keep-out zones), in Behavior Trees via planning scene manipulation Behaviors, or automatically from perception data by configuring the perception pipeline.

Running an example lab application​

Navigate to the Run view and choose Move Flasks to Burners. You can use the search bar at the top of the sidebar to find this Objective quickly.

We should see the robot arm pick up each of the three flasks on the left side of the workspace and move them to the burner on the right. When finished, the Objective status should update to Objective complete!

Objective complete!

Now run the Push Button Objective and the robot will press on the controls of a simulated burner to heat up the Flasks 🧪. This Objective uses admittance/force control to push the button with an exact force. That’s science! ⚗️

tip

In this beginner tutorial we are showing you how to do everything from the UI. However, MoveIt Pro ships with a powerful API that allows you to start, stop, and monitor Objectives in a headless mode, without the UI.

Modifying the Planning Scene​

We can clear the scanned in environment at any time by running the Clear Snapshot Objective - try that now. We should see the Visualization pane be cleared out.

Next you can take a snapshot from a different camera - the camera on the robot’s wrist. Run Take Wrist Camera Snapshot Objective and you should see a much smaller area show up as a point cloud.

Restore the full scene by running _Scan Scene a second time.

Stop looping Objectives​

Some applications will run forever, until you tell it to stop. The 3 Waypoints Pick and Place Objective is a simple example like that - run it now. It will pick a small cube object using hard-coded waypoints forever.

Use the Stop Motion button on the top right to stop the loop once we've seen it through once and put the block back where it started. We'll see the Objective status change from Executing to Objective canceled

Executing

To reset the robot pose back to its original pose, run the Look at Table Objective. This Objective is an example of a very simple Behavior Tree that simply commands the robot to named waypoint. We can also move to waypoints using the Teleoperate functionality that is covered later in this tutorial.

Running an example ML Objective​

MoveIt Pro offers a powerful set of tools for using machine learning models within your robot application, while still providing safety and reliability guardrails. One example that ships out of the box is ML-based image segmentation. Given a text prompt like “hotdog”, the model will search for all instances of hotdogs within the camera field of view, and return its location for use in manipulation.

warning

Not all computers are powerful enough to run ML models, especially if they do not have a dedicated GPU. In particular, this Objective can take upwards of 1 GB of VRAM to run on top of the approximated 1 GB MoveIt Pro uses.

Let’s run the ML Segment Image from Text Prompt Objective. The default value of the prompt string is an object. The output of this Objective is a new camera topic /masks_visualization that should automatically be added to our view panes, with all the detected objects highlighted in different colors.

blank

Modify the example ML Objective​

Now we are going to edit the ML Segment Image from Text Prompt Objective by selecting the Edit button on the top right of the menu bar.

Edit Button

We should see the Behavior Tree ready to be edited:

Segment Image From Text Objective

Click on the Segment Image from No Negative Text Prompt Subtree so that a sidebar opens on the right side. In this sidebar you can easily set and edit parameters.

Segment Image Subtree

Scroll down in the sidebar until you see the prompts variable, towards the bottom.

Prompts input

Change the value from an object to bottle. This will prompt the ML model to find only bottles in the camera image.

Now choose the Run button from the top right of the menu bar to run the Objective again. We'll see the /masks_visualization camera image update to show only the bottles are segmented.

blank

Try changing the value of prompts to block and you should see that the blocks are now segmented. For fun, try random inputs like “dog” and see what happens. 🥴

View Parameters on the Blackboard​

Now that you are editing parameters within Behavior Trees, we should mention that MoveIt Pro uses a blackboard to store and share data between Behaviors and Behavior Trees. To view the state of the blackboard, choose Blackboard from the drop down menu in any view pane. Then expand the arrow buttons to see the variables within each subtree, and you should see a list of variables that are currently on the blackboard.

info

You'll learn more about the concept of subtrees in Tutorial 2

Blackboard

Find the variable named prompts and its value should be whatever you most recently set it to. This tool is useful for debugging complex data flows within a Behavior Tree.

Picking and Grasping with ML​

Another way to segment an object is by clicking on it. The ML Auto Grasp Object from Clicked Point Objective allows you to click on an object and the robot will try to pick it up. It will segment the object point cloud from the scene and use an ML model to infer different grasps it could use to pick the object. Run it and you will see the robot look around and present you with this window:

Required Version
This feature requires MoveIt Pro version 8.4 or newer.
warning

This Objective can take upwards of 5.5 GB of VRAM to run, on top of the 1 GB that MoveIt Pro uses. Not all graphics cards will have enough VRAM to accommodate, especially if they are running other video intensive applications.

Click to Segment

Click on the left bottle in three different places and the robot will plan how to pick up the object.

Three points

It asks for your approval before attempting the pick. If it looks good, approve by clicking on the green check mark! Otherwise you can cancel by clicking on the red circle and slash. It will then try another plan.

Three points

You can see that the bottle was picked by looking at the wrist camera view. The red box below the table is a virtual collision object added to the planning scene. This allows the motion planner to avoid the table while planning the grasp.

Wrist camera view

Try running the Objective again and see what else the robot can pick!

Teleoperate the Robot​

MoveIt Pro provides four types of manual control for when a robot needs to be set up, diagnosed, or recovered.

To dive in, click on the Teleoperate button on the top right of the toolbar.

At the top of the left sidebar you should see four available Teleoperation modes - click through them to explore how the user interface changes for each mode.

Waypoints

At the bottom of all the teleop modes are two simple buttons that can be used to open and close the gripper.

Control

note

Teleoperating the gripper to joint values other than "Open" or "Close" is not currently supported.

Interactive Marker Control​

The Interactive Marker (IMarker) teleoperation mode allows users to move the robot's end effector in 6 degrees of freedom using arrows for translation, and discs for rotation.

Try dragging the arrows and rotating the disks to get an idea for how the interactive marker can be moved.

interactive marker

warning

To interact with the Interactive Marker, you will need the "Visualization" view panel selected.

As the interactive marker is moved, a motion will be automatically planned that moves the end effector from the current pose to a goal pose. A preview of the trajectory will be visualized, and if it looks safe and desirable, you can approve the trajectory by clicking the green check button.

If no preview is shown, it means that there is no valid inverse kinematics solution for the desired pose. We may have dragged the interactive marker beyond the robot’s physical reach. Use the Reset Marker button to fix this situation.

warning

Some elements of the simulation scene (e.g. the bench) may not be known to the robot for planning purposes, and therefore you can command the robot to collide with those elements, unless they are added to the planning scene. Check out our how-to guide on creating keepout zones and saving/loading a Planning Scene for more information.

Cartesian Pose Jog Control​

The Pose Jog mode enables the user to translate or rotate the end-effector along different planes or axes, and open or close the gripper. To use this mode most effectively, we recommend you switch your largest view pane to the /wrist_camera/color since the controls are mapped to the coordinate frame of the wrist camera. Try out these controls now to get a feel for them.

Pose Jog

Pose Jog Settings​

On the toolbar you’ll see a settings icon which allows you to change the jog speed. It also has a setting for changing planning groups, which is an advanced feature you can ignore for now. Try adjusting the jog speed to see how it affects the Behavior.

Pose Jog Settings

To make it easy to control our jogging during this tutorial, change the Jog Speed to 30% using the slider.

Joint Control​

The Joint Jog mode can be used to perform low-level individual joint control. Switch to this mode and you should see:

  • The +/- buttons allow you to jog the arm slowly.
  • The slider bar allows you to automatically move to a setpoint.
  • The text input box allows you to type an exact degree or radian you want the robot to achieve.

Joint sidebar

Joint Jog Settings​

In the settings menu for Joint Jog, the Jog Collision Checking can be turned off so that the robot can be teleoperated in situations where the robot's trajectory is in collision with an object.

Joint Jog Settings

danger

It’s recommended to keep collision checking on unless you move the robot into a collision and need full manual control to get it back into a safe state. After it is moved back to a non-collision state, it is recommended to turn collision checking back on for safety reasons.

note

The Jog Collision Checking and Jog Speed parameters are only used when jogging a joint via the +/- buttons in the Joints Jog view. This is because this teleoperation method uses MoveIt Servo (and the respective servo parameters in the robot configuration package), whereas the other modes (such as the slider in Joints Jog view and Interactive Marker in IMarker view) use a regular motion planner.

Running and Creating Waypoints​

Next, let's execute various saved waypoints:

note

Waypoints are saved joint states that can be reused later in Objectives or standalone.

  1. Switch to the Waypoints Teleoperation mode.
  2. Hover over various waypoints in the list, you should see a ghost robot that previews the saved robot location.
  3. Click on the play button to command the robot to move to various available waypoints in the list.

Waypoints

Let's create a new waypoint that grasps the cube on the right side of the table. We’ll use this later when we create a new Objective.

  1. Set the largest view pane to the /wrist_camera/color camera view.
  2. Open the gripper using the bottom buttons.
  3. Use various teleop modes to drive the robot arm to a grasp position that envelopes the cube. We recommend using Pose Jog as the easiest mode for driving the arm around the cube.

Once you are happy with your robot's grasp position, save the robot's state by creating a waypoint:

  1. Switch back to the Waypoints mode.

  2. Press the + Waypoint button.

    blank

  3. Name your new waypoint Pick right cube.

    tip

    You can adjust which parts of the robot to save as a waypoint, by clicking the Change Planning Group button when adding a new waypoint. However, this is an advanced feature you do not need to worry about for now.

  4. Click Create to finish creating your new waypoint.

  5. Exit teleoperation mode by clicking the Stop and Exit button on the left.

Building your own Objective​

Create New Objective​

Now we're ready to build our own custom Objective. We’re going to build a simple pick and place application using the waypoint you created earlier called Pick right cube, as well as some existing waypoints that should come out of the box.

To begin, select the Build tab on the top menu bar.

In the Build tab, select +Objective. This opens the New Objective dialog.

Enter My Pick and Place as the name.

For the category, create a new one using your company or organization's name. This can be your first custom category.

You can also provide an optional description, which we recommend. Try A simple example using hardcoded waypoints.

New Objective

tip

Leave the checkbox Subtree-only objective unchecked. It specifies if an Objective can be executed. If an Objective is marked for usage as a subtree only, then it is non-runnable, but can instead be used inside another Objective in the same way we use Behaviors.

Click the Create button. You should see a new, mostly empty Objective.

Adding Behaviors​

You should see three behaviors pre-populated in your new Objective.

info

In the Behavior Tree concept, a behavior, also known as a node in other domains, is the fundamental building block of a Behavior Tree. Each Behavior represents a single unit of a robot skill or control logic. It always returns a status — SUCCESS, FAILURE, or RUNNING—when ticked (i.e., executed). Behaviors can perform actions, evaluate conditions, manage flow between other nodes, or modify Behaviors. They fall into categories such as Action, Condition, Control, Decorator, and Subtree nodes. By combining and organizing Behaviors hierarchically, developers can create complex and reusable robot applications in a modular and maintainable way.

All new Objectives are instantiated with a simple behavior tree using the AlwaysSuccess Behavior. Without this AlwaysSuccess Behavior, it would be considered an invalid / malformed tree and would throw warnings.

AlwaysSuccess

Delete the AlwaysSuccess Behavior by clicking on it and either selecting the popup delete icon, or by pressing the Delete button on your keyboard.

tip

The MoveIt Pro Behavior Tree editor includes an Undo/Redo button that can protect you from accidentally deletions, or other mistakes. You can find it in the top left of the editor screen. Try using this feature to undo and redo the deletion.

Now we are going to add our first Behavior.

info

MoveIt Pro ships with 200+ Behaviors for all domains of robotics: motion planning, machine learning, inverse kinematics, Cartesian planning, real-time control, grasping, task planning, human in the loop teleop, and more. You are also encouraged to build your own customer Behaviors and plugins, which allows you to incorporate other ROS packages or third party capabilities with MoveIt Pro for unlimited potential.

In MoveIt Pro, there are three main ways to add Behaviors:

  1. Click the plus button shortcut next to certain Behaviors within the Behavior Trees
  2. Scroll through the full library of Behaviors on the left sidebar, expanding categories as needed
  3. Use the search bar to find the Behavior from memory

The plus button is our newest and recommended approach:

Quick Add Button in MoveIt Pro Behavior Tree Editor

If you choose options 2 or 3, you must drag it onto the Behavior Tree editor and have it “snap” to a Sequence or other node.

Using your preferred approach, add the Move To Waypoint Behavior to our new tree. Click on the Behavior and scroll to the bottom of the sidebar list to find the waypoint_name port dropdown selector. Use the dropdown list to set the waypoint name to Look at Table.

Look at Table

tip

Each Behavior in an Objective has a name attribute that can be useful for identification. Let's set this behavior’s name to Look at Table.

Next, add a Clear Snapshot Behavior, then add a Take Wrist Camera Snapshot Behavior to the tree. This will add a fresh point cloud to the visualization pane when you run the Objective.

Clear Snapshot

As a sanity check, let’s run our Objective that is under construction, and you’ll see the Visualization updated to show the depth camera view of the objects on the table.

Visualization

Now click the Edit button shortcut in the top right to jump back into editing this Objective.

We are going to add a few more Behaviors to complete the Objective for pick and place. Below is a complete list of steps, including the ones we’ve already added in the above.

Full Behavior Sequence​

Full sequence:

  • Move To Waypoint: Look at Table
  • Clear Snapshot
  • Take Wrist Camera Snapshot
  • Open Gripper
    • To make sure the gripper is open before we pick
  • Move To Waypoint: Pick right cube
    • This is the new waypoint you should have created earlier during the Teleop tutorial section
  • Close Gripper
  • Move To Waypoint: Above Place Cube
    • This waypoint is used as a mid-point between pick and place
  • Move To Waypoint: Place Cube
  • Open Gripper
  • Move To Waypoint: Above Place Cube
tip

To save time, you can use the blue Duplicate icon on the top right side of any Behavior to make a copy of it.

blank

tip

Take advantage of the build navigation buttons located in the lower left of the window. To keep your tree clean and organized, try the Auto Layout button!

blank

Your completed Objective should like similar to this:

Completed

Run the Objective to make sure it works.

We should see the robot pick up the right cube and place it in a different location on the table! We realize this is a very basic example, but this is our intro tutorial. MoveIt Pro can do much more advanced applications that involve computer vision, reasoning, and machine learning.

tip

You can also edit Objectives using your favorite IDE / code editor, as all Behavior Trees are saved to file in plain text XML format.

The Behavior Tree you just created can be found on your filesystem, and you can run the following command in terminal to see all available Objectives in lab_sim:

ls -1 ~/moveit_pro/moveit_pro_example_ws/src/lab_sim/objectives
Example contents of objectives folder
3_waypoint_pick_and_place.xml
add_point_cloud_to_vector.xml
add_poses_to_mtc_task.xml
add_waypoints_to_mtc_task.xml
apriltag_pick_object.xml
classical_pick_and_place.xml
clear_previous_obstacles.xml
close_gripper.xml
constrained_pick_and_place_subtree.xml
constrained_pick_place.xml
create_pose_vector.xml
cycle_between_waypoints.xml
force_relaxation.xml
fuse_multiple_views_subtree.xml

And many more.

Great job on creating your first Objective! We will come back to this in a minute, but first we'll explain the concept of keep-out zones.

Adding Keep-out Zones​

Please restart MoveIt Pro to reset the simulation and bring the blocks back to their original position. Terminate the program by using Ctrl+C in the terminal you used to launch MoveIt Pro. Next restart the application with:

moveit_pro run -c lab_sim
tip

You can do this whenever you wish to reset the simulation scene. Don't worry, your Objectives are automatically saved.

In MoveIt Pro, keep-out zones are areas the motion planners must avoid, and are essentially easy-to-configure collision objects.

info

Collision Object In motion planning, a collision object represents a physical item in the environment that the robot must avoid during motion. These objects are typically defined by their shape, size, and position in the planning scene and can include things like tables, walls, tools, or even other robots. Collision objects are used by the motion planner to ensure that generated paths are free of collisions, allowing the robot to move safely and efficiently through its workspace.

To add a keep-out zone, find the upper left side of the Visualization pane and you should see a cube symbol.

Cube symbol

Click on the cube to open the pop-up modal.

Keep-out zone

  • Adjust the Size parameter to 0.3m
  • Adjust the Position parameter to 0, 0.5, 0.5.

Click the Create button and you’ll see a green cube appear in front of the robot.

Click on the cube and an interactive marker should appear.

Position 1, 1, 1

Try adjusting the cube's position and orientation using the interactive marker's arrows and rings. To deselect the zone and hide the interactive marker, click anywhere outside the cube in the visualization pane. Reselect the cube, and remove it by pressing Delete on your keyboard. Then generate a new zone with the same parameters that will prevent the robot from picking up the block in our My Pick and Place Objective.

Next we'll run the My Pick and Place Objective again, and we should observe it fail due to this new collision object.

Failed place

Notice the red spheres that highlight where the collision would have occurred, had the motion plan been executed. In the next section we'll explain how to add teleop recovery to our custom-built Objective to overcome this issue.

Modify your Objective to add teleop recovery​

In some industries and applications, such as in unstructured environments, a robot may encounter an unexpected condition where it may be appropriate to call in a human operator to help recover the robot — “human in the loop” style. This is not true for all industries and applications, of course.

A unique feature of MoveIt Pro is that it allows user interventions, approvals, and feedback to be seamlessly integrated within the Behavior Tree. We can add a special Behavior for teleop recovery before proceeding with the rest of the Objective. To do this, we're going to modify our Objective to add a Fallback Behavior, which then switches into Teleoperation mode for the user to move the robot.

Adding a Fallback Node​

The location where our Objective is currently failing is the second to last Move to Waypoint Behavior in the tree. You can see this node highlighted red after running the My Pick and Place Objective with the keep-out zone in the way (from the previous section).

FailingPlace

To overcome this, we will add a Fallback Behavior to the Objective to allow the application to recover from this failure.

  • Switch into edit mode for our previous My Pick and Place Objective.
  • Add the Fallback Behavior, dragging it to the editor and connecting it to the Sequence node, and placing it above the Open Gripper Behavior.

Fallback

info

Fallback Behaviors allow you to execute a different set of Behaviors when you encounter a failure. These Behaviors are called recovery Behaviors.

  • Delete the line connecting the second to last Move to Waypoint Behavior from the parent Sequence node. You can do this by clicking on the line then pressing the Delete key.
  • Drag a line from the orphaned Move to Waypoint Behavior to the new Fallback.

FailingPlace

At this point your Behavior might look pretty messy. Click the Autolayout button in the bottom left of your Behavior Tree editor.

FailingPlace

Adding Request Teleoperation​

We're going to use the Request Teleoperation Objective as our recovery Behavior.

  • Find and add the Request Teleoperation Behavior to the Behavior Tree, adding it below the Move to Waypoint Behavior as a separate branch.

Fallback layout

  • Modify the Request Teleoperation Behavior parameters:
    • Set the enable_user_interaction value to true.
    • Set the user_interaction_prompt text to say Choose a different place location.

Request Teleoperation

  • Now run the My Pick and Place Objective again.
  • (Optional) You may wish to first restart Pro to reset the right block to its original pick position.

This time after the cube is picked up it does not just stop. Instead, a Teleoperation menu appears and you can manually drive the robot, using various teleop modes like IMarker, to a different location to drop off the cube.

warning

If you do not have the Visualization view visible, you will not see the teleoperation prompt.

blank

Teleop the robot to a new location to drop off the cube, and click the Continue button to continue operation of the still-running Objective. It should then open the gripper and move to its home position automatically.

Disabling Parts of the Behavior Tree​

Required Version
This feature requires MoveIt Pro version 8.4 or newer.

As we've been developing our pick and place Objective, you might have noticed that every time we Run the Objective we have to start running from the beginning. To make development and debugging faster, MoveIt Pro lets you disable parts of your Behavior Tree.

Let's skip the first Move to Waypoint step so it does not move home every time:

  1. Click on the first Move to Waypoint node and find the icons that appear on top of the box.

  2. Click on the Comment out (skip execution) icon.

    Comment Out

You should see that node change colors into "disabled" mode. This also works for entire subtrees and sequences.

Saving your work​

Wrapping up this tutorial, you may be curious how all these changes are stored and saved. In this beginner tutorial we are working out of our basic moveit_pro_example_ws, which is stored on your computer at ~/moveit_pro/moveit_pro_example_ws. Your changes are auto-saved to file, but you can also push it into the cloud using standard Git code repository practices. To do this:

  • Open a terminal explore the changes you have made:

    cd ~/moveit_pro/moveit_pro_example_ws
    git status # see the files you have changed
    tree # explore the file structure of this repo
  • Fork the moveit_pro_example_ws repo on Github, to your own account

  • If you want to now save the changes:

    git checkout -b my_pick_place
    git add -A
    git commit -m "Adding My Pick and Place Objective"
    git push origin my_pick_place

Exploring More Robot Configs​

Before continuing on to the next tutorial, feel free to explore other example robot configs provided in MoveIt Pro beyond lab_sim. These example worlds showcase other hardware and various reference applications. To do this:

  1. Bring down your current instance of MoveIt Pro with Ctrl-C.
  2. See all available configuration packages with the command moveit_pro run --list.
  3. Choose one, such as moveit_pro run -c grinding_sim.
  4. Within the UI, try out the various example Objectives from the sidebar.

Summary​

By completing this tutorial, you’ve built a strong foundation in using MoveIt Pro—from running Objectives and teleoperating the robot, to creating your own pick-and-place application with safety zones and recovery Behaviors. You explored how to configure the user interface, use Behavior Trees for task logic, and integrate ML-based perception. With these essential skills, you're now ready to dive into more advanced capabilities like AprilTag-based vision, motion planning, and debugging tools in the next tutorial.

🎉 Congratulations, we're now ready to move to the next tutorial!