Skip to content

Commit 8893879

Browse files
authored
Merge pull request #17 from IOES-Lab/fix/dvl-water-mass-bounds-20261009
fix: keep DVL water-mass layers within sensor ranges
2 parents ff91565 + 1d4c955 commit 8893879

7 files changed

Lines changed: 45 additions & 4 deletions

File tree

‎models/posim_sensor_models/CMakeLists.txt‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,10 @@ install(
1111
ament_environment_hooks(
1212
"${CMAKE_CURRENT_SOURCE_DIR}/hooks/${PROJECT_NAME}.dsv.in")
1313

14+
if(BUILD_TESTING)
15+
find_package(ament_cmake_pytest REQUIRED)
16+
ament_add_pytest_test(test_dvl_tracking_bounds
17+
test/test_dvl_tracking_bounds.py)
18+
endif()
19+
1420
ament_package()

‎models/posim_sensor_models/description/nortek_dvl1000_300/model.sdf‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
</water_velocity>
6161
<boundaries>
6262
<near>10.</near>
63-
<far>100.</far>
63+
<far>75.</far>
6464
</boundaries>
6565
<bins>10</bins>
6666
<noise type="gaussian">

‎models/posim_sensor_models/description/teledyne_explorer1000/model.sdf‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
</water_velocity>
6060
<boundaries>
6161
<near>10.</near>
62-
<far>100.</far>
62+
<far>81.</far>
6363
</boundaries>
6464
<bins>10</bins>
6565
<noise type="gaussian">

‎models/posim_sensor_models/description/teledyne_explorer4000/model.sdf‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
</water_velocity>
6161
<boundaries>
6262
<near>10.</near>
63-
<far>100.</far>
63+
<far>66.</far>
6464
</boundaries>
6565
<bins>10</bins>
6666
<noise type="gaussian">

‎models/posim_sensor_models/description/teledyne_whn/model.sdf‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@
6161
</water_velocity>
6262
<boundaries>
6363
<near>10.</near>
64-
<far>100.</far>
64+
<far>90.</far>
6565
</boundaries>
6666
<bins>10</bins>
6767
<noise type="gaussian">

‎models/posim_sensor_models/package.xml‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
<maintainer email="kys50728@g.kmou.ac.kr">Ye-Seol Kwon</maintainer>
99
<license>Apache 2.0</license>
1010
<buildtool_depend>ament_cmake</buildtool_depend>
11+
<test_depend>ament_cmake_pytest</test_depend>
1112
<export>
1213
<build_type>ament_cmake</build_type>
1314
<!-- This doesn't work yet https://github.com/gazebosim/ros_gz/pull/492 -->
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
"""Catch DVL configurations rejected by Gazebo before publication starts."""
2+
3+
from pathlib import Path
4+
import re
5+
import xml.etree.ElementTree as ET
6+
7+
import pytest
8+
9+
DESCRIPTION = Path(__file__).resolve().parents[1] / "description"
10+
DVL_MODELS = [p for p in sorted(DESCRIPTION.glob("*/model.sdf")) if "<gz:dvl>" in p.read_text()]
11+
12+
13+
def test_dvl_catalog_is_present():
14+
assert DVL_MODELS, "No DVL descriptors found; check the test resource path"
15+
16+
17+
@pytest.mark.parametrize("path", DVL_MODELS, ids=lambda p: p.parent.name)
18+
def test_water_mass_layer_fits_sensor_range(path):
19+
# SDF accepts the gz extension without an XML namespace declaration.
20+
text = re.sub(r"<sdf\b", '<sdf xmlns:gz="urn:gz"', path.read_text(), count=1)
21+
root = ET.fromstring(text)
22+
for dvl in root.iter("{urn:gz}dvl"):
23+
minimum = float(dvl.findtext("minimum_range"))
24+
maximum = float(dvl.findtext("maximum_range"))
25+
assert 0 <= minimum < maximum
26+
mode = dvl.find("tracking/water_mass_mode")
27+
if mode is None or mode.findtext("when") == "never":
28+
continue
29+
near = float(mode.findtext("boundaries/near", str(0.2 * maximum)))
30+
far = float(mode.findtext("boundaries/far", str(0.8 * maximum)))
31+
assert minimum <= near < far <= maximum, (
32+
f"{path.parent.name}: water-mass [{near}, {far}] exceeds "
33+
f"sensor range [{minimum}, {maximum}]"
34+
)

0 commit comments

Comments
 (0)