antioch-py 2.0.6__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 +78 -37
- antioch/session/views/__init__.py +2 -0
- antioch/session/views/material.py +54 -0
- antioch/session/views/radar.py +59 -1
- {antioch_py-2.0.6.dist-info → antioch_py-2.0.7.dist-info}/METADATA +1 -1
- {antioch_py-2.0.6.dist-info → antioch_py-2.0.7.dist-info}/RECORD +14 -12
- common/ark/hardware.py +12 -32
- common/message/pir.py +7 -5
- common/session/views/material.py +25 -0
- common/session/views/pir_sensor.py +23 -19
- common/session/views/radar.py +25 -0
- {antioch_py-2.0.6.dist-info → antioch_py-2.0.7.dist-info}/WHEEL +0 -0
- {antioch_py-2.0.6.dist-info → antioch_py-2.0.7.dist-info}/entry_points.txt +0 -0
- {antioch_py-2.0.6.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,28 +1331,33 @@ 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,
|
|
1348
|
+
lp_corner_hz: float = 10.0,
|
|
1342
1349
|
threshold: float | None = None,
|
|
1343
1350
|
threshold_scale: float = 1.0,
|
|
1344
|
-
|
|
1351
|
+
blind_time_s: float = 0.5,
|
|
1352
|
+
pulse_counter: int = 2,
|
|
1353
|
+
window_time_s: float = 2.0,
|
|
1354
|
+
count_mode: int = 0,
|
|
1345
1355
|
lens_transmission: float = 0.9,
|
|
1346
1356
|
lens_segments_h: int = 6,
|
|
1347
|
-
vertical_gain_falloff: float = 0.5,
|
|
1348
|
-
element_fov_overlap_deg: float = 20.0,
|
|
1349
|
-
element_scatter_gain: float = 0.1,
|
|
1350
|
-
element_fov_transition_deg: float = 15.0,
|
|
1351
1357
|
ambient_temp_c: float = 20.0,
|
|
1352
1358
|
thermal_time_constant_s: float = 0.2,
|
|
1353
|
-
pyro_responsivity: float =
|
|
1354
|
-
noise_amplitude: float =
|
|
1359
|
+
pyro_responsivity: float = 4000.0,
|
|
1360
|
+
noise_amplitude: float = 20e-6,
|
|
1355
1361
|
target_delta_t: float = 10.0,
|
|
1356
1362
|
target_distance: float = 5.0,
|
|
1357
1363
|
target_emissivity: float = 0.98,
|
|
@@ -1369,22 +1375,27 @@ class Scene(SessionContainer):
|
|
|
1369
1375
|
:param config: Optional PIR sensor configuration (alternative to individual parameters).
|
|
1370
1376
|
:param update_rate_hz: Sensor update frequency in Hz.
|
|
1371
1377
|
:param max_range: Maximum detection range in meters.
|
|
1372
|
-
:param
|
|
1373
|
-
:param
|
|
1374
|
-
:param
|
|
1375
|
-
:param
|
|
1376
|
-
: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.
|
|
1377
1389
|
:param hp_corner_hz: High-pass filter corner frequency in Hz.
|
|
1378
1390
|
:param lp_corner_hz: Low-pass filter corner frequency in Hz.
|
|
1379
1391
|
:param threshold: Detection threshold (auto-calibrated if None).
|
|
1380
1392
|
:param threshold_scale: Scale factor applied to auto-calibrated threshold.
|
|
1381
|
-
: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).
|
|
1382
1397
|
:param lens_transmission: Lens transmission coefficient (0-1).
|
|
1383
|
-
:param lens_segments_h: Number of horizontal lens segments (
|
|
1384
|
-
:param vertical_gain_falloff: Exponent for elevation-based gain reduction (0=uniform).
|
|
1385
|
-
:param element_fov_overlap_deg: Half-angle of center region where both elements see well (degrees).
|
|
1386
|
-
:param element_scatter_gain: Minimum gain for blocked element due to scatter/reflections (0-1).
|
|
1387
|
-
:param element_fov_transition_deg: Width of soft transition from full gain to scatter gain (degrees).
|
|
1398
|
+
:param lens_segments_h: Number of horizontal lens segments (facets).
|
|
1388
1399
|
:param ambient_temp_c: Ambient temperature in Celsius.
|
|
1389
1400
|
:param thermal_time_constant_s: Pyroelectric element thermal time constant in seconds.
|
|
1390
1401
|
:param pyro_responsivity: Pyroelectric responsivity scaling factor.
|
|
@@ -1402,22 +1413,27 @@ class Scene(SessionContainer):
|
|
|
1402
1413
|
config = PirSensorConfig(
|
|
1403
1414
|
update_rate_hz=update_rate_hz,
|
|
1404
1415
|
max_range=max_range,
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
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,
|
|
1410
1427
|
hp_corner_hz=hp_corner_hz,
|
|
1411
1428
|
lp_corner_hz=lp_corner_hz,
|
|
1412
1429
|
threshold=threshold,
|
|
1413
1430
|
threshold_scale=threshold_scale,
|
|
1414
|
-
|
|
1431
|
+
blind_time_s=blind_time_s,
|
|
1432
|
+
pulse_counter=pulse_counter,
|
|
1433
|
+
window_time_s=window_time_s,
|
|
1434
|
+
count_mode=count_mode,
|
|
1415
1435
|
lens_transmission=lens_transmission,
|
|
1416
1436
|
lens_segments_h=lens_segments_h,
|
|
1417
|
-
vertical_gain_falloff=vertical_gain_falloff,
|
|
1418
|
-
element_fov_overlap_deg=element_fov_overlap_deg,
|
|
1419
|
-
element_scatter_gain=element_scatter_gain,
|
|
1420
|
-
element_fov_transition_deg=element_fov_transition_deg,
|
|
1421
1437
|
ambient_temp_c=ambient_temp_c,
|
|
1422
1438
|
thermal_time_constant_s=thermal_time_constant_s,
|
|
1423
1439
|
pyro_responsivity=pyro_responsivity,
|
|
@@ -1507,6 +1523,31 @@ class Scene(SessionContainer):
|
|
|
1507
1523
|
|
|
1508
1524
|
set_pir_material(path, emissivity, temperature_c)
|
|
1509
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
|
+
|
|
1510
1551
|
def _step_physics(self, dt_us: int) -> None:
|
|
1511
1552
|
"""
|
|
1512
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
|
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/material.py,sha256=IfXTj1lJwKWvpz-yj2kELtBbVPAJx_ILVViXUIKKfrI,2071
|
|
29
30
|
antioch/session/views/pir_sensor.py,sha256=ynEpRz7rwATBAs29QPEcDOuEPxB_jjKnmH05N0KA_FA,4048
|
|
30
|
-
antioch/session/views/radar.py,sha256=
|
|
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,8 +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
|
-
|
|
16
|
-
|
|
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")
|
|
@@ -13,32 +13,36 @@ class PirSensorConfig(Message):
|
|
|
13
13
|
|
|
14
14
|
# Core sensor parameters
|
|
15
15
|
update_rate_hz: float = Field(default=60.0, description="Sensor update frequency in Hz")
|
|
16
|
-
max_range: float = Field(default=
|
|
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
|
# Ray configuration
|
|
23
|
-
|
|
24
|
-
|
|
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")
|
|
25
26
|
|
|
26
|
-
#
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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")
|
|
30
32
|
|
|
31
|
-
|
|
33
|
+
# DSP / electronics parameters
|
|
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")
|
|
37
|
+
lp_corner_hz: float = Field(default=10.0, description="Low-pass filter corner frequency in Hz")
|
|
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)")
|
|
32
42
|
|
|
33
43
|
# Lens parameters
|
|
34
44
|
lens_transmission: float = Field(default=0.9, description="Lens transmission coefficient (0-1)")
|
|
35
45
|
lens_segments_h: int = Field(default=6, description="Number of horizontal lens segments (facets)")
|
|
36
|
-
vertical_gain_falloff: float = Field(default=0.5, description="Exponent for elevation-based gain reduction (0=uniform)")
|
|
37
|
-
|
|
38
|
-
# Element vignetting parameters (models window blocking effect)
|
|
39
|
-
element_fov_overlap_deg: float = Field(default=20.0, description="Half-angle of center region where both elements see well (degrees)")
|
|
40
|
-
element_scatter_gain: float = Field(default=0.1, description="Minimum gain for blocked element due to scatter/reflections (0-1)")
|
|
41
|
-
element_fov_transition_deg: float = Field(default=15.0, description="Width of soft transition from full gain to scatter gain (degrees)")
|
|
42
46
|
|
|
43
47
|
# Environment parameters
|
|
44
48
|
ambient_temp_c: float = Field(default=20.0, description="Ambient temperature in Celsius")
|
|
@@ -49,8 +53,8 @@ class PirSensorConfig(Message):
|
|
|
49
53
|
|
|
50
54
|
# Pyroelectric element parameters
|
|
51
55
|
thermal_time_constant_s: float = Field(default=0.2, description="Element thermal time constant in seconds")
|
|
52
|
-
pyro_responsivity: float = Field(default=
|
|
53
|
-
noise_amplitude: float = Field(default=
|
|
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")
|
|
54
58
|
|
|
55
59
|
# Auto-threshold calibration parameters
|
|
56
60
|
target_delta_t: float = Field(default=10.0, description="Target temperature difference for threshold calibration in Celsius")
|
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
|