antioch-py 2.0.5__py3-none-any.whl → 2.0.7__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- antioch/session/scene.py +88 -26
- antioch/session/views/__init__.py +2 -0
- antioch/session/views/material.py +54 -0
- antioch/session/views/pir_sensor.py +1 -1
- antioch/session/views/radar.py +59 -1
- {antioch_py-2.0.5.dist-info → antioch_py-2.0.7.dist-info}/METADATA +1 -1
- {antioch_py-2.0.5.dist-info → antioch_py-2.0.7.dist-info}/RECORD +15 -13
- common/ark/hardware.py +12 -32
- common/message/pir.py +7 -4
- common/session/views/material.py +25 -0
- common/session/views/pir_sensor.py +29 -14
- common/session/views/radar.py +25 -0
- {antioch_py-2.0.5.dist-info → antioch_py-2.0.7.dist-info}/WHEEL +0 -0
- {antioch_py-2.0.5.dist-info → antioch_py-2.0.7.dist-info}/entry_points.txt +0 -0
- {antioch_py-2.0.5.dist-info → antioch_py-2.0.7.dist-info}/top_level.txt +0 -0
antioch/session/scene.py
CHANGED
|
@@ -20,6 +20,7 @@ from antioch.session.views import (
|
|
|
20
20
|
has_collision,
|
|
21
21
|
remove_collision,
|
|
22
22
|
set_collision,
|
|
23
|
+
set_nonvisual_material,
|
|
23
24
|
set_pir_material,
|
|
24
25
|
)
|
|
25
26
|
from common.core import ContainerSource, get_asset_path
|
|
@@ -1330,25 +1331,37 @@ class Scene(SessionContainer):
|
|
|
1330
1331
|
self,
|
|
1331
1332
|
path: str,
|
|
1332
1333
|
config: PirSensorConfig | None = None,
|
|
1333
|
-
update_rate_hz: float =
|
|
1334
|
-
max_range: float =
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1334
|
+
update_rate_hz: float = 60.0,
|
|
1335
|
+
max_range: float = 20.0,
|
|
1336
|
+
total_horiz_fov_deg: float = 150.0,
|
|
1337
|
+
sensor_side_fov_deg: float = 45.0,
|
|
1338
|
+
sensor_center_fov_deg: float = 45.0,
|
|
1339
|
+
sensor_rays_horiz: int = 128,
|
|
1340
|
+
sensor_rays_vert: int = 16,
|
|
1341
|
+
min_vertical_angle_center: float = -30.0,
|
|
1342
|
+
max_vertical_angle_center: float = 30.0,
|
|
1343
|
+
min_vertical_angle_side: float = -30.0,
|
|
1344
|
+
max_vertical_angle_side: float = 30.0,
|
|
1345
|
+
gain_center: float = 0.015,
|
|
1346
|
+
gain_sides: float = 0.01,
|
|
1347
|
+
hp_corner_hz: float = 0.4,
|
|
1342
1348
|
lp_corner_hz: float = 10.0,
|
|
1343
1349
|
threshold: float | None = None,
|
|
1344
1350
|
threshold_scale: float = 1.0,
|
|
1345
|
-
|
|
1351
|
+
blind_time_s: float = 0.5,
|
|
1352
|
+
pulse_counter: int = 2,
|
|
1353
|
+
window_time_s: float = 2.0,
|
|
1354
|
+
count_mode: int = 0,
|
|
1346
1355
|
lens_transmission: float = 0.9,
|
|
1347
|
-
lens_segments_h: int =
|
|
1356
|
+
lens_segments_h: int = 6,
|
|
1348
1357
|
ambient_temp_c: float = 20.0,
|
|
1358
|
+
thermal_time_constant_s: float = 0.2,
|
|
1359
|
+
pyro_responsivity: float = 4000.0,
|
|
1360
|
+
noise_amplitude: float = 20e-6,
|
|
1349
1361
|
target_delta_t: float = 10.0,
|
|
1350
1362
|
target_distance: float = 5.0,
|
|
1351
1363
|
target_emissivity: float = 0.98,
|
|
1364
|
+
target_velocity_mps: float = 1.0,
|
|
1352
1365
|
world_pose: Pose | dict | None = None,
|
|
1353
1366
|
local_pose: Pose | dict | None = None,
|
|
1354
1367
|
) -> PirSensor:
|
|
@@ -1362,23 +1375,35 @@ class Scene(SessionContainer):
|
|
|
1362
1375
|
:param config: Optional PIR sensor configuration (alternative to individual parameters).
|
|
1363
1376
|
:param update_rate_hz: Sensor update frequency in Hz.
|
|
1364
1377
|
:param max_range: Maximum detection range in meters.
|
|
1365
|
-
:param
|
|
1366
|
-
:param
|
|
1367
|
-
:param
|
|
1368
|
-
:param
|
|
1369
|
-
:param
|
|
1370
|
-
:param
|
|
1378
|
+
:param total_horiz_fov_deg: Total horizontal coverage in degrees. Enables automatic fanning.
|
|
1379
|
+
:param sensor_side_fov_deg: Horizontal FOV for side sensors in degrees.
|
|
1380
|
+
:param sensor_center_fov_deg: Horizontal FOV for center sensor in degrees.
|
|
1381
|
+
:param sensor_rays_horiz: Number of rays per sensor in horizontal direction.
|
|
1382
|
+
:param sensor_rays_vert: Number of rays per sensor in vertical direction.
|
|
1383
|
+
:param min_vertical_angle_center: Minimum vertical angle for center sensor in degrees.
|
|
1384
|
+
:param max_vertical_angle_center: Maximum vertical angle for center sensor in degrees.
|
|
1385
|
+
:param min_vertical_angle_side: Minimum vertical angle for side sensors in degrees.
|
|
1386
|
+
:param max_vertical_angle_side: Maximum vertical angle for side sensors in degrees.
|
|
1387
|
+
:param gain_center: Amplifier gain for center sensor.
|
|
1388
|
+
:param gain_sides: Amplifier gain for side sensors.
|
|
1371
1389
|
:param hp_corner_hz: High-pass filter corner frequency in Hz.
|
|
1372
1390
|
:param lp_corner_hz: Low-pass filter corner frequency in Hz.
|
|
1373
1391
|
:param threshold: Detection threshold (auto-calibrated if None).
|
|
1374
1392
|
:param threshold_scale: Scale factor applied to auto-calibrated threshold.
|
|
1375
|
-
:param
|
|
1393
|
+
:param blind_time_s: Blind time after detection in seconds.
|
|
1394
|
+
:param pulse_counter: Number of pulses required to trigger detection (1-4).
|
|
1395
|
+
:param window_time_s: Window time for pulse counting in seconds.
|
|
1396
|
+
:param count_mode: Pulse counting mode (0 = sign change required, 1 = any crossing).
|
|
1376
1397
|
:param lens_transmission: Lens transmission coefficient (0-1).
|
|
1377
|
-
:param lens_segments_h: Number of horizontal lens segments
|
|
1398
|
+
:param lens_segments_h: Number of horizontal lens segments (facets).
|
|
1378
1399
|
:param ambient_temp_c: Ambient temperature in Celsius.
|
|
1400
|
+
:param thermal_time_constant_s: Pyroelectric element thermal time constant in seconds.
|
|
1401
|
+
:param pyro_responsivity: Pyroelectric responsivity scaling factor.
|
|
1402
|
+
:param noise_amplitude: Thermal/electronic noise amplitude.
|
|
1379
1403
|
:param target_delta_t: Target temperature difference for threshold calibration in Celsius.
|
|
1380
1404
|
:param target_distance: Target distance for threshold calibration in meters.
|
|
1381
1405
|
:param target_emissivity: Target emissivity for threshold calibration.
|
|
1406
|
+
:param target_velocity_mps: Target velocity for threshold calibration in m/s.
|
|
1382
1407
|
:param world_pose: Optional world pose.
|
|
1383
1408
|
:param local_pose: Optional local pose.
|
|
1384
1409
|
:return: The PIR sensor instance.
|
|
@@ -1388,23 +1413,35 @@ class Scene(SessionContainer):
|
|
|
1388
1413
|
config = PirSensorConfig(
|
|
1389
1414
|
update_rate_hz=update_rate_hz,
|
|
1390
1415
|
max_range=max_range,
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1416
|
+
total_horiz_fov_deg=total_horiz_fov_deg,
|
|
1417
|
+
sensor_side_fov_deg=sensor_side_fov_deg,
|
|
1418
|
+
sensor_center_fov_deg=sensor_center_fov_deg,
|
|
1419
|
+
sensor_rays_horiz=sensor_rays_horiz,
|
|
1420
|
+
sensor_rays_vert=sensor_rays_vert,
|
|
1421
|
+
min_vertical_angle_center=min_vertical_angle_center,
|
|
1422
|
+
max_vertical_angle_center=max_vertical_angle_center,
|
|
1423
|
+
min_vertical_angle_side=min_vertical_angle_side,
|
|
1424
|
+
max_vertical_angle_side=max_vertical_angle_side,
|
|
1425
|
+
gain_center=gain_center,
|
|
1426
|
+
gain_sides=gain_sides,
|
|
1397
1427
|
hp_corner_hz=hp_corner_hz,
|
|
1398
1428
|
lp_corner_hz=lp_corner_hz,
|
|
1399
1429
|
threshold=threshold,
|
|
1400
1430
|
threshold_scale=threshold_scale,
|
|
1401
|
-
|
|
1431
|
+
blind_time_s=blind_time_s,
|
|
1432
|
+
pulse_counter=pulse_counter,
|
|
1433
|
+
window_time_s=window_time_s,
|
|
1434
|
+
count_mode=count_mode,
|
|
1402
1435
|
lens_transmission=lens_transmission,
|
|
1403
1436
|
lens_segments_h=lens_segments_h,
|
|
1404
1437
|
ambient_temp_c=ambient_temp_c,
|
|
1438
|
+
thermal_time_constant_s=thermal_time_constant_s,
|
|
1439
|
+
pyro_responsivity=pyro_responsivity,
|
|
1440
|
+
noise_amplitude=noise_amplitude,
|
|
1405
1441
|
target_delta_t=target_delta_t,
|
|
1406
1442
|
target_distance=target_distance,
|
|
1407
1443
|
target_emissivity=target_emissivity,
|
|
1444
|
+
target_velocity_mps=target_velocity_mps,
|
|
1408
1445
|
)
|
|
1409
1446
|
|
|
1410
1447
|
return PirSensor.add(
|
|
@@ -1486,6 +1523,31 @@ class Scene(SessionContainer):
|
|
|
1486
1523
|
|
|
1487
1524
|
set_pir_material(path, emissivity, temperature_c)
|
|
1488
1525
|
|
|
1526
|
+
def set_nonvisual_material(
|
|
1527
|
+
self,
|
|
1528
|
+
path: str,
|
|
1529
|
+
base: str,
|
|
1530
|
+
coating: str = "none",
|
|
1531
|
+
attribute: str = "none",
|
|
1532
|
+
) -> int:
|
|
1533
|
+
"""
|
|
1534
|
+
Set non-visual material properties on all Material prims in a subtree.
|
|
1535
|
+
|
|
1536
|
+
These properties define how objects appear to RTX sensors (LiDAR and Radar).
|
|
1537
|
+
|
|
1538
|
+
Example:
|
|
1539
|
+
# Make a person visible to radar/lidar with skin material
|
|
1540
|
+
scene.set_nonvisual_material("/World/person", base="skin")
|
|
1541
|
+
|
|
1542
|
+
:param path: USD path of the root prim to configure.
|
|
1543
|
+
:param base: Base material type.
|
|
1544
|
+
:param coating: Coating type.
|
|
1545
|
+
:param attribute: Material attribute.
|
|
1546
|
+
:return: Number of Material prims modified.
|
|
1547
|
+
"""
|
|
1548
|
+
|
|
1549
|
+
return set_nonvisual_material(path, base, coating, attribute)
|
|
1550
|
+
|
|
1489
1551
|
def _step_physics(self, dt_us: int) -> None:
|
|
1490
1552
|
"""
|
|
1491
1553
|
Step physics by dt_us.
|
|
@@ -13,6 +13,7 @@ from antioch.session.views.ground_plane import GroundPlane
|
|
|
13
13
|
from antioch.session.views.imu import Imu
|
|
14
14
|
from antioch.session.views.joint import Joint
|
|
15
15
|
from antioch.session.views.light import Light
|
|
16
|
+
from antioch.session.views.material import set_nonvisual_material
|
|
16
17
|
from antioch.session.views.pir_sensor import PirSensor, set_pir_material
|
|
17
18
|
from antioch.session.views.radar import Radar
|
|
18
19
|
from antioch.session.views.rigid_body import RigidBody
|
|
@@ -36,5 +37,6 @@ __all__ = [
|
|
|
36
37
|
"has_collision",
|
|
37
38
|
"remove_collision",
|
|
38
39
|
"set_collision",
|
|
40
|
+
"set_nonvisual_material",
|
|
39
41
|
"set_pir_material",
|
|
40
42
|
]
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
from antioch.session.session import Session
|
|
2
|
+
from common.session.views.material import SetNonVisualMaterial, SetNonVisualMaterialResponse
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def set_nonvisual_material(
|
|
6
|
+
path: str,
|
|
7
|
+
base: str,
|
|
8
|
+
coating: str = "none",
|
|
9
|
+
attribute: str = "none",
|
|
10
|
+
) -> int:
|
|
11
|
+
"""
|
|
12
|
+
Set non-visual material properties on all Material prims in a subtree.
|
|
13
|
+
|
|
14
|
+
These properties define how objects appear to RTX sensors (LiDAR and Radar).
|
|
15
|
+
|
|
16
|
+
Valid base materials:
|
|
17
|
+
Metals: aluminum, steel, oxidized_steel, iron, oxidized_iron, silver, brass,
|
|
18
|
+
bronze, oxidized_bronze_patina, tin
|
|
19
|
+
Polymers: plastic, fiberglass, carbon_fiber, vinyl, plexiglass, pvc, nylon, polyester
|
|
20
|
+
Glass: clear_glass, frosted_glass, one_way_mirror, mirror, ceramic_glass
|
|
21
|
+
Other: asphalt, concrete, leaf_grass, dead_leaf_grass, rubber, wood, bark,
|
|
22
|
+
cardboard, paper, fabric, skin, fur_hair, leather, marble, brick,
|
|
23
|
+
stone, gravel, dirt, mud, water, salt_water, snow, ice, calibration_lambertion
|
|
24
|
+
Default: none
|
|
25
|
+
|
|
26
|
+
Valid coatings: none, paint, clearcoat, paint_clearcoat
|
|
27
|
+
|
|
28
|
+
Valid attributes: none, emissive, retroreflective, single_sided, visually_transparent
|
|
29
|
+
|
|
30
|
+
Example:
|
|
31
|
+
# Make a person visible to radar/lidar with skin material
|
|
32
|
+
count = set_nonvisual_material("/World/person", base="skin")
|
|
33
|
+
|
|
34
|
+
# Make a car with aluminum body and paint coating
|
|
35
|
+
count = set_nonvisual_material("/World/car", base="aluminum", coating="paint")
|
|
36
|
+
|
|
37
|
+
:param path: USD path of the root prim to configure.
|
|
38
|
+
:param base: Base material type.
|
|
39
|
+
:param coating: Coating type.
|
|
40
|
+
:param attribute: Material attribute.
|
|
41
|
+
:return: Number of Material prims modified.
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
response = Session.get_current().query_sim_rpc(
|
|
45
|
+
endpoint="set_nonvisual_material",
|
|
46
|
+
payload=SetNonVisualMaterial(
|
|
47
|
+
path=path,
|
|
48
|
+
base=base,
|
|
49
|
+
coating=coating,
|
|
50
|
+
attribute=attribute,
|
|
51
|
+
),
|
|
52
|
+
response_type=SetNonVisualMaterialResponse,
|
|
53
|
+
)
|
|
54
|
+
return response.materials_modified
|
|
@@ -81,7 +81,7 @@ class PirSensor(SessionContainer):
|
|
|
81
81
|
"""
|
|
82
82
|
Get current detection status.
|
|
83
83
|
|
|
84
|
-
:return: Detection status with is_detected, signal_strength, threshold, and
|
|
84
|
+
:return: Detection status with is_detected, signal_strength, threshold, element_flux, and element_signal.
|
|
85
85
|
"""
|
|
86
86
|
|
|
87
87
|
status = self._session.query_sim_rpc(
|
antioch/session/views/radar.py
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
from antioch.session.session import Session, SessionContainer
|
|
2
2
|
from common.message import Pose, RadarScan
|
|
3
|
-
from common.session.views.radar import
|
|
3
|
+
from common.session.views.radar import (
|
|
4
|
+
AddRadar,
|
|
5
|
+
GetRadar,
|
|
6
|
+
GetRadarResponse,
|
|
7
|
+
GetRadarScan,
|
|
8
|
+
RadarConfig,
|
|
9
|
+
SetRadarDebugMode,
|
|
10
|
+
SetRadarMaterial,
|
|
11
|
+
)
|
|
4
12
|
|
|
5
13
|
|
|
6
14
|
class Radar(SessionContainer):
|
|
@@ -71,3 +79,53 @@ class Radar(SessionContainer):
|
|
|
71
79
|
)
|
|
72
80
|
|
|
73
81
|
return scan
|
|
82
|
+
|
|
83
|
+
def set_debug_mode(self, enabled: bool) -> None:
|
|
84
|
+
"""
|
|
85
|
+
Enable or disable debug visualization.
|
|
86
|
+
|
|
87
|
+
:param enabled: Whether to enable debug visualization.
|
|
88
|
+
"""
|
|
89
|
+
|
|
90
|
+
self._session.query_sim_rpc(
|
|
91
|
+
endpoint="set_radar_debug_mode",
|
|
92
|
+
payload=SetRadarDebugMode(path=self._path, enabled=enabled),
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def set_radar_material(
|
|
97
|
+
path: str,
|
|
98
|
+
reflectivity: float | None = None,
|
|
99
|
+
metallic: float | None = None,
|
|
100
|
+
roughness: float | None = None,
|
|
101
|
+
backscattering: float | None = None,
|
|
102
|
+
cross_section: float | None = None,
|
|
103
|
+
) -> None:
|
|
104
|
+
"""
|
|
105
|
+
Set radar-specific material properties on a prim and all prims in its subtree.
|
|
106
|
+
|
|
107
|
+
These properties define how the prim appears to radar sensors.
|
|
108
|
+
|
|
109
|
+
Example:
|
|
110
|
+
# Make a target highly reflective to radar
|
|
111
|
+
set_radar_material("/World/car", reflectivity=0.9, metallic=1.0)
|
|
112
|
+
|
|
113
|
+
:param path: USD path of the prim to configure.
|
|
114
|
+
:param reflectivity: Radar reflectivity (0-1).
|
|
115
|
+
:param metallic: Metallic property (0-1).
|
|
116
|
+
:param roughness: Surface roughness (0-1).
|
|
117
|
+
:param backscattering: Backscattering coefficient.
|
|
118
|
+
:param cross_section: Radar cross section in dBsm.
|
|
119
|
+
"""
|
|
120
|
+
|
|
121
|
+
Session.get_current().query_sim_rpc(
|
|
122
|
+
endpoint="set_radar_material",
|
|
123
|
+
payload=SetRadarMaterial(
|
|
124
|
+
path=path,
|
|
125
|
+
reflectivity=reflectivity,
|
|
126
|
+
metallic=metallic,
|
|
127
|
+
roughness=roughness,
|
|
128
|
+
backscattering=backscattering,
|
|
129
|
+
cross_section=cross_section,
|
|
130
|
+
),
|
|
131
|
+
)
|
|
@@ -12,10 +12,10 @@ antioch/session/ark.py,sha256=CF9zaRAZXiVLOkmZpBEaGG4-wydMZ7aUVOnXqnqYZ4U,19096
|
|
|
12
12
|
antioch/session/asset.py,sha256=G4wKHVxDkzLEtUap7b7jDF6Y_I4gdHiJ-b756QFBx54,2222
|
|
13
13
|
antioch/session/error.py,sha256=hEByLcsS8PPpK46prnz1GSWBx0ErGTnSkwBd29FUmWg,1685
|
|
14
14
|
antioch/session/record.py,sha256=acNeikDeWJFZLovgwbXGHTriqi5-szYjjrnt9s_cdUY,5527
|
|
15
|
-
antioch/session/scene.py,sha256=
|
|
15
|
+
antioch/session/scene.py,sha256=gESd-ax_xW7ZKPCUejzZMHYGPO0ouG3Ud_TFsHiMrec,60369
|
|
16
16
|
antioch/session/session.py,sha256=MxyWAC56SGC6BORzlw8Sxp4s4QBFuxPb7t0kScYDEtM,6626
|
|
17
17
|
antioch/session/task.py,sha256=ERji5YWU82TL5txBNTLQemJB7Y7xIqS5l76re7MUgvo,11831
|
|
18
|
-
antioch/session/views/__init__.py,sha256=
|
|
18
|
+
antioch/session/views/__init__.py,sha256=ida-X6eUhYC0nZ6Bk43yoy2sgKyiPU9Am-N90XG0WgM,1252
|
|
19
19
|
antioch/session/views/animation.py,sha256=oID0fM3RSU1d3CVA5EiEizKJF18CfNla_1ta7YCQt40,5960
|
|
20
20
|
antioch/session/views/articulation.py,sha256=0akkhmBJhbJrNmmNwob-S2-t_21Jq9PipTesjYR6wLU,7870
|
|
21
21
|
antioch/session/views/basis_curve.py,sha256=YMz9pMgj4fLkjhr3QZz8_RBv_HnMN3ZcvLj32WseIlE,5685
|
|
@@ -26,15 +26,16 @@ antioch/session/views/ground_plane.py,sha256=oTpGcATB5SirxD1eZUMCeD28eIeDJ6a7E1p
|
|
|
26
26
|
antioch/session/views/imu.py,sha256=1EVLRptXSqs4YMJt_wiwXM-B95HzVQmx3MyRblTADMs,1889
|
|
27
27
|
antioch/session/views/joint.py,sha256=x_clYul4SsCIl0WQAW61w6sS0iDXompvZVEv_2YFG9c,1735
|
|
28
28
|
antioch/session/views/light.py,sha256=Q9Nn8o0PV9in8Q4eoobsbRxEPhn3xps57K7Z4QmGE8s,4698
|
|
29
|
-
antioch/session/views/
|
|
30
|
-
antioch/session/views/
|
|
29
|
+
antioch/session/views/material.py,sha256=IfXTj1lJwKWvpz-yj2kELtBbVPAJx_ILVViXUIKKfrI,2071
|
|
30
|
+
antioch/session/views/pir_sensor.py,sha256=ynEpRz7rwATBAs29QPEcDOuEPxB_jjKnmH05N0KA_FA,4048
|
|
31
|
+
antioch/session/views/radar.py,sha256=JAmLvhcqqjbD90Og-YeqjfU8gDk-q5IgMCazEgbapxU,3546
|
|
31
32
|
antioch/session/views/rigid_body.py,sha256=NI-2bFnOLQqClQ3pOhzkggLAhClyKVBXyTmWXgqkZEU,7760
|
|
32
33
|
antioch/session/views/xform.py,sha256=BELykGHYhdZyHkCY6uakCnmJKwhyiDrCEGy9038GY_Y,3299
|
|
33
34
|
common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
34
35
|
common/constants.py,sha256=xlgBKdPoiDzAnWkeEsnktMJfXjBP5FTJkM3MGClTnuY,1085
|
|
35
36
|
common/ark/__init__.py,sha256=Lu2lJ5k7-vN6ZGeX2sYhRwzXEyt9kCyXtgsyvdIaCiU,1472
|
|
36
37
|
common/ark/ark.py,sha256=rToMvtpu634ylJbEfYlTD13Cb3udF_S4SfI8xQsL1P4,2376
|
|
37
|
-
common/ark/hardware.py,sha256=
|
|
38
|
+
common/ark/hardware.py,sha256=4A7g_rQO9Ylj5majqJMEgBBWHE8rEjcbAj8yhPBkxiM,2420
|
|
38
39
|
common/ark/kinematics.py,sha256=G4wzFVyG_awFPJ8SKcZMZCBQkZkF5g6NQg4RhUjAGCs,753
|
|
39
40
|
common/ark/module.py,sha256=IwkoirFb4dZkfVpn3tjgChRy5S6hVPbrtR9XgJ5UIBI,1922
|
|
40
41
|
common/ark/node.py,sha256=PWESl7sDdY_Q6aA3CZMRTQ0SONlO9LkUmXhRbUhT8_g,2303
|
|
@@ -57,7 +58,7 @@ common/message/image.py,sha256=aF_rU_sOSJQci6g_Wr5Sd16FUFnHm2kgurqWcPPKbaA,5296
|
|
|
57
58
|
common/message/imu.py,sha256=mwIu_dK64aixrnz6Hsg8v-vXVKUabLBNbfHe2KqbVPo,328
|
|
58
59
|
common/message/joint.py,sha256=V9qEILZVaWoAbKGT_V3wvSAvZzoJ7YmrcROkIdzmg5o,1051
|
|
59
60
|
common/message/log.py,sha256=VN1zCwrUtTPNiyakNjYPZuz3UDMtW19fhD1F1M8MTf8,552
|
|
60
|
-
common/message/pir.py,sha256=
|
|
61
|
+
common/message/pir.py,sha256=nSm5dymphomoOZqZAtQeUCowrIginEjVvLwW9NdGNAU,797
|
|
61
62
|
common/message/point.py,sha256=oryHZEltba1z3GFRyb099oDddmiLE5SM4TKexgtBYaE,2229
|
|
62
63
|
common/message/point_cloud.py,sha256=e06e6-bGaN8VzwkCy4MltDZocnKP7Bbr14gBlUhXu-A,2035
|
|
63
64
|
common/message/pose.py,sha256=fcb0-xuIYWaaHHGC_iET9yma1fuicFvXJsaJaLO5XVI,4703
|
|
@@ -82,8 +83,9 @@ common/session/views/ground_plane.py,sha256=iHi7bx3qHveh94b88oPz7Yy9cjznc194T6Bx
|
|
|
82
83
|
common/session/views/imu.py,sha256=usMm4yeqY_emcTQGjs2hC3Rk-tfen2dp0fIWTDADpxc,1593
|
|
83
84
|
common/session/views/joint.py,sha256=eP5fLAWqvaQ13xZrNkn79DdRERZMvVrP9emJYZ_J_KA,2098
|
|
84
85
|
common/session/views/light.py,sha256=IpqkSB6qZCfbe63GAJaPHdy4rJDNki8h-Hm-1kwDwHc,2284
|
|
85
|
-
common/session/views/
|
|
86
|
-
common/session/views/
|
|
86
|
+
common/session/views/material.py,sha256=QtklOzGZn7nPiMzR7aq9u0nTSkCUlY-rsaPzfv1f9EQ,942
|
|
87
|
+
common/session/views/pir_sensor.py,sha256=HyrV5SU9GEWBL-s9B6AKoR6VhhvPxr7EnEzhSwyECPc,5495
|
|
88
|
+
common/session/views/radar.py,sha256=KTEwFKvEr3f2SrdAhb3iSIKRMKa0PIRXx7-T5hRiDgg,3429
|
|
87
89
|
common/session/views/rigid_body.py,sha256=19cjU2bZvaFzs8OoNsu4gzZHu97nJMUueBc6Wt0NUWk,4523
|
|
88
90
|
common/session/views/viewport.py,sha256=tPb1yCFd5nqCapkqSyWCEJ8joEk3fIIfZNr1uAbNAfM,682
|
|
89
91
|
common/session/views/xform.py,sha256=uxcmtFFGKLF-Jkln1r08CZuyLr7EI8DvdKYuyUFdieM,863
|
|
@@ -92,8 +94,8 @@ common/utils/comms.py,sha256=1lpnb9ra5I3xv-Eo0GFZ7nR4TjKseOeDNf9QMWQZbds,17283
|
|
|
92
94
|
common/utils/logger.py,sha256=VcZ4dduWut8xWPs-F5ye8RRrNdBehSSG3r1LAWc-IBY,3389
|
|
93
95
|
common/utils/time.py,sha256=kGDzObbaqWOep4vT1Y2W-BheunxdjYBI4V3Nfp4Ck3Q,790
|
|
94
96
|
common/utils/usd.py,sha256=to4VPtnamMDIQK-pwDIVfiuzUnNzEImj5szOar1NHiE,253
|
|
95
|
-
antioch_py-2.0.
|
|
96
|
-
antioch_py-2.0.
|
|
97
|
-
antioch_py-2.0.
|
|
98
|
-
antioch_py-2.0.
|
|
99
|
-
antioch_py-2.0.
|
|
97
|
+
antioch_py-2.0.7.dist-info/METADATA,sha256=Pbd_ezyxJrXnLGCkcb1RhzJP9PuBnEVBkIUMUhAamSU,3485
|
|
98
|
+
antioch_py-2.0.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
99
|
+
antioch_py-2.0.7.dist-info/entry_points.txt,sha256=1bLTH5BXCOsQkS8k6L_wJ6Nj62j4aoU9Ey_PhWzsRRM,59
|
|
100
|
+
antioch_py-2.0.7.dist-info/top_level.txt,sha256=GtzNccsep3YdBt9VXQ7-ZFsFJFffr4hyZvqg0YqRqtw,15
|
|
101
|
+
antioch_py-2.0.7.dist-info/RECORD,,
|
common/ark/hardware.py
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from enum import Enum
|
|
4
|
+
from typing import Annotated, Literal, Union
|
|
4
5
|
|
|
5
|
-
from pydantic import Field
|
|
6
|
+
from pydantic import Field
|
|
6
7
|
|
|
7
8
|
from common.message import Message, Pose
|
|
8
9
|
from common.session.views.articulation import ArticulationConfig
|
|
@@ -29,6 +30,7 @@ class ActuatorGroupHardware(Message):
|
|
|
29
30
|
Actuator group hardware that controls multiple joints.
|
|
30
31
|
"""
|
|
31
32
|
|
|
33
|
+
type: Literal[HardwareType.ACTUATOR_GROUP] = HardwareType.ACTUATOR_GROUP
|
|
32
34
|
module: str
|
|
33
35
|
name: str
|
|
34
36
|
config: ArticulationConfig
|
|
@@ -39,6 +41,7 @@ class ImuHardware(Message):
|
|
|
39
41
|
IMU sensor hardware attached to a link.
|
|
40
42
|
"""
|
|
41
43
|
|
|
44
|
+
type: Literal[HardwareType.IMU] = HardwareType.IMU
|
|
42
45
|
module: str
|
|
43
46
|
name: str
|
|
44
47
|
path: str
|
|
@@ -52,6 +55,7 @@ class PirHardware(Message):
|
|
|
52
55
|
PIR (Passive Infrared) sensor hardware attached to a link.
|
|
53
56
|
"""
|
|
54
57
|
|
|
58
|
+
type: Literal[HardwareType.PIR] = HardwareType.PIR
|
|
55
59
|
module: str
|
|
56
60
|
name: str
|
|
57
61
|
path: str
|
|
@@ -65,6 +69,7 @@ class RadarHardware(Message):
|
|
|
65
69
|
Radar sensor hardware attached to a link.
|
|
66
70
|
"""
|
|
67
71
|
|
|
72
|
+
type: Literal[HardwareType.RADAR] = HardwareType.RADAR
|
|
68
73
|
module: str
|
|
69
74
|
name: str
|
|
70
75
|
path: str
|
|
@@ -80,6 +85,7 @@ class CameraHardware(Message):
|
|
|
80
85
|
Used for both RGB and depth cameras - the mode is specified in the config.
|
|
81
86
|
"""
|
|
82
87
|
|
|
88
|
+
type: Literal[HardwareType.CAMERA] = HardwareType.CAMERA
|
|
83
89
|
module: str
|
|
84
90
|
name: str
|
|
85
91
|
path: str
|
|
@@ -88,34 +94,8 @@ class CameraHardware(Message):
|
|
|
88
94
|
config: CameraConfig
|
|
89
95
|
|
|
90
96
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
Union
|
|
94
|
-
""
|
|
95
|
-
|
|
96
|
-
type: HardwareType
|
|
97
|
-
config: ActuatorGroupHardware | ImuHardware | PirHardware | RadarHardware | CameraHardware
|
|
98
|
-
|
|
99
|
-
@field_validator("config", mode="before")
|
|
100
|
-
@classmethod
|
|
101
|
-
def validate_config(cls, config: dict, info: ValidationInfo):
|
|
102
|
-
"""
|
|
103
|
-
Validate the hardware config based on the type field.
|
|
104
|
-
"""
|
|
105
|
-
|
|
106
|
-
hw_type = info.data.get("type")
|
|
107
|
-
if hw_type is None:
|
|
108
|
-
raise ValueError("Hardware type is required")
|
|
109
|
-
match hw_type:
|
|
110
|
-
case HardwareType.ACTUATOR_GROUP:
|
|
111
|
-
return ActuatorGroupHardware.model_validate(config)
|
|
112
|
-
case HardwareType.IMU:
|
|
113
|
-
return ImuHardware.model_validate(config)
|
|
114
|
-
case HardwareType.PIR:
|
|
115
|
-
return PirHardware.model_validate(config)
|
|
116
|
-
case HardwareType.RADAR:
|
|
117
|
-
return RadarHardware.model_validate(config)
|
|
118
|
-
case HardwareType.CAMERA:
|
|
119
|
-
return CameraHardware.model_validate(config)
|
|
120
|
-
case _:
|
|
121
|
-
raise ValueError(f"Unknown hardware type: {hw_type}")
|
|
97
|
+
# Discriminated union based on the 'type' field
|
|
98
|
+
Hardware = Annotated[
|
|
99
|
+
Union[ActuatorGroupHardware, ImuHardware, PirHardware, RadarHardware, CameraHardware],
|
|
100
|
+
Field(discriminator="type"),
|
|
101
|
+
]
|
common/message/pir.py
CHANGED
|
@@ -9,7 +9,10 @@ class PirStatus(Message):
|
|
|
9
9
|
"""
|
|
10
10
|
|
|
11
11
|
_type = "antioch/pir_status"
|
|
12
|
-
is_detected: bool = Field(description="Whether motion is currently detected")
|
|
13
|
-
signal_strength: float = Field(description="
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
is_detected: bool = Field(description="Whether motion is currently detected (aggregated across all sensors)")
|
|
13
|
+
signal_strength: float = Field(description="Max absolute signal strength across all sensors")
|
|
14
|
+
|
|
15
|
+
# Multi-sensor status
|
|
16
|
+
sensor_states: list[bool] = Field(default_factory=list, description="Detection state per sensor (Center, Left, Right)")
|
|
17
|
+
sensor_signals: list[float] = Field(default_factory=list, description="Signal strength per sensor")
|
|
18
|
+
sensor_thresholds: list[float] = Field(default_factory=list, description="Detection threshold per sensor")
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
from pydantic import Field
|
|
2
|
+
|
|
3
|
+
from common.message import Message
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class SetNonVisualMaterial(Message):
|
|
7
|
+
"""
|
|
8
|
+
Set non-visual material properties on all Material prims in a subtree.
|
|
9
|
+
|
|
10
|
+
These properties define how objects appear to RTX sensors (LiDAR and Radar).
|
|
11
|
+
Based on Isaac Sim's isaacsim.sensors.rtx.nonvisual_materials system.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
path: str = Field(description="USD path of the root prim to configure")
|
|
15
|
+
base: str = Field(description="Base material type (e.g. 'aluminum', 'skin', 'plastic')")
|
|
16
|
+
coating: str = Field(default="none", description="Coating type (e.g. 'none', 'paint', 'clearcoat')")
|
|
17
|
+
attribute: str = Field(default="none", description="Material attribute (e.g. 'none', 'emissive', 'retroreflective')")
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class SetNonVisualMaterialResponse(Message):
|
|
21
|
+
"""
|
|
22
|
+
Response from setting non-visual material.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
materials_modified: int = Field(description="Number of Material prims modified")
|
|
@@ -12,28 +12,37 @@ class PirSensorConfig(Message):
|
|
|
12
12
|
"""
|
|
13
13
|
|
|
14
14
|
# Core sensor parameters
|
|
15
|
-
update_rate_hz: float = Field(default=
|
|
16
|
-
max_range: float = Field(default=
|
|
15
|
+
update_rate_hz: float = Field(default=60.0, description="Sensor update frequency in Hz")
|
|
16
|
+
max_range: float = Field(default=20.0, description="Maximum detection range in meters")
|
|
17
17
|
|
|
18
|
-
#
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
# FOV configuration
|
|
19
|
+
total_horiz_fov_deg: float = Field(default=150.0, description="Total horizontal coverage. Enables automatic fanning.")
|
|
20
|
+
sensor_side_fov_deg: float = Field(default=45.0, description="Horizontal FOV for side sensors")
|
|
21
|
+
sensor_center_fov_deg: float = Field(default=45.0, description="Horizontal FOV for center sensor")
|
|
21
22
|
|
|
22
|
-
#
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
# Ray configuration
|
|
24
|
+
sensor_rays_horiz: int = Field(default=128, description="Number of rays per sensor in horizontal direction")
|
|
25
|
+
sensor_rays_vert: int = Field(default=16, description="Number of rays per sensor in vertical direction")
|
|
26
|
+
|
|
27
|
+
# Sensor vertical angle range
|
|
28
|
+
min_vertical_angle_center: float = Field(default=-30.0, description="Minimum vertical angle for center sensor in degrees")
|
|
29
|
+
max_vertical_angle_center: float = Field(default=30.0, description="Maximum vertical angle for center sensor in degrees")
|
|
30
|
+
min_vertical_angle_side: float = Field(default=-30.0, description="Minimum vertical angle for side sensors in degrees")
|
|
31
|
+
max_vertical_angle_side: float = Field(default=30.0, description="Maximum vertical angle for side sensors in degrees")
|
|
26
32
|
|
|
27
33
|
# DSP / electronics parameters
|
|
28
|
-
|
|
29
|
-
|
|
34
|
+
gain_center: float = Field(default=0.015, description="Amplifier gain for center sensor")
|
|
35
|
+
gain_sides: float = Field(default=0.01, description="Amplifier gain for side sensors")
|
|
36
|
+
hp_corner_hz: float = Field(default=0.4, description="High-pass filter corner frequency in Hz")
|
|
30
37
|
lp_corner_hz: float = Field(default=10.0, description="Low-pass filter corner frequency in Hz")
|
|
31
|
-
|
|
32
|
-
|
|
38
|
+
blind_time_s: float = Field(default=0.5, description="Blind time after detection in seconds")
|
|
39
|
+
pulse_counter: int = Field(default=2, description="Number of pulses required to trigger detection (1-4)")
|
|
40
|
+
window_time_s: float = Field(default=2.0, description="Window time for pulse counting in seconds")
|
|
41
|
+
count_mode: int = Field(default=0, description="Pulse counting mode (0: sign change required, 1: any crossing)")
|
|
33
42
|
|
|
34
43
|
# Lens parameters
|
|
35
44
|
lens_transmission: float = Field(default=0.9, description="Lens transmission coefficient (0-1)")
|
|
36
|
-
lens_segments_h: int = Field(default=
|
|
45
|
+
lens_segments_h: int = Field(default=6, description="Number of horizontal lens segments (facets)")
|
|
37
46
|
|
|
38
47
|
# Environment parameters
|
|
39
48
|
ambient_temp_c: float = Field(default=20.0, description="Ambient temperature in Celsius")
|
|
@@ -42,10 +51,16 @@ class PirSensorConfig(Message):
|
|
|
42
51
|
threshold: float | None = Field(default=None, description="Detection threshold (auto-calibrated if None)")
|
|
43
52
|
threshold_scale: float = Field(default=1.0, description="Scale factor applied to auto-calibrated threshold")
|
|
44
53
|
|
|
54
|
+
# Pyroelectric element parameters
|
|
55
|
+
thermal_time_constant_s: float = Field(default=0.2, description="Element thermal time constant in seconds")
|
|
56
|
+
pyro_responsivity: float = Field(default=4000.0, description="Pyroelectric responsivity scaling factor")
|
|
57
|
+
noise_amplitude: float = Field(default=20e-6, description="Thermal/electronic noise amplitude")
|
|
58
|
+
|
|
45
59
|
# Auto-threshold calibration parameters
|
|
46
60
|
target_delta_t: float = Field(default=10.0, description="Target temperature difference for threshold calibration in Celsius")
|
|
47
61
|
target_distance: float = Field(default=5.0, description="Target distance for threshold calibration in meters")
|
|
48
62
|
target_emissivity: float = Field(default=0.98, description="Target emissivity for threshold calibration")
|
|
63
|
+
target_velocity_mps: float = Field(default=1.0, description="Target velocity for threshold calibration in m/s")
|
|
49
64
|
|
|
50
65
|
|
|
51
66
|
class GetPirSensor(Message):
|
common/session/views/radar.py
CHANGED
|
@@ -65,6 +65,15 @@ class GetRadarScan(Message):
|
|
|
65
65
|
path: str
|
|
66
66
|
|
|
67
67
|
|
|
68
|
+
class SetRadarDebugMode(Message):
|
|
69
|
+
"""
|
|
70
|
+
Enable or disable debug visualization for a radar sensor.
|
|
71
|
+
"""
|
|
72
|
+
|
|
73
|
+
path: str
|
|
74
|
+
enabled: bool = Field(description="Whether to enable debug visualization")
|
|
75
|
+
|
|
76
|
+
|
|
68
77
|
class BufferRadarRead(Message):
|
|
69
78
|
"""
|
|
70
79
|
Request to buffer current radar scan at simulation time.
|
|
@@ -80,3 +89,19 @@ class GetBufferedRadarRead(Message):
|
|
|
80
89
|
|
|
81
90
|
path: str
|
|
82
91
|
read_sim_time: float
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
class SetRadarMaterial(Message):
|
|
95
|
+
"""
|
|
96
|
+
Set radar-specific material properties on a prim and all materials in its subtree.
|
|
97
|
+
|
|
98
|
+
These properties define how the prim appears to radar sensors.
|
|
99
|
+
Based on RTX Sensor Non-Visual Materials system.
|
|
100
|
+
"""
|
|
101
|
+
|
|
102
|
+
path: str = Field(description="USD path of the prim to configure")
|
|
103
|
+
reflectivity: float | None = Field(default=None, description="Radar reflectivity (0-1)")
|
|
104
|
+
metallic: float | None = Field(default=None, description="Metallic property (0-1)")
|
|
105
|
+
roughness: float | None = Field(default=None, description="Surface roughness (0-1)")
|
|
106
|
+
backscattering: float | None = Field(default=None, description="Backscattering coefficient")
|
|
107
|
+
cross_section: float | None = Field(default=None, description="Radar cross section in dBsm")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|