Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Initial urdf parser plugin that parses sdformat #1

Merged
merged 152 commits into from
Nov 2, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
152 commits
Select commit Hold shift + click to select a range
b8a6ff5
Initial urdf parser plugin that parses sdformat
sloretz Jul 15, 2020
035dbc8
Visual and Collision with Box geometry
sloretz Jul 17, 2020
c80edcc
Sphere geometry
sloretz Jul 17, 2020
30de800
Cylinder geometry
sloretz Jul 17, 2020
9f9ac7e
Mesh support
sloretz Jul 18, 2020
4f0ef01
remove TODO comment about resolving poses
sloretz Aug 3, 2020
db1551b
Let downstream worry about resolving mesh URIs
sloretz Aug 3, 2020
c84a46d
Reword assumption about kinematic root link
sloretz Aug 3, 2020
ecb6e32
Make fall through comments easier to see
sloretz Aug 3, 2020
dd02e31
Create urdf_mesh variable
sloretz Aug 4, 2020
5967756
Handle inertia
sloretz Aug 4, 2020
edf7519
Mesh scale
sloretz Aug 4, 2020
3c0a28f
Visibility control header
sloretz Aug 4, 2020
d6021c6
Remove resource_retriever dependency
sloretz Aug 13, 2020
348723b
Support joint axis expressed in other frames
sloretz Aug 13, 2020
ab6637b
Include ignition/math/Pose3.hh
sloretz Sep 21, 2020
21adf18
Use final on plugin class
sloretz Sep 21, 2020
7a5ad72
Use TinyXML2 to filter non-sdf XML documents
sloretz Sep 21, 2020
512dfc2
Apache 2.0 License
sloretz Sep 21, 2020
63fd805
Satisfy uncrustify
sloretz Sep 22, 2020
16c133f
Satisfy cpplint
sloretz Sep 22, 2020
54c2983
Add linter tests
sloretz Sep 22, 2020
1e36db1
Add test for pose_link case
sloretz Sep 24, 2020
b07df19
Actually add test files
sloretz Sep 24, 2020
61e4cfe
Add SDF link pose to URDF link members
sloretz Sep 24, 2020
2f5f7df
Pose link test actually checks pose
sloretz Sep 24, 2020
0c434fd
Add SDF visual pose test
sloretz Sep 24, 2020
34f3a8e
Add SDF collision pose test
sloretz Sep 24, 2020
1661389
Add SDF inertial pose test
sloretz Sep 24, 2020
b6ee85a
Add test for model with pose, plus refactor test tools
sloretz Sep 24, 2020
467fbd9
Replace todo with explanation
sloretz Sep 25, 2020
4cfbcbc
Add pose_link_all test
sloretz Sep 25, 2020
f96ec4c
Assert model name is correct
sloretz Sep 25, 2020
77d2960
Add pose_link_in_frame test
sloretz Sep 25, 2020
57703ac
Add pose_collision_in_frame test
sloretz Sep 25, 2020
e3b00ed
Add pose_visual_in_frame test
sloretz Sep 25, 2020
b14eeb5
Add skipped pose_inertial_in_frame test
sloretz Sep 29, 2020
bcb85e2
Depend on sdformat
sloretz Sep 30, 2020
276b013
Fix link poses of child links
sloretz Sep 30, 2020
743b0ca
Add test for model with joint pose
sloretz Sep 30, 2020
5ea4bbb
Remove unused variable
sloretz Sep 30, 2020
db3a641
Add test for model with joint pose in frame
sloretz Sep 30, 2020
1134ffb
Rename variables for consistent ordering
sloretz Sep 30, 2020
14bc1d2
Fix fame names in calculating joint pose
sloretz Oct 1, 2020
8d8441b
URDF link frames are coincident with joint frames
sloretz Oct 2, 2020
58e865c
Add pose_chain test
sloretz Oct 2, 2020
11c7073
Clearer description of pose_collision expectations
sloretz Oct 2, 2020
b49a80f
Clearer description of pose_collision_in_frame expectations
sloretz Oct 2, 2020
faa7e16
Clearer pose_inertial* expectations
sloretz Oct 2, 2020
6714d71
Remove unnecessary ASSERT
sloretz Oct 2, 2020
9ad8bfe
Initializer lists
sloretz Oct 2, 2020
08afd02
Remove unnecessary ASSERT
sloretz Oct 2, 2020
cd57fc6
Initializer lists
sloretz Oct 2, 2020
1a4d195
Fix pose_link* test expectations
sloretz Oct 2, 2020
e0d722f
Clearer pose_visual* test expecations
sloretz Oct 2, 2020
184393f
Shorter file name
sloretz Oct 2, 2020
a697bfb
Shorter file name
sloretz Oct 2, 2020
57db264
Add graph_loop test
sloretz Oct 3, 2020
06beeeb
Add graph_four_bar test
sloretz Oct 3, 2020
34700ae
Alphabetize
sloretz Oct 3, 2020
e8fe43b
Refactor tree traversal code
sloretz Oct 5, 2020
1b36817
Add graph_tree_non_canonical_root test
sloretz Oct 5, 2020
4d9416a
Transfrom -> transform
sloretz Oct 5, 2020
1b64b32
Different error when XML file has no model
sloretz Oct 5, 2020
0410a84
urdf child link keeps weak reference to parent link
sloretz Oct 5, 2020
ba62b98
Add graph_tree test and EXPECT_NAMES util
sloretz Oct 5, 2020
27ceefc
Add graph_chain test
sloretz Oct 5, 2020
f02e1ac
Add graph_chain_non_canonical_root test
sloretz Oct 5, 2020
bb10917
Add geometry_plane test
sloretz Oct 5, 2020
312c308
Add geometry_box test
sloretz Oct 5, 2020
d4e1611
Add geometry_cylinder test
sloretz Oct 5, 2020
8afb524
Add geometry_sphere test
sloretz Oct 5, 2020
aad25df
Add geometry_heightmap test
sloretz Oct 5, 2020
911a6fc
Add geometry_collada test
sloretz Oct 5, 2020
aa8d277
Add geometry_obj test
sloretz Oct 5, 2020
d32e4fe
Add geometry_stl test
sloretz Oct 5, 2020
d9a6adc
Add geometry_mesh_scaled test
sloretz Oct 5, 2020
621d8b6
Add tests for zero and two models
sloretz Oct 6, 2020
3743f8f
Add joint_ball test
sloretz Oct 6, 2020
ce65068
Get rid of num_axes variable
sloretz Oct 6, 2020
c8e033e
Add damping and friction info to joints
sloretz Oct 6, 2020
9a48ea2
Add joint_continuous test
sloretz Oct 6, 2020
dc21ca8
Add joint_fixed test
sloretz Oct 6, 2020
4f7de1a
Add joint limits info
sloretz Oct 7, 2020
d6d122a
Add joint_prismatic test
sloretz Oct 7, 2020
da03bc6
Add axis expectations
sloretz Oct 7, 2020
f48200e
Add joint_revolute test
sloretz Oct 7, 2020
3dbbe6d
Add joint_revolute2 test
sloretz Oct 7, 2020
95a2d04
Add joint_screw test
sloretz Oct 7, 2020
ec10874
Add joint_universal test
sloretz Oct 7, 2020
0746ec6
Add link_inertia test
sloretz Oct 7, 2020
25d9a54
Add joint_revolute_axis test
sloretz Oct 7, 2020
523a18d
Warn on non-default values of unsupported <joint> tags
sloretz Oct 8, 2020
48156b5
Add link_multiple_collisions test
sloretz Oct 8, 2020
5797057
Add link_multiple_visuals test
sloretz Oct 8, 2020
00b1aa7
Add joint_revolute_axis_in_frame test
sloretz Oct 8, 2020
4d9d79e
Add joint_revolute_default_limits test
sloretz Oct 8, 2020
2d8dc1a
Detect kinematic loops involving redundant joints
sloretz Oct 8, 2020
9574007
Add joint_revolute_two_joints_two_links test
sloretz Oct 8, 2020
3e4c495
Warn if <sensor> or <light> are used on <link>
sloretz Oct 9, 2020
5752044
Add link_sensor_imu test
sloretz Oct 9, 2020
47754a1
Add link_light_point test
sloretz Oct 9, 2020
d8c59b8
Sensors -> lights
sloretz Oct 9, 2020
cafee11
Move package into folder in repo
sloretz Oct 9, 2020
e6b4f87
Add sdformat_test_files package to repo
sloretz Oct 9, 2020
f7fcfe5
lilnk -> link
sloretz Oct 9, 2020
135cb90
Whitespace
sloretz Oct 9, 2020
c9ca571
Save a line
sloretz Oct 9, 2020
44763d4
Move PlaneShape check lower
sloretz Oct 9, 2020
0dd8103
Remove impossible condition after make_shared
sloretz Oct 9, 2020
2ac36ec
Make names shorter
sloretz Oct 9, 2020
fc8490a
Remove accidentally comitted file
sloretz Oct 9, 2020
c816318
Add material_blinn_phong test
sloretz Oct 9, 2020
41c3f8e
Warn if unsupported <material><lighting> feature is used
sloretz Oct 9, 2020
bf74e9d
Add skipped material_dynamic_lights test
sloretz Oct 9, 2020
2f46b1c
Remove unfinished material models and add TODO for them
sloretz Oct 9, 2020
8bbee66
Expect no Algorithm errors
sloretz Oct 9, 2020
f967e20
Add joint_gearbox model and test
sloretz Oct 9, 2020
d57948b
Update descriptions of all models
sloretz Oct 13, 2020
c0c29e2
Add sdformat_test_files README
sloretz Oct 13, 2020
4805f38
Add README for sdformat_urdf
sloretz Oct 13, 2020
c5f665a
Misc tiny edits
sloretz Oct 13, 2020
7737d83
Eliminate elements
sloretz Oct 13, 2020
f90c64e
Add repo level readme
sloretz Oct 13, 2020
ab97a51
Remove .
sloretz Oct 13, 2020
1ad8428
Trick to use sdformat9 from source
sloretz Oct 13, 2020
867a0d9
Remove condition hack
sloretz Oct 14, 2020
c3ca66a
Add colcon.pkg for building sdformat from source
sloretz Oct 14, 2020
ce0812d
check errors instead of valid pointer
sloretz Oct 22, 2020
034edd1
Make urdf a <depend>
sloretz Oct 22, 2020
abeb693
Remove std::cout dbg print
sloretz Oct 22, 2020
6552021
the the -> the
sloretz Oct 22, 2020
4681be2
Compare WorldCount against 0u
sloretz Oct 22, 2020
197bbf8
Concatenate link and visual names to make material name
sloretz Oct 22, 2020
a533c05
Compatibility with CMake earlier than 3.14
sloretz Oct 22, 2020
f25ffe2
Use target_link_libraries()
sloretz Oct 22, 2020
86f5f54
One install rule per target
sloretz Oct 22, 2020
2c375de
voilated -> violated
sloretz Oct 22, 2020
48d9136
Use axis2 for second axis
sloretz Oct 22, 2020
7d0ac7a
Universal joint perpendicular axis
sloretz Oct 22, 2020
b06afde
Use Pose3d::operator*
sloretz Oct 23, 2020
aff9def
structures -> DOM objects
sloretz Oct 23, 2020
e924fe6
Document EXPECT_NAMES()
sloretz Oct 28, 2020
84d23f5
Compare normalized joint axes
sloretz Oct 29, 2020
bb65e1f
Check casted pointer before using them
sloretz Oct 29, 2020
9ae4804
Check geometry pointer isn't null before using it
sloretz Oct 29, 2020
d9ca9fb
Assert joint isn't null before using it
sloretz Oct 29, 2020
ec3f81b
Assert link isn't null before using it
sloretz Oct 29, 2020
645a2e9
Assert link isn't null before using it
sloretz Oct 29, 2020
c84405d
Color = 0.4 * ambient + 0.8 * diffuse
sloretz Oct 29, 2020
6582d52
Fix application of link pose on inertial/visual/collision
sloretz Oct 29, 2020
e4664a8
Add pose_joint_all test
sloretz Oct 29, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 0 additions & 11 deletions LICENSE

This file was deleted.

13 changes: 13 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# SDFormat XML Robot Descriptions

This repo enables using SDFormat XML as a robot description format instead of URDF XML.
It does this by providing a `urdf_parser_plugin` for SDFormat that reads SDFormat and outputs URDF C++ DOM structures.
To use it, install `sdformat_urdf` and use a valid SDFormat XML file (with some limitations) for your robot description.
See the [README in the `sdformat_urdf` package](./sdformat_urdf/README.md) for more info on the limitations.

## Packages

* [`sdformat_urdf`](./sdformat_urdf/README.md)
* provides a library and a `urdf_parser_plugin` using that library to convert SDFormat XML to URDF C++ DOM structures
* [`sdformat_test_files`](./sdformat_test_files/README.md)
* provides SDFormat models using different parts of the SDFormat XML specification for testing
103 changes: 103 additions & 0 deletions sdformat_test_files/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
cmake_minimum_required(VERSION 3.5)
project(sdformat_test_files)

set(sdformat_test_files_VERSION 0.1.0)

# Decide where to install stuff
include(GNUInstallDirs)

set(INSTALL_SHARE_DIR "${CMAKE_INSTALL_DATAROOTDIR}/sdformat_test_files" CACHE PATH
"Installation directory for arch independent data files")

set(INSTALL_CMAKE_DIR "${CMAKE_INSTALL_DATAROOTDIR}/sdformat_test_files/cmake" CACHE PATH
"Installation directory for CMake files")

# Install models
set(model_names
"geometry_box"
"geometry_cylinder"
"geometry_heightmap"
"geometry_mesh_collada"
"geometry_mesh_obj"
"geometry_mesh_scaled"
"geometry_mesh_stl"
"geometry_plane"
"geometry_sphere"
"graph_chain"
"graph_chain_non_canonical_root"
"graph_four_bar"
"graph_loop"
"graph_tree"
"graph_tree_non_canonical_root"
"joint_ball"
"joint_continuous"
"joint_fixed"
"joint_gearbox"
"joint_prismatic"
"joint_revolute"
"joint_revolute2"
"joint_revolute_axis"
"joint_revolute_axis_in_frame"
"joint_revolute_default_limits"
"joint_revolute_two_joints_two_links"
"joint_screw"
"joint_universal"
"link_inertia"
"link_light_point"
"link_multiple_collisions"
"link_multiple_visuals"
"link_sensor_imu"
"material_blinn_phong"
"material_dynamic_lights"
"model_two_models"
"model_zero_models"
"pose_chain"
"pose_collision"
"pose_collision_in_frame"
"pose_inertial"
"pose_inertial_in_frame"
"pose_joint"
"pose_joint_all"
"pose_joint_in_frame"
"pose_link"
"pose_link_all"
"pose_link_in_frame"
"pose_model"
"pose_visual"
"pose_visual_in_frame"
)

foreach(model ${model_names})
# Install models to share/project-name/model-name
install(DIRECTORY "models/${model}" DESTINATION "${INSTALL_SHARE_DIR}/models")
endforeach()

set(_arch_independent "")
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.14.0")
set(_arch_independent "ARCH_INDEPENDENT")
endif()

# Create projectConfigVersion.cmake
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/sdformat_test_files/sdformat_test_filesConfigVersion.cmake"
VERSION "${sdformat_test_files_VERSION}"
COMPATIBILITY SameMajorVersion
${_arch_independent})

# Create projectConfig.cmake
configure_package_config_file("sdformat_test_filesConfig.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/sdformat_test_files/sdformat_test_filesConfig.cmake"
INSTALL_DESTINATION "${INSTALL_CMAKE_DIR}"
PATH_VARS "INSTALL_CMAKE_DIR" "INSTALL_SHARE_DIR")

# Create file with CMake functions
configure_file("sdformat_test_files_functions.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/sdformat_test_files/sdformat_test_files_functions.cmake" @ONLY)

# Install cmake files
install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/sdformat_test_files/sdformat_test_filesConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/sdformat_test_files/sdformat_test_filesConfigVersion.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/sdformat_test_files/sdformat_test_files_functions.cmake"
DESTINATION "${INSTALL_CMAKE_DIR}")
129 changes: 129 additions & 0 deletions sdformat_test_files/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
# SDFormat Test files

This package contains a list of SDFormat files for testing tools that work with SDFormat XML.

## Models

### Geometry

* `geometry_box`
* A single-link model using the box geometry type for both the visual and collision.
* `geometry_cylinder`
* A single-link model using the cylinder geometry type for both the visual and collision.
* `geometry_heightmap`
* A single-link model using heightmap geometry for both the visual and collision.
* `geometry_mesh_collada`
* A single link using mesh geometry with a COLLADA mesh.
* `geometry_mesh_obj`
* A single link using a Wavefront OBJ mesh.
* `geometry_mesh_scaled`
* A single-link model using a mesh scaled differently on x, y, and z axes for both the visual and collision.
* `geometry_mesh_stl`
* A single-link model using an STL mesh.
* `geometry_plane`
* A single-link model using the plane geometry type for both the visual and collision.
* `geometry_sphere`
* A single-link model using the sphere geometry type for both the visual and collision.

### Materials

* `material_blinn_phong`
* A single link with a material that uses ambient/diffuse/specular/emissive components to color it.
* `material_dynamic_lights`
* A link with two visuals: one with dynamic lights on, and the other with dynamic lights off.

### Joints

* `joint_ball`
* A model with two links connected by a ball joint.
* `joint_continuous`
* A model with two links connected by a continuous joint.
* `joint_fixed`
* A model with two links connected by a fixed joint.
* `joint_gearbox`
* A model with 3 links total. Two links are connected to a reference link with revolute joints and a gearbox joint enforces that one revolute joint rotates faster than the other.
* `joint_prismatic`
* A model with two links connected by a prismatic joint.
* `joint_revolute`
* A model with two links connected by a revolute joint.
* `joint_revolute2`
* A model with two links connected by a revolute2 joint.
* `joint_revolute_axis`
* A model with two links connected by a revolute joint with an axis having different values for x, y, and z.
* `joint_revolute_axis_in_frame`
* A model with two links connected by a revolute joint with an axis having different values for x, y, and z, and specified in a frame on the model.
* `joint_revolute_default_limits`
* A model with two links connected by a revolute joint, having no joint limits specified on its axis.
* `joint_revolute_two_joints_two_links`
* A model with two links connected by two revolute joints, effectively rigidly connecting the two.
* `joint_screw`
* A model with two links connected by a screw joint.
* `joint_universal`
* A model with two links connected by a universal joint.

### Links

* `link_inertia`
* A link having an inerta with a different value for each of it's 6 components.
* `link_light_point`
* A model with a single link having a point light attached to it.
* `link_multiple_collisions`
* A model with a single link having multiple collision elements on it.
* `link_multiple_visuals`
* A model with a single link having multile visual elements on it.
* `link_sensor_imu`
* A model with a single link having an IMU sensor attached to it.

### Kinematic structures

* `graph_chain`
* A model having a chain of 3 links connected in series with revolute joints.
* `graph_chain_non_canonical_root`
* A model having a chain of 3 links connected in series with revolute joints, but the canonical link is not the root of the chain.
* `graph_four_bar`
* A four-bar linkage made with four links connected by 4 revolute joints.
* `graph_loop`
* A model having three links connected by 3 joints to form a triangle.
* `graph_tree`
* A model with multiple links connected by joints forming a tree.
* `graph_tree_non_canonical_root`
* A model with multiple links connected by joints forming a tree, but the canonical link is not the root of the tree.

### Poses and Frames

* `pose_chain`
* A chain of links connected by joints, where every link and joint in the chain has a non-zero pose.
* `pose_collision`
* A single-link model where only the collision has a non-zero pose.
* `pose_collision_in_frame`
* A single-link model where only the collision has a non-zero pose, and that pose is given in a frame on the model.
* `pose_inertial`
* A single-link model where only the inertial has a non-zero pose.
* `pose_inertial_in_frame`
* A single-link model where only the inertial has a non-zero pose, and that pose is given in a frame on the model.
* `pose_joint`
* A model having two links and a revolute joint, where only the joint has a non-zero pose.
* `pose_joint_all`
* A model having two links and a revolute joint, with non-zero poses on all including the inertials, visuals, and collisions.
* `pose_joint_in_frame`
* A model having two links and a revolute joint, where only the joint has a non-zero pose, and that pose is given in a frame on the model.
* `pose_link`
* A single-link model where only the link has a non-zero pose.
* `pose_link_all`
* A single-link model where the link, visual, collision, and inertial elements all have poses.
* `pose_link_in_frame`
* A single-link model where only the link has a non-zero pose, and that pose is given in a frame on the model.
* `pose_model`
* A single-link model where the model itself has a non-zero pose.
* `pose_visual`
* A single-link model where only the visual has a non-zero pose.
* `pose_visual_in_frame`
* A single-link model where only the visual has a non-zero pose, and that pose is given in a frame on the model.

### Models

* `model_two_models`
* An SDFormat XML file having two models in it.
* `model_zero_models`
* An SDFormat XML file that does not have a model in it.

33 changes: 33 additions & 0 deletions sdformat_test_files/_scripts/README.md.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# SDFormat Test files

This package contains a list of SDFormat files for testing tools that work with SDFormat XML.

## Models

### Geometry

$geometry

### Materials

$materials

### Joints

$joints

### Links

$links

### Kinematic structures

$graphs

### Poses and Frames

$poses

### Models

$models
60 changes: 60 additions & 0 deletions sdformat_test_files/_scripts/make_readme.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import string
import os
import xml.etree.ElementTree as ET


def get_model_name_and_description(path_to_model_dir):
tree = ET.parse(os.path.join(path_to_model_dir, 'model.config'))
root = tree.getroot()
name = root.findall('name')[0].text.strip()
description = root.findall('description')[0].text.strip()
return (name, description)


def models_in_dir(path_to_dir):
for path in os.listdir(path_to_dir):
abspath = os.path.abspath(os.path.join(path_to_dir, path))
if os.path.isdir(abspath) and os.path.isfile(os.path.join(abspath, 'model.config')):
yield abspath


if __name__ == '__main__':
this_dir = os.path.abspath(os.path.dirname(__file__))
models_dir = os.path.join(this_dir, '..', 'models')

template_mapping = {
'geometry': [],
'materials': [],
'joints': [],
'links': [],
'graphs': [],
'poses': [],
'models': []
}

for model_path in sorted(models_in_dir(models_dir)):
name, desc = get_model_name_and_description(model_path)
entry = f'* `{name}`\n * {desc}'
if name.startswith('geometry'):
template_mapping['geometry'].append(entry)
elif name.startswith('material'):
template_mapping['materials'].append(entry)
elif name.startswith('joint'):
template_mapping['joints'].append(entry)
elif name.startswith('link'):
template_mapping['links'].append(entry)
elif name.startswith('graph'):
template_mapping['graphs'].append(entry)
elif name.startswith('pose'):
template_mapping['poses'].append(entry)
elif name.startswith('model'):
template_mapping['models'].append(entry)
else:
raise RuntimeError(f'Unknown model type {name} at {model_path}')

for key in template_mapping.keys():
template_mapping[key] = '\n'.join(template_mapping[key])

with open(os.path.join(this_dir, 'README.md.in'), 'r') as fin:
template = string.Template(fin.read())
print(template.substitute(template_mapping))
32 changes: 32 additions & 0 deletions sdformat_test_files/models/geometry_box/geometry_box.sdf
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?xml version='1.0' encoding='utf-8'?>
<sdf version="1.7">
<model name="geometry_box">
<link name="link">
<visual name="link_visual">
<geometry>
<box>
<size>0.1 0.2 0.4</size>
</box>
</geometry>
</visual>
<collision name="link_collision">
<geometry>
<box>
<size>0.1 0.2 0.4</size>
</box>
</geometry>
</collision>
<inertial>
<mass>1.23</mass>
<inertia>
<ixx>0.0205</ixx>
<ixy>0</ixy>
<ixz>0</ixz>
<iyy>0.017425</iyy>
<iyz>0</iyz>
<izz>0.005125</izz>
</inertia>
</inertial>
</link>
</model>
</sdf>
Loading