Isaac Mission Control Tutorial#

Overview#

This tutorial simulates a virtual Nova Carter running Mission Client in Isaac Sim and assigns it a mission using Isaac Mission Control.

Prerequisites#

Clone the Mission Control repository and navigate into it:

git clone https://github.com/nvidia-isaac/isaac_mission_control.git
cd isaac_mission_control

All subsequent steps in this tutorial should be run from the root of this cloned repository unless otherwise noted.

Tutorial Walkthrough#

  1. Follow the Isaac ROS Mission Client Tutorial through starting the MQTT broker. Verify that you have the warehouse scene open in Isaac Sim along with Mission Client built and that the scene looks like the image below.

    https://media.githubusercontent.com/media/NVIDIA-ISAAC-ROS/.github/release-4.5/resources/isaac_ros_docs/concepts/cloud_control/tutorial_warehouse_scene.png/
  2. From the root of the Mission Control repository, bring up Mission Control and its dependencies using Docker Compose:

    cd docs/tutorial/docker-compose
    docker compose -f bringup_services_tutorial.yaml up
    
  3. Follow the launch Mission Client step of the Isaac ROS Mission Client Tutorial to start the Mission Client. For reference, the command below is run inside the Isaac Docker container:

    ros2 launch isaac_ros_vda5050_client_bringup isaac_ros_vda5050_client_nav2.launch.py init_pose_x:=-2.0 init_pose_yaw:=3.14159
    
  4. Construct a navigation mission using the Waypoint Selection Tool:

    1. Run the following command from the root of the Mission Control repository:

      docker compose -f waypoint_selection_ui/bringup_wp_selection_ui.yaml up --build
      
    2. Access the Waypoint Selection Tool web interface at http://localhost:8051.

    3. Go to Use Existing Files and select carter_warehouse_navigation.png and carter_warehouse_navigation.yaml. Click Load Selected Files to load the map. Verify that the map origin appears near the middle of the map as shown below:

      https://media.githubusercontent.com/media/NVIDIA-ISAAC-ROS/.github/release-4.5/resources/isaac_ros_docs/concepts/cloud_control/tutorial_wpg_1.png/
    4. Click on the map to define waypoints for the mission. Avoid placing waypoints on obstacles (dark areas on the map) or too close to an obstacle. For example:

      https://media.githubusercontent.com/media/NVIDIA-ISAAC-ROS/.github/release-4.5/resources/isaac_ros_docs/concepts/cloud_control/tutorial_wpg_2.png/
    5. Press Generate Waypoints to get the list of waypoints as x, y coordinates. Verify that the output looks similar to the following:

      [
        {
          "x": -2.9223684210526315,
          "y": 4.0245616712068255
        },
        {
          "x": 7.07763157894737,
          "y": 3.8666669343647193
        },
        {
          "x": 7.1828947368421066,
          "y": -5.922806749845808
        },
        {
          "x": -3.2907894736842085,
          "y": -5.922806749845808
        }
      ]
      
    6. (Optional) Click Visualize Route to preview the route generated by the Mission Control route planner.

      https://media.githubusercontent.com/media/NVIDIA-ISAAC-ROS/.github/release-4.5/resources/isaac_ros_docs/concepts/cloud_control/route_example.png/
  5. Submit the mission through the Mission Control web interface:

    1. Open http://localhost:8050/api/v1/docs in a web browser.

    2. Expand the POST /mission/submit_mission endpoint and click Try it out.

    3. In the request body, create a JSON object with the key route set to the list of waypoints generated in the previous step. Press Execute to submit the mission.

      Optional mission parameters

      Add the key iterations to specify how many times the mission should execute (default is 1). For example, to execute the route twice:

      {
        "route": [
          {
            "x": -2.9223684210526315,
            "y": 4.0245616712068255
          },
          {
            "x": 7.07763157894737,
            "y": 3.8666669343647193
          },
          {
            "x": 7.1828947368421066,
            "y": -5.922806749845808
          },
          {
            "x": -3.2907894736842085,
            "y": -5.922806749845808
          }
        ],
        "iterations": 2
      }
      

      If you want the robot to end at a specific pose, use the end_location parameter with exact set to true. Set theta to the desired orientation in radians:

      {
        "route": [
          {
            "x": -2.9223684210526315,
            "y": 4.0245616712068255
          },
          {
            "x": 7.07763157894737,
            "y": 3.8666669343647193
          },
          {
            "x": 7.1828947368421066,
            "y": -5.922806749845808
          },
          {
            "x": -3.2907894736842085,
            "y": -5.922806749845808
          }
        ],
        "end_location": {
          "x": -2.5081181774400676,
          "y": -8.503454413823114,
          "theta": 1.57,
          "exact": true
        }
      }
      
  6. After the response is received, verify that the Nova Carter navigates to the waypoints and completes the mission.

    https://media.githubusercontent.com/media/NVIDIA-ISAAC-ROS/.github/release-4.5/resources/isaac_ros_docs/concepts/cloud_control/tutorial_mission.gif/