| | |
| | """Test Nova API connection and configuration.""" |
| |
|
| | import os |
| | import sys |
| | from pathlib import Path |
| |
|
| | |
| | sys.path.insert(0, str(Path(__file__).parent.parent)) |
| |
|
| | |
| | def load_env_file(filepath): |
| | """Simple .env file loader.""" |
| | if not filepath.exists(): |
| | return {} |
| | env_vars = {} |
| | with open(filepath, 'r') as f: |
| | for line in f: |
| | line = line.strip() |
| | if line and not line.startswith('#') and '=' in line: |
| | key, value = line.split('=', 1) |
| | env_vars[key.strip()] = value.strip() |
| | os.environ[key.strip()] = value.strip() |
| | return env_vars |
| |
|
| |
|
| | def main(): |
| | |
| | env_path = Path(__file__).parent.parent / ".env.local" |
| | if not env_path.exists(): |
| | print(f"Error: {env_path} not found") |
| | return 1 |
| |
|
| | print(f"Loading environment from {env_path}") |
| | env_vars = load_env_file(env_path) |
| |
|
| | |
| | try: |
| | from robots.ur5 import nova_api |
| | except ImportError: |
| | print("Error: Could not import nova_api module") |
| | print("Make sure you're in the nova-sim directory") |
| | return 1 |
| |
|
| | |
| | print("\nTesting Nova API configuration...") |
| | try: |
| | config = nova_api.NovaApiConfig.from_env() |
| | print("✓ Configuration created successfully!") |
| | print(f"\n Instance URL: {config.instance_url}") |
| | print(f" Cell ID: {config.cell_id}") |
| | print(f" Controller ID: {config.controller_id}") |
| | print(f" Motion Group ID: {config.motion_group_id}") |
| | print(f" Motion Group Model: {config.motion_group_model}") |
| | print(f" TCP Name: {config.tcp_name}") |
| | print(f" Response Rate: {config.response_rate_ms}ms") |
| | except ValueError as e: |
| | print(f"✗ Configuration error: {e}") |
| | return 1 |
| |
|
| | |
| | print("\nCreating Nova API client...") |
| | try: |
| | client = nova_api.NovaApiClient(config) |
| | print("✓ Client created successfully!") |
| | except Exception as e: |
| | print(f"✗ Client creation error: {e}") |
| | return 1 |
| |
|
| | |
| | print("\nFetching motion group description...") |
| | try: |
| | description = client._ensure_motion_group_description() |
| | if description: |
| | print("✓ Successfully fetched motion group description!") |
| | print(f"\n Motion Group Model: {description.get('motion_group_model', 'N/A')}") |
| | tcps = description.get('tcps', {}) |
| | if tcps: |
| | print(f" Available TCPs: {', '.join(tcps.keys())}") |
| | else: |
| | print("✗ No description returned") |
| | return 1 |
| | except Exception as e: |
| | print(f"✗ Error fetching description: {e}") |
| | return 1 |
| |
|
| | print("\n" + "=" * 60) |
| | print("SUCCESS! Your Nova API configuration is working correctly.") |
| | print("=" * 60) |
| | print("\nYou can now use Nova API integration with the UR5 environment:") |
| | print(""" |
| | from robots.ur5.ur5_env import UR5Env |
| | |
| | # Enable both state streaming and Nova IK |
| | env = UR5Env( |
| | render_mode="human", |
| | nova_api_config={ |
| | "use_state_stream": True, |
| | "use_ik": True |
| | } |
| | ) |
| | """) |
| |
|
| | return 0 |
| |
|
| |
|
| | if __name__ == "__main__": |
| | sys.exit(main()) |
| |
|