Update UUID auto upload logic#2610
Open
YuchengZhou821 wants to merge 133 commits into
Open
Conversation
Introduce a new Go workspace for the om1 project: add Makefile, cmd/main, go.mod and go.sum. Implement core internal packages for runtime functionality and plugins: config loader/types, actions (connectors, orchestrator, schema generation and tests), backgrounds (orchestrator and registry), inputs (sensors and orchestrator), llm interfaces, fuser (prompt fusion + KB), hooks runner, http client, and plugin entrypoints. Includes unit tests for action schema generation and action orchestrator tick/stop behavior. Provides plumbing for registering/loading plugins and basic orchestration patterns (concurrent/sequential/dependency modes).
Add a reconnecting WebSocket client and a new GoogleASR input plugin (PortAudio + WS) and include a conversation.json5 example. Refactor the inputs API: Sensor interface changed (Listen/Poll/RawToText/FormattedLatestBuffer/Stop), Message shape renamed, and Orchestrator no longer stores buffers internally (uses sensors' FormattedLatestBuffer). Update Fuser.Fuse to accept sensor buffer slices. Update runtime to pass sensor buffers and simplify LLM orchestration: Orchestrator now wraps 'llm' field and manages history; call sites adjusted. Rename and consolidate speak action plugin to speak/elevenlabs_tts (types and logging names updated) and add actions package entrypoint; remove old move and speak packages. Update telemetry API: IOProvider.RecordTick signature simplified. Add go.mod dependencies for portaudio and gorilla/websocket. Improve JSON5 loader to quote unquoted keys. Note: these changes introduce several breaking API changes (Sensor, Fuser.Fuse, RecordTick, action connector types) that require updates across callers.
Makefile: add automatic download/installation of zenoh-c, set CGO flags and platform-specific DYLD/LD env handling, and propagate the library path to build, run, lint, test, fmt, vet, and dependency targets; expand help text and fix install target. Providers: add a new atomic Speaking flag (internal/providers/tts_state.go) to indicate when TTS is streaming audio. ElevenLabs TTS: set providers.Speaking true before synthesis/playback and false after to mark active playback; remove an extra enqueue log line. Google ASR: skip audio capture while providers.Speaking is set to avoid ASR picking up playback audio. These changes ensure the zenoh-c runtime library is available during development and CI, and avoid input capture interfering with TTS playback.
Add an entry to .gitignore to exclude the Zenoh runtime/cache directory (go/.zenoh-c/) and a comment marker. This prevents local Zenoh state from being accidentally committed.
Expose and refactor internal plugin/schema APIs, tighten logging, and remove unused test code. Key changes: - Actions: clarify AgentAction fields, introduce Factory/Register/Load patterns for connectors. - Schema: export InterfaceSpec, InterfaceRegistry and schema helpers (BuildSchema, BuildPropertySchema, KindToJSONType) and wire BuildSchemaForAction to use them. - Backgrounds: add Factory registry, Register and Load helpers and an UnknownPluginError type. - Providers: remove the HistoryManager/related LLM history code and unused imports. - LLM/Runtime/Inputs/Plugins: remove debug prints, adjust buffering and minor formatting/locking fixes. - Google ASR: add Time to ASRMessage, reduce stats ticker interval (30s→15s), improve latency logging, and tidy audio packaging/stream handling. - Deleted obsolete tests (actions/orchestrator_test.go, actions/schema_test.go). These changes prepare the codebase for external use of schema/registry helpers, improve observability, and clean up dead code.
Introduce a global logger package and replace ad-hoc zap creation across plugins: internal/logger provides Set/Get for a shared *zap.Logger; main sets the global logger and passes the logger into runtime. Add a CGo zenoh wrapper (internal/zenoh/session.go) that exposes Open/Put/Close to publish raw bytes via zenoh-c (requires zenoh-c headers/libs). Add a new arm_g1 Zenoh action plugin (plugins/actions/arm_g1_zenoh) that registers the arm_g1 interface and publishes Unitree G1 arm requests to a Zenoh topic, including a CDR little-endian serializer for Unitree requests. Wire the new plugin by importing it in plugins/actions/actions.go. Update existing plugins (emotion, speak/elevenlabs_tts, inputs/google_asr) to use logger.Get() instead of creating new zap instances and add an info log when enqueueing TTS text.
Change config path references in go/Makefile from ../config/*.json5 to ./config/*.json5 for the run, dev, and list-configs targets so configuration files are resolved relative to the go directory when invoking these commands.
Replace the old cgo-based zenoh-c wrapper with the pure-Go github.com/eclipse-zenoh/zenoh-go client. Implement a new Session using zenoh-go (Open with optional endpoint, Put, Close) and add a Publish helper. Simplify the arm_g1/zenoh connector to use the new session API (no config parsing, rely on default), and add debug log-level to the Makefile dev run. go.mod was updated to include the zenoh-go dependency and related indirect changes.
ws: add context with cancel to Client, use DialContext so in-progress TLS handshakes are interrupted on Close, and call cancel() from Close. Make Close idempotent for stopCh. Improve read/write loops: early-return on stopCh, log read loop stop, treat normal close as non-error, and fix conn mutex handling in writeMessage with deferred unlock. google_asr: Fix Stop() to avoid calling Stream methods while holding the sensor mutex by capturing and nil-ing paStream under lock, unlocking, then stopping/closing the stream. These changes improve shutdown correctness and avoid deadlocks during teardown.
Add a new Unitree G1 conversation JSON5 config (go/config/unitree_g1_conversation.json5) providing a greeting mode, agent settings, actions and connectors. Fix stripJSON5 in go/internal/config/loader.go to remove backslash-newline continuations before splitting and preserve trailing-comma cleanup. Update plugin imports and package: change actions import from arm_g1_zenoh to arm_g1 and rename file/package go/plugins/actions/arm_g1_zenoh/... to go/plugins/actions/arm_g1/zenoh.go with package name adjusted accordingly.
Introduce a Publisher wrapper in the zenoh session package with DeclarePublisher/Put/Drop and adjust Session.Close to call Close(nil). Update arm_g1 connector to open a zenoh session with optional endpoint, declare a publisher for sport requests, use the publisher for puts, log/handle failures gracefully, and drop the publisher on Stop. Fix CDR alignment, buffer sizing and padding in serializeUnitreeRequest and standardize the JSON parameter formatting to match the Python connector. Convert Tick implementations (emotion, arm_g1, elevenlabs TTS) to block on ctx.Done() and simplify Stop to properly cleanup publishers and sessions.
Introduce CDR serialization helpers and integrate Zenoh publishing for ASR, plus add WS reconnect behavior. - Add internal/zenoh/cdr.go with AppendInt32LE, AppendUint32LE, AppendInt64LE and AppendCDRString helpers for little-endian CDR encoding. - Use the new zenoh helpers in plugins/actions/arm_g1 to replace local byte-append helpers. - Integrate Zenoh into GoogleASR: add ZenohEndpoint config, open a session and declare a publisher during sensor init, publish serialized ASR text (serializeASRText) on buffer flush, and clean up publisher/session on stop. serializeASRText builds a CDR LE payload including a timestamp, UUID frame_id, and the text. - Update internal/ws client Connect to support automatic reconnect when cfg.Reconnect is true, retrying every 5s and honoring context cancellation. - Add usage of github.com/google/uuid in ASR serialization.
Replace the old log-based emotion action with a Zenoh-backed connector. Configs (conversation.json5 and unitree_g1_conversation.json5) now reference connector "zenoh" for the emotion action. The previous emotion/log connector implementation was removed and a new emotion/zenoh connector was added which opens a Zenoh session, declares a publisher on topic "om/avatar/request", and publishes serialized AvatarFaceRequest payloads (CDR little-endian encoding with timestamp, request ID, code, and face_text). The new connector gracefully handles Zenoh unavailability, logs publish results, and cleans up publisher/session on Stop.
Replace zenohsession.AppendCDRString with manual serialization: append a NUL (0x00) to faceText, write the byte length as a little-endian uint32, then append the bytes. This ensures the CDR string is encoded with an explicit length and null terminator for compatibility with the Zenoh consumer.
Introduce an Emotion enum and EmotionInput struct for the emotion action, including EnumValues enumerating supported expressions (happy, confused, curious, excited, sad, think). Register the emotion interface with a descriptive message and register the Zenoh connector. Rename and export constructor from newZenohConnector to NewZenohConnector and update its registration. Also remove redundant comment lines in arm_g1/zenoh.go.
Adjust serializeAvatarRequest to follow CDR alignment rules: align before fields (no trailing padding after request_id since next field is int8) and insert padding before the face_text uint32 length. Implement request_id encoding without post-padding (write length + bytes explicitly), increase buffer capacity, and clarify comments about wire layout. Also remove a redundant comment in arm_g1 zenoh publisher code.
Introduce a new AvatarProvider (go/internal/providers/avatar.go) that manages zenoh publishers/subscribers for om/avatar/request and om/avatar/response, handles CDR (pycdr2-compatible) serialization/deserialization for avatar commands and health checks, and exposes SendAvatarCommand. Extend zenoh session (go/internal/zenoh/session.go) with Subscriber type, DeclareSubscriber and Drop to support incoming messages. Update emotion plugin (go/plugins/actions/emotion/zenoh.go) to use the AvatarProvider singleton instead of managing its own zenoh session/publisher and remove duplicate serialization logic; Stop() is simplified accordingly. The provider handles unavailable zenoh sessions gracefully and replies to STATUS requests with health responses.
Add a descriptive comment for NewAvatarProvider, simplify the handleRequest comment, and remove debug log statements for health-check requests/responses to reduce log noise. Minor whitespace cleanup; no functional changes to request handling or publishing behavior.
Introduce a centralized ElevenLabs TTS provider and lifecycle hook support across the runtime. - Add go/internal/providers/elevenlabs.go: a singleton ElevenLabsProvider that handles HTTP synthesis, persistent ffplay streaming, queueing, silence handling and lifecycle for TTS playback. - Extend hooks runner (go/internal/hooks/hooks.go): support templated variables, improved command execution with captured stdout/stderr, message handler that forwards messages to the ElevenLabs provider, helper funcs for template formatting and safe string extraction. - Wire lifecycle hooks into runtime and mode manager (go/internal/runtime/*): global hooks are created and invoked for OnStartup, OnEntry and OnExit with context payloads; time-based transitions fire OnTimeout hooks; Transition now includes reason and transition context. - Refactor speak action (go/plugins/actions/speak/elevenlabs_tts.go): remove duplicated ffplay/http logic and use the new providers.ElevenLabs singleton, simplifying connector and lifecycle. - Improve WebSocket client resilience (go/internal/ws/client.go): better logging, non-blocking read/reconnect behavior and a reconnect helper to re-dial when enabled. - Add example lifecycle_hooks to config (go/config/unitree_g1_conversation.json5) demonstrating on_startup message handler using elevenlabs. These changes centralize TTS handling, reduce duplicated code, and add lifecycle hook templating and global hook handling to support safe automated startup/transition messages.
Export and document several constructors and runtime types, and add brief lifecycle comments across runtime and plugin code. Renamed newModeSetup to NewModeSetup and updated runtime to use the exported constructor; added docs for loadComponents, toRuntimeConfig, buildMeta, addMeta, collectSchemas, mergePrompt, and toolCallsToMaps. Introduced ModeState/ModeManager comments and a NewModeManager constructor doc. In plugin connectors: export and rename connector constructors (NewArmG1ZenohConnector, NewEmotionZenohConnector, NewElevenLabsTTS), add Tick/Stop/no-op lifecycle comments, and simplify arm_g1 connector by removing the customActionMap and sending actions directly. Also removed an extraneous package doc comment in ws/client.go. These changes improve API visibility and add documentation for maintainability; note the behavioral change in arm_g1/zenoh where actions are no longer remapped.
Introduce clearer constructors, helper functions, and plugin registries across packages and update callers accordingly. Key changes: move logger builder to internal/logger (BuildLogger) and use it from main; rename fuser.New -> NewFuser and hooks.New -> NewHooks and update runtime callers; add doc comments and small API helpers for actions/inputs/backgrounds/llm (Call/Result types, registry Factory types, Register/Load helpers, UnknownPluginError.Error implementations); add orchestration helper methods (runConcurrent/runSequential/runWithDeps, SetSchemas/FunctionSchemas/Reset) and small runtime adjustments. These changes improve naming consistency, visibility of helpers, plugin loading ergonomics, and overall code readability without changing core behavior.
Introduce utility functions and logging to the LLM plugin common code: add parseOpenAIResponse, buildMessages, remarshal helper, and logResponseLatency to capture latency and proxy/upstream headers. Import net/http, time, logger and zap for these features. Export and rename Gemini constructor to NewGemini, update llm registration accordingly, export FunctionSchemas and SetSchemas, and wire request timing + logResponseLatency into Gemini's Call to record response metrics. These changes improve observability and provide small API/visibility refactors for the Gemini LLM integration.
Introduce context-aware mode transitions and a safe PortAudio reference counter. - Config: change default mode to "conversation", add an "approaching" mode and a set of transition_rules to unitree_g1_conversation.json5; add go/config/memory to .gitignore. - Types: extend TransitionRule with ContextConditions to support context-aware transitions. - ModeManager: subscribe to a Zenoh topic (om/mode/context) for best-effort user context updates, store userContext, add CheckTransitions with ordered checks (time-based, context-aware, input-triggered), and implement helpers to evaluate context conditions and priorities. Add Close and UpdateUserContext helpers. - Runtime: clone per-mode LLM config before adding metadata and error if no LLM configured; tidy lifecycle/orchestrator comments and ensure manager.Close() on shutdown. - Audio: add providers/portaudio.go implementing a process-wide reference-counted PortAudio wrapper; integrate it into GoogleASRInput (Acquire/Release, captureDone coordination, safer stream stop/close) to avoid terminating PortAudio while others still use it. - Misc: add github.com/google/uuid to go.mod; small comment and code cleanups across files. These changes enable context-driven transitions, prevent concurrent PortAudio termination races, and avoid mutating shared LLM configuration maps.
Introduce greeting conversation state machine, IO provider, and related plumbing for TTS/status publishing and background detection. Adds a ConfidenceCalculator-driven GreetingConversationStateMachineProvider and IOProvider singletons, ElevenLabs greeting connector, TTS text normalization and CDR status serialization, and ApproachingPerson background task. Replaces the old slim providers.go, adds util.ToFloat/FloatFrom and updates manager to use it, increments tick counter in runtime, and registers the new plugins in main/actions. Also includes a small, likely accidental edit to google_asr.go.
Change the agent action in unitree_g1_conversation config from "speak" to "greeting_conversation" (name and llm_label) and switch the connector from "elevenlabs_tts" to "greeting_conversation_elevenlabs" to match the plugin. Also remove an extraneous debug log line in greeting_conversation_elevenlabs.Tick to reduce noisy logging.
Introduce a FacePresence provider and sensor: new providers/face_presence.go and inputs/face_presence.go implement fetching /who, snapshot shaping, and a sensor that polls and formats presence lines. Add util.Sleep to support context-aware sleeps. Refactor zenoh session handling: make Open use defaults and local-network discovery (OpenWithOptions/openClient/openDiscovery), add a default endpoint constant, and improve logging/error messages. Update dependent code to the new APIs: AvatarProvider no longer takes an endpoint and callers use providers.Avatar(), various plugins (arm_g1, emotion, greeting_conversation, google_asr, approaching_person) now call zenoh.Open() without endpoint and use util.Sleep where appropriate. Remove an unused local sleep helper and drop ZenohEndpoint config field from greeting_conversation. Overall: new face-presence feature plus cleanup and more robust zenoh session management.
Introduce a ModeContextProvider singleton as an in-process, best-effort bus for user-context updates that drive context-aware mode transitions. Replace previous Zenoh-based context propagation: ModeManager no longer subscribes to the Zenoh topic and its Close() is simplified; runtime now consumes providers.ModeContext().Updates() and uses a new scheduleTransition helper to enqueue mode changes. Update plugins to publish context updates via providers.ModeContext() (ApproachingPerson and greeting_conversation) and adjust imports/cleanup accordingly. Also add ApproachingPerson to the conversation config and adjust transition rules to target conversation mode; remove a reconnect log line from the websocket client.
Large repo reorganization: moved the Go project from the go/ subdirectory into the repository root (Makefile, cmd/, internal/, plugins/, go.mod/sum, etc.), preserving file contents. Removed legacy Python src/ tree, many config JSON5 files and tests, and deleted .gitmodules. Updated .pre-commit-config.yaml and .github/copilot-instructions.md as part of the cleanup. This simplifies the repository layout and centralizes the Go application.
Replace Python-centric CI and runtime with a Go-focused build pipeline and zenoh-c integration. GitHub Actions workflows updated to setup-go, cache/download zenoh-c, run make build/test/lint (go vet, golangci-lint, go test) and verify the produced binary; many Python/uv/CycloneDDS steps removed. Dockerfile switched to a multi-stage Go builder image that builds the om1 binary, bundles the zenoh-c shared libs, and provides a slimmer runtime image with a simplified entrypoint. Makefile BUILD_DIR path fixed and docker-compose env/command switched to OM1_CONFIG with updated defaults. .gitignore cleaned to remove Python artifacts and track .zenoh-c and build outputs.
Align OpenWithOptions behavior with the updated LocalNetwork comment: when LocalNetwork is true, try connecting to the local router (openClient) and fall back to discovery; when false, try discovery first and fall back to client connect. Also updated the LocalNetwork doc comment and related warning log messages to reflect the corrected semantics.
Introduce a Unitree GO2 odometry Zenoh provider and tests, plus CDR (de)serialization helpers. Adds internal/providers/unitree/go2/odom_zenoh.go implementing OdomZenohProvider that subscribes to a PoseStamped topic, decodes CDR-encoded payloads, computes pose/yaw/movement/body state and exposes a Position snapshot; and internal/providers/unitree/go2/odom_zenoh_test.go with unit tests for deserialization, quaternion->euler and odom processing. Also extends internal/zenoh/cdr.go with ReadFloat64LE and AppendFloat64LE utilities and clarifies AppendCDRString behavior.
Register and implement a new UnitreeGo2Odom input sensor (with tests) that reads odometry from the unitree/go2 provider and produces human-readable messages. Update plugins/inputs to import the unitree/go2 plugin so it is built. Standardize message formatting across inputs: conversation_history, face_presence, and vlm now include the descriptor and use a consistent quoted format; tests adjusted accordingly. Minor whitespace/clarity tweaks in internal/providers/unitree/go2/odom_zenoh.go (no behavior changes).
Add a new zenoh diagnostic tool and Makefile target: introduce cmd/zenohprobe (standalone probe for subscribing to zenoh keys, hex-dumping payloads and optionally decoding PoseStamped) and expose it via a new `make probe` target. Update internal providers/unitree/go2/odom_zenoh.go: change default odom topic to "odom", add a rate-limited debug log (15s) to reduce spamming, and improve CDR decoding for the Go2 odometry payload by accounting for child_frame_id and updating comments to reflect nav_msgs/Odometry layout. Minor safety checks and alignment handling included.
Remove the verbose Info log emitted when movement is detected to reduce log noise, and add the z coordinate and body_attitude field to the periodic debug log so diagnostics include full pose information.
Introduce a PathsProvider that subscribes to the om/paths topic via zenoh, deserializes CDR-encoded Paths messages, classifies path indices into movement options (turn left, move forwards, turn right, move back) and generates a natural-language assessment string. Expose methods to retrieve the latest lidar string, valid paths and movement options, and add graceful stop/cleanup. Add a PathsSensor plugin that registers as "Paths", polls the provider on a fixed cadence, converts raw assessments into timestamped messages, maintains a bounded history and formats the latest buffer for prompts. Unit tests cover payload deserialization and movement-string generation.
Add a new autonomy config for Unitree Go2 (config/unitree_go2_autonomy.json5) defining a 'Bits' agent: system prompts, inputs (Unitree odom, Google ASR, VLM Gemini RTSP, Paths), Gemini LLM settings, and actions for TTS and emotion. Also refine comments in plugins/inputs/paths.go to clarify RawToText now documents appending assessments to the message buffer and FormattedLatestBuffer description is simplified to state it returns the most recent buffered assessment.
* Add Unitree Go2 autonomy and rename arm connector Introduce a new Unitree Go2 autonomy plugin and related movement primitives, and standardize connector naming/logging. - Add a full autonomy connector for Unitree Go2 (plugins/actions/unitree/go2/autonomy): movement planning, cmd_vel serialization, AI status request/response, guard watcher, and unit tests. - Register and wire the new autonomy and unitree arm plugins in plugins/actions/actions.go. - Rename/move the G1 arm connector from arm_g1 to unitree_g1_arm (including tests) and update config references in greeting/unitree configs. - Add PathsProvider Movement() and Movement struct (internal/providers/paths.go) to expose derived path options programmatically. - Add util.StringFrom helper (internal/util/convert.go) for safe string extraction from decoded JSON. - Standardize logger contexts (logger.Named) and clean up log message prefixes across multiple connectors/background tasks. These changes add autonomous movement capabilities, improve APIs for path/movement data, and align connector names used in configs and registration. * dualLLM: add logger fallback and use it Add a logger() helper to dualLLM that returns the existing logger or a default named "DualLLM". Replace direct d.log references with d.logger() at the sub-call failure, race completion, and quality-evaluation fallback sites to avoid nil logger panics and ensure consistent logger naming. * Rename move_go2_autonomy to unitree_go2_autonomy Update config/unitree_go2_autonomy.json5: changed the action entry name from "move_go2_autonomy" to "unitree_go2_autonomy" to align the config entry with the file/connector naming and avoid naming inconsistencies. * Add stall detection and progress tracking for moves Introduce progress-based convergence checks and timeouts for move commands. Shorten tick interval (100ms -> 50ms) and add stallTimeout, commandTimeout, turnProgressEps and driveProgressEps constants. Extend moveCommand with timing/progress fields (started, lastImprove, bestGap) and add markPhase/recordProgress helpers. Initialize progress tracking in queue and replace legacy movementAttempts/gapPrevious counters with recordProgress checks in tickTurn and tickDrive, aborting on stall or command timeout. Adjust turn/drive logic accordingly and remove obsolete counters from moveConnector. * Remove redundant comment in move.go Delete an unnecessary comment in plugins/actions/unitree/go2/autonomy/move.go that described an "overshoot" nudge; no functional changes were made to the logic, just cleaned up the source for clarity.
* Add Unitree Go2 autonomy and rename arm connector Introduce a new Unitree Go2 autonomy plugin and related movement primitives, and standardize connector naming/logging. - Add a full autonomy connector for Unitree Go2 (plugins/actions/unitree/go2/autonomy): movement planning, cmd_vel serialization, AI status request/response, guard watcher, and unit tests. - Register and wire the new autonomy and unitree arm plugins in plugins/actions/actions.go. - Rename/move the G1 arm connector from arm_g1 to unitree_g1_arm (including tests) and update config references in greeting/unitree configs. - Add PathsProvider Movement() and Movement struct (internal/providers/paths.go) to expose derived path options programmatically. - Add util.StringFrom helper (internal/util/convert.go) for safe string extraction from decoded JSON. - Standardize logger contexts (logger.Named) and clean up log message prefixes across multiple connectors/background tasks. These changes add autonomous movement capabilities, improve APIs for path/movement data, and align connector names used in configs and registration. * dualLLM: add logger fallback and use it Add a logger() helper to dualLLM that returns the existing logger or a default named "DualLLM". Replace direct d.log references with d.logger() at the sub-call failure, race completion, and quality-evaluation fallback sites to avoid nil logger panics and ensure consistent logger naming. * Rename move_go2_autonomy to unitree_go2_autonomy Update config/unitree_go2_autonomy.json5: changed the action entry name from "move_go2_autonomy" to "unitree_go2_autonomy" to align the config entry with the file/connector naming and avoid naming inconsistencies. * Add stall detection and progress tracking for moves Introduce progress-based convergence checks and timeouts for move commands. Shorten tick interval (100ms -> 50ms) and add stallTimeout, commandTimeout, turnProgressEps and driveProgressEps constants. Extend moveCommand with timing/progress fields (started, lastImprove, bestGap) and add markPhase/recordProgress helpers. Initialize progress tracking in queue and replace legacy movementAttempts/gapPrevious counters with recordProgress checks in tickTurn and tickDrive, aborting on stall or command timeout. Adjust turn/drive logic accordingly and remove obsolete counters from moveConnector. * Remove redundant comment in move.go Delete an unnecessary comment in plugins/actions/unitree/go2/autonomy/move.go that described an "overshoot" nudge; no functional changes were made to the logic, just cleaned up the source for clarity. * Add cloud session and hybrid zenoh backend Introduce a cloudsession package (client, session, topics) implementing a WebSocket-based cloud broker client with binary/JSON frames and tests. Add zenoh backend abstractions: a Session interface, concrete local zenoh backend, cloud backend adapter, and a hybrid session that routes IsCloudTopic topics to the cloud broker. Wire default zenoh options via SetDefaultOptions and use SystemConfig.UseSim/APIKey in runtime to enable the hybrid/cloud mode. Update various providers and plugins to depend on the zenoh Session/Publisher/Subscriber interfaces instead of concrete types. * Generalize meta map and include UseSim flag Change buildMeta to return map[string]any (instead of map[string]string) and update its comment to reference system-level values. Add the "use_sim" boolean to the metadata when SystemConfig.UseSim is true. Update addMeta to accept meta as map[string]any and adjust tests to the new type, adding a test that verifies use_sim is omitted when false. * Add simulator note and use_sim config Update README to consolidate simulator status: add a Simulators row noting Gazebo/Isaac Sim support and two Zenoh backend types, and remove the duplicate/older entry. Add use_sim setting to unitree_go2_autonomy.json5 (env var USE_SIM, default false) so the runtime can be toggled to use simulators.
Introduce a new actions connector for Unitree Go2 that saves/records the robot's current location via an HTTP POST to a map/orchestrator endpoint and announces success via ElevenLabs TTS. Adds configuration parsing with sensible defaults (base URL, map name, TTS defaults, timeout) and a Connector implementation (Connect, Tick, Stop). Registers the interface and the action in plugins/actions/actions.go and includes comprehensive unit tests for config parsing, request behavior, and error handling.
Introduce a zenoh-backed localization provider for the Unitree Go2 integration and a corresponding sensor input plugin. Adds decoding of CDR-encoded localization messages (deserializeLocalization) with atomic, lock-free storage of Pose and localized state, default topic/quality tolerance, and provider lifecycle (Stop). Exposes a LocalizationInput plugin that polls the provider and formats messages, plus unit tests for decoding, provider processing, and the input plugin. Also add ReadFloat32LE helper to internal/zenoh/cdr.go and factor debugLogInterval into a shared common.go constant used by providers.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This pull request introduces support for an optional long-term memory system that can be enabled via configuration. It also adds a new, detailed greeting conversation configuration and updates dependencies and settings for improved compatibility and feature support. The most significant changes are grouped below:
Long-term Memory System Integration
memorysection to the configuration files, allowing long-term memory to be enabled or disabled per deployment (config/conversation.json5,config/greeting_conversation-selfie.json5,config/unitree_g1_conversation.json5) [1] [2] [3].MemorySpectype in the config types and updated theSystemConfigstruct to include it (internal/config/types.go) [1] [2].Fuserstruct and its constructor to accept a memory manager, and modified theFusemethod to inject relevant memory context into prompts when enabled (internal/fuser/fuser.go) [1] [2] [3] [4] [5].internal/fuser/fuser_test.go).New Greeting Conversation Configuration
greeting_conversation-selfie.json5config file with detailed multi-mode support, lifecycle hooks, action definitions, and transition rules for greeting and conversation scenarios.Configuration and Dependency Updates
golang.org/x/textas a dependency for improved language/text processing (go.mod) [1] [2].config/unitree_g1_conversation.json5).config/unitree_g1_conversation.json5).