From e0f6acd5c712dd59c65af244e160b576384ad852 Mon Sep 17 00:00:00 2001 From: kassam Date: Tue, 21 Apr 2026 16:10:03 +0400 Subject: [PATCH] Update 2026-04-21 16:10:00 --- API/audio_api.py | 278 ++++++------- API/yolo_api.py | 25 +- API/zmq_api.py | 56 ++- Autonomous/marcus_autonomous.py | 5 +- Brain/marcus_brain.py | 170 ++++---- Config/config_Brain.json | 14 +- Config/config_Voice.json | 39 +- Config/marcus_prompts.yaml | 12 +- Core/{Logger.py => log_backend.py} | 0 Core/logger.py | 8 +- Doc/MARCUS_API.md | 200 ++++++++-- Doc/MARCUS_progress.pdf | Bin 156923 -> 0 bytes Doc/Marcus_Project.pdf | Bin 180331 -> 0 bytes Doc/architecture.md | 165 +++++--- Doc/controlling.md | 139 +++++-- Doc/environment.md | 37 +- Doc/note.txt | 15 +- Doc/pipeline.md | 187 +++++++++ Navigation/goal_nav.py | 29 +- Vision/marcus_imgsearch.py | 4 +- Voice/builtin_mic.py | 202 ++++++++++ Voice/builtin_tts.py | 88 +++++ Voice/marcus_gemini_voice.py | 608 ----------------------------- Voice/marcus_voice.py | 167 ++++---- 24 files changed, 1291 insertions(+), 1157 deletions(-) rename Core/{Logger.py => log_backend.py} (100%) delete mode 100644 Doc/MARCUS_progress.pdf delete mode 100644 Doc/Marcus_Project.pdf create mode 100644 Doc/pipeline.md create mode 100644 Voice/builtin_mic.py create mode 100644 Voice/builtin_tts.py delete mode 100644 Voice/marcus_gemini_voice.py diff --git a/API/audio_api.py b/API/audio_api.py index fd8256b..4645f37 100644 --- a/API/audio_api.py +++ b/API/audio_api.py @@ -2,19 +2,24 @@ """ API/audio_api.py — Marcus Audio API Layer ========================================== -Provides speak() and record_audio() for the Brain layer. +Provides speak() and record() for the Brain layer. Brain imports ONLY from this API — never from unitree SDK directly. -Speaker: _CallRequestWithParamAndBin (single call, full buffer) -Mic: parec -d 3 (Hollyland wireless, PulseAudio source index from config) -TTS EN: Unitree built-in TtsMaker -TTS AR: Piper ar_JO-kareem-medium → resample → G1 speaker +Speaker: Unitree built-in TtsMaker (G1 on-board engine, English only, + no MP3/WAV plumbing, no internet). Optional raw-PCM playback path + via _play_pcm() is kept for future modules that synthesize their + own audio (e.g. offline Piper). +Mic: G1 built-in mic (UDP multicast 239.168.123.161:5555, 16 kHz mono). + Legacy Hollyland/parec path retained as fallback when + config_Voice.json has mic.backend="pactl_parec". +TTS: English only. Arabic is rejected (the G1 firmware silently maps + Arabic to Chinese, which confuses everyone — if Arabic TTS is ever + needed again, use a separate offline backend like Piper). Usage: from API.audio_api import AudioAPI audio = AudioAPI() - audio.speak("Hello", "en") - audio.speak("مرحبا", "ar") + audio.speak("Hello, I am Sanad") recording = audio.record(seconds=5) audio.play_pcm(recording) """ @@ -71,7 +76,24 @@ class AudioAPI: self._tts = self._config["tts"] self._mic = self._config["mic"] self._spk = self._config["speaker"] - self._target_rate = self._tts["target_sample_rate"] + self._target_rate = self._tts.get("target_sample_rate", 16000) + + # Default mic backend: G1 built-in UDP multicast. + # Set mic.backend="pactl_parec" in config_Voice.json to fall back + # to the legacy Hollyland/PulseAudio path. + self._mic_backend = self._mic.get("backend", "builtin_udp") + self._builtin_mic = None # lazy-initialized on first record() + + # Built-in TTS wrapper (uses the already-initialized AudioClient). + # Keeps TTS synchronous so `is_speaking` is meaningful to the voice + # loop that needs to skip mic input during playback. + self._tts_engine = None + if self._sdk_available: + from Voice.builtin_tts import BuiltinTTS + self._tts_engine = BuiltinTTS( + self._client, + default_speaker_id=self._tts.get("builtin_speaker_id", 0), + ) # Data dir data_dir = os.path.join(PROJECT_ROOT, self._config["audio"]["data_dir"]) @@ -82,7 +104,10 @@ class AudioAPI: self._speaking = False self._speak_lock = threading.Lock() - log.info(self._config["messages"]["ready"]) + log.info("%s (mic=%s, tts=%s)", + self._config["messages"]["ready"], + self._mic_backend, + "builtin_ttsmaker" if self._tts_engine else "disabled") def _init_sdk(self): """Initialize Unitree AudioClient.""" @@ -105,55 +130,63 @@ class AudioAPI: # ─── SPEAK ──────────────────────────────────────────── - def speak(self, text: str, lang: str = "auto"): + def speak(self, text: str, lang: str = "en"): """ - Speak text in the given language. - Mutes mic during playback to prevent self-listening. - lang="en" → built-in TtsMaker - lang="ar" → Piper → resample → G1 speaker - lang="auto" → detect from text - """ - if lang == "auto": - lang = self._detect_lang(text) + Speak `text` in English through the G1 built-in TTS (TtsMaker). - log.info("[%s] speak: %s", lang.upper(), text[:80]) + Mutes (flushes) the mic during playback so the voice loop doesn't + hear the robot's own voice and transcribe itself. The `lang` + argument is accepted for API compatibility but only "en" plays — + non-ASCII text (Arabic) is rejected by BuiltinTTS. + """ + if lang and lang not in ("en", "auto"): + log.warning("builtin_tts only supports English; got lang=%r — skipping", lang) + return + if self._tts_engine is None: + log.error("No TTS engine initialized — audio SDK unavailable") + return + + log.info("speak: %s", text[:80]) with self._speak_lock: self._speaking = True self._mute_mic() - try: - if lang == "en": - self._speak_english(text) - elif lang == "ar": - self._speak_arabic(text) - else: - log.warning("Unknown lang '%s', falling back to English", lang) - self._speak_english(text) + self._tts_engine.speak(text, block=True) except Exception as e: log.error("%s: %s", self._config["messages"]["error_tts"], e) finally: - # Small delay so speaker fully stops before mic reopens - time.sleep(0.3) + # Small tail so the speaker fully finishes before the mic is + # re-opened for capture + time.sleep(0.2) self._unmute_mic() self._speaking = False def _mute_mic(self): - """Mute the wireless mic to prevent self-listening.""" + """ + Suppress mic input during TTS playback. + For the UDP built-in mic, flush the buffer so we don't capture any + echo that's already been queued. For the legacy PulseAudio path, + actually mute the source. + """ + if self._mic_backend == "builtin_udp": + if self._builtin_mic is not None: + self._builtin_mic.flush() + return source = self._mic["source_index"] - subprocess.run( - ["pactl", "set-source-mute", source, "1"], - capture_output=True, - ) + subprocess.run(["pactl", "set-source-mute", source, "1"], + capture_output=True) log.debug("Mic muted") def _unmute_mic(self): - """Unmute the wireless mic.""" + """Re-enable mic after TTS playback (pactl path only).""" + if self._mic_backend == "builtin_udp": + if self._builtin_mic is not None: + self._builtin_mic.flush() + return source = self._mic["source_index"] - subprocess.run( - ["pactl", "set-source-mute", source, "0"], - capture_output=True, - ) + subprocess.run(["pactl", "set-source-mute", source, "0"], + capture_output=True) log.debug("Mic unmuted") @property @@ -161,88 +194,8 @@ class AudioAPI: """True while TTS is playing — voice module checks this.""" return self._speaking - def _speak_english(self, text: str): - """English TTS via edge-tts.""" - self._speak_edge_tts(text, "en") - - def _speak_arabic(self, text: str): - """Arabic TTS via edge-tts.""" - self._speak_edge_tts(text, "ar") - - def speak_piper_en(self, text: str): - """Alternative: English via Piper instead of built-in.""" - voice = self._tts["piper_voice_en"] - audio, rate = self._piper_synthesize(text, voice) - audio_16k = self._resample(audio, rate) - self._play_pcm(audio_16k) - - # ─── PIPER TTS ──────────────────────────────────────── - - def _piper_synthesize(self, text: str, voice: str) -> tuple: - """Run Piper CLI, return (audio_int16, sample_rate).""" - cmd = ["piper", "--model", voice, "--output_raw"] - timeout = self._tts["piper_timeout_sec"] - - proc = subprocess.run( - cmd, - input=text.encode("utf-8"), - capture_output=True, - timeout=timeout, - ) - - if proc.returncode != 0: - stderr = proc.stderr.decode()[:300] - raise RuntimeError(f"Piper failed: {stderr}") - - audio = np.frombuffer(proc.stdout, dtype=np.int16) - piper_rate = self._tts["piper_sample_rate"] - log.info("Piper: %d samples @ %dHz (%.1fs)", len(audio), piper_rate, len(audio) / piper_rate) - return audio, piper_rate - - # ─── RESAMPLE ───────────────────────────────────────── - - - def _speak_edge_tts(self, text: str, lang: str): - """Generate speech via edge-tts and play on G1.""" - import os as _os - voice = "ar-AE-HamdanNeural" if lang == "ar" else "en-US-GuyNeural" - ts = int(time.time() * 1000) - mp3_path = f"/tmp/edge_{lang}_{ts}.mp3" - wav_path = f"/tmp/edge_{lang}_{ts}.wav" - - safe_text = text.replace('"', '\\"') - code = f'import edge_tts, asyncio; asyncio.run(edge_tts.Communicate(\"{safe_text}\", voice=\"{voice}\").save(\"{mp3_path}\"))' - result = subprocess.run(["python3", "-c", code], capture_output=True, text=True, timeout=30) - - if result.returncode != 0: - log.error("edge-tts failed: %s", result.stderr[:200]) - if lang == "en" and self._sdk_available: - self._client.TtsMaker(text, self._tts.get("builtin_speaker_id", 1)) - time.sleep(max(2.0, len(text) * 0.06)) - return - - try: - from pydub import AudioSegment - a = AudioSegment.from_mp3(mp3_path) - a = a.set_frame_rate(16000).set_channels(1).set_sample_width(2) - a.export(wav_path, format="wav") - - import wave - with wave.open(wav_path, "rb") as wf: - audio = np.frombuffer(wf.readframes(wf.getnframes()), dtype=np.int16) - - _os.unlink(mp3_path) - _os.unlink(wav_path) - self._play_pcm(audio) - except Exception as e: - log.error("edge-tts conversion error: %s", e) - try: _os.unlink(mp3_path) - except: pass - try: _os.unlink(wav_path) - except: pass - def _resample(self, audio: np.ndarray, src_rate: int) -> np.ndarray: - """Resample to target rate (16kHz).""" + """Linear resample int16 PCM to self._target_rate (16 kHz).""" if src_rate == self._target_rate: return audio tl = int(len(audio) * self._target_rate / src_rate) @@ -252,7 +205,7 @@ class AudioAPI: audio.astype(np.float64), ).astype(np.int16) - # ─── G1 SPEAKER PLAYBACK ───────────────────────────── + # ─── G1 SPEAKER PLAYBACK (raw PCM, kept for future backends) ───────── def _play_pcm(self, audio_16k: np.ndarray) -> float: """Play 16kHz mono int16 on G1 speaker. Returns duration.""" @@ -308,24 +261,50 @@ class AudioAPI: # ─── MIC RECORDING ─────────────────────────────────── def record(self, seconds: float = 5.0) -> np.ndarray: - """Record from Hollyland wireless mic via parec. Returns int16 array.""" + """ + Capture `seconds` of int16 mono 16 kHz PCM. + + Default backend is the G1 built-in mic (UDP multicast). Set + mic.backend="pactl_parec" in config_Voice.json to use the + legacy Hollyland/parec path instead. + """ + if self._mic_backend == "builtin_udp": + return self._record_builtin(seconds) + return self._record_parec(seconds) + + def _record_builtin(self, seconds: float) -> np.ndarray: + """Built-in mic path — join UDP multicast, read the requested duration.""" + if self._builtin_mic is None: + from Voice.builtin_mic import BuiltinMic + mcfg = self._config.get("mic_udp", {}) + self._builtin_mic = BuiltinMic( + group=mcfg.get("group", "239.168.123.161"), + port=mcfg.get("port", 5555), + buf_max=mcfg.get("buffer_max_bytes", 64000), + ) + self._builtin_mic.start() + time.sleep(0.2) # let the receiver thread fill in + + log.info("Recording %.1fs from G1 built-in mic", seconds) + raw = self._builtin_mic.read_seconds(seconds) + audio = np.frombuffer(raw, dtype=np.int16) + log.info("Recorded: %d samples, std=%.0f", len(audio), audio.std()) + if audio.std() < 50: + log.warning(self._config["messages"]["error_mic"] + + " — G1 mic silent (check audio service on robot)") + return audio + + def _record_parec(self, seconds: float) -> np.ndarray: + """Legacy Hollyland/PulseAudio path — only used if mic.backend='pactl_parec'.""" source = self._mic["source_index"] rate = str(self._mic["rate"]) channels = str(self._mic["channels"]) fmt = self._mic["format"] - # Unmute mic - subprocess.run( - ["pactl", "set-source-mute", source, "0"], - capture_output=True, - ) - subprocess.run( - ["pactl", "set-source-volume", source, "100%"], - capture_output=True, - ) - - log.info("Recording %.1fs from mic source %s", seconds, source) + subprocess.run(["pactl", "set-source-mute", source, "0"], capture_output=True) + subprocess.run(["pactl", "set-source-volume", source, "100%"], capture_output=True) + log.info("Recording %.1fs from mic source %s (parec)", seconds, source) proc = subprocess.Popen( ["parec", "-d", source, f"--format={fmt}", f"--rate={rate}", f"--channels={channels}", "--raw"], @@ -337,10 +316,8 @@ class AudioAPI: audio = np.frombuffer(raw, dtype=np.int16) log.info("Recorded: %d samples, std=%.0f", len(audio), audio.std()) - if audio.std() < 50: log.warning(self._config["messages"]["error_mic"] + " — mic may be silent") - return audio def save_recording(self, audio: np.ndarray, name: str) -> str: @@ -355,16 +332,6 @@ class AudioAPI: log.info("Saved: %s", path) return path - # ─── LANGUAGE DETECTION ─────────────────────────────── - - @staticmethod - def _detect_lang(text: str) -> str: - """Detect language from text — Arabic Unicode range check.""" - for c in text: - if '\u0600' <= c <= '\u06FF': - return "ar" - return "en" - # ─── STATUS ─────────────────────────────────────────── @property @@ -378,27 +345,16 @@ if __name__ == "__main__": import argparse parser = argparse.ArgumentParser(description="Marcus Audio API Test") - parser.add_argument("--test", action="store_true", help="Run speak tests") - parser.add_argument("--speak", type=str, help="Speak this text") - parser.add_argument("--lang", default="auto", help="Language: en, ar, auto") + parser.add_argument("--test", action="store_true", help="Run TTS + record test") + parser.add_argument("--speak", type=str, help="Speak this English text") parser.add_argument("--record", type=float, default=0, help="Record N seconds") args = parser.parse_args() api = AudioAPI() if args.test: - print("\n--- English built-in ---") - api.speak("Hello, I am Marcus.", "en") - time.sleep(1) - - print("\n--- Arabic Piper ---") - api.speak("مرحبا، أنا ماركوس", "ar") - time.sleep(1) - - print("\n--- Auto-detect ---") - api.speak("How are you?") - time.sleep(1) - api.speak("كيف حالك؟") + print("\n--- English (TtsMaker) ---") + api.speak("Hello, I am Sanad.") time.sleep(1) print("\n--- Record 3s + playback ---") @@ -408,7 +364,7 @@ if __name__ == "__main__": print("\nDone.") elif args.speak: - api.speak(args.speak, args.lang) + api.speak(args.speak) elif args.record > 0: rec = api.record(args.record) diff --git a/API/yolo_api.py b/API/yolo_api.py index 1495c4c..e6e1d64 100644 --- a/API/yolo_api.py +++ b/API/yolo_api.py @@ -49,9 +49,28 @@ def init_yolo(raw_frame_ref, frame_lock) -> bool: print(f"marcus_yolo.py not found ({e})") return False - # GPU is required — let RuntimeError from _resolve_device propagate so - # Marcus hard-fails at startup instead of silently running without vision. - ok = start_yolo(raw_frame_ref=raw_frame_ref, frame_lock=frame_lock) + # GPU is required. _resolve_device() raises RuntimeError when CUDA is + # missing — surface that with an actionable banner before re-raising so + # Marcus hard-fails with a clear error instead of a raw stack trace. + try: + ok = start_yolo(raw_frame_ref=raw_frame_ref, frame_lock=frame_lock) + except RuntimeError as e: + print() + print("╔" + "═" * 68 + "╗") + print("║ MARCUS STARTUP ABORTED — GPU REQUIRED".ljust(69) + "║") + print("╠" + "═" * 68 + "╣") + print(f"║ {str(e)[:66]:<66} ║") + print("║" + " " * 68 + "║") + print("║ On the Jetson, verify:".ljust(69) + "║") + print("║ tegrastats # GPU exists & is not throttled".ljust(69) + "║") + print("║ python3 -c 'import torch; print(torch.cuda.is_available())'".ljust(69) + "║") + print("║ nvcc --version # CUDA toolkit reachable".ljust(69) + "║") + print("║ Expected: torch 2.1.0 nv23.06, CUDA 11.4, GPU=Orin.".ljust(69) + "║") + print("║ See Doc/environment.md section 9 for the reinstall recipe.".ljust(69) + "║") + print("╚" + "═" * 68 + "╝") + print() + raise + if ok: YOLO_AVAILABLE = True yolo_sees = _ys diff --git a/API/zmq_api.py b/API/zmq_api.py index de7a0c0..adeb91b 100644 --- a/API/zmq_api.py +++ b/API/zmq_api.py @@ -1,7 +1,16 @@ """ zmq_api.py — ZMQ velocity + command interface to Holosoma + +Previously the PUB socket was bound at module import time. That made the +module unsafe to re-import from any multiprocessing child (e.g. the LiDAR +SLAM_worker spawn), because the child would try to rebind the same port +and crash with `Address already in use`. + +The bind now lives in init_zmq() — call it once from the brain entrypoint. +Child processes can import this module without any network side effects. """ import json +import os import time import zmq from Core.config_loader import load_config @@ -15,35 +24,62 @@ STOP_ITERATIONS = _cfg["stop_iterations"] STOP_DELAY = _cfg["stop_delay"] STEP_PAUSE = _cfg["step_pause"] -ctx = zmq.Context() -sock = ctx.socket(zmq.PUB) -sock.bind(f"tcp://{ZMQ_HOST}:{ZMQ_PORT}") -time.sleep(0.5) -log(f"ZMQ PUB bound on tcp://{ZMQ_HOST}:{ZMQ_PORT}", "info", "zmq") +# Shared state. These stay None until init_zmq() is called. +ctx: zmq.Context = None +sock: zmq.Socket = None +_INIT_SETTLE = 0.5 # seconds to let PUB tell subscribers it's alive + + +def init_zmq() -> zmq.Socket: + """ + Bind the PUB socket. Idempotent — safe to call more than once. + Call from the main (parent) process only. Do NOT call from multiprocessing + children — they inherit nothing useful from the bound socket anyway. + """ + global ctx, sock + if sock is not None: + return sock + ctx = zmq.Context() + sock = ctx.socket(zmq.PUB) + sock.bind(f"tcp://{ZMQ_HOST}:{ZMQ_PORT}") + time.sleep(_INIT_SETTLE) + log(f"ZMQ PUB bound on tcp://{ZMQ_HOST}:{ZMQ_PORT} (pid={os.getpid()})", + "info", "zmq") + return sock + + +def _ensure_sock() -> zmq.Socket: + if sock is None: + raise RuntimeError( + "zmq_api not initialized — call init_zmq() from the brain " + "entrypoint before using send_vel/send_cmd/gradual_stop" + ) + return sock def get_socket(): """Return the shared ZMQ PUB socket (for odometry to reuse).""" - return sock + return _ensure_sock() def send_vel(vx: float = 0.0, vy: float = 0.0, vyaw: float = 0.0): """Send velocity to Holosoma. vx m/s | vy m/s | vyaw rad/s""" - sock.send_string(json.dumps({"vel": {"vx": vx, "vy": vy, "vyaw": vyaw}})) + _ensure_sock().send_string(json.dumps({"vel": {"vx": vx, "vy": vy, "vyaw": vyaw}})) def gradual_stop(): """Smooth deceleration to zero over ~1 second.""" + s = _ensure_sock() for _ in range(STOP_ITERATIONS): - send_vel(0.0, 0.0, 0.0) + s.send_string(json.dumps({"vel": {"vx": 0.0, "vy": 0.0, "vyaw": 0.0}})) time.sleep(STOP_DELAY) def send_cmd(cmd: str): """Send Holosoma state command: start | walk | stand | stop""" - sock.send_string(json.dumps({"cmd": cmd})) + _ensure_sock().send_string(json.dumps({"cmd": cmd})) -# Load MOVE_MAP from navigation config +# Load MOVE_MAP from navigation config (pure data, safe at import time) _nav = load_config("Navigation") MOVE_MAP = {k: tuple(v) for k, v in _nav["move_map"].items()} diff --git a/Autonomous/marcus_autonomous.py b/Autonomous/marcus_autonomous.py index f4c2849..1cc321f 100644 --- a/Autonomous/marcus_autonomous.py +++ b/Autonomous/marcus_autonomous.py @@ -292,7 +292,10 @@ class AutonomousMode: self._enabled = False break - time.sleep(YOLO_CHECK_INTERVAL) + # No trailing sleep — _move_forward() takes FORWARD_DURATION, + # _turn() takes TURN_DURATION, and LLaVA assessment is ~1-2s. + # The body always consumes real wall time, so an extra sleep here + # would be pure dead time. # Clean up self._gradual_stop() diff --git a/Brain/marcus_brain.py b/Brain/marcus_brain.py index 27fd78e..86c6920 100644 --- a/Brain/marcus_brain.py +++ b/Brain/marcus_brain.py @@ -17,7 +17,7 @@ PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) if PROJECT_DIR not in sys.path: sys.path.insert(0, PROJECT_DIR) -from API.zmq_api import send_vel, gradual_stop, send_cmd +from API.zmq_api import init_zmq, send_vel, gradual_stop, send_cmd from API.camera_api import start_camera, stop_camera, get_frame from API.yolo_api import ( init_yolo, yolo_summary, yolo_fps, @@ -70,7 +70,19 @@ _NAT_GOAL_RE = re.compile( # ══════════════════════════════════════════════════════════════════════════════ def init_brain(): - """Initialize all subsystems. Call once at startup.""" + """Initialize all subsystems. Call once at startup from the parent process. + + Optional subsystems (lidar / voice / imgsearch / autonomous) are gated on + `config_Brain.json::subsystems.`. Disabling the ones you don't need + brings Marcus's boot time down from ~18 s to ~5-7 s. + """ + subsys = _cfg.get("subsystems", {}) or {} + + # Bind the ZMQ PUB socket before anything tries to publish on it. + # This is now explicit (previously it happened as an import side effect, + # which crashed every multiprocessing child that re-imported zmq_api). + init_zmq() + raw_frame, raw_lock = start_camera() init_yolo(raw_frame, raw_lock) @@ -79,53 +91,65 @@ def init_brain(): init_memory() - # LiDAR (optional — continues without it) - try: - from API.lidar_api import init_lidar - init_lidar() - except Exception as e: - print(f" [LiDAR] Init failed: {e} — continuing without LiDAR") + # LiDAR — optional + if subsys.get("lidar", True): + try: + from API.lidar_api import init_lidar + init_lidar() + except Exception as e: + print(f" [LiDAR] Init failed: {e} — continuing without LiDAR") + else: + print(" [LiDAR] disabled by config") - init_imgsearch( - get_frame_fn=get_frame, - send_vel_fn=send_vel, - gradual_stop_fn=gradual_stop, - llava_fn=call_llava, - yolo_sees_fn=yolo_sees, - model=OLLAMA_MODEL, - ) + # Image search — optional + if subsys.get("imgsearch", False): + init_imgsearch( + get_frame_fn=get_frame, + send_vel_fn=send_vel, + gradual_stop_fn=gradual_stop, + llava_fn=call_llava, + yolo_sees_fn=yolo_sees, + model=OLLAMA_MODEL, + ) + else: + print(" [ImgSearch] disabled by config") - # Autonomous exploration mode - from API.memory_api import mem as _mem_ref - from API.llava_api import PATROL_PROMPT - auto = AutonomousMode( - get_frame_fn=get_frame, - send_vel_fn=send_vel, - gradual_stop_fn=gradual_stop, - yolo_sees_fn=yolo_sees, - yolo_summary_fn=yolo_summary, - yolo_all_classes_fn=yolo_all_classes, - yolo_closest_fn=yolo_closest, - odom_fn=lambda: {"x": 0, "y": 0, "heading": 0}, # fallback if no odom - call_llava_fn=call_llava, - patrol_prompt=PATROL_PROMPT, - mem=_mem_ref, - ) - # Wire odometry if available - from API.odometry_api import odom as _odom_ref, ODOM_AVAILABLE - if _odom_ref and ODOM_AVAILABLE: - auto._odom_pos = lambda: { - "x": _odom_ref._x, "y": _odom_ref._y, "heading": _odom_ref._heading - } - init_autonomous(auto) + # Autonomous exploration mode — optional + if subsys.get("autonomous", True): + from API.memory_api import mem as _mem_ref + from API.llava_api import PATROL_PROMPT + auto = AutonomousMode( + get_frame_fn=get_frame, + send_vel_fn=send_vel, + gradual_stop_fn=gradual_stop, + yolo_sees_fn=yolo_sees, + yolo_summary_fn=yolo_summary, + yolo_all_classes_fn=yolo_all_classes, + yolo_closest_fn=yolo_closest, + odom_fn=lambda: {"x": 0, "y": 0, "heading": 0}, + call_llava_fn=call_llava, + patrol_prompt=PATROL_PROMPT, + mem=_mem_ref, + ) + from API.odometry_api import odom as _odom_ref, ODOM_AVAILABLE + if _odom_ref and ODOM_AVAILABLE: + auto._odom_pos = lambda: { + "x": _odom_ref._x, "y": _odom_ref._y, "heading": _odom_ref._heading + } + init_autonomous(auto) + else: + print(" [Autonomous] disabled by config") send_cmd("start") time.sleep(0.5) send_cmd("walk") time.sleep(0.5) - # Voice module (optional — continues without it) - _init_voice() + # Voice module — optional + if subsys.get("voice", True): + _init_voice() + else: + print(" [Voice] disabled by config") _log("Brain initialized", "info", "brain") _warmup_llava() @@ -137,44 +161,37 @@ _voice_module = None def _init_voice(): - """Initialize voice module — runs in background, calls process_command on speech.""" + """ + Initialize the voice subsystem: G1 built-in mic + Whisper STT + G1 + built-in TtsMaker for replies. Every transcribed command flows through + process_command(), and the resulting `speak` string is sent to the G1 + speaker. + """ global _audio_api, _voice_module try: from API.audio_api import AudioAPI - from Voice.marcus_gemini_voice import GeminiVoiceModule as VoiceModule + from Voice.marcus_voice import VoiceModule _audio_api = AudioAPI() - def _voice_callback(text, role): - """Gemini voice callback.""" - pass # handled below - if role != "user" or not text.strip(): + def _on_command(text, lang): + text = (text or "").strip() + if not text: return - t = text.strip().lower() - act_kw = ["turn","move","go","walk","step","stop","come","wave","clap", - "high five","shake","hug","forward","backward","left","right", - "what do you see","what can you see","look","describe","patrol", - "دور","امشي","روح","تقدم","ارجع","وقف","قف","تعال", - "يمين","يسار","قدام","ورا","لوح","صفق","سلم", - "شو شايف","شو تشوف","ماذا ترى","شو قدامك","لف","خطوات"] - if any(kw in t for kw in act_kw): - print(f" [Brain] Action: {text.strip()}") - try: - result = process_command(text.strip()) - if isinstance(result, dict): - sp = result.get("speak", "") - vis_kw = ["see","look","describe","شايف","تشوف","ترى","قدامك"] - if any(k in t for k in vis_kw) and sp and _audio_api: - print(f" [Brain] Vision: {sp}") - _audio_api.speak(sp) - except Exception as e: - print(f" [Brain] Error: {e}") - else: - print(f" [Chat] {text.strip()}") + print(f" [Voice] {text}") + try: + result = process_command(text) + except Exception as e: + print(f" [Brain] Error processing voice command: {e}") + return + if isinstance(result, dict): + sp = (result.get("speak") or "").strip() + if sp and _audio_api: + _audio_api.speak(sp) - _voice_module = VoiceModule(_audio_api, on_transcript=_voice_callback) + _voice_module = VoiceModule(_audio_api, on_command=_on_command) _voice_module.start() - print(f" [Voice] Always listening (Gemini voice)") + print(" [Voice] Always listening (Whisper + G1 mic + TtsMaker)") except Exception as e: print(f" [Voice] Init failed: {e} — continuing without voice") _audio_api = None @@ -255,7 +272,7 @@ def process_command(cmd: str) -> dict: # ── Greeting ───────────────────────────────────────────────────────── if re.match(r"^(?:hi+|hey+|hello+|hola|salam|marhaba|sup|yo+|ahlan|السلام عليكم|مرحبا|أهلا|هلا|يا هلا)\s*[!.]*$", cmd, re.IGNORECASE): - response = "Hello! I am Marcus. How can I help you?" + response = "Hello! I am Sanad. How can I help you?" print(f"Marcus: {response}") add_to_history(cmd, response) log_cmd(cmd, response) @@ -346,10 +363,15 @@ def _handle_llava(cmd): t0 = time.time() img = get_frame() + # Poll up to 500 ms in 50 ms slices instead of blocking a full second. + # Returns the moment a frame is available — most drops recover in <100 ms. if img is None: print(" Waiting for camera...") - time.sleep(1.0) - img = get_frame() + for _ in range(10): + time.sleep(0.05) + img = get_frame() + if img is not None: + break if img is None: print(" Camera not ready — command cancelled") @@ -461,7 +483,7 @@ def run_terminal(): status = get_brain_status() print() print("=" * 48) - print(" MARCUS AI BRAIN — READY") + print(" SANAD AI BRAIN — READY") print("=" * 48) for k, v in status.items(): print(f" {k:<10}: {v}") diff --git a/Config/config_Brain.json b/Config/config_Brain.json index a7f208b..62b2cb5 100644 --- a/Config/config_Brain.json +++ b/Config/config_Brain.json @@ -3,13 +3,19 @@ "max_history": 6, "num_batch": 128, "num_ctx": 2048, - "num_predict_main": 200, + "subsystems": { + "lidar": true, + "voice": true, + "imgsearch": false, + "autonomous": true + }, + "num_predict_main": 120, "num_predict_goal": 80, "num_predict_patrol": 100, "num_predict_talk": 80, "num_predict_verify": 10, "warmup_num_predict": 5, - "main_prompt": "You are Marcus, a humanoid robot. Look at the image and follow the command.\n{facts}\n\nCommand: \"{command}\"\n\nReply with ONLY this JSON — no markdown, no explanation:\n{{\"actions\":[{{\"move\":\"forward|backward|left|right|stop\",\"duration\":2.0}}],\"arm\":null,\"speak\":\"one sentence\",\"abort\":null}}\n\nRULES:\n- actions is a list of movement steps, max duration 5.0s each\n- move: \"forward\" \"backward\" \"left\" \"right\" \"stop\"\n- arm: \"wave\" \"raise_right\" \"raise_left\" \"clap\" \"high_five\" \"hug\" \"heart\" \"shake_hand\" \"face_wave\" or null\n- arm is NEVER a move value\n- questions/descriptions: actions=[]\n- obstacle < 0.5m: abort = \"obstacle detected\"\n- \"90 degrees\" = 5.0s | \"45 degrees\" = 2.5s | \"1 step\" = 1.0s\n\nEXAMPLES:\n\"turn right\" -> {{\"actions\":[{{\"move\":\"right\",\"duration\":2.0}}],\"arm\":null,\"speak\":\"Turning right\",\"abort\":null}}\n\"turn right 90 degrees\" -> {{\"actions\":[{{\"move\":\"right\",\"duration\":5.0}}],\"arm\":null,\"speak\":\"Turning 90 degrees\",\"abort\":null}}\n\"move back then left\" -> {{\"actions\":[{{\"move\":\"backward\",\"duration\":2.0}},{{\"move\":\"left\",\"duration\":2.0}}],\"arm\":null,\"speak\":\"Moving back then left\",\"abort\":null}}\n\"wave\" -> {{\"actions\":[],\"arm\":\"wave\",\"speak\":\"Waving\",\"abort\":null}}\n\"raise your right arm\" -> {{\"actions\":[],\"arm\":\"raise_right\",\"speak\":\"Raising right arm\",\"abort\":null}}\n\"walk forward and wave\" -> {{\"actions\":[{{\"move\":\"forward\",\"duration\":2.0}}],\"arm\":\"wave\",\"speak\":\"Walking and waving\",\"abort\":null}}\n\"what do you see\" -> {{\"actions\":[],\"arm\":null,\"speak\":\"I see...\",\"abort\":null}}\n\"stop\" -> {{\"actions\":[{{\"move\":\"stop\",\"duration\":0}}],\"arm\":null,\"speak\":\"Stopping\",\"abort\":null}}\n\"come to me\" -> {{\"actions\":[{{\"move\":\"forward\",\"duration\":2.0}}],\"arm\":null,\"speak\":\"Coming to you\",\"abort\":null}}\n\"come back\" -> {{\"actions\":[{{\"move\":\"forward\",\"duration\":2.0}}],\"arm\":null,\"speak\":\"Coming back\",\"abort\":null}}\n\"come here\" -> {{\"actions\":[{{\"move\":\"forward\",\"duration\":2.0}}],\"arm\":null,\"speak\":\"Coming\",\"abort\":null}}\n\"get closer\" -> {{\"actions\":[{{\"move\":\"forward\",\"duration\":1.0}}],\"arm\":null,\"speak\":\"Moving closer\",\"abort\":null}}\n\"go away\" -> {{\"actions\":[{{\"move\":\"backward\",\"duration\":2.0}}],\"arm\":null,\"speak\":\"Moving away\",\"abort\":null}}\n\nCommand: \"{command}\"\nJSON:", - "goal_prompt": "You are Marcus navigating toward a goal.\n\nGOAL: \"{goal}\"\n\nLook at the image. Have you reached the goal?\n\nReply ONLY this JSON:\n{{\"reached\":false,\"next_move\":\"left\",\"duration\":0.5,\"speak\":\"what you see\"}}\n\nRULES:\n- reached: true ONLY if you clearly see the goal target right now\n- next_move: \"forward\" \"left\" \"right\"\n- duration: 0.3 to 0.8 seconds\n- Default next_move: \"left\" to keep scanning\n\nGOAL: \"{goal}\"\nJSON:", - "patrol_prompt": "You are Marcus, an HSE inspection robot on autonomous patrol.\n\nLook at the camera and assess the scene.\n\nReply ONLY this JSON:\n{{\"observation\":\"one sentence\",\"alert\":null,\"next_move\":\"forward\",\"duration\":1.0}}\n\nRULES:\n- alert = null if safe\n- alert = \"PPE: no helmet\" if person without helmet\n- alert = \"PPE: no vest\" if person without safety vest\n- alert = \"Hazard: description\" for other hazards\n- next_move: \"forward\" \"left\" \"right\"\n- duration: 0.5 to 2.0s\n\nJSON:" + "main_prompt": "You are Sanad, a humanoid robot. Look at the image and follow the command.\n{facts}\n\nCommand: \"{command}\"\n\nReply with ONLY this JSON — no markdown, no explanation:\n{{\"actions\":[{{\"move\":\"forward|backward|left|right|stop\",\"duration\":2.0}}],\"arm\":null,\"speak\":\"one sentence\",\"abort\":null}}\n\nRULES:\n- actions is a list of movement steps, max duration 5.0s each\n- move: \"forward\" \"backward\" \"left\" \"right\" \"stop\"\n- arm: \"wave\" \"raise_right\" \"raise_left\" \"clap\" \"high_five\" \"hug\" \"heart\" \"shake_hand\" \"face_wave\" or null\n- arm is NEVER a move value\n- questions/descriptions: actions=[]\n- obstacle < 0.5m: abort = \"obstacle detected\"\n- \"90 degrees\" = 5.0s | \"45 degrees\" = 2.5s | \"1 step\" = 1.0s\n\nEXAMPLES:\n\"turn right\" -> {{\"actions\":[{{\"move\":\"right\",\"duration\":2.0}}],\"arm\":null,\"speak\":\"Turning right\",\"abort\":null}}\n\"turn right 90 degrees\" -> {{\"actions\":[{{\"move\":\"right\",\"duration\":5.0}}],\"arm\":null,\"speak\":\"Turning 90 degrees\",\"abort\":null}}\n\"move back then left\" -> {{\"actions\":[{{\"move\":\"backward\",\"duration\":2.0}},{{\"move\":\"left\",\"duration\":2.0}}],\"arm\":null,\"speak\":\"Moving back then left\",\"abort\":null}}\n\"wave\" -> {{\"actions\":[],\"arm\":\"wave\",\"speak\":\"Waving\",\"abort\":null}}\n\"raise your right arm\" -> {{\"actions\":[],\"arm\":\"raise_right\",\"speak\":\"Raising right arm\",\"abort\":null}}\n\"walk forward and wave\" -> {{\"actions\":[{{\"move\":\"forward\",\"duration\":2.0}}],\"arm\":\"wave\",\"speak\":\"Walking and waving\",\"abort\":null}}\n\"what do you see\" -> {{\"actions\":[],\"arm\":null,\"speak\":\"I see...\",\"abort\":null}}\n\"stop\" -> {{\"actions\":[{{\"move\":\"stop\",\"duration\":0}}],\"arm\":null,\"speak\":\"Stopping\",\"abort\":null}}\n\"come to me\" -> {{\"actions\":[{{\"move\":\"forward\",\"duration\":2.0}}],\"arm\":null,\"speak\":\"Coming to you\",\"abort\":null}}\n\"come back\" -> {{\"actions\":[{{\"move\":\"forward\",\"duration\":2.0}}],\"arm\":null,\"speak\":\"Coming back\",\"abort\":null}}\n\"come here\" -> {{\"actions\":[{{\"move\":\"forward\",\"duration\":2.0}}],\"arm\":null,\"speak\":\"Coming\",\"abort\":null}}\n\"get closer\" -> {{\"actions\":[{{\"move\":\"forward\",\"duration\":1.0}}],\"arm\":null,\"speak\":\"Moving closer\",\"abort\":null}}\n\"go away\" -> {{\"actions\":[{{\"move\":\"backward\",\"duration\":2.0}}],\"arm\":null,\"speak\":\"Moving away\",\"abort\":null}}\n\nCommand: \"{command}\"\nJSON:", + "goal_prompt": "You are Sanad navigating toward a goal.\n\nGOAL: \"{goal}\"\n\nLook at the image. Have you reached the goal?\n\nReply ONLY this JSON:\n{{\"reached\":false,\"next_move\":\"left\",\"duration\":0.5,\"speak\":\"what you see\"}}\n\nRULES:\n- reached: true ONLY if you clearly see the goal target right now\n- next_move: \"forward\" \"left\" \"right\"\n- duration: 0.3 to 0.8 seconds\n- Default next_move: \"left\" to keep scanning\n\nGOAL: \"{goal}\"\nJSON:", + "patrol_prompt": "You are Sanad, an HSE inspection robot on autonomous patrol.\n\nLook at the camera and assess the scene.\n\nReply ONLY this JSON:\n{{\"observation\":\"one sentence\",\"alert\":null,\"next_move\":\"forward\",\"duration\":1.0}}\n\nRULES:\n- alert = null if safe\n- alert = \"PPE: no helmet\" if person without helmet\n- alert = \"PPE: no vest\" if person without safety vest\n- alert = \"Hazard: description\" for other hazards\n- next_move: \"forward\" \"left\" \"right\"\n- duration: 0.5 to 2.0s\n\nJSON:" } diff --git a/Config/config_Voice.json b/Config/config_Voice.json index 07c6d79..b5d9a3a 100644 --- a/Config/config_Voice.json +++ b/Config/config_Voice.json @@ -1,55 +1,46 @@ { "tts": { - "piper_voice_ar": "ar_JO-kareem-medium", - "piper_voice_en": "en_US-lessac-medium", - "piper_sample_rate": 22050, + "backend": "builtin_ttsmaker", "builtin_speaker_id": 0, - "target_sample_rate": 16000, - "piper_timeout_sec": 120, - "en_backend": "edge_tts", - "ar_backend": "edge_tts", - "edge_voice_ar": "ar-AE-HamdanNeural", - "edge_voice_en": "en-US-GuyNeural" + "target_sample_rate": 16000 }, "stt": { "wake_model": "tiny", "command_model": "small", - "wake_words_en": [ - "marcus", - "marcos", - "markus" - ], - "wake_words_ar": [ - "ماركوس", - "مارکوس", - "ماركس" - ], - "language": null, + "wake_words_en": ["sanad", "sannad", "sanat", "sunnat"], + "language": "en", "command_timeout_sec": 10, "silence_threshold": 500, "silence_duration_sec": 1.5, "max_record_sec": 15 }, "mic": { + "backend": "builtin_udp", "source_index": "3", "format": "s16le", "rate": 16000, "channels": 1 }, + "mic_udp": { + "group": "239.168.123.161", + "port": 5555, + "buffer_max_bytes": 64000, + "read_timeout_sec": 0.04 + }, "speaker": { "dds_interface": "eth0", "volume": 100, - "app_name": "marcus" + "app_name": "sanad" }, "audio": { "data_dir": "Data/Voice/Recordings", "log_file": "logs/voice.log" }, "messages": { - "wake_heard": "Listening...", - "no_speech": "I didn't catch that. Say my name again.", + "wake_heard": "Listening", + "no_speech": "I didn't catch that, please say it again", "error_tts": "Speech synthesis failed", "error_mic": "Microphone error", "ready": "Voice system ready" } -} \ No newline at end of file +} diff --git a/Config/marcus_prompts.yaml b/Config/marcus_prompts.yaml index 1ea43c0..1460de2 100644 --- a/Config/marcus_prompts.yaml +++ b/Config/marcus_prompts.yaml @@ -26,7 +26,7 @@ # ══════════════════════════════════════════════════════════════════════════════ main_prompt: | - You are Marcus — an advanced humanoid robot assistant built by YS Lootah Technology, Dubai. + You are Sanad — an advanced humanoid robot assistant built by YS Lootah Technology, Dubai. You are physically present in the room. You have a body, arms, and a camera. You follow commands from your operator and respond intelligently. {facts} @@ -184,7 +184,7 @@ main_prompt: | → {{"actions":[],"arm":null,"speak":"Nice to meet you Kassam, I will remember that","abort":null}} "who are you" - → {{"actions":[],"arm":null,"speak":"I am Marcus, a humanoid robot assistant by YS Lootah Technology","abort":null}} + → {{"actions":[],"arm":null,"speak":"I am Sanad, a humanoid robot assistant by YS Lootah Technology","abort":null}} Safety: "walk into the wall" @@ -307,7 +307,7 @@ main_prompt: | # ══════════════════════════════════════════════════════════════════════════════ goal_prompt: | - You are Marcus, a humanoid robot actively navigating toward a specific target. + You are Sanad, a humanoid robot actively navigating toward a specific target. YOUR MISSION: "{goal}" @@ -392,7 +392,7 @@ goal_prompt: | # ══════════════════════════════════════════════════════════════════════════════ patrol_prompt: | - You are Marcus, a humanoid robot autonomously exploring and mapping an office environment. + You are Sanad, a humanoid robot autonomously exploring and mapping an office environment. Your mission: move through the space intelligently, identify areas and objects, and build a spatial understanding of the layout. @@ -463,7 +463,7 @@ patrol_prompt: | # ══════════════════════════════════════════════════════════════════════════════ talk_prompt: | - You are Marcus, a humanoid robot assistant. You have been asked a question + You are Sanad, a humanoid robot assistant. You have been asked a question or given information. Do NOT move — just respond intelligently. {facts} @@ -509,7 +509,7 @@ talk_prompt: | → {{"actions":[],"arm":null,"speak":"All systems are functioning normally and I am ready to assist you","abort":null}} "what is your name" - → {{"actions":[],"arm":null,"speak":"My name is Marcus, a humanoid robot assistant by YS Lootah Technology","abort":null}} + → {{"actions":[],"arm":null,"speak":"My name is Sanad, a humanoid robot assistant by YS Lootah Technology","abort":null}} "who built you" → {{"actions":[],"arm":null,"speak":"I was built by YS Lootah Technology in Dubai, and my programmer is Kassam","abort":null}} diff --git a/Core/Logger.py b/Core/log_backend.py similarity index 100% rename from Core/Logger.py rename to Core/log_backend.py diff --git a/Core/logger.py b/Core/logger.py index cceda33..03eca31 100644 --- a/Core/logger.py +++ b/Core/logger.py @@ -1,9 +1,13 @@ """ -logger.py — Project-wide logging via Logger.py +logger.py — Project-wide configured logging instance. + +Imports the `Logs` backend class from log_backend.py (formerly Logger.py; +renamed to avoid a case-only filename collision with this module, which +breaks any case-insensitive filesystem — macOS default HFS+/APFS, Windows). """ import os from Core.env_loader import PROJECT_ROOT -from Core.Logger import Logs +from Core.log_backend import Logs # Single shared instance — all modules use this _logs = Logs(main_log_file=os.path.join(PROJECT_ROOT, "logs", "main.log")) diff --git a/Doc/MARCUS_API.md b/Doc/MARCUS_API.md index 8c40865..94b40bf 100644 --- a/Doc/MARCUS_API.md +++ b/Doc/MARCUS_API.md @@ -1,8 +1,37 @@ # Marcus — Full API & Developer Reference **Project:** Marcus | YS Lootah Technology | Jetson Orin NX + G1 EDU -**Scripts:** `~/Models_marcus/marcus_llava.py` + `~/Models_marcus/marcus_yolo.py` -**Updated:** April 4, 2026 +**Robot persona:** Sanad (wake word + self-intro; project code stays under `Marcus/`) +**Entry points:** `run_marcus.py` (terminal) / `Server/marcus_server.py` (WebSocket) +**Updated:** 2026-04-21 + +> **What changed since the early draft (April 4):** The project was restructured +> from two monolithic scripts (`marcus_llava.py` + `marcus_yolo.py`) into a +> layered architecture. See `Doc/architecture.md` for the current file tree and +> `Doc/environment.md` for the verified Jetson software stack, exact library +> versions, and GPU bring-up recipe. This reference still describes the +> function-level semantics (inputs/outputs/examples) — treat any file path in +> this document as illustrative and cross-check the actual module. Recent +> deltas called out inline below. + +### Recent API deltas (2026-04-21) + +| Change | Location | Note | +|---|---|---| +| GPU is mandatory for YOLO | `Config/config_Vision.json`, `Vision/marcus_yolo.py` | `yolo_device` defaults to `"cuda"` and is enforced; `_resolve_device()` raises `RuntimeError` on missing CUDA. `yolo_half=true` runs FP16 on Orin (capability 8.7). | +| Ollama model | `Config/config_Brain.json` | Default `ollama_model` is `qwen2.5vl:3b` (not `llava:7b`). | +| Ollama compute-graph caps | `Config/config_Brain.json` | `num_batch=128`, `num_ctx=2048` — required on 16 GB Orin NX to prevent the llama runner OOM. Propagated by `API/llava_api.py` and `Vision/marcus_imgsearch.py` to every `ollama.chat` call. | +| `num_predict_main` lowered | `Config/config_Brain.json` | 200 → 120 (shaves ~400–600 ms per open-ended command; JSON still parses). | +| ZMQ bind moved out of import | `API/zmq_api.py` | `init_zmq()` must be called from the main process before any `send_vel/send_cmd`. `init_brain()` does this. Children spawned via `multiprocessing` no longer collide on port 5556. | +| Camera-retry poll | `Brain/marcus_brain.py::_handle_llava` | Replaced `time.sleep(1.0)` with 10×50 ms polls. | +| Conditional scan sleeps | `Navigation/goal_nav.py`, `Autonomous/marcus_autonomous.py` | Removed unconditional per-step naps when real work (YOLO hit, LLaVA call, forward move) already consumed wall time. | +| Image-search step delay | `Vision/marcus_imgsearch.py` | `STEP_DELAY` 0.4 s → 0.15 s. | +| Built-in G1 microphone | `Voice/builtin_mic.py` (new), `API/audio_api.py`, `Config/config_Voice.json` | Mic now reads from UDP multicast `239.168.123.161:5555` (G1 on-board array mic) instead of the Hollyland USB. Config key `mic.backend` defaults to `"builtin_udp"`; set to `"pactl_parec"` to fall back to the old path. | +| Built-in G1 TTS | `Voice/builtin_tts.py` (new), `API/audio_api.py` | `AudioAPI.speak(text)` now calls `client.TtsMaker(text, speaker_id)` directly. No MP3/WAV plumbing, no internet, no edge-tts/Piper. English only — `speak()` refuses non-ASCII to avoid the G1's silent Arabic→Chinese fallback. | +| Gemini voice deleted | `Voice/marcus_gemini_voice.py` removed | `_init_voice()` now spawns `Voice.marcus_voice.VoiceModule` (Whisper wake + command STT). No more WebSocket, no more asyncio event loop, no API key. | +| Subsystem flags | `Config/config_Brain.json::subsystems.{lidar, voice, imgsearch, autonomous}` | `init_brain()` skips any subsystem with `false`. Defaults: lidar+voice+autonomous ON, imgsearch OFF. | +| Robot persona → Sanad | Multiple | Wake words `["sanad","sannad","sanat","sunnat"]`; all prompts say "You are Sanad"; banner reads `SANAD AI BRAIN — READY`; hardcoded self-intro says "I am Sanad". Project/file/module names unchanged. | +| Logger rename | `Core/log_backend.py` (was `Core/Logger.py`) | Case-only collision with `Core/logger.py` removed — repo now clones cleanly on macOS/Windows. Public API unchanged: `from Core.logger import log`. | --- @@ -22,38 +51,54 @@ 12. [JSON Schema Reference](#12-json-schema-reference) 13. [Environment & Paths](#13-environment--paths) 14. [Quick Reference Card](#14-quick-reference-card) +15. [Voice API (mic + TTS + STT)](#15-voice-api-mic--tts--stt) --- ## 1. Configuration Variables -Defined at the top of `marcus_llava.py`. Edit here to change global behavior. +All configuration is now **JSON-driven** and lives under `Config/`. Each module +loads its config at startup via `Core.config_loader.load_config(name)`. -| Variable | Default | Description | -|----------|---------|-------------| -| `ZMQ_HOST` | `"127.0.0.1"` | Holosoma ZMQ host | -| `ZMQ_PORT` | `5556` | Holosoma ZMQ port | -| `ZMQ_YOLO_PORT` | `5557` | YOLO ZMQ port (standalone mode) | -| `OLLAMA_MODEL` | `"llava:7b"` | LLaVA model via Ollama | -| `CAM_WIDTH` | `424` | Camera capture width (px) | -| `CAM_HEIGHT` | `240` | Camera capture height (px) | -| `CAM_FPS` | `15` | Camera frame rate | -| `CAM_QUALITY` | `70` | JPEG quality sent to LLaVA | -| `STOP_ITERATIONS` | `20` | gradual_stop message count | -| `STOP_DELAY` | `0.05` | seconds between stop messages | -| `STEP_PAUSE` | `0.3` | pause between consecutive action steps | -| `ARM_SDK_PATH` | `/home/unitree/unitree_sdk2_python` | Arm SDK path | -| `ARM_INTERFACE` | `"eth0"` | Network interface for arm SDK | +**`Config/config_ZMQ.json`** (Holosoma bridge) -Defined at top of `marcus_yolo.py`: +| Key | Default | Description | +|---|---|---| +| `zmq_host` | `"127.0.0.1"` | Holosoma ZMQ host | +| `zmq_port` | `5556` | Holosoma ZMQ port | +| `stop_iterations` | `20` | `gradual_stop()` message count | +| `stop_delay` | `0.05` | seconds between stop messages | +| `step_pause` | `0.3` | pause between consecutive action steps | -| Variable | Default | Description | -|----------|---------|-------------| -| `YOLO_MODEL_PATH` | `.../Model/yolov8m.pt` | YOLO model path | -| `YOLO_CONFIDENCE` | `0.45` | Minimum detection confidence | -| `YOLO_IOU` | `0.45` | NMS IOU threshold | -| `YOLO_DEVICE` | `"cpu"` | Inference device ("cpu" or "cuda") | -| `YOLO_IMG_SIZE` | `320` | Inference image size (smaller = faster) | +**`Config/config_Brain.json`** (Ollama VL model) + +| Key | Default | Description | +|---|---|---| +| `ollama_model` | `"qwen2.5vl:3b"` | Ollama model tag | +| `max_history` | `6` | conversation turns retained | +| `num_batch` | `128` | llama.cpp batch — **cap, required for Jetson** | +| `num_ctx` | `2048` | llama.cpp KV context length — **cap, required for Jetson** | +| `num_predict_main` | `120` | max tokens for the main command path | +| `num_predict_goal` | `80` | goal-navigation call | +| `num_predict_patrol` | `100` | autonomous patrol call | +| `num_predict_talk` | `80` | talk-only path | +| `num_predict_verify` | `10` | YOLO condition verifier (`yes`/`no`) | + +**`Config/config_Vision.json`** (YOLO) + +| Key | Default | Description | +|---|---|---| +| `yolo_model_path` | `"Models/yolov8m.pt"` | weights file (auto-fetched if missing) | +| `yolo_confidence` | `0.45` | detection confidence threshold | +| `yolo_iou` | `0.45` | NMS IOU threshold | +| `yolo_device` | `"cuda"` | **GPU required** — `"cpu"` raises `RuntimeError` | +| `yolo_half` | `true` | FP16 inference (Ampere tensor cores) | +| `yolo_img_size` | `320` | inference image size | +| `tracked_classes` | 19 COCO classes | filter for relevant detections | + +**`Config/config_Camera.json`**: `424x240 @ 15 fps`, `JPEG quality 70`. +**`Config/config_Voice.json`**: see section 6 below. +**`Config/config_Network.json`**: Jetson eth0/wlan0 IPs, WebSocket port. --- @@ -61,20 +106,28 @@ Defined at top of `marcus_yolo.py`: ### Setup +The bind is no longer an import-time side effect. It runs inside `init_zmq()`, called once by `init_brain()` from the main process. Children (e.g. the LiDAR SLAM worker spawned via `multiprocessing.spawn`) can re-import `API.zmq_api` without rebinding. + ```python -ctx = zmq.Context() -sock = ctx.socket(zmq.PUB) -sock.bind("tcp://127.0.0.1:5556") -time.sleep(0.5) +# API/zmq_api.py — bind happens here, not at module import +def init_zmq() -> zmq.Socket: + global ctx, sock + if sock is not None: + return sock # idempotent + ctx = zmq.Context() + sock = ctx.socket(zmq.PUB) + sock.bind(f"tcp://{ZMQ_HOST}:{ZMQ_PORT}") + time.sleep(0.5) # let SUBs attach + return sock ``` ### `send_vel(vx, vy, vyaw)` -Send velocity command to Holosoma. +Send velocity command to Holosoma. Raises `RuntimeError` if `init_zmq()` wasn't called. ```python def send_vel(vx: float = 0.0, vy: float = 0.0, vyaw: float = 0.0): - sock.send_string(json.dumps({"vel": {"vx": vx, "vy": vy, "vyaw": vyaw}})) + _ensure_sock().send_string(json.dumps({"vel": {"vx": vx, "vy": vy, "vyaw": vyaw}})) ``` | Parameter | Unit | Safe range | Effect | @@ -661,14 +714,17 @@ from unitree_sdk2py.g1.arm.g1_arm_action_client import G1ArmActionClient # Arm ``` STARTUP: - Tab 1: source ~/.holosoma_deps/miniconda3/bin/activate hsinference - cd ~/holosoma && sudo jetson_clocks + Tab 1 (hsinference env): Holosoma locomotion policy python3 run_policy.py inference:g1-29dof-loco \ --task.velocity-input zmq --task.state-input zmq --task.interface eth0 - Tab 2: ollama serve & - /home/unitree/miniconda3/envs/marcus/bin/python3 ~/Models_marcus/marcus_llava.py - (YOLO starts automatically — no Tab 3 needed) + Tab 2: ollama serve > /tmp/ollama.log 2>&1 & + sleep 3 + + Tab 3 (marcus env): conda activate marcus && cd ~/Marcus && python3 run_marcus.py + (YOLO + voice + LiDAR all start automatically per subsystems flags) + +WAKE WORD: "Sanad" COMMANDS: walk forward · turn right · turn left · move back @@ -704,4 +760,74 @@ SAFETY: --- +## 15. Voice API (mic + TTS + STT) + +New pipeline as of 2026-04-21. Replaces the Gemini live WebSocket + edge-tts/Piper stack. + +### Mic — `Voice.builtin_mic.BuiltinMic` + +Captures the G1's on-board array microphone over UDP multicast. No USB mic required. 16 kHz mono int16 PCM natively; no resampling needed. + +```python +from Voice.builtin_mic import BuiltinMic +mic = BuiltinMic(group="239.168.123.161", port=5555, buf_max=64_000) +mic.start() +try: + pcm = mic.read_chunk(1024) # 512 samples, ~32 ms, int16 mono + # or + pcm = mic.read_seconds(3.0) +finally: + mic.stop() +``` + +Config under `config_Voice.json::mic_udp`. + +### TTS — `Voice.builtin_tts.BuiltinTTS` + +Wrapper around `unitree_sdk2py.g1.audio.g1_audio_client.AudioClient.TtsMaker`. English only — refuses non-ASCII input. + +```python +from Voice.builtin_tts import BuiltinTTS +tts = BuiltinTTS(audio_client, default_speaker_id=0) +tts.speak("Hello, I am Sanad", block=True) # synth + play on G1 body speaker +``` + +Used by `AudioAPI.speak(text)` internally; application code should call `audio_api.speak(...)` rather than BuiltinTTS directly. + +### Wake + command loop — `Voice.marcus_voice.VoiceModule` + +Four-state machine (`IDLE → WAKE_HEARD → PROCESSING → SPEAKING`). Whisper `tiny` detects the wake word, `small` transcribes commands. + +```python +from API.audio_api import AudioAPI +from Voice.marcus_voice import VoiceModule + +def on_command(text, lang): + print(f"heard: {text}") + +audio = AudioAPI() +voice = VoiceModule(audio, on_command=on_command) +voice.start() # background thread +# ... later ... +voice.stop() +``` + +Wake words are configured in `config_Voice.json::stt.wake_words_en`. The brain's `_init_voice()` wires `on_command` to `process_command(text)` + `audio_api.speak(reply)`. + +### AudioAPI — `API.audio_api.AudioAPI` + +Orchestration layer. Owns the `AudioClient`, manages mute/unmute, exposes a clean `speak` + `record` API. + +```python +from API.audio_api import AudioAPI +audio = AudioAPI() +audio.speak("Hello") # English only; non-ASCII returns early +pcm = audio.record(seconds=5) # int16 mono 16 kHz — uses BuiltinMic +audio.play_pcm(pcm) # raw PCM playback via Unitree RPC +``` + +Config: `config_Voice.json::tts.backend = "builtin_ttsmaker"`, `mic.backend = "builtin_udp"` (or `"pactl_parec"` to fall back to Hollyland). + +--- + *Marcus — YS Lootah Technology | Kassam | April 2026* diff --git a/Doc/MARCUS_progress.pdf b/Doc/MARCUS_progress.pdf deleted file mode 100644 index b495b602e49ccf477575502ff213360b4c23b4c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 156923 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 z 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 c|80eFUG!U+}<n+a diff --git a/Doc/Marcus_Project.pdf b/Doc/Marcus_Project.pdf deleted file mode 100644 index bf6a656f57561672261ad022b4c089e2723f999f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180331 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