Bug fiix import patron.xacro and append packages realsense2

This commit is contained in:
Даниил Грабарь
2026-04-14 14:20:27 +03:00
parent 1156c768bb
commit c95c94f67b
233 changed files with 41337 additions and 1 deletions
+90
View File
@@ -0,0 +1,90 @@
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Changelog for package realsense2_description
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4.57.4 (2025-11-02)
-------------------
* Update realsense2_camera_description package.xml to 4.57.4
* PR `#3441 <https://github.com/IntelRealSense/realsense-ros/issues/3441>`_ from remibettan/ros2-development: merging 4.57.3 to ros2-development
* Merge tag '4.57.3' into ros2-development
* Contributors: Remi Bettan
4.57.3 (2025-09-15)
-------------------
* PR `#3429 <https://github.com/realsenseai/realsense-ros/issues/3429>`_ from remibettan: intel removed, realsense added
* PR `#3417 <https://github.com/realsenseai/realsense-ros/issues/3417>`_ from remibettan: Merging ros2 hkr to ros2 dev final
* PR `#45 <https://github.com/realsenseai/realsense-ros/issues/45>`_ from remibettan: Merge ros2 dev to ros2 hkr
* PR `#3404 <https://github.com/realsenseai/realsense-ros/issues/3404>`_ from adamwhats: Use package:// to discover meshes
* PR `#3410 <https://github.com/realsenseai/realsense-ros/issues/3410>`_ from Nir-Az: Update copyrights
* PR `#3401 <https://github.com/realsenseai/realsense-ros/issues/3401>`_ from ashrafk93: remove test dependencies
* PR `#2813 <https://github.com/realsenseai/realsense-ros/issues/2813>`_ from SamerKhshiboun: Fix URDF and LPCL for SC
* PR `#2807 <https://github.com/realsenseai/realsense-ros/issues/2807>`_ from SamerKhshiboun: Update _d585.urdf.xacro
* PR `#2771 <https://github.com/realsenseai/realsense-ros/issues/2771>`_ from SamerKhshiboun: SC urdf
* Contributors: Arun-Prasad-V, Ashraf Kattoura, Nir Azkiel, Remi Bettan, Samer Khshiboun, adamwhats
4.55.1 (2024-05-28)
-------------------
* PR `#2957 <https://github.com/realsenseai/realsense-ros/issues/2957>`_ from hellototoro: to_urdf fun retrun a str, not a BufferedRandom
* PR `#2953 <https://github.com/realsenseai/realsense-ros/issues/2953>`_ from Arun-Prasad-V: Added urdf & mesh files for D405 model
* PR `#2841 <https://github.com/realsenseai/realsense-ros/issues/2841>`_ from SamerKhshiboun: Remove Dashing, Eloquent, Foxy, L500 and SR300 support
* PR `#2817 <https://github.com/realsenseai/realsense-ros/issues/2817>`_ from karina-ranadive: Replaced Deprecated function mktemp to TemporaryFile
* Contributors: Arun-Prasad-V, karina-ranadive, SamerKhshiboun, hellototoro
4.54.1 (2023-06-27)
-------------------
* Update mesh path
* clone PR1637 to ros2-development
* Fix Apache License Header and Intel Copyrights
* apply copyrights and license on project
* Replace deprecated parameter node_name with name
* Contributors: Arun Prasad, Nir Azkiel, SamerKhshiboun, augustelalande, marqrazz
4.51.1 (2022-09-13)
-------------------
* Add copyright and license to all ROS2-beta source files
* Contributors: SamerKhshiboun
4.0.4 (2022-03-20)
------------------
4.0.3 (2022-03-16)
------------------
4.0.2 (2022-02-24)
------------------
4.0.1 (2022-02-01)
------------------
* Add D455 urdf files
* Contributors: nomumu, JamesChooWK, doronhi
3.1.3 (2020-12-28)
------------------
* fix realsense2_description's dependency to realsense2_camera_msgs
remove boost dependency.
rename node_namespace to namespace
rename node_executable to executable
* Contributors: benlev, Gilaadb, doronhi
3.1.2 (2020-12-10)
------------------
* Add urdf for L515.
* remove librealsense2 and realsense2_camera dependencies
* Add models for D415, D435, D435i.
For visualization, can be presented using view_model.launch.py
* fix view_d435_model.launch.py and view_d435i_model.launch.py
run: ros2 launch realsense2_description view_d435i_model.launch.py
* Contributors: Ryan Shim, doronhi
2.2.14 (2020-06-18)
-------------------
* fix urdf issues (arg use_nominal_extrinsics).
* Add noetic support:
- urdf files.
- change state_publisher into robot_state_publisher
* correct offset between camera_link and base_link
* Contributors: Brice, Marco Camurri, doronhi
* upgrade version to 2.2.13
+28
View File
@@ -0,0 +1,28 @@
# Copyright 2023 RealSense, Inc. 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.
cmake_minimum_required(VERSION 3.10)
project(realsense2_description)
find_package(ament_cmake REQUIRED)
# Install files
install(DIRECTORY
launch
meshes
rviz
urdf
DESTINATION share/${PROJECT_NAME})
ament_package()
@@ -0,0 +1,33 @@
# Copyright 2023 RealSense, Inc. 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.
import os
import xacro
import tempfile
def to_urdf(xacro_path, parameters=None):
"""Convert the given xacro file to URDF file.
* xacro_path -- the path to the xacro file
* parameters -- to be used when xacro file is parsed.
"""
with tempfile.NamedTemporaryFile(prefix="%s_" % os.path.basename(xacro_path), delete=False) as xacro_file:
urdf_path = xacro_file.name
# open and process file
doc = xacro.process_file(xacro_path, mappings=parameters)
# open the output file
with open(urdf_path, 'w') as urdf_file:
urdf_file.write(doc.toprettyxml(indent=' '))
return urdf_path
@@ -0,0 +1,55 @@
# Copyright 2023 RealSense, Inc. 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.
# /* Author: Doron Hirshberg */
import os
import launch
from launch_ros.actions import Node
import launch.events
from ament_index_python.packages import get_package_share_directory
import sys
sys.path.append(os.path.dirname(os.path.realpath(__file__)))
from launch_utils import to_urdf
def generate_launch_description():
available_urdf_files = [f for f in os.listdir(os.path.join(get_package_share_directory('realsense2_description'), 'urdf')) if f.startswith('test_')]
params = dict([aa for aa in [aa.split(':=') for aa in sys.argv] if len(aa) == 2])
if ('model' not in params or params['model'] not in available_urdf_files):
print('USAGE:')
print('ros2 launch realsense2_description view_model.launch.py model:=<model>')
print('Available argumants for <model> are as follows:')
print('\n'.join(available_urdf_files))
return launch.LaunchDescription()
rviz_config_dir = os.path.join(get_package_share_directory('realsense2_description'), 'rviz', 'urdf.rviz')
xacro_path = os.path.join(get_package_share_directory('realsense2_description'), 'urdf', params['model'])
urdf = to_urdf(xacro_path, {'use_nominal_extrinsics': 'true', 'add_plug': 'true'})
rviz_node = Node(
package='rviz2',
executable='rviz2',
name='rviz2',
output='screen',
arguments=['-d', rviz_config_dir],
parameters=[{'use_sim_time': False}]
)
model_node = Node(
name='model_node',
package='robot_state_publisher',
executable='robot_state_publisher',
namespace='',
output='screen',
arguments=[urdf]
)
return launch.LaunchDescription([rviz_node, model_node])
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
+28
View File
@@ -0,0 +1,28 @@
<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
<name>realsense2_description</name>
<version>4.57.7</version>
<description>RealSense description package for RealSense 3D D400 cameras</description>
<maintainer email="rsswsdk@realsensecloud.onmicrosoft.com">LibRealSense ROS Team</maintainer>
<maintainer email="nir.azkiel@realsenseai.com">Nir Azkiel</maintainer>
<license>Apache License 2.0</license>
<url type="website">http://www.ros.org/wiki/RealSense</url>
<url type="bugtracker">https://github.com/intel-ros/realsense/issues</url>
<author email="rsswsdk@realsensecloud.onmicrosoft.com">LibRealSense ROS Team</author>
<buildtool_depend>ament_cmake</buildtool_depend>
<depend>rclcpp</depend>
<depend>rclcpp_components</depend>
<depend>realsense2_camera_msgs</depend>
<exec_depend>launch_ros</exec_depend>
<exec_depend>xacro</exec_depend>
<export>
<build_type>ament_cmake</build_type>
</export>
</package>
+154
View File
@@ -0,0 +1,154 @@
Panels:
- Class: rviz_common/Displays
Help Height: 78
Name: Displays
Property Tree Widget:
Expanded:
- /Global Options1
- /Status1
- /RobotModel1
- /RobotModel1/Description Topic1
- /TF1
- /TF1/Frames1
Splitter Ratio: 0.6360294222831726
Tree Height: 496
- Class: rviz_common/Selection
Name: Selection
- Class: rviz_common/Tool Properties
Expanded:
- /2D Pose Estimate1
- /Publish Point1
Name: Tool Properties
Splitter Ratio: 0.5886790156364441
- Class: rviz_common/Views
Expanded:
- /Current View1
Name: Views
Splitter Ratio: 0.5
Visualization Manager:
Class: ""
Displays:
- Alpha: 0.5
Cell Size: 1
Class: rviz_default_plugins/Grid
Color: 160; 160; 164
Enabled: true
Line Style:
Line Width: 0.029999999329447746
Value: Lines
Name: Grid
Normal Cell Count: 0
Offset:
X: 0
Y: 0
Z: 0
Plane: XY
Plane Cell Count: 10
Reference Frame: <Fixed Frame>
Value: true
- Alpha: 1
Class: rviz_default_plugins/RobotModel
Collision Enabled: false
Description File: ""
Description Source: Topic
Description Topic:
Depth: 5
Durability Policy: Volatile
History Policy: Keep Last
Reliability Policy: Reliable
Value: /robot_description
Enabled: true
Name: RobotModel
TF Prefix: ""
Update Interval: 0
Value: true
Visual Enabled: true
- Class: rviz_default_plugins/TF
Enabled: true
Frame Timeout: 15
Marker Scale: 0.100000001
Name: TF
Show Arrows: true
Show Axes: true
Show Names: false
Update Interval: 0
Value: true
Enabled: true
Global Options:
Background Color: 48; 48; 48
Fixed Frame: base_link
Frame Rate: 30
Name: root
Tools:
- Class: rviz_default_plugins/Interact
Hide Inactive Objects: true
- Class: rviz_default_plugins/MoveCamera
- Class: rviz_default_plugins/Select
- Class: rviz_default_plugins/FocusCamera
- Class: rviz_default_plugins/Measure
Line color: 128; 128; 0
- Class: rviz_default_plugins/SetInitialPose
Topic:
Depth: 5
Durability Policy: Volatile
History Policy: Keep Last
Reliability Policy: Reliable
Value: /initialpose
- Class: rviz_default_plugins/SetGoal
Topic:
Depth: 5
Durability Policy: Volatile
History Policy: Keep Last
Reliability Policy: Reliable
Value: /goal_pose
- Class: rviz_default_plugins/PublishPoint
Single click: true
Topic:
Depth: 5
Durability Policy: Volatile
History Policy: Keep Last
Reliability Policy: Reliable
Value: /clicked_point
Transformation:
Current:
Class: rviz_default_plugins/TF
Value: true
Views:
Current:
Class: rviz_default_plugins/Orbit
Distance: 0.241934671998024
Enable Stereo Rendering:
Stereo Eye Separation: 0.05999999865889549
Stereo Focal Distance: 1
Swap Stereo Eyes: false
Value: false
Focal Point:
X: 0
Y: 0
Z: 0
Focal Shape Fixed Size: true
Focal Shape Size: 0.05000000074505806
Invert Z Axis: false
Name: Current View
Near Clip Distance: 0.009999999776482582
Pitch: 0.44539815187454224
Target Frame: <Fixed Frame>
Value: Orbit (rviz)
Yaw: 0.0853981301188469
Saved: ~
Window Geometry:
Displays:
collapsed: false
Height: 841
Hide Left Dock: false
Hide Right Dock: false
QMainWindow State: 000000ff00000000fd000000040000000000000156000002effc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000003d000002ef000000c900fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f000002effc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073010000003d000002ef000000a400fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000004420000003efc0100000002fb0000000800540069006d00650100000000000004420000000000000000fb0000000800540069006d0065010000000000000450000000000000000000000424000002ef00000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000
Selection:
collapsed: false
Tool Properties:
collapsed: false
Views:
collapsed: false
Width: 1685
X: 67
Y: 60
@@ -0,0 +1,165 @@
<?xml version="1.0"?>
<!--
# Copyright 2023 RealSense, Inc. 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.
-->
<!--
This is the URDF model for the RealSense 405 camera, in its
aluminum peripherial evaluation case.
-->
<robot name="sensor_d405" xmlns:xacro="http://ros.org/wiki/xacro">
<!-- Includes -->
<xacro:include filename="$(find realsense2_description)/urdf/_materials.urdf.xacro" />
<xacro:include filename="$(find realsense2_description)/urdf/_usb_plug.urdf.xacro" />
<xacro:macro name="sensor_d405" params="parent *origin name:=camera use_nominal_extrinsics:=false">
<xacro:arg name="add_plug" default="false" />
<xacro:property name="M_PI" value="3.1415926535897931" />
<!-- The following values are approximate, and the camera node
publishing TF values with actual calibrated camera extrinsic values -->
<xacro:property name="d405_cam_depth_to_infra1_offset" value="0.0"/>
<xacro:property name="d405_cam_depth_to_infra2_offset" value="-0.018"/>
<xacro:property name="d405_cam_depth_to_color_offset" value="0.0"/>
<!-- The following values model the aluminum peripherial case for the
d405 camera, with the camera joint represented by the actual
peripherial camera tripod mount -->
<xacro:property name="d405_cam_width" value="0.042"/>
<xacro:property name="d405_cam_height" value="0.042"/>
<xacro:property name="d405_cam_depth" value="0.023"/>
<xacro:property name="d405_cam_mount_from_center_offset" value="0.01465"/>
<!-- glass cover is 0.1 mm inwards from front aluminium plate -->
<xacro:property name="d405_glass_to_front" value="0.1e-3"/>
<!-- see datasheet Revision 017, Table. 4-16 page 97 -->
<xacro:property name="d405_zero_depth_to_glass" value="3.7e-3"/>
<!-- convenience precomputation to avoid clutter-->
<xacro:property name="d405_mesh_x_offset" value="${d405_cam_mount_from_center_offset-d405_glass_to_front-d405_zero_depth_to_glass}"/>
<!-- The following offset is relative to the physical d405 camera peripherial
camera tripod mount -->
<xacro:property name="d405_cam_depth_px" value="${d405_cam_mount_from_center_offset}"/>
<xacro:property name="d405_cam_depth_py" value="0.009"/>
<xacro:property name="d405_cam_depth_pz" value="${d405_cam_height/2}"/>
<!-- camera body, with origin at bottom screw mount -->
<joint name="${name}_joint" type="fixed">
<xacro:insert_block name="origin" />
<parent link="${parent}"/>
<child link="${name}_bottom_screw_frame" />
</joint>
<link name="${name}_bottom_screw_frame"/>
<joint name="${name}_link_joint" type="fixed">
<origin xyz="${d405_mesh_x_offset} ${d405_cam_depth_py} ${d405_cam_depth_pz}" rpy="0 0 0"/>
<parent link="${name}_bottom_screw_frame"/>
<child link="${name}_link" />
</joint>
<link name="${name}_link">
<visual>
<!-- the mesh origin is at front plate in between the two infrared camera axes -->
<origin xyz="${d405_zero_depth_to_glass + d405_glass_to_front} ${-d405_cam_depth_py} 0" rpy="${M_PI/2} 0 ${M_PI/2}"/>
<geometry>
<mesh filename="package://realsense2_description/meshes/d405.stl" scale="0.001 0.001 0.001" />
</geometry>
<material name="aluminum"/>
</visual>
<collision>
<origin xyz="${d405_zero_depth_to_glass-d405_cam_depth/2} ${-d405_cam_depth_py} 0" rpy="0 0 0"/>
<geometry>
<box size="${d405_cam_depth} ${d405_cam_width} ${d405_cam_height}"/>
</geometry>
</collision>
<inertial>
<!-- The following are not reliable values, and should not be used for modeling -->
<mass value="0.072" />
<origin xyz="0 0 0" />
<inertia ixx="0.003881243" ixy="0.0" ixz="0.0" iyy="0.000498940" iyz="0.0" izz="0.003879257" />
</inertial>
</link>
<!-- Use the nominal extrinsics between camera frames if the calibrated extrinsics aren't being published. e.g. running the device in simulation -->
<xacro:if value="${use_nominal_extrinsics}">
<!-- camera depth joints and links -->
<joint name="${name}_depth_joint" type="fixed">
<origin xyz="0 0 0" rpy="0 0 0"/>
<parent link="${name}_link"/>
<child link="${name}_depth_frame" />
</joint>
<link name="${name}_depth_frame"/>
<joint name="${name}_depth_optical_joint" type="fixed">
<origin xyz="0 0 0" rpy="${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_depth_frame" />
<child link="${name}_depth_optical_frame" />
</joint>
<link name="${name}_depth_optical_frame"/>
<!-- camera left IR joints and links -->
<joint name="${name}_infra1_joint" type="fixed">
<origin xyz="0 ${d405_cam_depth_to_infra1_offset} 0" rpy="0 0 0" />
<parent link="${name}_link" />
<child link="${name}_infra1_frame" />
</joint>
<link name="${name}_infra1_frame"/>
<joint name="${name}_infra1_optical_joint" type="fixed">
<origin xyz="0 0 0" rpy="${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_infra1_frame" />
<child link="${name}_infra1_optical_frame" />
</joint>
<link name="${name}_infra1_optical_frame"/>
<!-- camera right IR joints and links -->
<joint name="${name}_infra2_joint" type="fixed">
<origin xyz="0 ${d405_cam_depth_to_infra2_offset} 0" rpy="0 0 0" />
<parent link="${name}_link" />
<child link="${name}_infra2_frame" />
</joint>
<link name="${name}_infra2_frame"/>
<joint name="${name}_infra2_optical_joint" type="fixed">
<origin xyz="0 0 0" rpy="${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_infra2_frame" />
<child link="${name}_infra2_optical_frame" />
</joint>
<link name="${name}_infra2_optical_frame"/>
<!-- camera color joints and links -->
<joint name="${name}_color_joint" type="fixed">
<origin xyz="0 ${d405_cam_depth_to_color_offset} 0" rpy="0 0 0" />
<parent link="${name}_link" />
<child link="${name}_color_frame" />
</joint>
<link name="${name}_color_frame"/>
<joint name="${name}_color_optical_joint" type="fixed">
<origin xyz="0 0 0" rpy="${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_color_frame" />
<child link="${name}_color_optical_frame" />
</joint>
<link name="${name}_color_optical_frame"/>
</xacro:if>
<xacro:if value="$(arg add_plug)">
<xacro:usb_plug parent="${name}_link" name="${name}_usb_plug">
<origin xyz="${-0.00153-d405_mesh_x_offset} ${d405_cam_width/2-d405_cam_depth_py} 0" rpy="${M_PI} 0 0"/>
</xacro:usb_plug>
</xacro:if>
</xacro:macro>
</robot>
@@ -0,0 +1,165 @@
<?xml version="1.0"?>
<!--
# Copyright 2023 RealSense, Inc. 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.
-->
<!--
This is the URDF model for the RealSense 415 camera, in its
aluminum peripherial evaluation case.
-->
<robot name="sensor_d415" xmlns:xacro="http://ros.org/wiki/xacro">
<!-- Includes -->
<xacro:include filename="$(find realsense2_description)/urdf/_materials.urdf.xacro" />
<xacro:include filename="$(find realsense2_description)/urdf/_usb_plug.urdf.xacro" />
<xacro:macro name="sensor_d415" params="parent *origin name:=camera use_nominal_extrinsics:=false add_plug:=false use_mesh:=true">
<xacro:property name="M_PI" value="3.1415926535897931" />
<!-- The following values are approximate, and the camera node
publishing TF values with actual calibrated camera extrinsic values -->
<xacro:property name="d415_cam_depth_to_infra1_offset" value="0.0"/>
<xacro:property name="d415_cam_depth_to_infra2_offset" value="-0.055"/>
<xacro:property name="d415_cam_depth_to_color_offset" value="0.015"/>
<!-- The following values model the aluminum peripherial case for the
d415 camera, with the camera joint represented by the actual
peripherial camera tripod mount -->
<xacro:property name="d415_cam_width" value="0.099"/>
<xacro:property name="d415_cam_height" value="0.023"/>
<xacro:property name="d415_cam_depth" value="0.02005"/>
<xacro:property name="d415_cam_mount_from_center_offset" value="0.00987"/>
<!-- The following offset is relative the the physical d415 camera peripherial
camera tripod mount -->
<xacro:property name="d415_cam_depth_px" value="${d415_cam_mount_from_center_offset}"/>
<xacro:property name="d415_cam_depth_py" value="0.020"/>
<xacro:property name="d415_cam_depth_pz" value="${d415_cam_height/2}"/>
<!-- camera body, with origin at bottom screw mount -->
<joint name="${name}_joint" type="fixed">
<xacro:insert_block name="origin" />
<parent link="${parent}"/>
<child link="${name}_bottom_screw_frame" />
</joint>
<link name="${name}_bottom_screw_frame"/>
<joint name="${name}_link_joint" type="fixed">
<origin xyz="0 ${d415_cam_depth_py} ${d415_cam_depth_pz}" rpy="0 0 0"/>
<parent link="${name}_bottom_screw_frame"/>
<child link="${name}_link" />
</joint>
<link name="${name}_link">
<visual>
<xacro:if value="${use_mesh}">
<origin xyz="${d415_cam_mount_from_center_offset} ${-d415_cam_depth_py} 0" rpy="${M_PI/2} 0 ${M_PI/2}"/>
<geometry>
<mesh filename="package://realsense2_description/meshes/d415.stl" />
</geometry>
<material name="aluminum"/>
</xacro:if>
<xacro:unless value="${use_mesh}">
<origin xyz="0 ${-d415_cam_depth_py} 0" rpy="0 0 0"/>
<geometry>
<box size="${d415_cam_depth} ${d415_cam_width} ${d415_cam_height}"/>
</geometry>
</xacro:unless>
</visual>
<collision>
<origin xyz="0 ${-d415_cam_depth_py} 0" rpy="0 0 0"/>
<geometry>
<box size="${d415_cam_depth} ${d415_cam_width} ${d415_cam_height}"/>
</geometry>
</collision>
<inertial>
<mass value="0.072" />
<!-- The following are not reliable values, and should not be used for modeling -->
<origin xyz="0 0 0" />
<inertia ixx="0.003881243" ixy="0.0" ixz="0.0" iyy="0.000498940" iyz="0.0" izz="0.003879257" />
</inertial>
</link>
<!-- Use the nominal extrinsics between camera frames if the calibrated extrinsics aren't being published. e.g. running the device in simulation -->
<xacro:if value="${use_nominal_extrinsics}">
<!-- camera depth joints and links -->
<joint name="${name}_depth_joint" type="fixed">
<origin xyz="0 0 0" rpy="0 0 0"/>
<parent link="${name}_link"/>
<child link="${name}_depth_frame" />
</joint>
<link name="${name}_depth_frame"/>
<joint name="${name}_depth_optical_joint" type="fixed">
<origin xyz="0 0 0" rpy="${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_depth_frame" />
<child link="${name}_depth_optical_frame" />
</joint>
<link name="${name}_depth_optical_frame"/>
<!-- camera left IR joints and links -->
<joint name="${name}_infra1_joint" type="fixed">
<origin xyz="0 ${d415_cam_depth_to_infra1_offset} 0" rpy="0 0 0" />
<parent link="${name}_link" />
<child link="${name}_infra1_frame" />
</joint>
<link name="${name}_infra1_frame"/>
<joint name="${name}_infra1_optical_joint" type="fixed">
<origin xyz="0 0 0" rpy="${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_infra1_frame" />
<child link="${name}_infra1_optical_frame" />
</joint>
<link name="${name}_infra1_optical_frame"/>
<!-- camera right IR joints and links -->
<joint name="${name}_infra2_joint" type="fixed">
<origin xyz="0 ${d415_cam_depth_to_infra2_offset} 0" rpy="0 0 0" />
<parent link="${name}_link" />
<child link="${name}_infra2_frame" />
</joint>
<link name="${name}_infra2_frame"/>
<joint name="${name}_infra2_optical_joint" type="fixed">
<origin xyz="0 0 0" rpy="${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_infra2_frame" />
<child link="${name}_infra2_optical_frame" />
</joint>
<link name="${name}_infra2_optical_frame"/>
<!-- camera color joints and links -->
<joint name="${name}_color_joint" type="fixed">
<origin xyz="0 ${d415_cam_depth_to_color_offset} 0" rpy="0 0 0" />
<parent link="${name}_link" />
<child link="${name}_color_frame" />
</joint>
<link name="${name}_color_frame"/>
<joint name="${name}_color_optical_joint" type="fixed">
<origin xyz="0 0 0" rpy="${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_color_frame" />
<child link="${name}_color_optical_frame" />
</joint>
<link name="${name}_color_optical_frame"/>
</xacro:if>
<xacro:if value="${add_plug}">
<xacro:usb_plug parent="${name}_link" name="${name}_usb_plug">
<origin xyz="${d415_cam_mount_from_center_offset - 0.01587} ${-d415_cam_depth_py - 0.0358} 0" rpy="0 0 0"/>
</xacro:usb_plug>
</xacro:if>
</xacro:macro>
</robot>
@@ -0,0 +1,172 @@
<?xml version="1.0"?>
<!--
# Copyright 2023 RealSense, Inc. 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.
-->
<!--
This is the URDF model for the RealSense 430 camera, in its
aluminum peripherial evaluation case.
-->
<robot name="sensor_d435" xmlns:xacro="http://ros.org/wiki/xacro">
<!-- Includes -->
<xacro:include filename="$(find realsense2_description)/urdf/_materials.urdf.xacro" />
<xacro:include filename="$(find realsense2_description)/urdf/_usb_plug.urdf.xacro" />
<xacro:macro name="sensor_d435" params="parent *origin name:=camera use_nominal_extrinsics:=false add_plug:=false use_mesh:=true">
<xacro:property name="M_PI" value="3.1415926535897931" />
<!-- The following values are approximate, and the camera node
publishing TF values with actual calibrated camera extrinsic values -->
<xacro:property name="d435_cam_depth_to_infra1_offset" value="0.0"/>
<xacro:property name="d435_cam_depth_to_infra2_offset" value="-0.050"/>
<xacro:property name="d435_cam_depth_to_color_offset" value="0.015"/>
<!-- The following values model the aluminum peripherial case for the
D435 camera, with the camera joint represented by the actual
peripherial camera tripod mount -->
<xacro:property name="d435_cam_width" value="0.090"/>
<xacro:property name="d435_cam_height" value="0.025"/>
<xacro:property name="d435_cam_depth" value="0.02505"/>
<xacro:property name="d435_cam_mount_from_center_offset" value="0.0149"/>
<!-- glass cover is 0.1 mm inwards from front aluminium plate -->
<xacro:property name="d435_glass_to_front" value="0.1e-3"/>
<!-- see datasheet Revision 007, Fig. 4-4 page 65 -->
<xacro:property name="d435_zero_depth_to_glass" value="4.2e-3"/>
<!-- convenience precomputation to avoid clutter-->
<xacro:property name="d435_mesh_x_offset" value="${d435_cam_mount_from_center_offset-d435_glass_to_front-d435_zero_depth_to_glass}"/>
<!-- The following offset is relative the the physical D435 camera peripherial
camera tripod mount -->
<xacro:property name="d435_cam_depth_px" value="${d435_cam_mount_from_center_offset}"/>
<xacro:property name="d435_cam_depth_py" value="0.0175"/>
<xacro:property name="d435_cam_depth_pz" value="${d435_cam_height/2}"/>
<!-- camera body, with origin at bottom screw mount -->
<joint name="${name}_joint" type="fixed">
<xacro:insert_block name="origin" />
<parent link="${parent}"/>
<child link="${name}_bottom_screw_frame" />
</joint>
<link name="${name}_bottom_screw_frame"/>
<joint name="${name}_link_joint" type="fixed">
<origin xyz="${d435_mesh_x_offset} ${d435_cam_depth_py} ${d435_cam_depth_pz}" rpy="0 0 0"/>
<parent link="${name}_bottom_screw_frame"/>
<child link="${name}_link" />
</joint>
<link name="${name}_link">
<visual>
<xacro:if value="${use_mesh}">
<!-- the mesh origin is at front plate in between the two infrared camera axes -->
<origin xyz="${d435_zero_depth_to_glass + d435_glass_to_front} ${-d435_cam_depth_py} 0" rpy="${M_PI/2} 0 ${M_PI/2}"/>
<geometry>
<mesh filename="package://realsense2_description/meshes/d435.dae" />
</geometry>
</xacro:if>
<xacro:unless value="${use_mesh}">
<origin xyz="0 ${-d435_cam_depth_py} 0" rpy="0 0 0"/>
<geometry>
<box size="${d435_cam_depth} ${d435_cam_width} ${d435_cam_height}"/>
</geometry>
<material name="aluminum"/>
</xacro:unless>
</visual>
<collision>
<origin xyz="0 ${-d435_cam_depth_py} 0" rpy="0 0 0"/>
<geometry>
<box size="${d435_cam_depth} ${d435_cam_width} ${d435_cam_height}"/>
</geometry>
</collision>
<inertial>
<!-- The following are not reliable values, and should not be used for modeling -->
<mass value="0.072" />
<origin xyz="0 0 0" />
<inertia ixx="0.003881243" ixy="0.0" ixz="0.0" iyy="0.000498940" iyz="0.0" izz="0.003879257" />
</inertial>
</link>
<!-- Use the nominal extrinsics between camera frames if the calibrated extrinsics aren't being published. e.g. running the device in simulation -->
<xacro:if value="${use_nominal_extrinsics}">
<!-- camera depth joints and links -->
<joint name="${name}_depth_joint" type="fixed">
<origin xyz="0 0 0" rpy="0 0 0"/>
<parent link="${name}_link"/>
<child link="${name}_depth_frame" />
</joint>
<link name="${name}_depth_frame"/>
<joint name="${name}_depth_optical_joint" type="fixed">
<origin xyz="0 0 0" rpy="${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_depth_frame" />
<child link="${name}_depth_optical_frame" />
</joint>
<link name="${name}_depth_optical_frame"/>
<!-- camera left IR joints and links -->
<joint name="${name}_infra1_joint" type="fixed">
<origin xyz="0 ${d435_cam_depth_to_infra1_offset} 0" rpy="0 0 0" />
<parent link="${name}_link" />
<child link="${name}_infra1_frame" />
</joint>
<link name="${name}_infra1_frame"/>
<joint name="${name}_infra1_optical_joint" type="fixed">
<origin xyz="0 0 0" rpy="${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_infra1_frame" />
<child link="${name}_infra1_optical_frame" />
</joint>
<link name="${name}_infra1_optical_frame"/>
<!-- camera right IR joints and links -->
<joint name="${name}_infra2_joint" type="fixed">
<origin xyz="0 ${d435_cam_depth_to_infra2_offset} 0" rpy="0 0 0" />
<parent link="${name}_link" />
<child link="${name}_infra2_frame" />
</joint>
<link name="${name}_infra2_frame"/>
<joint name="${name}_infra2_optical_joint" type="fixed">
<origin xyz="0 0 0" rpy="${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_infra2_frame" />
<child link="${name}_infra2_optical_frame" />
</joint>
<link name="${name}_infra2_optical_frame"/>
<!-- camera color joints and links -->
<joint name="${name}_color_joint" type="fixed">
<origin xyz="0 ${d435_cam_depth_to_color_offset} 0" rpy="0 0 0" />
<parent link="${name}_link" />
<child link="${name}_color_frame" />
</joint>
<link name="${name}_color_frame"/>
<joint name="${name}_color_optical_joint" type="fixed">
<origin xyz="0 0 0" rpy="${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_color_frame" />
<child link="${name}_color_optical_frame" />
</joint>
<link name="${name}_color_optical_frame"/>
</xacro:if>
<xacro:if value="${add_plug}">
<xacro:usb_plug parent="${name}_link" name="${name}_usb_plug">
<origin xyz="${d435_cam_mount_from_center_offset - 0.02095} ${-d435_cam_depth_py - 0.0353} 0" rpy="0 0 0"/>
</xacro:usb_plug>
</xacro:if>
</xacro:macro>
</robot>
@@ -0,0 +1,35 @@
<?xml version="1.0"?>
<!--
# Copyright 2023 RealSense, Inc. 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.
-->
<!--
This is the URDF model for the RealSense 435i camera, in it's
aluminum peripherial evaluation case.
-->
<robot name="sensor_d435i" xmlns:xacro="http://ros.org/wiki/xacro">
<xacro:include filename="$(find realsense2_description)/urdf/_d435.urdf.xacro"/>
<xacro:include filename="$(find realsense2_description)/urdf/_d435i_imu_modules.urdf.xacro"/>
<xacro:macro name="sensor_d435i" params="parent *origin name:=camera use_nominal_extrinsics:=false">
<xacro:sensor_d435 parent="${parent}" name="${name}" use_nominal_extrinsics="${use_nominal_extrinsics}">
<xacro:insert_block name="origin" />
</xacro:sensor_d435>
<xacro:d435i_imu_modules name="${name}" use_nominal_extrinsics="${use_nominal_extrinsics}"/>
</xacro:macro>
</robot>
@@ -0,0 +1,59 @@
<?xml version="1.0"?>
<!--
# Copyright 2023 RealSense, Inc. 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.
-->
<!--
This is the URDF model for the inertial modules of the
RealSense 435i camera.
-->
<robot name="d435i_imu_modules" xmlns:xacro="http://www.ros.org/wiki/xacro">
<xacro:macro name="d435i_imu_modules" params="name use_nominal_extrinsics">
<xacro:property name="M_PI" value="${pi}" />
<xacro:if value="${use_nominal_extrinsics}">
<link name="${name}_accel_frame" />
<link name="${name}_accel_optical_frame" />
<link name="${name}_gyro_frame" />
<link name="${name}_gyro_optical_frame" />
<joint name="${name}_accel_joint" type="fixed">
<origin xyz = "-0.01174 -0.00552 0.0051" rpy = "0 0 0" />
<parent link="${name}_link" />
<child link="${name}_accel_frame" />
</joint>
<joint name="${name}_accel_optical_joint" type="fixed">
<origin xyz = "0 0 0" rpy = "${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_accel_frame" />
<child link="${name}_accel_optical_frame" />
</joint>
<joint name="${name}_gyro_joint" type="fixed">
<origin xyz = "-0.01174 -0.00552 0.0051" rpy = "0 0 0" />
<parent link="${name}_link" />
<child link="${name}_gyro_frame" />
</joint>
<joint name="${name}_gyro_optical_joint" type="fixed">
<origin xyz = "0 0 0" rpy = "${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_gyro_frame" />
<child link="${name}_gyro_optical_frame" />
</joint>
</xacro:if>
</xacro:macro>
</robot>
@@ -0,0 +1,205 @@
<?xml version="1.0"?>
<!--
# Copyright 2026 RealSense, Inc. 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.
-->
<!--
This is the URDF model for the Intel RealSense D436 camera, in its
aluminum peripheral evaluation case.
-->
<robot name="sensor_d436" xmlns:xacro="http://ros.org/wiki/xacro">
<!-- Includes -->
<xacro:include filename="$(find realsense2_description)/urdf/_materials.urdf.xacro" />
<xacro:include filename="$(find realsense2_description)/urdf/_usb_plug.urdf.xacro" />
<xacro:macro name="sensor_d436" params="parent *origin name:=camera use_nominal_extrinsics:=false add_plug:=false use_mesh:=true">
<xacro:property name="M_PI" value="3.1415926535897931" />
<!-- The following values are approximate, and the camera node
publishing TF values with actual calibrated camera extrinsic values -->
<xacro:property name="d436_cam_depth_to_infra1_offset" value="0.0"/>
<xacro:property name="d436_cam_depth_to_infra2_offset" value="-0.050"/>
<xacro:property name="d436_cam_depth_to_color_offset_y" value="0.015"/>
<xacro:property name="d436_cam_depth_to_color_offset_x" value="-0.00555"/>
<!-- The following values model the aluminum peripheral case for the
d436 camera, with the camera joint represented by the actual
peripheral camera tripod mount -->
<xacro:property name="d436_cam_width" value="0.090"/>
<xacro:property name="d436_cam_height" value="0.025"/>
<xacro:property name="d436_cam_depth" value="0.02505"/>
<xacro:property name="d436_cam_mount_from_center_offset" value="0.0149"/>
<!-- glass cover is 0.1 mm inwards from front aluminium plate -->
<xacro:property name="d436_glass_to_front" value="0.1e-3"/>
<xacro:property name="d436_zero_depth_to_glass" value="4.2e-3"/>
<!-- convenience precomputation to avoid clutter-->
<xacro:property name="d436_mesh_x_offset" value="${d436_cam_mount_from_center_offset-d436_glass_to_front-d436_zero_depth_to_glass}"/>
<!-- The following offset is relative to the physical d436 camera peripheral
camera tripod mount -->
<xacro:property name="d436_cam_depth_px" value="${d436_cam_mount_from_center_offset}"/>
<xacro:property name="d436_cam_depth_py" value="0.0175"/>
<xacro:property name="d436_cam_depth_pz" value="${d436_cam_height/2}"/>
<!-- camera body, with origin at bottom screw mount -->
<joint name="${name}_joint" type="fixed">
<xacro:insert_block name="origin" />
<parent link="${parent}"/>
<child link="${name}_bottom_screw_frame" />
</joint>
<link name="${name}_bottom_screw_frame"/>
<joint name="${name}_link_joint" type="fixed">
<origin xyz="${d436_mesh_x_offset} ${d436_cam_depth_py} ${d436_cam_depth_pz}" rpy="0 0 0"/>
<parent link="${name}_bottom_screw_frame"/>
<child link="${name}_link" />
</joint>
<link name="${name}_link">
<visual>
<xacro:if value="${use_mesh}">
<!-- the mesh origin is at front plate in between the two infrared camera axes -->
<origin xyz="${d436_zero_depth_to_glass + d436_glass_to_front} ${-d436_cam_depth_py} 0" rpy="${M_PI/2} 0 ${M_PI/2}"/>
<geometry>
<mesh filename="package://realsense2_description/meshes/d435.dae" />
</geometry>
</xacro:if>
<xacro:unless value="${use_mesh}">
<origin xyz="0 ${-d436_cam_depth_py} 0" rpy="0 0 0"/>
<geometry>
<box size="${d436_cam_depth} ${d436_cam_width} ${d436_cam_height}"/>
</geometry>
<material name="aluminum"/>
</xacro:unless>
</visual>
<collision>
<origin xyz="0 ${-d436_cam_depth_py} 0" rpy="0 0 0"/>
<geometry>
<box size="${d436_cam_depth} ${d436_cam_width} ${d436_cam_height}"/>
</geometry>
</collision>
<inertial>
<!-- The following are not reliable values, and should not be used for modeling -->
<mass value="0.072" />
<origin xyz="0 0 0" />
<inertia ixx="0.003881243" ixy="0.0" ixz="0.0" iyy="0.000498940" iyz="0.0" izz="0.003879257" />
</inertial>
</link>
<!-- Use the nominal extrinsics between camera frames if the calibrated extrinsics aren't being published. e.g. running the device in simulation -->
<xacro:if value="${use_nominal_extrinsics}">
<!-- camera depth joints and links -->
<joint name="${name}_depth_joint" type="fixed">
<origin xyz="0 0 0" rpy="0 0 0"/>
<parent link="${name}_link"/>
<child link="${name}_depth_frame" />
</joint>
<link name="${name}_depth_frame"/>
<joint name="${name}_depth_optical_joint" type="fixed">
<origin xyz="0 0 0" rpy="${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_depth_frame" />
<child link="${name}_depth_optical_frame" />
</joint>
<link name="${name}_depth_optical_frame"/>
<!-- camera left IR joints and links -->
<joint name="${name}_infra1_joint" type="fixed">
<origin xyz="0 ${d436_cam_depth_to_infra1_offset} 0" rpy="0 0 0" />
<parent link="${name}_link" />
<child link="${name}_infra1_frame" />
</joint>
<link name="${name}_infra1_frame"/>
<joint name="${name}_infra1_optical_joint" type="fixed">
<origin xyz="0 0 0" rpy="${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_infra1_frame" />
<child link="${name}_infra1_optical_frame" />
</joint>
<link name="${name}_infra1_optical_frame"/>
<!-- camera right IR joints and links -->
<joint name="${name}_infra2_joint" type="fixed">
<origin xyz="0 ${d436_cam_depth_to_infra2_offset} 0" rpy="0 0 0" />
<parent link="${name}_link" />
<child link="${name}_infra2_frame" />
</joint>
<link name="${name}_infra2_frame"/>
<joint name="${name}_infra2_optical_joint" type="fixed">
<origin xyz="0 0 0" rpy="${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_infra2_frame" />
<child link="${name}_infra2_optical_frame" />
</joint>
<link name="${name}_infra2_optical_frame"/>
<!-- camera color joints and links -->
<joint name="${name}_color_joint" type="fixed">
<origin xyz="${d436_cam_depth_to_color_offset_x} ${d436_cam_depth_to_color_offset_y} 0" rpy="0 0 0" />
<parent link="${name}_link" />
<child link="${name}_color_frame" />
</joint>
<link name="${name}_color_frame"/>
<joint name="${name}_color_optical_joint" type="fixed">
<origin xyz="0 0 0" rpy="${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_color_frame" />
<child link="${name}_color_optical_frame" />
</joint>
<link name="${name}_color_optical_frame"/>
<!-- IMU accel joints and links -->
<link name="${name}_accel_frame" />
<link name="${name}_accel_optical_frame" />
<joint name="${name}_accel_joint" type="fixed">
<origin xyz = "-0.01174 -0.00552 0.0051" rpy = "0 0 0" />
<parent link="${name}_link" />
<child link="${name}_accel_frame" />
</joint>
<joint name="${name}_accel_optical_joint" type="fixed">
<origin xyz = "0 0 0" rpy = "${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_accel_frame" />
<child link="${name}_accel_optical_frame" />
</joint>
<!-- IMU gyro joints and links -->
<link name="${name}_gyro_frame" />
<link name="${name}_gyro_optical_frame" />
<joint name="${name}_gyro_joint" type="fixed">
<origin xyz = "-0.01174 -0.00552 0.0051" rpy = "0 0 0" />
<parent link="${name}_link" />
<child link="${name}_gyro_frame" />
</joint>
<joint name="${name}_gyro_optical_joint" type="fixed">
<origin xyz = "0 0 0" rpy = "${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_gyro_frame" />
<child link="${name}_gyro_optical_frame" />
</joint>
</xacro:if>
<xacro:if value="${add_plug}">
<xacro:usb_plug parent="${name}_link" name="${name}_usb_plug">
<origin xyz="${d436_cam_mount_from_center_offset - 0.02095} ${-d436_cam_depth_py - 0.0353} 0" rpy="0 0 0"/>
</xacro:usb_plug>
</xacro:if>
</xacro:macro>
</robot>
@@ -0,0 +1,210 @@
<?xml version="1.0"?>
<!--
# Copyright 2023 RealSense, Inc. 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.
-->
<!--
This is the URDF model for the RealSense 430 camera, in its
aluminum peripherial evaluation case.
-->
<robot name="sensor_d455" xmlns:xacro="http://ros.org/wiki/xacro">
<!-- Includes -->
<xacro:include filename="$(find realsense2_description)/urdf/_materials.urdf.xacro" />
<xacro:include filename="$(find realsense2_description)/urdf/_usb_plug.urdf.xacro" />
<xacro:macro name="sensor_d455" params="parent *origin name:=camera use_nominal_extrinsics:=false">
<xacro:arg name="add_plug" default="false" />
<xacro:property name="M_PI" value="3.1415926535897931" />
<!-- The following values are approximate, and the camera node
publishing TF values with actual calibrated camera extrinsic values -->
<xacro:property name="d455_cam_depth_to_infra1_offset" value="0.0"/>
<xacro:property name="d455_cam_depth_to_infra2_offset" value="-0.095"/>
<xacro:property name="d455_cam_depth_to_color_offset" value="-0.059"/>
<!-- The following values model the aluminum peripherial case for the
d455 camera, with the camera joint represented by the actual
peripherial camera tripod mount -->
<xacro:property name="d455_cam_width" value="0.124"/>
<xacro:property name="d455_cam_height" value="0.029"/>
<xacro:property name="d455_cam_depth" value="0.026"/>
<xacro:property name="d455_cam_mount_from_center_offset" value="0.0158"/>
<!-- glass cover is 0.1 mm inwards from front aluminium plate -->
<xacro:property name="d455_glass_to_front" value="0.1e-3"/>
<!-- see datasheet Revision 009, Fig. 4-4 page 68 -->
<xacro:property name="d455_zero_depth_to_glass" value="4.55e-3"/>
<!-- convenience precomputation to avoid clutter-->
<xacro:property name="d455_mesh_x_offset" value="${d455_cam_mount_from_center_offset-d455_glass_to_front-d455_zero_depth_to_glass}"/>
<!-- The following offset is relative to the physical d455 camera peripherial
camera tripod mount -->
<xacro:property name="d455_cam_depth_px" value="${d455_cam_mount_from_center_offset}"/>
<xacro:property name="d455_cam_depth_py" value="0.0475"/>
<xacro:property name="d455_cam_depth_pz" value="${d455_cam_height/2}"/>
<!-- camera body, with origin at bottom screw mount -->
<joint name="${name}_joint" type="fixed">
<xacro:insert_block name="origin" />
<parent link="${parent}"/>
<child link="${name}_bottom_screw_frame" />
</joint>
<link name="${name}_bottom_screw_frame"/>
<joint name="${name}_link_joint" type="fixed">
<origin xyz="${d455_mesh_x_offset} ${d455_cam_depth_py} ${d455_cam_depth_pz}" rpy="0 0 0"/>
<parent link="${name}_bottom_screw_frame"/>
<child link="${name}_link" />
</joint>
<link name="${name}_link">
<visual>
<!-- the mesh origin is at front plate in between the two infrared camera axes -->
<!-- <origin xyz="${d455_zero_depth_to_glass-d455_cam_depth/2} ${-d455_cam_depth_py} 0" rpy="0 0 0"/> -->
<origin xyz="${d455_zero_depth_to_glass + d455_glass_to_front} ${-d455_cam_depth_py} 0" rpy="${M_PI/2} 0 ${M_PI/2}"/>
<geometry>
<!-- <box size="${d455_cam_depth} ${d455_cam_width} ${d455_cam_height}"/> -->
<mesh filename="package://realsense2_description/meshes/d455.stl" scale="0.001 0.001 0.001" />
</geometry>
<material name="aluminum"/>
</visual>
<collision>
<origin xyz="${d455_zero_depth_to_glass-d455_cam_depth/2} ${-d455_cam_depth_py} 0" rpy="0 0 0"/>
<geometry>
<box size="${d455_cam_depth} ${d455_cam_width} ${d455_cam_height}"/>
</geometry>
</collision>
<inertial>
<!-- The following are not reliable values, and should not be used for modeling -->
<mass value="0.072" />
<origin xyz="0 0 0" />
<inertia ixx="0.003881243" ixy="0.0" ixz="0.0" iyy="0.000498940" iyz="0.0" izz="0.003879257" />
</inertial>
</link>
<!-- Use the nominal extrinsics between camera frames if the calibrated extrinsics aren't being published. e.g. running the device in simulation -->
<xacro:if value="${use_nominal_extrinsics}">
<!-- camera depth joints and links -->
<joint name="${name}_depth_joint" type="fixed">
<origin xyz="0 0 0" rpy="0 0 0"/>
<parent link="${name}_link"/>
<child link="${name}_depth_frame" />
</joint>
<link name="${name}_depth_frame"/>
<joint name="${name}_depth_optical_joint" type="fixed">
<origin xyz="0 0 0" rpy="${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_depth_frame" />
<child link="${name}_depth_optical_frame" />
</joint>
<link name="${name}_depth_optical_frame"/>
<!-- camera left IR joints and links -->
<joint name="${name}_infra1_joint" type="fixed">
<origin xyz="0 ${d455_cam_depth_to_infra1_offset} 0" rpy="0 0 0" />
<parent link="${name}_link" />
<child link="${name}_infra1_frame" />
</joint>
<link name="${name}_infra1_frame"/>
<joint name="${name}_infra1_optical_joint" type="fixed">
<origin xyz="0 0 0" rpy="${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_infra1_frame" />
<child link="${name}_infra1_optical_frame" />
</joint>
<link name="${name}_infra1_optical_frame"/>
<!-- camera right IR joints and links -->
<joint name="${name}_infra2_joint" type="fixed">
<origin xyz="0 ${d455_cam_depth_to_infra2_offset} 0" rpy="0 0 0" />
<parent link="${name}_link" />
<child link="${name}_infra2_frame" />
</joint>
<link name="${name}_infra2_frame"/>
<joint name="${name}_infra2_optical_joint" type="fixed">
<origin xyz="0 0 0" rpy="${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_infra2_frame" />
<child link="${name}_infra2_optical_frame" />
</joint>
<link name="${name}_infra2_optical_frame"/>
<!-- camera color joints and links -->
<joint name="${name}_color_joint" type="fixed">
<origin xyz="0 ${d455_cam_depth_to_color_offset} 0" rpy="0 0 0" />
<parent link="${name}_link" />
<child link="${name}_color_frame" />
</joint>
<link name="${name}_color_frame"/>
<joint name="${name}_color_optical_joint" type="fixed">
<origin xyz="0 0 0" rpy="${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_color_frame" />
<child link="${name}_color_optical_frame" />
</joint>
<link name="${name}_color_optical_frame"/>
<!-- IMU -->
<!-- see datasheet Revision 009, page 114 -->
<xacro:property name="d455_imu_px" value="-0.01602"/>
<xacro:property name="d455_imu_py" value="-0.03022"/>
<xacro:property name="d455_imu_pz" value="+0.0074"/>
<link name="${name}_accel_frame" />
<link name="${name}_accel_optical_frame" />
<link name="${name}_gyro_frame" />
<link name="${name}_gyro_optical_frame" />
<link name="${name}_imu_optical_frame" />
<joint name="${name}_accel_joint" type="fixed">
<origin xyz = "${d455_imu_px} ${d455_imu_py} ${d455_imu_pz}" rpy = "0 0 0" />
<parent link="${name}_link" />
<child link="${name}_accel_frame" />
</joint>
<joint name="${name}_accel_optical_joint" type="fixed">
<origin xyz = "0 0 0" rpy = "${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_accel_frame" />
<child link="${name}_accel_optical_frame" />
</joint>
<joint name="${name}_gyro_joint" type="fixed">
<origin xyz = "${d455_imu_px} ${d455_imu_py} ${d455_imu_pz}" rpy = "0 0 0" />
<parent link="${name}_link" />
<child link="${name}_gyro_frame" />
</joint>
<joint name="${name}_gyro_optical_joint" type="fixed">
<origin xyz = "0 0 0" rpy = "${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_gyro_frame" />
<child link="${name}_gyro_optical_frame" />
</joint>
<joint name="${name}_imu_optical_joint" type="fixed">
<origin xyz = "0 0 0" rpy = "0 0 0" />
<parent link="${name}_gyro_optical_frame" />
<child link="${name}_imu_optical_frame" />
</joint>
</xacro:if>
<xacro:if value="$(arg add_plug)">
<xacro:usb_plug parent="${name}_link" name="${name}_usb_plug">
<origin xyz="${-0.00406-d455_cam_depth_px} ${-0.03701-d455_cam_depth_py} ${-d455_cam_depth_pz}" rpy="${M_PI/2} 0 0"/>
</xacro:usb_plug>
</xacro:if>
</xacro:macro>
</robot>
@@ -0,0 +1,243 @@
<?xml version="1.0"?>
<!--
# Copyright 2023 RealSense, Inc. 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.
-->
<!--
This is the URDF model for the RealSense D585 camera, in its
aluminum peripherial evaluation case.
-->
<robot name="sensor_d585" xmlns:xacro="http://ros.org/wiki/xacro">
<!-- Includes -->
<xacro:include filename="$(find realsense2_description)/urdf/_materials.urdf.xacro" />
<xacro:include filename="$(find realsense2_description)/urdf/_usb_plug.urdf.xacro" />
<xacro:macro name="sensor_d585" params="parent *origin name:=camera use_nominal_extrinsics:=false sp_x:=0 sp_y:=0 sp_z:=0 sp_roll:=0 sp_pitch:=0 sp_yaw:=0">
<xacro:arg name="add_plug" default="false" />
<xacro:property name="M_PI" value="3.1415926535897931" />
<!-- The following values are approximate, and the camera node
publishing TF values with actual calibrated camera extrinsic values -->
<xacro:property name="d585_cam_depth_to_infra1_offset" value="0.0"/>
<xacro:property name="d585_cam_depth_to_labeled_point_cloud_offset" value="0.0"/>
<xacro:property name="d585_cam_depth_to_occupancy_offset" value="0.0"/>
<xacro:property name="d585_cam_depth_to_infra2_offset" value="-0.095"/>
<xacro:property name="d585_cam_depth_to_color_offset" value="-0.0475"/>
<!-- The following values model the aluminum peripherial case for the
d585 camera, with the camera joint represented by the actual
peripherial camera tripod mount -->
<xacro:property name="d585_cam_width" value="0.182"/>
<xacro:property name="d585_cam_height" value="0.043"/>
<xacro:property name="d585_cam_depth" value="0.0931"/>
<xacro:property name="d585_cam_mount_from_center_offset" value="0.042"/> <!-- TODO: Not final numbers, still require refinements -->
<xacro:property name="d585_glass_to_front" value="0.1e-3"/> <!-- TODO: Not final numbers, still require refinements -->
<xacro:property name="d585_zero_depth_to_glass" value="0.0056"/> <!-- TODO: Not final numbers, still require refinements -->
<xacro:property name="d585_mesh_x_offset" value="${d585_cam_mount_from_center_offset-d585_glass_to_front-d585_zero_depth_to_glass}"/>
<!-- The following offset is relative to the physical d585 camera peripherial
camera tripod mount -->
<xacro:property name="d585_cam_depth_px" value="${d585_cam_mount_from_center_offset}"/>
<xacro:property name="d585_cam_depth_py" value="0.0475"/>
<xacro:property name="d585_cam_depth_pz" value="${d585_cam_height/2}"/>
<!-- camera body, with origin at bottom screw mount -->
<joint name="${name}_joint" type="fixed">
<xacro:insert_block name="origin" />
<parent link="${parent}"/>
<child link="${name}_bottom_screw_frame" />
</joint>
<link name="${name}_bottom_screw_frame"/>
<joint name="${name}_link_joint" type="fixed">
<origin xyz="${d585_mesh_x_offset} ${d585_cam_depth_py} ${d585_cam_depth_pz}" rpy="0 0 0"/>
<parent link="${name}_bottom_screw_frame"/>
<child link="${name}_link" />
</joint>
<link name="${name}_link">
<visual>
<!-- the mesh origin is at front plate in between the two infrared camera axes -->
<!-- <origin xyz="${d585_zero_depth_to_glass-d585_cam_depth/2} ${-d585_cam_depth_py} 0" rpy="0 0 0"/> -->
<origin xyz="${d585_zero_depth_to_glass + d585_glass_to_front} ${-d585_cam_depth_py} 0" rpy="${M_PI/2} 0 ${M_PI/2}"/>
<geometry>
<!-- <box size="${d585_cam_depth} ${d585_cam_width} ${d585_cam_height}"/> -->
<mesh filename="package://realsense2_description/meshes/d585.stl" scale="0.001 0.001 0.001" />
</geometry>
<material name="aluminum"/>
</visual>
<collision>
<origin xyz="${d585_zero_depth_to_glass-d585_cam_depth/2} ${-d585_cam_depth_py} 0" rpy="0 0 0"/>
<geometry>
<box size="${d585_cam_depth} ${d585_cam_width} ${d585_cam_height}"/>
</geometry>
</collision>
<inertial>
<!-- The following are not reliable values, and should not be used for modeling -->
<mass value="0.072" />
<origin xyz="0 0 0" />
<inertia ixx="0.003881243" ixy="0.0" ixz="0.0" iyy="0.000498940" iyz="0.0" izz="0.003879257" />
</inertial>
</link>
<!-- Use the nominal extrinsics between camera frames if the calibrated extrinsics aren't being published. e.g. running the device in simulation -->
<xacro:if value="${use_nominal_extrinsics}">
<!-- camera depth joints and links -->
<joint name="${name}_depth_joint" type="fixed">
<origin xyz="0 0 0" rpy="0 0 0"/>
<parent link="${name}_link"/>
<child link="${name}_depth_frame" />
</joint>
<link name="${name}_depth_frame"/>
<joint name="${name}_depth_optical_joint" type="fixed">
<origin xyz="0 0 0" rpy="${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_depth_frame" />
<child link="${name}_depth_optical_frame" />
</joint>
<link name="${name}_depth_optical_frame"/>
<!-- camera left IR joints and links -->
<joint name="${name}_infra1_joint" type="fixed">
<origin xyz="0 ${d585_cam_depth_to_infra1_offset} 0" rpy="0 0 0" />
<parent link="${name}_link" />
<child link="${name}_infra1_frame" />
</joint>
<link name="${name}_infra1_frame"/>
<joint name="${name}_infra1_optical_joint" type="fixed">
<origin xyz="0 0 0" rpy="${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_infra1_frame" />
<child link="${name}_infra1_optical_frame" />
</joint>
<link name="${name}_infra1_optical_frame"/>
<!-- camera right IR joints and links -->
<joint name="${name}_infra2_joint" type="fixed">
<origin xyz="0 ${d585_cam_depth_to_infra2_offset} 0" rpy="0 0 0" />
<parent link="${name}_link" />
<child link="${name}_infra2_frame" />
</joint>
<link name="${name}_infra2_frame"/>
<joint name="${name}_infra2_optical_joint" type="fixed">
<origin xyz="0 0 0" rpy="${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_infra2_frame" />
<child link="${name}_infra2_optical_frame" />
</joint>
<link name="${name}_infra2_optical_frame"/>
<!-- camera color joints and links -->
<joint name="${name}_color_joint" type="fixed">
<origin xyz="0 ${d585_cam_depth_to_color_offset} 0" rpy="0 0 0" />
<parent link="${name}_link" />
<child link="${name}_color_frame" />
</joint>
<link name="${name}_color_frame"/>
<joint name="${name}_color_optical_joint" type="fixed">
<origin xyz="0 0 0" rpy="${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_color_frame" />
<child link="${name}_color_optical_frame" />
</joint>
<link name="${name}_color_optical_frame"/>
<!-- camera labeled point cloud joints and links -->
<joint name="${name}_labeled_point_cloud_joint" type="fixed">
<origin xyz="${sp_x} ${sp_y} ${sp_z}" rpy="${sp_roll} ${sp_pitch} ${sp_yaw}" />
<parent link="${name}_link" />
<child link="${name}_labeled_point_cloud_frame" />
</joint>
<link name="${name}_labeled_point_cloud_frame" />
<joint name="${name}_labeled_point_cloud_optical_joint" type="fixed">
<origin xyz="0 0 0" rpy="${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_labeled_point_cloud_frame" />
<child link="${name}_labeled_point_cloud_optical_frame" />
</joint>
<link name="${name}_labeled_point_cloud_optical_frame" />
<!-- camera occupancy joints and links -->
<joint name="${name}_occupancy_joint" type="fixed">
<origin xyz="${sp_x} ${sp_y} ${sp_z}" rpy="${sp_roll} ${sp_pitch} ${sp_yaw}" />
<parent link="${name}_link" />
<child link="${name}_occupancy_frame" />
</joint>
<link name="${name}_occupancy_frame" />
<joint name="${name}_occupancy_optical_joint" type="fixed">
<origin xyz="0 0 0" rpy="${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_occupancy_frame" />
<child link="${name}_occupancy_optical_frame" />
</joint>
<link name="${name}_occupancy_optical_frame" />
<!-- IMU -->
<xacro:property name="d585_imu_px" value="0.0114"/> <!-- TODO: Not final numbers, still require refinements -->
<xacro:property name="d585_imu_py" value="-0.0195"/> <!-- TODO: Not final numbers, still require refinements -->
<xacro:property name="d585_imu_pz" value="0"/> <!-- TODO: Not final numbers, still require refinements -->
<link name="${name}_accel_frame" />
<link name="${name}_accel_optical_frame" />
<link name="${name}_gyro_frame" />
<link name="${name}_gyro_optical_frame" />
<link name="${name}_imu_optical_frame" />
<joint name="${name}_accel_joint" type="fixed">
<origin xyz = "${d585_imu_px} ${d585_imu_py} ${d585_imu_pz}" rpy = "0 0 0" />
<parent link="${name}_link" />
<child link="${name}_accel_frame" />
</joint>
<joint name="${name}_accel_optical_joint" type="fixed">
<origin xyz = "0 0 0" rpy = "${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_accel_frame" />
<child link="${name}_accel_optical_frame" />
</joint>
<joint name="${name}_gyro_joint" type="fixed">
<origin xyz = "${d585_imu_px} ${d585_imu_py} ${d585_imu_pz}" rpy = "0 0 0" />
<parent link="${name}_link" />
<child link="${name}_gyro_frame" />
</joint>
<joint name="${name}_gyro_optical_joint" type="fixed">
<origin xyz = "0 0 0" rpy = "${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_gyro_frame" />
<child link="${name}_gyro_optical_frame" />
</joint>
<joint name="${name}_imu_optical_joint" type="fixed">
<origin xyz = "0 0 0" rpy = "0 0 0" />
<parent link="${name}_gyro_optical_frame" />
<child link="${name}_imu_optical_frame" />
</joint>
</xacro:if>
<!-- Enable this if needed, remember to update xyz
<xacro:if value="$(arg add_plug)">
<xacro:usb_plug parent="${name}_link" name="${name}_usb_plug">
<origin xyz="0 0 0" rpy="${M_PI/2} 0 0"/>
</xacro:usb_plug>
</xacro:if>
-->
</xacro:macro>
</robot>
@@ -0,0 +1,35 @@
<?xml version="1.0"?>
<!--
# Copyright 2023 RealSense, Inc. 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.
-->
<!--
Collection of materials to be used in other macros.
This avoids the redefinition of materials in case multple cameras are imported.
-->
<robot xmlns:xacro="http://ros.org/wiki/xacro">
<xacro:property name="realsense_materials_defined" default="false" />
<xacro:unless value="${realsense_materials_defined}">
<xacro:property name="realsense_materials_defined" value="true" />
<material name="aluminum">
<color rgba="0.5 0.5 0.5 1"/>
</material>
<material name="plastic">
<color rgba="0.1 0.1 0.1 1"/>
</material>
</xacro:unless>
</robot>
@@ -0,0 +1,128 @@
<?xml version="1.0"?>
<!--
# Copyright 2023 RealSense, Inc. 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.
-->
<!--
This is the URDF model for the RealSense 410 camera, in it's
aluminum peripherial evaluation case.
-->
<robot name="sensor_r410" xmlns:xacro="http://ros.org/wiki/xacro">
<!-- Includes -->
<xacro:include filename="$(find realsense2_description)/urdf/_materials.urdf.xacro" />
<xacro:macro name="sensor_r410" params="parent *origin name:=camera use_nominal_extrinsics:=false">
<xacro:property name="M_PI" value="3.1415926535897931" />
<!-- The following values are approximate, and the camera node
publishing TF values with actual calibrated camera extrinsic values -->
<xacro:property name="r410_cam_depth_to_infra1_offset" value="-0.0275"/>
<xacro:property name="r410_cam_depth_to_infra2_offset" value="0.0275"/>
<!-- The following values model the aluminum peripherial case for the
R410 camera, with the camera joint represented by the actual
peripherial camera tripod mount -->
<xacro:property name="r410_cam_width" value="0.099"/>
<xacro:property name="r410_cam_height" value="0.035"/>
<xacro:property name="r410_cam_depth" value="0.0185"/>
<xacro:property name="r410_cam_mount_from_center_offset" value=".0375"/>
<!-- The following offset is relative the the physical R410 camera peripherial
camera tripod mount -->
<xacro:property name="r410_cam_depth_px" value="0.00"/>
<xacro:property name="r410_cam_depth_py" value="-0.0425"/>
<xacro:property name="r410_cam_depth_pz" value="0.026"/>
<!-- camera body, with origin at bottom screw mount -->
<joint name="${name}_joint" type="fixed">
<xacro:insert_block name="origin" />
<parent link="${parent}"/>
<child link="${name}_link" />
</joint>
<link name="${name}_link">
<visual>
<origin xyz="0 ${-r410_cam_mount_from_center_offset} ${r410_cam_height/2}" rpy="${M_PI/2} 0 ${M_PI/2}"/>
<geometry>
<box size="${r410_cam_width} ${r410_cam_height} ${r410_cam_depth}"/>
<!--<mesh filename="package://realsense2_description/meshes/r410/r410.dae" />-->
</geometry>
<material name="aluminum"/>
</visual>
<collision>
<origin xyz="0.0 0.0 ${r410_cam_height/2}" rpy="0 0 0"/>
<geometry>
<box size="${r410_cam_depth} ${r410_cam_width} ${r410_cam_height}"/>
</geometry>
</collision>
<inertial>
<!-- The following are not reliable values, and should not be used for modeling -->
<mass value="0.564" />
<origin xyz="0 0 0" />
<inertia ixx="0.003881243" ixy="0.0" ixz="0.0" iyy="0.000498940" iyz="0.0" izz="0.003879257" />
</inertial>
</link>
<!-- Use the nominal extrinsics between camera frames if the calibrated extrinsics aren't being published. e.g. running the device in simulation -->
<xacro:if value="${use_nominal_extrinsics}">
<!-- camera depth joints and links -->
<joint name="${name}_depth_joint" type="fixed">
<origin xyz="${r410_cam_depth_px} ${r410_cam_depth_py} ${r410_cam_depth_pz}" rpy="0 0 0"/>
<parent link="${name}_link"/>
<child link="${name}_depth_frame" />
</joint>
<link name="${name}_depth_frame"/>
<joint name="${name}_depth_optical_joint" type="fixed">
<origin xyz="0 0 0" rpy="${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_depth_frame" />
<child link="${name}_depth_optical_frame" />
</joint>
<link name="${name}_depth_optical_frame"/>
<!-- camera left IR joints and links -->
<joint name="${name}_infra1_joint" type="fixed">
<origin xyz="0 ${r410_cam_depth_to_infra1_offset} 0" rpy="0 0 0" />
<parent link="${name}_depth_frame" />
<child link="${name}_infra1_frame" />
</joint>
<link name="${name}_infra1_frame"/>
<joint name="${name}_infra1_optical_joint" type="fixed">
<origin xyz="0 0 0" rpy="${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_infra1_frame" />
<child link="${name}_infra1_optical_frame" />
</joint>
<link name="${name}_infra1_optical_frame"/>
<!-- camera right IR joints and links -->
<joint name="${name}_infra2_joint" type="fixed">
<origin xyz="0 ${r410_cam_depth_to_infra2_offset} 0" rpy="0 0 0" />
<parent link="${name}_depth_frame" />
<child link="${name}_infra2_frame" />
</joint>
<link name="${name}_infra2_frame"/>
<joint name="${name}_infra2_optical_joint" type="fixed">
<origin xyz="0 0 0" rpy="${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_infra2_frame" />
<child link="${name}_infra2_optical_frame" />
</joint>
<link name="${name}_infra2_optical_frame"/>
</xacro:if>
</xacro:macro>
</robot>
@@ -0,0 +1,129 @@
<?xml version="1.0"?>
<!--
# Copyright 2023 RealSense, Inc. 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.
-->
<!--
This is the URDF model for the RealSense 430 camera, in it's
aluminum peripherial evaluation case.
-->
<robot name="sensor_r430" xmlns:xacro="http://ros.org/wiki/xacro">
<!-- Includes -->
<xacro:include filename="$(find realsense2_description)/urdf/_materials.urdf.xacro" />
<xacro:macro name="sensor_r430" params="parent *origin name:=camera use_nominal_extrinsics:=false">
<xacro:property name="M_PI" value="3.1415926535897931" />
<!-- The following values are approximate, and the camera node
publishing TF values with actual calibrated camera extrinsic values -->
<xacro:property name="r430_cam_depth_to_infra1_offset" value="-0.025"/>
<xacro:property name="r430_cam_depth_to_infra2_offset" value="0.025"/>
<!-- The following values model the aluminum peripherial case for the
R430 camera, with the camera joint represented by the actual
peripherial camera tripod mount -->
<xacro:property name="r430_cam_width" value="0.105"/>
<xacro:property name="r430_cam_height" value="0.039"/>
<xacro:property name="r430_cam_depth" value="0.019"/>
<xacro:property name="r430_cam_mount_from_center_offset" value=".0275"/>
<!-- The following offset is relative the the physical R430 camera peripherial
camera tripod mount -->
<xacro:property name="r430_cam_depth_px" value="0.00"/>
<xacro:property name="r430_cam_depth_py" value="-0.035"/>
<xacro:property name="r430_cam_depth_pz" value="0.028"/>
<!-- camera body, with origin at bottom screw mount -->
<joint name="${name}_joint" type="fixed">
<xacro:insert_block name="origin" />
<parent link="${parent}"/>
<child link="${name}_link" />
</joint>
<link name="${name}_link">
<visual>
<origin xyz="0 ${-r430_cam_mount_from_center_offset} ${r430_cam_height/2}" rpy="${M_PI/2} 0 ${M_PI/2}"/>
<geometry>
<box size="${r430_cam_width} ${r430_cam_height} ${r430_cam_depth}"/>
<!--<mesh filename="package://realsense2_description/meshes/r430/r430.dae" />-->
</geometry>
<material name="aluminum"/>
</visual>
<collision>
<origin xyz="0.0 0.0 ${r430_cam_height/2}" rpy="0 0 0"/>
<geometry>
<box size="${r430_cam_depth} ${r430_cam_width} ${r430_cam_height}"/>
</geometry>
</collision>
<inertial>
<!-- The following are not reliable values, and should not be used for modeling -->
<mass value="0.564" />
<origin xyz="0 0 0" />
<inertia ixx="0.003881243" ixy="0.0" ixz="0.0" iyy="0.000498940" iyz="0.0" izz="0.003879257" />
</inertial>
</link>
<!-- Use the nominal extrinsics between camera frames if the calibrated extrinsics aren't being published. e.g. running the device in simulation -->
<xacro:if value="${use_nominal_extrinsics}">
<!-- camera depth joints and links -->
<joint name="${name}_depth_joint" type="fixed">
<origin xyz="${r430_cam_depth_px} ${r430_cam_depth_py} ${r430_cam_depth_pz}" rpy="0 0 0"/>
<parent link="${name}_link"/>
<child link="${name}_depth_frame" />
</joint>
<link name="${name}_depth_frame"/>
<joint name="${name}_depth_optical_joint" type="fixed">
<origin xyz="0 0 0" rpy="${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_depth_frame" />
<child link="${name}_depth_optical_frame" />
</joint>
<link name="${name}_depth_optical_frame"/>
<!-- camera left IR joints and links -->
<joint name="${name}_infra1_joint" type="fixed">
<origin xyz="0 ${r430_cam_depth_to_infra1_offset} 0" rpy="0 0 0" />
<parent link="${name}_depth_frame" />
<child link="${name}_infra1_frame" />
</joint>
<link name="${name}_infra1_frame"/>
<joint name="${name}_infra1_optical_joint" type="fixed">
<origin xyz="0 0 0" rpy="${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_infra1_frame" />
<child link="${name}_infra1_optical_frame" />
</joint>
<link name="${name}_infra1_optical_frame"/>
<!-- camera right IR joints and links -->
<joint name="${name}_infra2_joint" type="fixed">
<origin xyz="0 ${r430_cam_depth_to_infra2_offset} 0" rpy="0 0 0" />
<parent link="${name}_depth_frame" />
<child link="${name}_infra2_frame" />
</joint>
<link name="${name}_infra2_frame"/>
<joint name="${name}_infra2_optical_joint" type="fixed">
<origin xyz="0 0 0" rpy="${-M_PI/2} 0 ${-M_PI/2}" />
<parent link="${name}_infra2_frame" />
<child link="${name}_infra2_optical_frame" />
</joint>
<link name="${name}_infra2_optical_frame"/>
</xacro:if>
</xacro:macro>
</robot>
@@ -0,0 +1,52 @@
<?xml version="1.0"?>
<!--
# Copyright 2023 RealSense, Inc. 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.
-->
<!--
This is the URDF model for the RealSense 415 camera, in it's
aluminum peripherial evaluation case.
-->
<robot name="usb_plug" xmlns:xacro="http://ros.org/wiki/xacro">
<xacro:macro name="usb_plug" params="parent *origin name:=usb_plug">
<xacro:property name="M_PI" value="3.1415926535897931" />
<joint name="${name}_joint" type="fixed">
<xacro:insert_block name="origin" />
<parent link="${parent}" />
<child link="${name}_link" />
</joint>
<link name="${name}_link">
<visual>
<!-- 0.044850 0.008000 0.018500 -->
<origin xyz="0. -0.022425 0." rpy="0 0 ${M_PI/2}"/>
<geometry>
<!--box size="0.044850 0.008 0.0185" /-->
<mesh filename="package://realsense2_description/meshes/plug.stl" />
</geometry>
<material name="plastic"/>
</visual>
<collision>
<origin xyz="0. -0.022425 0." rpy="0 0 ${M_PI/2}"/>
<geometry>
<!--box size="0.044850 0.008 0.0185" /-->
<mesh filename="package://realsense2_description/meshes/plug_collision.stl" />
</geometry>
</collision>
</link>
</xacro:macro>
</robot>
@@ -0,0 +1,10 @@
<?xml version="1.0"?>
<robot name="realsense2_camera" xmlns:xacro="http://ros.org/wiki/xacro">
<xacro:arg name="use_nominal_extrinsics" default="false"/>
<xacro:include filename="$(find realsense2_description)/urdf/_d405.urdf.xacro" />
<link name="base_link" />
<xacro:sensor_d405 parent="base_link" use_nominal_extrinsics="$(arg use_nominal_extrinsics)">
<origin xyz="0 0 0" rpy="0 0 0"/>
</xacro:sensor_d405>
</robot>
@@ -0,0 +1,12 @@
<?xml version="1.0"?>
<robot name="realsense2_camera" xmlns:xacro="http://ros.org/wiki/xacro">
<xacro:arg name="use_nominal_extrinsics" default="false" />
<xacro:arg name="add_plug" default="false" />
<xacro:arg name="use_mesh" default="true" />
<xacro:include filename="$(find realsense2_description)/urdf/_d415.urdf.xacro" />
<link name="base_link" />
<xacro:sensor_d415 parent="base_link" use_nominal_extrinsics="$(arg use_nominal_extrinsics)" add_plug="$(arg add_plug)" use_mesh="$(arg use_mesh)">
<origin xyz="0 0 0" rpy="0 0 0"/>
</xacro:sensor_d415>
</robot>
@@ -0,0 +1,12 @@
<?xml version="1.0"?>
<robot name="realsense2_camera" xmlns:xacro="http://ros.org/wiki/xacro">
<xacro:arg name="use_nominal_extrinsics" default="false"/>
<xacro:arg name="add_plug" default="false" />
<xacro:arg name="use_mesh" default="true" />
<xacro:include filename="$(find realsense2_description)/urdf/_d435.urdf.xacro" />
<link name="base_link" />
<xacro:sensor_d435 parent="base_link" use_nominal_extrinsics="$(arg use_nominal_extrinsics)" add_plug="$(arg add_plug)" use_mesh="$(arg use_mesh)">
<origin xyz="0 0 0" rpy="0 0 0"/>
</xacro:sensor_d435>
</robot>
@@ -0,0 +1,14 @@
<?xml version="1.0"?>
<robot name="realsense2_camera" xmlns:xacro="http://ros.org/wiki/xacro">
<xacro:arg name="use_nominal_extrinsics" default="false"/>
<xacro:include filename="$(find realsense2_description)/urdf/_d435.urdf.xacro" />
<link name="base_link" />
<xacro:sensor_d435 parent="base_link" name="camera1" use_nominal_extrinsics="$(arg use_nominal_extrinsics)">
<origin xyz="0.1 0 0" rpy="0 0 0"/>
</xacro:sensor_d435>
<xacro:sensor_d435 parent="base_link" name="camera2" use_nominal_extrinsics="$(arg use_nominal_extrinsics)">
<origin xyz="-0.1 0 0" rpy="0 0 3.1456"/>
</xacro:sensor_d435>
</robot>
@@ -0,0 +1,11 @@
<?xml version="1.0" ?>
<robot name="realsense2_camera" xmlns:xacro="http://www.ros.org/wiki/xacro">
<xacro:arg name="use_nominal_extrinsics" default="false" />
<xacro:include filename="$(find realsense2_description)/urdf/_d435i.urdf.xacro"/>
<link name="base_link" />
<xacro:sensor_d435i parent="base_link" use_nominal_extrinsics="$(arg use_nominal_extrinsics)">
<origin xyz="0 0 0" rpy="0 0 0"/>
</xacro:sensor_d435i>
</robot>
@@ -0,0 +1,12 @@
<?xml version="1.0"?>
<robot name="realsense2_camera" xmlns:xacro="http://ros.org/wiki/xacro">
<xacro:arg name="use_nominal_extrinsics" default="false"/>
<xacro:arg name="add_plug" default="false" />
<xacro:arg name="use_mesh" default="true" />
<xacro:include filename="$(find realsense2_description)/urdf/_d436.urdf.xacro" />
<link name="base_link" />
<xacro:sensor_d436 parent="base_link" use_nominal_extrinsics="$(arg use_nominal_extrinsics)" add_plug="$(arg add_plug)" use_mesh="$(arg use_mesh)">
<origin xyz="0 0 0" rpy="0 0 0"/>
</xacro:sensor_d436>
</robot>
@@ -0,0 +1,10 @@
<?xml version="1.0"?>
<robot name="realsense2_camera" xmlns:xacro="http://ros.org/wiki/xacro">
<xacro:arg name="use_nominal_extrinsics" default="false"/>
<xacro:include filename="$(find realsense2_description)/urdf/_d455.urdf.xacro" />
<link name="base_link" />
<xacro:sensor_d455 parent="base_link" use_nominal_extrinsics="$(arg use_nominal_extrinsics)">
<origin xyz="0 0 0" rpy="0 0 0"/>
</xacro:sensor_d455>
</robot>
@@ -0,0 +1,17 @@
<?xml version="1.0"?>
<robot name="realsense2_camera" xmlns:xacro="http://ros.org/wiki/xacro">
<xacro:arg name="use_nominal_extrinsics" default="false"/>
<xacro:include filename="$(find realsense2_description)/urdf/_d585.urdf.xacro" />
<xacro:arg name="sp_x" default="0.0"/>
<xacro:arg name="sp_y" default="0.0"/>
<xacro:arg name="sp_z" default="0.0"/>
<xacro:arg name="sp_roll" default="0.0"/>
<xacro:arg name="sp_pitch" default="0.0"/>
<xacro:arg name="sp_yaw" default="0.0"/>
<link name="base_link" />
<xacro:sensor_d585 parent="base_link" use_nominal_extrinsics="$(arg use_nominal_extrinsics)" sp_x="$(arg sp_x)" sp_y="$(arg sp_y)" sp_z="$(arg sp_z)" sp_roll="$(arg sp_roll)" sp_pitch="$(arg sp_pitch)" sp_yaw="$(arg sp_yaw)">
<origin xyz="0 0 0" rpy="0 0 0"/>
</xacro:sensor_d585>
</robot>
@@ -0,0 +1,10 @@
<?xml version="1.0"?>
<robot name="realsense2_camera" xmlns:xacro="http://ros.org/wiki/xacro">
<xacro:arg name="use_nominal_extrinsics" default="false"/>
<xacro:include filename="$(find realsense2_description)/urdf/_r410.urdf.xacro" />
<link name="base_link" />
<xacro:sensor_r410 parent="base_link" use_nominal_extrinsics="$(arg use_nominal_extrinsics)">
<origin xyz="0 0 0" rpy="0 0 0"/>
</xacro:sensor_r410>
</robot>
@@ -0,0 +1,10 @@
<?xml version="1.0"?>
<robot name="realsense2_camera" xmlns:xacro="http://ros.org/wiki/xacro">
<xacro:arg name="use_nominal_extrinsics" default="false"/>
<xacro:include filename="$(find realsense2_description)/urdf/_r430.urdf.xacro" />
<link name="base_link" />
<xacro:sensor_r430 parent="base_link" use_nominal_extrinsics="$(arg use_nominal_extrinsics)">
<origin xyz="0 0 0" rpy="0 0 0"/>
</xacro:sensor_r430>
</robot>