k-valentin/unitree-g1-mujoco
021
1#!/usr/bin/env python32import sys3from pathlib import Path4import time5# Add sim module to path6sys.path.insert(0, str(Path(__file__).parent))7 8import yaml9from sim.simulator_factory import SimulatorFactory, init_channel10from sim.model_config import select_end_effector11 12def main(n_envs=1, use_async_envs: bool = False, 13 publish_images=True, camera_port=5555, cameras=None, **kwargs):14 15 # Load config16 config_path = Path(__file__).parent / "config.yaml"17 with open(config_path) as f:18 config = yaml.safe_load(f)19 config = select_end_effector(config, kwargs.get("end_effector"))20 21 # Override config with default values22 enable_offscreen = publish_images or config.get("ENABLE_OFFSCREEN", False)23 24 # Configure cameras if requested25 camera_configs = {}26 if enable_offscreen:27 camera_list = config["CAMERAS"] if cameras is None else cameras28 for cam_name in camera_list:29 camera_configs[cam_name] = {"height": 480, "width": 640}30 print(f"๐ท Cameras: {', '.join(camera_list)} โ ZMQ port {camera_port}")31 32 print("="*60)33 34 # Initialize DDS channel35 init_channel(config=config)36 37 # Create simulator38 sim = SimulatorFactory.create_simulator(39 config=config,40 env_name="default",41 onscreen=kwargs.get("onscreen", config.get("ENABLE_ONSCREEN", True)),42 offscreen=enable_offscreen,43 camera_configs=camera_configs,44 )45 46 # Start simulator47 print("\nSimulator running. Press Ctrl+C to exit.")48 if enable_offscreen and publish_images:49 print(f"Camera images publishing on tcp://localhost:{camera_port}")50 try:51 if publish_images:52 sim.start_image_publish_subprocess(53 start_method="spawn",54 camera_port=camera_port,55 )56 time.sleep(1)57 sim.start()58 except KeyboardInterrupt:59 print("+++++Simulator interrupted by user.")60 except Exception as e:61 print(f"++++error in simulator: {e} ++++")62 finally:63 print("++++closing simulator ++++")64 sim.close()65 66if __name__ == "__main__":67 main()68 