Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions models/posim_sensor_models/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,10 @@ install(
ament_environment_hooks(
"${CMAKE_CURRENT_SOURCE_DIR}/hooks/${PROJECT_NAME}.dsv.in")

if(BUILD_TESTING)
find_package(ament_cmake_pytest REQUIRED)
ament_add_pytest_test(test_dvl_tracking_bounds
test/test_dvl_tracking_bounds.py)
endif()

ament_package()
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@
</water_velocity>
<boundaries>
<near>10.</near>
<far>100.</far>
<far>75.</far>
</boundaries>
<bins>10</bins>
<noise type="gaussian">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
</water_velocity>
<boundaries>
<near>10.</near>
<far>100.</far>
<far>81.</far>
</boundaries>
<bins>10</bins>
<noise type="gaussian">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@
</water_velocity>
<boundaries>
<near>10.</near>
<far>100.</far>
<far>66.</far>
</boundaries>
<bins>10</bins>
<noise type="gaussian">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@
</water_velocity>
<boundaries>
<near>10.</near>
<far>100.</far>
<far>90.</far>
</boundaries>
<bins>10</bins>
<noise type="gaussian">
Expand Down
1 change: 1 addition & 0 deletions models/posim_sensor_models/package.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
<maintainer email="kys50728@g.kmou.ac.kr">Ye-Seol Kwon</maintainer>
<license>Apache 2.0</license>
<buildtool_depend>ament_cmake</buildtool_depend>
<test_depend>ament_cmake_pytest</test_depend>
<export>
<build_type>ament_cmake</build_type>
<!-- This doesn't work yet https://github.com/gazebosim/ros_gz/pull/492 -->
Expand Down
34 changes: 34 additions & 0 deletions models/posim_sensor_models/test/test_dvl_tracking_bounds.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
"""Catch DVL configurations rejected by Gazebo before publication starts."""

from pathlib import Path
import re
import xml.etree.ElementTree as ET

import pytest

DESCRIPTION = Path(__file__).resolve().parents[1] / "description"
DVL_MODELS = [p for p in sorted(DESCRIPTION.glob("*/model.sdf")) if "<gz:dvl>" in p.read_text()]


def test_dvl_catalog_is_present():
assert DVL_MODELS, "No DVL descriptors found; check the test resource path"


@pytest.mark.parametrize("path", DVL_MODELS, ids=lambda p: p.parent.name)
def test_water_mass_layer_fits_sensor_range(path):
# SDF accepts the gz extension without an XML namespace declaration.
text = re.sub(r"<sdf\b", '<sdf xmlns:gz="urn:gz"', path.read_text(), count=1)
root = ET.fromstring(text)
for dvl in root.iter("{urn:gz}dvl"):
minimum = float(dvl.findtext("minimum_range"))
maximum = float(dvl.findtext("maximum_range"))
assert 0 <= minimum < maximum
mode = dvl.find("tracking/water_mass_mode")
if mode is None or mode.findtext("when") == "never":
continue
near = float(mode.findtext("boundaries/near", str(0.2 * maximum)))
far = float(mode.findtext("boundaries/far", str(0.8 * maximum)))
assert minimum <= near < far <= maximum, (
f"{path.parent.name}: water-mass [{near}, {far}] exceeds "
f"sensor range [{minimum}, {maximum}]"
)
Loading