| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| """ |
| Helper to recalibrate your device (robot or teleoperator). |
| |
| Requires: pip install 'lerobot[hardware]' |
| |
| Example: |
| |
| ```shell |
| lerobot-calibrate \ |
| --teleop.type=so100_leader \ |
| --teleop.port=/dev/tty.usbmodem58760431551 \ |
| --teleop.id=blue |
| ``` |
| """ |
|
|
| import logging |
| from dataclasses import asdict, dataclass |
| from pprint import pformat |
|
|
| import draccus |
|
|
| from lerobot.cameras.opencv import OpenCVCameraConfig |
| from lerobot.cameras.realsense import RealSenseCameraConfig |
| from lerobot.robots import ( |
| Robot, |
| RobotConfig, |
| bi_openarm_follower, |
| bi_rebot_b601_follower, |
| bi_so_follower, |
| hope_jr, |
| koch_follower, |
| lekiwi, |
| make_robot_from_config, |
| omx_follower, |
| openarm_follower, |
| rebot_b601_follower, |
| so_follower, |
| ) |
| from lerobot.teleoperators import ( |
| Teleoperator, |
| TeleoperatorConfig, |
| bi_openarm_leader, |
| bi_openarm_mini, |
| bi_rebot_102_leader, |
| bi_so_leader, |
| homunculus, |
| koch_leader, |
| make_teleoperator_from_config, |
| omx_leader, |
| openarm_leader, |
| openarm_mini, |
| rebot_102_leader, |
| so_leader, |
| unitree_g1, |
| ) |
| from lerobot.utils.import_utils import register_third_party_plugins |
| from lerobot.utils.utils import init_logging |
|
|
|
|
| @dataclass |
| class CalibrateConfig: |
| teleop: TeleoperatorConfig | None = None |
| robot: RobotConfig | None = None |
|
|
| def __post_init__(self): |
| if bool(self.teleop) == bool(self.robot): |
| raise ValueError("Choose either a teleop or a robot.") |
|
|
| self.device = self.robot if self.robot else self.teleop |
|
|
|
|
| @draccus.wrap() |
| def calibrate(cfg: CalibrateConfig): |
| init_logging() |
| logging.info(pformat(asdict(cfg))) |
|
|
| if isinstance(cfg.device, RobotConfig): |
| device = make_robot_from_config(cfg.device) |
| elif isinstance(cfg.device, TeleoperatorConfig): |
| device = make_teleoperator_from_config(cfg.device) |
|
|
| device.connect(calibrate=False) |
|
|
| try: |
| device.calibrate() |
| finally: |
| device.disconnect() |
|
|
|
|
| def main(): |
| register_third_party_plugins() |
| calibrate() |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|