Skip to content

Commit a9cf28c

Browse files
authored
Merge pull request #4 from NVIDIA-ISAAC-ROS/release-3.0
Isaac ROS 3.0.0
2 parents 226ae1e + 96070c8 commit a9cf28c

File tree

154 files changed

+7195
-810
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

154 files changed

+7195
-810
lines changed

.gitattributes

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,6 @@
1616
*.so.* filter=lfs diff=lfs merge=lfs -text
1717
*.so filter=lfs diff=lfs merge=lfs -text
1818

19+
# 3D assets
20+
*.obj filter=lfs diff=lfs merge=lfs -text
21+
*.mtl filter=lfs diff=lfs merge=lfs -text

.gitignore

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,29 @@
55
**/install/**
66
**/cc_internals/**
77
**/log/**
8+
9+
# Ignore saved rosbags
10+
**/rosbags/**
11+
12+
# Distribution / packaging
13+
.Python
14+
build/
15+
develop-eggs/
16+
dist/
17+
downloads/
18+
eggs/
19+
.eggs/
20+
lib/
21+
lib64/
22+
parts/
23+
sdist/
24+
var/
25+
wheels/
26+
share/python-wheels/
27+
*.egg-info/
28+
.installed.cfg
29+
*.egg
30+
MANIFEST
31+
32+
# Model files
33+
**/models/**

README.md

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,11 @@ Optimized Isaac ROS packages for [Isaac Nova Orin](https://developer.nvidia.com/
88

99
[Isaac ROS Nova](https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_nova) provides a set of optimized packages to interface with the [Isaac Nova Orin](https://developer.nvidia.com/isaac/nova-orin) sensor suite.
1010
These packages integrate with hardware timestamp synchronization on Jetson Orin platforms to enable high-quality sensor fusion.
11-
Sensor data streams through Isaac ROS graphs using [NITROS](https://nvidia-isaac-ros.github.io/concepts/nitros/index.html) for hardware-accelerated processing.
11+
Sensor data streams through Isaac ROS graphs using [NITROS](https://nvidia-isaac-ros.github.io/concepts/nitros/index.html) for NVIDIA-accelerated processing.
1212

13+
> [!Note]
14+
> Isaac ROS Nova requires having run `nova-orin-init` [here](https://catalog.ngc.nvidia.com/orgs/nvidia/teams/isaac/resources/nova_orin)
15+
> on your compute node before using any of the included packages.
1316
* [Hesai Pandar XT32 3D LiDAR](https://www.hesaitech.com/product/xt32/)
1417
* [Leopard Imaging HAWK stereo camera](https://leopardimaging.com/leopard-imaging-hawk-stereo-camera/)
1518
* [Leopard Imaging OWL monocular camera](https://leopardimaging.com/product/automotive-cameras/cameras-by-interface/maxim-gmsl-2-cameras/li-ar0234cs-gmsl2-owl/li-ar0234cs-gmsl2-owl/)
@@ -19,6 +22,12 @@ Sensor data streams through Isaac ROS graphs using [NITROS](https://nvidia-isaac
1922

2023
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.
2124

25+
## Performance
26+
27+
| Sample Graph<br/><br/> | Input Size<br/><br/> | Nova Carter<br/><br/> |
28+
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
29+
| [Data Recorder Live Graph](https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_benchmark/blob/main/benchmarks/isaac_ros_data_recorder_nova_benchmark/scripts/isaac_ros_data_recorder_4_hawk.py)<br/><br/><br/>4 Hawk Cameras<br/><br/> | 1200p<br/><br/><br/><br/> | [30.3 fps (per stream avg)](https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_benchmark/blob/main/results/isaac_ros_data_recorder_4_hawk-carter_v2.4.json)<br/><br/><br/>0 dropped frames (avg)<br/><br/> |
30+
2231
---
2332

2433
## Documentation
@@ -30,16 +39,47 @@ Please visit the [Isaac ROS Documentation](https://nvidia-isaac-ros.github.io/re
3039
## Packages
3140

3241
* [`isaac_ros_correlated_timestamp_driver`](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_correlated_timestamp_driver/index.html)
42+
* [Overview](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_correlated_timestamp_driver/index.html#overview)
43+
* [Quickstart](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_correlated_timestamp_driver/index.html#quickstart)
44+
* [Troubleshooting](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_correlated_timestamp_driver/index.html#troubleshooting)
3345
* [API](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_correlated_timestamp_driver/index.html#api)
46+
* [`isaac_ros_data_recorder`](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_data_recorder/index.html)
47+
* [Overview](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_data_recorder/index.html#overview)
48+
* [Quickstart](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_data_recorder/index.html#quickstart)
49+
* [Try More Examples](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_data_recorder/index.html#try-more-examples)
50+
* [Troubleshooting](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_data_recorder/index.html#troubleshooting)
51+
* [API](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_data_recorder/index.html#api)
52+
* [`isaac_ros_data_replayer`](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_data_replayer/index.html)
53+
* [Overview](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_data_replayer/index.html#overview)
54+
* [Quickstart](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_data_replayer/index.html#quickstart)
55+
* [Troubleshooting](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_data_replayer/index.html#troubleshooting)
56+
* [API](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_data_replayer/index.html#api)
57+
* [`isaac_ros_data_validation`](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_data_validation/index.html)
58+
* [Overview](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_data_validation/index.html#overview)
59+
* [Quickstart](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_data_validation/index.html#quickstart)
60+
* [Troubleshooting](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_data_validation/index.html#troubleshooting)
61+
* [API](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_data_validation/index.html#api)
3462
* [`isaac_ros_hawk`](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_hawk/index.html)
63+
* [Overview](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_hawk/index.html#overview)
64+
* [Quickstart](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_hawk/index.html#quickstart)
3565
* [API](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_hawk/index.html#api)
66+
* [Troubleshooting](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_hawk/index.html#troubleshooting)
3667
* [`isaac_ros_hesai`](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_hesai/index.html)
68+
* [Overview](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_hesai/index.html#overview)
69+
* [Quickstart](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_hesai/index.html#quickstart)
70+
* [Troubleshooting](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_hesai/index.html#troubleshooting)
3771
* [API](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_hesai/index.html#api)
3872
* [`isaac_ros_imu_bmi088`](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_imu_bmi088/index.html)
73+
* [Overview](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_imu_bmi088/index.html#overview)
74+
* [Quickstart](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_imu_bmi088/index.html#quickstart)
75+
* [Troubleshooting](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_imu_bmi088/index.html#troubleshooting)
3976
* [API](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_imu_bmi088/index.html#api)
4077
* [`isaac_ros_owl`](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_owl/index.html)
78+
* [Overview](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_owl/index.html#overview)
79+
* [Quickstart](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_owl/index.html#quickstart)
80+
* [Troubleshooting](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_owl/index.html#troubleshooting)
4181
* [API](https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nova/isaac_ros_owl/index.html#api)
4282

4383
## Latest
4484

45-
Update 2023-10-18: Initial release
85+
Update 2024-05-30: Introduced Data Recorder and other utilities

hawk_description/CMakeLists.txt

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES
2+
# Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
3+
#
4+
# Licensed under the Apache License, Version 2.0 (the "License");
5+
# you may not use this file except in compliance with the License.
6+
# You may obtain a copy of the License at
7+
#
8+
# http://www.apache.org/licenses/LICENSE-2.0
9+
#
10+
# Unless required by applicable law or agreed to in writing, software
11+
# distributed under the License is distributed on an "AS IS" BASIS,
12+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
# See the License for the specific language governing permissions and
14+
# limitations under the License.
15+
#
16+
# SPDX-License-Identifier: Apache-2.0
17+
18+
cmake_minimum_required(VERSION 3.22.1)
19+
project(hawk_description LANGUAGES C CXX)
20+
21+
find_package(ament_cmake_auto REQUIRED)
22+
ament_auto_find_build_dependencies()
23+
24+
ament_auto_package(INSTALL_TO_SHARE meshes urdf launch)
25+
26+
install(
27+
DIRECTORY meshes urdf
28+
DESTINATION share/${PROJECT_NAME}/
29+
)
30+
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES
2+
# Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
3+
#
4+
# Licensed under the Apache License, Version 2.0 (the "License");
5+
# you may not use this file except in compliance with the License.
6+
# You may obtain a copy of the License at
7+
#
8+
# http://www.apache.org/licenses/LICENSE-2.0
9+
#
10+
# Unless required by applicable law or agreed to in writing, software
11+
# distributed under the License is distributed on an "AS IS" BASIS,
12+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
# See the License for the specific language governing permissions and
14+
# limitations under the License.
15+
#
16+
# SPDX-License-Identifier: Apache-2.0
17+
import pathlib
18+
19+
from isaac_ros_launch_utils.all_types import *
20+
import isaac_ros_launch_utils as lu
21+
22+
23+
def generate_launch_description() -> LaunchDescription:
24+
return LaunchDescription([lu.add_robot_description('hawk_description','urdf/hawk.urdf.xacro')])

hawk_description/meshes/hawk.mtl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
version https://git-lfs.github.com/spec/v1
2+
oid sha256:9e4edc8bd7b21ad405f79e8e140562f3673f2b5dc0bd64bc0f0c450415a7e58d
3+
size 1099

hawk_description/meshes/hawk.obj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
version https://git-lfs.github.com/spec/v1
2+
oid sha256:697961852badc5517d66daf47825f69ec9d58ded86a63c28a65dc4eacfc104a4
3+
size 10973839

hawk_description/package.xml

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?xml version="1.0"?>
2+
3+
<!--
4+
SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
5+
SPDX-License-Identifier: Apache-2.0
6+
7+
Licensed under the Apache License, Version 2.0 (the "License");
8+
you may not use this file except in compliance with the License.
9+
You may obtain a copy of the License at
10+
11+
http://www.apache.org/licenses/LICENSE-2.0
12+
13+
Unless required by applicable law or agreed to in writing, software
14+
distributed under the License is distributed on an "AS IS" BASIS,
15+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16+
See the License for the specific language governing permissions and
17+
limitations under the License.
18+
-->
19+
20+
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
21+
<package format="3">
22+
<name>hawk_description</name>
23+
<version>3.0.0</version>
24+
<description>Description of Hawk Stereo Camera</description>
25+
<maintainer email="[email protected]">Isaac ROS Maintainers</maintainer>
26+
<license>Apache-2.0</license>
27+
<url type="website">https://developer.nvidia.com/isaac-ros-gems/</url>
28+
<author>Xavier Perez Sala</author>
29+
30+
<buildtool_depend>ament_cmake_auto</buildtool_depend>
31+
32+
<exec_depend>isaac_ros_launch_utils</exec_depend>
33+
<exec_depend>launch</exec_depend>
34+
<exec_depend>launch_ros</exec_depend>
35+
<exec_depend>robot_state_publisher</exec_depend>
36+
37+
<test_depend>ament_lint_auto</test_depend>
38+
<test_depend>ament_lint_common</test_depend>
39+
40+
<export>
41+
<build_type>ament_cmake</build_type>
42+
</export>
43+
</package>
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?xml version="1.0"?>
2+
<!--
3+
Copyright (c) 2024, NVIDIA CORPORATION. All rights reserved.
4+
5+
NVIDIA CORPORATION and its licensors retain all intellectual property
6+
and proprietary rights in and to this software, related documentation
7+
and any modifications thereto. Any use, reproduction, disclosure or
8+
distribution of this software and related documentation without an express
9+
license agreement from NVIDIA CORPORATION is strictly prohibited.
10+
-->
11+
<robot name="please_specify_robot_name" xmlns:xacro="http://www.ros.org/wiki/xacro">
12+
<xacro:arg name="robot_namespace" default="/"/>
13+
<xacro:include filename="$(find hawk_description)/urdf/hawk_macro.urdf.xacro"/>
14+
15+
<link name="base_link"/>
16+
<xacro:hawk_camera name="hawk_stereo" parent="base_link" mount_is_root="true">
17+
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
18+
</xacro:hawk_camera>
19+
</robot>
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
<?xml version="1.0"?>
2+
<!--
3+
Copyright (c) 2024, NVIDIA CORPORATION. All rights reserved.
4+
5+
NVIDIA CORPORATION and its licensors retain all intellectual property
6+
and proprietary rights in and to this software, related documentation
7+
and any modifications thereto. Any use, reproduction, disclosure or
8+
distribution of this software and related documentation without an express
9+
license agreement from NVIDIA CORPORATION is strictly prohibited.
10+
-->
11+
<robot xmlns:xacro="http://www.ros.org/wiki/xacro">
12+
13+
<!--
14+
Definition of the hawk_camera macro
15+
16+
Parameters:
17+
- origin: Origin of the transformation connecting the root of this macro with parent link.
18+
- name: The camera name. e.g., if it is "front_stereo", the link is "front_stereo_camera".
19+
Default value: "hawk_stereo", which leads to "hawk_stereo_camera" link name.
20+
- parent: Parent link where the root of this macro will be connected with a joint.
21+
Default value: base_link
22+
- mount_is_root: Flag identifying the root link. If true, root is _mount, othewise is _camera.
23+
-->
24+
<xacro:macro name="hawk_camera" params="*origin name=hawk_stereo parent=base_link
25+
mount_is_root:=false">
26+
27+
<!-- Constants -->
28+
<xacro:property name="M_PI" value="3.1415926535897931"/>
29+
<xacro:property name="baseline" value="0.15"/>
30+
<xacro:property name="mount_offset_x" value="-0.001"/>
31+
<xacro:property name="mount_offset_y" value="-0.075"/>
32+
<xacro:property name="mount_offset_z" value="-0.0125"/>
33+
<xacro:property name="imu_offset_x" value="0.0"/>
34+
<xacro:property name="imu_offset_y" value="-0.0947"/>
35+
<xacro:property name="imu_offset_z" value="0.0061"/>
36+
37+
<!-- Main camera link: Origin is at the principal point of the left camera -->
38+
<link name="${name}_camera">
39+
<visual>
40+
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
41+
<geometry>
42+
<mesh filename="package://hawk_description/meshes/hawk.obj"/>
43+
</geometry>
44+
</visual>
45+
<collision>
46+
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
47+
<geometry>
48+
<mesh filename="package://hawk_description/meshes/hawk.obj"/>
49+
</geometry>
50+
</collision>
51+
</link>
52+
53+
<!-- Camera mounting point: Bottom-Center of the threaded screw hole in the bottom -->
54+
<link name="${name}_camera_mount"/>
55+
56+
<!-- Joints connecting camera main link to mount, and to the parent provided as argument -->
57+
<xacro:if value="${mount_is_root}">
58+
<xacro:property name="root_link" value="${name}_camera_mount"/>
59+
<joint name="${name}_camera_mount_joint" type="fixed">
60+
<origin xyz="${-mount_offset_x} ${-mount_offset_y} ${-mount_offset_z}" rpy="0.0 0.0 0.0"/>
61+
<parent link="${name}_camera_mount"/>
62+
<child link="${name}_camera"/>
63+
</joint>
64+
</xacro:if>
65+
66+
<xacro:unless value="${mount_is_root}">
67+
<xacro:property name="root_link" value="${name}_camera"/>
68+
<joint name="${name}_camera_mount_joint" type="fixed">
69+
<origin xyz="${mount_offset_x} ${mount_offset_y} ${mount_offset_z}" rpy="0.0 0.0 0.0"/>
70+
<parent link="${name}_camera"/>
71+
<child link="${name}_camera_mount"/>
72+
</joint>
73+
</xacro:unless>
74+
75+
<joint name="${name}_camera_joint" type="fixed">
76+
<xacro:insert_block name="origin"/>
77+
<parent link="${parent}"/>
78+
<child link="${root_link}"/>
79+
</joint>
80+
81+
<!-- Left camera -->
82+
<link name="${name}_camera_left"/>
83+
<joint name="${name}_camera_left_joint" type="fixed">
84+
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
85+
<parent link="${name}_camera"/>
86+
<child link="${name}_camera_left"/>
87+
</joint>
88+
89+
<link name="${name}_camera_left_optical"/>
90+
<joint name="${name}_camera_left_optical_joint" type="fixed">
91+
<origin xyz="0.0 0.0 0.0" rpy="${-M_PI/2} 0.0 ${-M_PI/2}"/>
92+
<parent link="${name}_camera_left"/>
93+
<child link="${name}_camera_left_optical"/>
94+
</joint>
95+
96+
<!-- Right camera -->
97+
<link name="${name}_camera_right"/>
98+
<joint name="${name}_camera_right_joint" type="fixed">
99+
<origin xyz="0.0 ${-baseline} 0.0" rpy="0.0 0.0 0.0"/>
100+
<parent link="${name}_camera"/>
101+
<child link="${name}_camera_right"/>
102+
</joint>
103+
104+
<link name="${name}_camera_right_optical"/>
105+
<joint name="${name}_camera_right_optical_joint" type="fixed">
106+
<origin xyz="0.0 0.0 0.0" rpy="${-M_PI/2} 0.0 ${-M_PI/2}"/>
107+
<parent link="${name}_camera_right"/>
108+
<child link="${name}_camera_right_optical"/>
109+
</joint>
110+
111+
<!-- IMU -->
112+
<link name="${name}_camera_imu"/>
113+
<joint name="${name}_camera_imu_joint" type="fixed">
114+
<origin xyz="${imu_offset_x} ${imu_offset_y} ${imu_offset_z}" rpy="0.0 ${M_PI/2} 0.0"/>
115+
<parent link="${name}_camera"/>
116+
<child link="${name}_camera_imu"/>
117+
</joint>
118+
119+
</xacro:macro>
120+
</robot>

0 commit comments

Comments
 (0)