Tutorial for Occupancy Grid Localizer with Isaac Sim
====================================================

.. figure:: :ir_lfs:`<resources/isaac_ros_docs/concepts/localization/lidar/nav2_isaac_sim.png>`
    :width: 600px
    :align: center

Overview
------------

This tutorial describes how to integrate the Isaac ROS Occupancy Grid
Localizer with a simulated robot running in Isaac Sim with Nav2.

Tutorial Walkthrough
--------------------

1.  Complete the quickstart :ref:`here <repositories_and_packages/isaac_ros_map_localization/isaac_ros_occupancy_grid_localizer/index:quickstart>`.
2.  Launch the Docker container using the ``run_dev.sh`` script:

    .. code:: bash

       cd ${ISAAC_ROS_WS}/src/isaac_ros_common && \
         ./scripts/run_dev.sh

3.  Install and launch Isaac Sim following the steps in the :doc:`Isaac ROS Isaac Sim Setup Guide </getting_started/isaac_sim/index>`.

4.  Select ``/World/Nova_Carter_ROS/ros_lidars/publish_front_2d_lidar_scan`` in the *Stage* pane and change the topic name for front 2D lidar as follows:

   .. figure:: :ir_lfs:`<resources/isaac_ros_docs/concepts/localization/lidar/isaac_sim_lidar_topic.png>`
        :align: center
        :width: 400px

6.  Select ``/World/Nova_Carter_ROS/ros_lidars/front_2d_lidar_render_product`` in the *Stage* pane and set ``enabled`` to True (checked).

7.  Press **Play** to start publishing data from the Isaac Sim.

    .. figure:: :ir_lfs:`<resources/isaac_ros_docs/getting_started/isaac_sim_sample_scene.png>`
        :align: center
        :width: 600px

8.  Run the launch file and validate that a Nav2 window pops up.

    .. code:: bash

       ros2 launch isaac_ros_occupancy_grid_localizer isaac_ros_occupancy_grid_localizer_nav2.launch.py

9.  Open a new terminal using the ``run_dev.sh`` script:

    .. code:: bash

       cd ${ISAAC_ROS_WS}/src/isaac_ros_common && \
         ./scripts/run_dev.sh

10. Trigger the localization service using the command line interface:

    .. code:: bash

       ros2 service call /trigger_grid_search_localization std_srvs/srv/Empty {}

11. You should see the laser scan in RViz. This happens when the
    transform between map and front_2d_lidar frame is available. The robot
    is now localized. You can give a position setpoint using the
    ``2D Nav Goal`` button as shown below. You can relocalize again at
    any point by running the ``ros2 service call`` command.

.. figure:: :ir_lfs:`<resources/isaac_ros_docs/concepts/localization/lidar/nav2_isaac_sim.gif>`
    :width: 600px
    :align: center