| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| from unittest.mock import patch |
|
|
| import pytest |
|
|
| pytest.importorskip("datasets", reason="datasets is required (install lerobot[dataset])") |
| pytest.importorskip("deepdiff", reason="deepdiff is required (install lerobot[hardware])") |
|
|
| from lerobot.configs.dataset import DatasetRecordConfig |
| from lerobot.scripts.lerobot_calibrate import CalibrateConfig, calibrate |
| from lerobot.scripts.lerobot_record import RecordConfig, record |
| from lerobot.scripts.lerobot_replay import DatasetReplayConfig, ReplayConfig, replay |
| from lerobot.scripts.lerobot_teleoperate import TeleoperateConfig, teleoperate |
| from tests.fixtures.constants import DUMMY_REPO_ID |
| from tests.mocks.mock_robot import MockRobotConfig |
| from tests.mocks.mock_teleop import MockTeleopConfig |
|
|
|
|
| def test_calibrate(): |
| robot_cfg = MockRobotConfig() |
| cfg = CalibrateConfig(robot=robot_cfg) |
| calibrate(cfg) |
|
|
|
|
| def test_teleoperate(): |
| robot_cfg = MockRobotConfig() |
| teleop_cfg = MockTeleopConfig() |
| cfg = TeleoperateConfig( |
| robot=robot_cfg, |
| teleop=teleop_cfg, |
| teleop_time_s=0.1, |
| ) |
| teleoperate(cfg) |
|
|
|
|
| def test_record_and_resume(tmp_path): |
| robot_cfg = MockRobotConfig() |
| teleop_cfg = MockTeleopConfig() |
| dataset_cfg = DatasetRecordConfig( |
| repo_id=DUMMY_REPO_ID, |
| single_task="Dummy task", |
| root=tmp_path / "record", |
| num_episodes=1, |
| episode_time_s=0.1, |
| reset_time_s=0, |
| push_to_hub=False, |
| ) |
| cfg = RecordConfig( |
| robot=robot_cfg, |
| dataset=dataset_cfg, |
| teleop=teleop_cfg, |
| play_sounds=False, |
| ) |
|
|
| dataset = record(cfg) |
|
|
| assert dataset.fps == 30 |
| assert dataset.meta.total_episodes == dataset.num_episodes == 1 |
| assert dataset.meta.total_frames == dataset.num_frames == 3 |
| assert dataset.meta.total_tasks == 1 |
|
|
| cfg.resume = True |
| |
| with ( |
| patch("lerobot.datasets.dataset_metadata.get_safe_version") as mock_get_safe_version, |
| patch("lerobot.datasets.dataset_metadata.snapshot_download") as mock_snapshot_download, |
| ): |
| mock_get_safe_version.return_value = "v3.0" |
| mock_snapshot_download.return_value = str(tmp_path / "record") |
| dataset = record(cfg) |
|
|
| assert dataset.meta.total_episodes == dataset.num_episodes == 2 |
| assert dataset.meta.total_frames == dataset.num_frames == 6 |
| assert dataset.meta.total_tasks == 1 |
|
|
|
|
| def test_record_and_replay(tmp_path): |
| robot_cfg = MockRobotConfig() |
| teleop_cfg = MockTeleopConfig() |
| record_dataset_cfg = DatasetRecordConfig( |
| repo_id=DUMMY_REPO_ID, |
| single_task="Dummy task", |
| root=tmp_path / "record_and_replay", |
| num_episodes=1, |
| episode_time_s=0.1, |
| push_to_hub=False, |
| ) |
| record_cfg = RecordConfig( |
| robot=robot_cfg, |
| dataset=record_dataset_cfg, |
| teleop=teleop_cfg, |
| play_sounds=False, |
| ) |
| replay_dataset_cfg = DatasetReplayConfig( |
| repo_id=DUMMY_REPO_ID, |
| episode=0, |
| root=tmp_path / "record_and_replay", |
| ) |
| replay_cfg = ReplayConfig( |
| robot=robot_cfg, |
| dataset=replay_dataset_cfg, |
| play_sounds=False, |
| ) |
|
|
| record(record_cfg) |
|
|
| |
| with ( |
| patch("lerobot.datasets.dataset_metadata.get_safe_version") as mock_get_safe_version, |
| patch("lerobot.datasets.dataset_metadata.snapshot_download") as mock_snapshot_download, |
| ): |
| mock_get_safe_version.return_value = "v3.0" |
| mock_snapshot_download.return_value = str(tmp_path / "record_and_replay") |
| replay(replay_cfg) |
|
|