feat: keep RGB-D captures only on workstation
This commit is contained in:
@@ -29,7 +29,11 @@ from rclpy.qos import (
|
||||
from rclpy.utilities import remove_ros_args
|
||||
from std_msgs.msg import String
|
||||
|
||||
from data_collection import DataRecorderManager, RecorderConfig
|
||||
from data_collection import (
|
||||
DataRecorderManager,
|
||||
OptionalTopicGroupConfig,
|
||||
RecorderConfig,
|
||||
)
|
||||
from data_recorder_protocol import (
|
||||
RecorderControlProtocol,
|
||||
topics_without_publishers,
|
||||
@@ -102,6 +106,41 @@ def _minimum_topic_rates(value: Any) -> dict[str, float]:
|
||||
return result
|
||||
|
||||
|
||||
def _optional_topic_groups(
|
||||
value: Any,
|
||||
) -> dict[str, OptionalTopicGroupConfig]:
|
||||
name = "optional_topic_groups"
|
||||
if not isinstance(value, dict):
|
||||
raise ValueError(f"data_collection.{name} must be a TOML table")
|
||||
result: dict[str, OptionalTopicGroupConfig] = {}
|
||||
for group_name, raw_group in value.items():
|
||||
if not isinstance(raw_group, dict):
|
||||
raise ValueError(
|
||||
f"data_collection.{name}.{group_name} must be a TOML table"
|
||||
)
|
||||
unknown = sorted(
|
||||
set(raw_group) - {"topics", "minimum_topic_rates_hz"}
|
||||
)
|
||||
if unknown:
|
||||
raise ValueError(
|
||||
f"data_collection.{name}.{group_name} has unknown keys: "
|
||||
+ ", ".join(unknown)
|
||||
)
|
||||
topics = _topic_list(
|
||||
raw_group.get("topics", []),
|
||||
f"{name}.{group_name}.topics",
|
||||
allow_empty=False,
|
||||
)
|
||||
rates = _minimum_topic_rates(
|
||||
raw_group.get("minimum_topic_rates_hz", {})
|
||||
)
|
||||
result[group_name] = OptionalTopicGroupConfig(
|
||||
topics=topics,
|
||||
minimum_topic_rates_hz=rates,
|
||||
)
|
||||
return result
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class SupervisorSettings:
|
||||
enabled: bool
|
||||
@@ -150,6 +189,9 @@ def load_settings(path: Path | str) -> SupervisorSettings:
|
||||
minimum_topic_rates = _minimum_topic_rates(
|
||||
section.get("minimum_topic_rates_hz", {})
|
||||
)
|
||||
optional_topic_groups = _optional_topic_groups(
|
||||
section.get("optional_topic_groups", {})
|
||||
)
|
||||
unknown_rate_topics = sorted(
|
||||
set(minimum_topic_rates) - set(required_topics)
|
||||
)
|
||||
@@ -187,6 +229,11 @@ def load_settings(path: Path | str) -> SupervisorSettings:
|
||||
topics=topics,
|
||||
required_topics=required_topics,
|
||||
minimum_topic_rates_hz=minimum_topic_rates,
|
||||
optional_topic_groups=optional_topic_groups,
|
||||
retain_failed_episodes=_boolean(
|
||||
section.get("retain_failed_episodes", True),
|
||||
"retain_failed_episodes",
|
||||
),
|
||||
minimum_free_bytes=int(minimum_free_gib * 1024**3),
|
||||
max_duration_seconds=max_duration,
|
||||
poll_interval_seconds=0.1,
|
||||
|
||||
Reference in New Issue
Block a user