Files
lerobot/additional_functions/check_loco_active.py
T
2025-11-21 14:13:05 +01:00

53 lines
1.8 KiB
Python

#!/usr/bin/env python3
"""
Check if the Unitree locomotion DDS domain / LocoClient is already initialized.
Does NOT send any commands — safe to run.
"""
import sys
import psutil # pip install psutil if missing
import os
sys.path.append('/Users/nepyope/Documents/unitree/unitree_IL_lerobot/unitree_sdk2_python')
from unitree_sdk2py.core.channel import ChannelFactory
def is_loco_domain_active():
"""Detect if a ChannelFactory singleton is already initialized in this process."""
fac = ChannelFactory()
active = getattr(fac, "_ChannelFactory__initialized", False)
participant = getattr(fac, "_ChannelFactory__participant", None)
domain = getattr(fac, "_ChannelFactory__domain", None)
return active, participant, domain
def check_other_python_processes():
"""See if another Python process using the Unitree SDK is alive."""
procs = []
for p in psutil.process_iter(attrs=["pid", "name", "cmdline"]):
try:
if "python" in p.info["name"].lower() and any("unitree" in arg for arg in p.info["cmdline"]):
procs.append((p.info["pid"], " ".join(p.info["cmdline"])))
except Exception:
pass
return procs
if __name__ == "__main__":
active, participant, domain = is_loco_domain_active()
print("=== Local DDS Factory State ===")
print(f"Factory initialized: {active}")
print(f"Participant: {participant}")
print(f"Domain: {domain}")
print()
print("=== Other Python processes using Unitree SDK ===")
procs = check_other_python_processes()
if not procs:
print("No other active Unitree-related Python processes found.")
else:
for pid, cmd in procs:
print(f"PID {pid}: {cmd}")
print()
if os.path.exists("/tmp/CycloneDDS"):
print("Warning: /tmp/CycloneDDS exists — could indicate leftover DDS shared memory.")