Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Isaac ROS 0.30.0 (DP3) #1

Merged
merged 1 commit into from
Apr 6, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Ignore Python files in linguist
*.py linguist-detectable=false

# Images
*.gif filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.psd filter=lfs diff=lfs merge=lfs -text

# Archives
*.gz filter=lfs diff=lfs merge=lfs -text
*.tar filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text

# Documents
*.pdf filter=lfs diff=lfs merge=lfs -text

# Shared libraries
*.so filter=lfs diff=lfs merge=lfs -text
*.so.* filter=lfs diff=lfs merge=lfs -text

# ROS Bags
**/resources/**/*.zstd filter=lfs diff=lfs merge=lfs -text
**/data/**/*.db3 filter=lfs diff=lfs merge=lfs -text
**/data/**/*.yaml filter=lfs diff=lfs merge=lfs -text
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Ignore all pycache files
**/__pycache__/**
14 changes: 14 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Isaac ROS Contribution Rules

Any contribution that you make to this repository will
be under the Apache 2 License, as dictated by that
[license](http://www.apache.org/licenses/LICENSE-2.0.html):

> **5. Submission of Contributions.** Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.

Contributors must sign-off each commit by adding a `Signed-off-by: ...`
line to commit messages to certify that they have the right to submit
the code they are contributing to the project according to the
[Developer Certificate of Origin (DCO)](https://developercertificate.org/).

[//]: # (202201002)
3 changes: 2 additions & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@

Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
Expand Down Expand Up @@ -198,4 +199,4 @@
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
limitations under the License.
367 changes: 365 additions & 2 deletions README.md

Large diffs are not rendered by default.

59 changes: 59 additions & 0 deletions docs/isaac-sim-nav2-tutorial.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# Isaac ROS Occupancy Grid Localizer Nav2 Isaac Sim Tutorial

<div align="center"><img alt="Isaac ROS Occupancy Grid Localizer Expected Output" src="../resources/nav2_isaac_sim.png" width="600px"/></div>

## Overview

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

Last validated with [Isaac Sim 2022.1.0](https://docs.omniverse.nvidia.com/app_isaacsim/app_isaacsim/release_notes.html#id10).

## Tutorial Walkthrough

1. Complete the [Quickstart section](../README.md#quickstart) in the main README.
2. Launch the Docker container using the `run_dev.sh` script:

```bash
cd ~/workspaces/isaac_ros-dev/src/isaac_ros_common && \
./scripts/run_dev.sh
```

3. Inside the container, build and source the workspace:

```bash
cd /workspaces/isaac_ros-dev && \
colcon build --symlink-install && \
source install/setup.bash
```

4. Install and launch Isaac Sim following the steps in the [Isaac ROS Isaac Sim Setup Guide](https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_common/blob/main/docs/isaac-sim-sil-setup.md)
5. Open up the Isaac ROS Common USD scene (using the *Content* tab) located at:

```text
http://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/Isaac/2022.2.1/Isaac/Samples/ROS2/Scenario/carter_warehouse_apriltags_worker.usd
```
And wait for it to load completely.
6. Press **Play** to start publishing data from the Isaac Sim application.

7. Run the launch file and you should see a nav2 window pop up.

```bash
ros2 launch isaac_ros_occupancy_grid_localizer isaac_ros_occupancy_grid_localizer_nav2.launch.py
```

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

```bash
cd ~/workspaces/isaac_ros-dev/src/isaac_ros_common && \
./scripts/run_dev.sh
```

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

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

10. You should see the laser scan in rviz. This happens when the transform between map and carter_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 above.

<div align="center"><img alt="Isaac ROS Occupancy Grid Localizer Expected Output" src="../resources/nav2_isaac_sim.gif" width="600px"/></div>
46 changes: 46 additions & 0 deletions isaac_ros_occupancy_grid_localizer/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES
# Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0

cmake_minimum_required(VERSION 3.23.2)
project(isaac_ros_occupancy_grid_localizer LANGUAGES C CXX)

if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-Wall -Wextra -Wpedantic)
endif()

find_package(ament_cmake_auto REQUIRED)
ament_auto_find_build_dependencies()

# # Dependencies
find_package(Eigen3 3.3 REQUIRED NO_MODULE)

# OccupancyGridLocalizerNode
ament_auto_add_library(occupancy_grid_localizer SHARED src/occupancy_grid_localizer_node.cpp)
rclcpp_components_register_nodes(occupancy_grid_localizer "nvidia::isaac_ros::occupancy_grid_localizer::OccupancyGridLocalizerNode")
set(node_plugins "${node_plugins}nvidia::isaac_ros::occupancy_grid_localizer::OccupancyGridLocalizerNode;\
$<TARGET_FILE:occupancy_grid_localizer>\n")
target_link_libraries(occupancy_grid_localizer Eigen3::Eigen)

if(BUILD_TESTING)
find_package(ament_lint_auto REQUIRED)
ament_lint_auto_find_test_dependencies()

find_package(launch_testing_ament_cmake REQUIRED)
add_launch_test(test/isaac_ros_occupancy_grid_localizer_pol_test.py)
endif()

ament_auto_package(INSTALL_TO_SHARE config launch maps params rviz)
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
%YAML 1.2
# SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES
# Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
---
name: OccupancyGridLocalizer Node Namespace Injector Rule
operation: namespace_injector
body:
components:
- type: nvidia::isaac::AtlasFrontend
path_parameter_keys: [occupancy_grid_map]
- type: nvidia::isaac::localization::Occupancy2DMapProvider
path_parameter_keys: [atlas]
- type: nvidia::isaac::localization::GridSearchLocalizer
path_parameter_keys: [atlas, occupancy_2d_map_provider]
- type: nvidia::isaac::TensorCopier
path_parameter_keys: [cuda_stream]
Loading