Skip to content

Commit e42990f

Browse files
authored
Merge pull request #22 from NVIDIA-ISAAC-ROS/release-dp3.1
Isaac ROS 0.31.0 (DP3.1)
2 parents 18cc588 + 3708edc commit e42990f

14 files changed

+728
-168
lines changed

README.md

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<div align="center"><img src="resources/isaac_ros_argus_sample_raw.png" width="300" title="raw image"/> <img src="resources/isaac_ros_argus_sample_isp.png" width="300" title="isp processed image"/></div>
44

55
## Overview
6+
67
The Isaac ROS Argus Camera module contains an ROS 2 package for sensor processing to output images. Image sensors are connected on CSI and GMSL hardware interfaces to Jetson platforms. This package uses dedicated hardware engines to accelerate image processing. Output images are used in graphs of nodes for AI and CV perception packages, image compression for capture to disk by event recorders, and live-stream visuals for remote robot teleoperation.
78

89
Isaac ROS Argus Camera provides with several sensor capture and processing features, including AWB (auto-white-balance), AE (auto-exposure), and noise reduction. Leveraging hardware engines in Jetson, Argus provides multi-camera frame synchronization, with very high precision frame acquisition timestamping and jitter less than 100us.
@@ -18,12 +19,11 @@ Argus Camera uses dedicated hardware engines to access the full memory bandwidth
1819
Widely available USB and Ethernet plug-in cameras can be used for robotics applications, but there is performance cost for this convenience. The I/O interface (USB or Ethernet) places the image from the camera directly into CPU-accessible memory. The camera driver makes a copy from the I/O interface using the CPU to make the image available to other applications. The Camera driver wrapper node in ROS performs another memcpy with the CPU from the driver to publish the image in ROS. Before a USB or Ethernet image arrives as a published topic, two CPU memcpy actions have been perfromed for every pixel. In contrast, the Argus Camera module processes sensor data into output image topics in ROS without the CPU touching a single pixel in the image.
1920

2021
> **Note**: Argus Camera outputs sensor_msgs/Image at the sensor data rate, subject to performance capabilites of the Jetson platform(s). For example, a [Hawk camera](https://www.leopardimaging.com/li-ar0234cs-stereo-gmsl2-hawk/) configured for 30fps (frames per second) stereo 1920x1080 will output time-synchronized left and right camera frames sensor_msgs/Image at 30fps.
21-
22+
<!-- Split blockquote -->
2223
> **Note**: Argus Camera is not supported on x86_64 platforms with discrete GPUs that do not have a CSI or GMSL interface to connect to a camera.
23-
24+
<!-- Split blockquote -->
2425
> **Note**: See [Argus](https://docs.nvidia.com/jetson/l4t-multimedia/group__LibargusAPI.html) for more information on camera processing.
2526
26-
2727
### Isaac ROS NITROS Acceleration
2828

2929
This package is powered by [NVIDIA Isaac Transport for ROS (NITROS)](https://developer.nvidia.com/blog/improve-perception-performance-for-ros-2-applications-with-nvidia-isaac-transport-for-ros/), which leverages type adaptation and negotiation to optimize message formats and dramatically accelerate communication between participating nodes.
@@ -59,18 +59,18 @@ This package is powered by [NVIDIA Isaac Transport for ROS (NITROS)](https://dev
5959

6060
## Latest Update
6161

62-
Update 2023-03-23: Update to be compatible with JetPack 5.1.1
62+
Update 2023-04-05: Update to be compatible with JetPack 5.1.1
6363

6464
## Supported Platforms
6565

6666
This package is designed and tested to be compatible with ROS 2 Humble running on [Jetson](https://developer.nvidia.com/embedded-computing) with off-the-shelf cameras from NVIDIA partners (see the [Reference Cameras](#reference-cameras) section for more details).
6767
> **Note**: x86_64 system is not supported.
68-
68+
<!-- Split blockquote -->
6969
> **Note**: Versions of ROS 2 earlier than Humble are **not** supported. This package depends on specific ROS 2 implementation features that were only introduced beginning with the Humble release.
7070
71-
| Platform | Hardware | Software | Notes |
72-
| -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
73-
| Jetson | [Jetson Orin](https://www.nvidia.com/en-us/autonomous-machines/embedded-systems/jetson-orin/) <br> [Jetson Xavier](https://www.nvidia.com/en-us/autonomous-machines/embedded-systems/jetson-agx-xavier/) | [JetPack 5.1.1](https://developer.nvidia.com/embedded/jetpack) | The [CSI](https://en.wikipedia.org/wiki/Camera_Serial_Interface) camera device needs to be connected and presented as a video device (e.g. `/dev/video0`). <br><br> For best performance, ensure that [power settings](https://docs.nvidia.com/jetson/archives/r34.1/DeveloperGuide/text/SD/PlatformPowerAndPerformance.html) are configured appropriately. |
71+
| Platform | Hardware | Software | Notes |
72+
| -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
73+
| Jetson | [Jetson Orin](https://www.nvidia.com/en-us/autonomous-machines/embedded-systems/jetson-orin/) </br> [Jetson Xavier](https://www.nvidia.com/en-us/autonomous-machines/embedded-systems/jetson-agx-xavier/) | [JetPack 5.1.1](https://developer.nvidia.com/embedded/jetpack) | The [CSI](https://en.wikipedia.org/wiki/Camera_Serial_Interface) camera device needs to be connected and presented as a video device (e.g. `/dev/video0`). </br></br> For best performance, ensure that [power settings](https://docs.nvidia.com/jetson/archives/r34.1/DeveloperGuide/text/SD/PlatformPowerAndPerformance.html) are configured appropriately. |
7474

7575
### Docker
7676

@@ -106,7 +106,7 @@ NVIDIA has worked with our camera partners to provide the modules listed below w
106106
```bash
107107
git clone https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_nitros
108108
```
109-
109+
110110
```bash
111111
git clone https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_image_pipeline
112112
```
@@ -168,7 +168,7 @@ ros2 launch isaac_ros_argus_camera isaac_ros_argus_camera_stereo.launch.py
168168

169169
| ROS Parameter | Type | Default | Description |
170170
| -------------------------- | -------- | ----------- | --------------------------------------------------------------------------------------------------------------- |
171-
| `camera_id` | `uint` | `0` | The video device index <br> E.g. `/dev/video0` |
171+
| `camera_id` | `uint` | `0` | The video device index </br> E.g. `/dev/video0` |
172172
| `module_id` | `uint` | `0` | The camera module index in the device tree when there is more than one of the same camera module connected |
173173
| `mode` | `uint` | `0` | The resolution mode supported by the camera sensor and driver. |
174174
| `camera_type` | `uint` | `1` | 0 for Monocular type camera; 1 for Stereo type camera |
@@ -215,9 +215,9 @@ The Isaac ROS Argus node uses the Argus Ext API to retrieve calibration paramete
215215
Refer to [this page](https://docs.nvidia.com/jetson/l4t-multimedia/classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html) for the data structure of the calibration parameters.
216216

217217
> **Note**: Each camera module should have stored the calibration parameters in internal memory like EEPROM, and the device driver must support the Argus Ext API to extract those parameters. Contact your camera vendor to get the required drivers.
218-
218+
<!-- Split blockquote -->
219219
> **Note**: If your camera does not support the Argus Ext API, you can also specify a URL to a camera info `.ini` file parseable by the ROS [CameraInfoManager](http://wiki.ros.org/camera_info_manager) using the `camera_info_url` parameter on the Isaac ROS Argus node. This will allow you to provide parameters you may have calibrated using the ROS Camera Calibration package, for example.
220-
220+
<!-- Split blockquote -->
221221
> **Note**: When the `camera_info_url` is provided, the loaded parameters override the `CameraInfo` from Argus Ext API.
222222

223223
## Troubleshooting
@@ -234,13 +234,13 @@ The Isaac ROS Argus node can fail to create a capture session inside the contain
234234

235235
#### Solution
236236

237-
Exit the Docker container and restart the `nvargus` daemon by running `sudo service nvargus-daemon restart`
237+
Exit the Docker container and restart the `nvargus` daemon by running `sudo systemctl restart nvargus-daemon.service`
238238

239239
## Updates
240240

241241
| Date | Changes |
242242
| ---------- | ------------------------------------------ |
243-
| 2023-03-23 | Update to be compatible with JetPack 5.1.1 |
243+
| 2023-04-05 | Update to be compatible with JetPack 5.1.1 |
244244
| 2022-10-19 | Updated OSS licensing |
245245
| 2022-08-31 | Update to be compatible with JetPack 5.0.2 |
246246
| 2022-06-30 | Support NITROS acceleration |

isaac_ros_argus_camera/CMakeLists.txt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@ message( STATUS "Architecture: ${ARCHITECTURE}" )
2828
find_package(ament_cmake_auto REQUIRED)
2929
ament_auto_find_build_dependencies()
3030

31-
# Only build Argus nodes on Jetson platform
32-
if(${ARCHITECTURE} STREQUAL "aarch64")
3331
# aarch64
3432

3533
ament_auto_add_library(base_node SHARED src/argus_camera_node.cpp)
@@ -46,10 +44,13 @@ if(BUILD_TESTING)
4644
ament_lint_auto_find_test_dependencies()
4745

4846
find_package(launch_testing_ament_cmake REQUIRED)
47+
# Only add camera tests if on Jetson platform
48+
if(${ARCHITECTURE} STREQUAL "aarch64")
4949
add_launch_test(test/isaac_ros_argus_camera_mono_test.py)
5050
add_launch_test(test/isaac_ros_argus_camera_stereo_test.py)
51+
add_launch_test(test/isaac_ros_argus_camera_stereo_oss_rectify_compare.py)
52+
endif() # aarch64
5153
endif()
5254

53-
endif() # aarch64
5455

5556
ament_auto_package(INSTALL_TO_SHARE config launch)

isaac_ros_argus_camera/config/argus_camera_mono_node.yaml

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
%YAML 1.2
22
# SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES
3-
# Copyright (c) 2021-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
3+
# Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
44
#
55
# Licensed under the Apache License, Version 2.0 (the "License");
66
# you may not use this file except in compliance with the License.
@@ -134,7 +134,7 @@ components:
134134
- name: pool
135135
type: nvidia::gxf::UnboundedAllocator
136136
- name: color_converter_operator
137-
type: nvidia::cvcore::tensor_ops::StreamConvertColorFormat
137+
type: nvidia::isaac::tensor_ops::StreamConvertColorFormat
138138
parameters:
139139
output_type: "RGB_U8"
140140
receiver: data_receiver
@@ -148,16 +148,16 @@ components:
148148
name: global
149149
components:
150150
- name: adapter
151-
type: nvidia::cvcore::tensor_ops::ImageAdapter
151+
type: nvidia::isaac::tensor_ops::ImageAdapter
152152
parameters:
153153
message_type: "VideoBuffer"
154154
- name: stream
155-
type: nvidia::cvcore::tensor_ops::TensorStream
155+
type: nvidia::isaac::tensor_ops::TensorStream
156156
parameters:
157157
backend_type: "VPI"
158158
engine_type: "GPU"
159159
---
160-
name: vault_left_image
160+
name: sink_left_image
161161
components:
162162
- name: signal
163163
type: nvidia::gxf::DoubleBufferReceiver
@@ -168,14 +168,12 @@ components:
168168
parameters:
169169
receiver: signal
170170
min_size: 1
171-
- name: vault
172-
type: nvidia::gxf::Vault
171+
- name: sink
172+
type: nvidia::isaac_ros::MessageRelay
173173
parameters:
174174
source: signal
175-
max_waiting_count: 1
176-
drop_waiting: false
177175
---
178-
name: vault_left_camerainfo
176+
name: sink_left_camerainfo
179177
components:
180178
- name: signal
181179
type: nvidia::gxf::DoubleBufferReceiver
@@ -186,12 +184,10 @@ components:
186184
parameters:
187185
receiver: signal
188186
min_size: 1
189-
- name: vault
190-
type: nvidia::gxf::Vault
187+
- name: sink
188+
type: nvidia::isaac_ros::MessageRelay
191189
parameters:
192190
source: signal
193-
max_waiting_count: 1
194-
drop_waiting: false
195191
---
196192
components:
197193
- name: edge0
@@ -208,12 +204,12 @@ components:
208204
type: nvidia::gxf::Connection
209205
parameters:
210206
source: converter_left/data_transmitter
211-
target: vault_left_image/signal
207+
target: sink_left_image/signal
212208
- name: edge3
213209
type: nvidia::gxf::Connection
214210
parameters:
215211
source: splitter_left/camera_model_transmitter
216-
target: vault_left_camerainfo/signal
212+
target: sink_left_camerainfo/signal
217213
---
218214
components:
219215
- name: clock
@@ -222,6 +218,7 @@ components:
222218
parameters:
223219
clock: clock
224220
stop_on_deadlock: false
221+
check_recession_period_us: 100
225222
- type: nvidia::gxf::JobStatistics
226223
parameters:
227224
clock: clock

0 commit comments

Comments
 (0)