Skip to content

Conversation

@spomichter
Copy link
Contributor

No description provided.

Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines 653 to 657
# Connect person tracker inputs
if self.person_tracker:
self.person_tracker.image.connect(self.connection.color_image)
self.person_tracker.detections.connect(self.detection_module.detections)
self.person_tracker.target.connect(self.local_planner.path)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P0 Badge Avoid replacing local planner path feed with person tracker

self.local_planner.path is already connected to the global planner earlier in _deploy_navigation (line 531). The new connection self.person_tracker.target.connect(self.local_planner.path) overwrites that single In connection, so the local planner no longer receives the global path for ordinary navigation. After this change the robot cannot follow normal goal paths unless the person tracker is actively publishing, effectively breaking standard navigation.

Useful? React with 👍 / 👎.

Comment on lines 284 to 287
def _publish_tf(self, msg):
self.odom.publish(msg)
self.tf.publish(*self._odom_to_tf(msg))

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Update _odom when publishing TF

_publish_tf now publishes odometry but no longer assigns self._odom. get_odom() still returns self._odom (line 300), which remains None after startup. Any skill calling UnitreeGo2.get_odom() or NavigationSkillContainer.tag_location will fail because there is never a cached pose.

Useful? React with 👍 / 👎.

Comment on lines 244 to 246
# Publish camera info and pose synchronized with video
timestamp = msg.ts if msg.ts else time.time()
self._publish_camera_info(timestamp)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Restore camera pose publication on video frames

_on_video used to call _publish_camera_pose; the new version omits that call, so /go2/camera_pose is never emitted even though downstream modules expect it (SpatialMemory wires connection.camera_pose at lines 575‑580). Consumers depending on camera pose data will silently stop receiving updates.

Useful? React with 👍 / 👎.

logger = setup_logger(__name__)


class WebInput(Module):
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mdaiter and others added 28 commits December 18, 2025 16:37
Former-commit-id: ab43f03 [formerly d6bef0b]
Former-commit-id: 3bdd010
Former-commit-id: c151fac [formerly 47c334a]
Former-commit-id: 22dfdd2
Former-commit-id: afad9d0 [formerly 0316e54]
Former-commit-id: c447bcb
Former-commit-id: 6c307de [formerly d3f2219]
Former-commit-id: 67828ab
Former-commit-id: 38a15b0 [formerly 6af57af]
Former-commit-id: 8966cb3
Former-commit-id: 5577825 [formerly 74e5201]
Former-commit-id: 9cca149
Former-commit-id: fe43b71 [formerly f589fc5]
Former-commit-id: 4b56d04
Former-commit-id: 1d1ff61 [formerly 9e3ed7b]
Former-commit-id: 2eb0663
Former-commit-id: 8c29c18 [formerly f413e26]
Former-commit-id: 308b2ba
Former-commit-id: c9f7fa2 [formerly 3ec45f1]
Former-commit-id: a4c3b62
Former-commit-id: a7c3af2 [formerly 1e84631]
Former-commit-id: ca77c9a
Former-commit-id: 40cc0b6 [formerly 3f00223]
Former-commit-id: b74985c
Former-commit-id: 0068a12 [formerly 4bd67d5]
Former-commit-id: 809f440
Former-commit-id: 1bd82cc [formerly 19eaa9d]
Former-commit-id: 3933580
Former-commit-id: c83cf64 [formerly 842cb95]
Former-commit-id: a85aa82
Former-commit-id: 3cdbd10 [formerly 097d9ad]
Former-commit-id: 5e589b8
Former-commit-id: 0600052 [formerly 141f818]
Former-commit-id: 6a6eaa1
Former-commit-id: 02d36d8 [formerly ec182b4]
Former-commit-id: 68e0b0d
…gration-paul

# Unitree Agents2 Skill Integration

## Overview
This PR integrates the Agents2 framework with the Unitree robot skill system, enabling AI agent-based control and human interaction capabilities.

## Key Changes

### Agent Framework Enhancements
- **Agent Core Improvements** (`dimos/agents2/agent.py`)
  - Improved message handling with support for human messages and special outputs
  - Enhanced state serialization with datetime support
  - Added agent lifecycle management with proper stop mechanisms

### Human Interaction CLI
- **New Human CLI Interface** (`dimos/agents2/cli/human_cli.py`, `dimos/agents2/cli/human.py`)
  - Interactive command-line interface for human operators
  - Real-time skill monitoring and control
  - Support for direct human input into agent conversations
  - Visual feedback for skill execution states

### Skill Coordination Improvements
- **Enhanced Skill Coordinator** (`dimos/protocol/skill/coordinator.py`)
  - Improved async event handling with lazy initialization
  - Better loop context management for multi-threaded environments
  - Added proper cleanup and unsubscribe mechanisms
  - Enhanced error reporting and debugging capabilities

### Hardware Integration
- **New Webcam Module** (`dimos/hardware/webcam.py`)

### Testing Infrastructure
- **Comprehensive Test Suite**
  - Added fixture-based testing with recorded agent conversations
  - New test files for agent functionality (`test_agent.py`, `test_agent_direct.py`, `test_agent_fake.py`)
  - Integration tests for Unitree skill container
  - Webcam agent testing capabilities

### Unitree Integration Components
- **Skill Container** (`dimos/robots/unitree_webrtc/unitree_skill_container.py`)
  - Bridge between agent framework and Unitree robot
  - WebRTC-based communication support
  - Skill deployment and management

### Utilities and Infrastructure
- **Core Module Updates** (`dimos/core/module.py`)
  - Improved module lifecycle management
  - Better async/sync boundary handling
- **LCM Protocol Updates** (`dimos/protocol/pubsub/lcmpubsub.py`)
  - Enhanced message serialization
  - Better error handling for None messages

## Bug Fixes
- Resolved test loop synchronization problems
- Fixed JSON encoding for datetime objects
- Improved error handling in skill execution

Former-commit-id: 9706cbe [formerly b41850b]
Former-commit-id: 3ff0cc8
Former-commit-id: 3b33307 [formerly 0449463]
Former-commit-id: 2278ada
Former-commit-id: c8cd92c [formerly 34fa532]
Former-commit-id: 5e73955
Former-commit-id: 1fa867e [formerly d81b3a2]
Former-commit-id: c9b534e
Adds gstreamer camera

Former-commit-id: 50f92b7 [formerly 05e9799]
Former-commit-id: f8159ea
Former-commit-id: 724f20a [formerly c880680]
Former-commit-id: db6423b
Former-commit-id: c44ff06 [formerly bd71879]
Former-commit-id: 4a21efb
* zed local node

* Update dimos/hardware/webcam.py

Co-authored-by: Paul Nechifor <paul@nechifor.net>

* Update dimos/hardware/webcam.py

Co-authored-by: Paul Nechifor <paul@nechifor.net>

* fix missing import

---------

Co-authored-by: Paul Nechifor <paul@nechifor.net>
Former-commit-id: 947b3cd [formerly 78dc8c9]
Former-commit-id: 6a55068
leshy and others added 18 commits December 24, 2025 10:51
Former-commit-id: 46f1b91 [formerly 8d5c0ae]
Former-commit-id: 3e9b0e2
Former-commit-id: 0edcabc [formerly c4ebc93]
Former-commit-id: fc6db55
Former-commit-id: fbb2916 [formerly 46512b0]
Former-commit-id: aadc59d
Former-commit-id: e4b170a [formerly 3bbd13f]
Former-commit-id: 7f10e1c
Former-commit-id: 9d57252 [formerly 0aa462c]
Former-commit-id: 4a1fb3e
Former-commit-id: 1a4f08e [formerly 4ca85ec]
Former-commit-id: 07881ac
…odel standardization, reid system

detection pipeline rewrite, embedding, vl model standardization, reid system

## small features around this

- Implements a retry decorator
- Better VL model JSON query system with retry, validation & extraction
- Better VL model bounding box query parsing, Detection2D output directly from vl model
- New modular detection type structure, moved detection2d to detection/ since they are 3d also
```
├── detection2d
│   ├── base.py
│   ├── bbox.py
│   └── person.py
└── detection3d
    ├── base.py
    ├── bbox.py
    └── pointcloud.py
```
## embedding model standardization
`models/embedding/`

```py
class EmbeddingModel(ABC, Generic[E]):
    @AbstractMethod
    def embed(self, *images: Image) -> E | list[E]:
    def embed_text(self, *texts: str) -> E | list[E]:
    def compare_one_to_many(self, query: E, candidates: list[E]) -> torch.Tensor:
    def compare_many_to_many(self, queries: list[E], candidates: list[E]) -> torch.Tensor:
    def query(self, query_emb: E, candidates: list[E], top_k: int = 5) -> list[tuple[int, float]]:
    def warmup(self) -> None:
```

implements

`mobileclip.py`
`clip.py`
`treid.py (torch re-id)`

- all of those conform to the same interface type and are passing the same tests

## vlm image query standardization
`models/vl`

requires drivers to implement:
```py
class VlModel:
    def warmup(self) -> None
    def query(self, image: Image, query: str, **kwargs) -> str:
```

provides:

```py
class VlModel:
    def query_detections(self, image: Image, query: str) -> ImageDetections2D:
```


- JSON validation, extraction and retry system (in case of goofy responses)
- vlm queries now return standard Detction2D types directly
- adds new moondream model integration

`qwen.py`
`moondream.py`

## initial re-id system and module

Module takes detections and image
Outputs annotations and stable detections

```py
class ReidModule(Module):
    detections: In[Detection2DArray] = None  # type: ignore
    image: In[Image] = None  # type: ignore
    annotations: Out[ImageAnnotations] = None  # type: ignore
    stabledetections: Out[Detection2DArray] = None  # TODO! easy but not in yet - for people follow etc to have a stable target
```

can plug in any IDSystem

```py
class IDSystem(ABC):
   def register_detection(self, detection: Detection2DBBox) -> int: # returns a long term id
```

EmbeddingIDsystem can host anything that takes an image and outputs a multidimensional vector, uses this to cluster frames detections.

Uses timestamp syncing to reconstruct Detection2D types from ros detection type + actual image frame


## random

includes different .direnv files (to auto enter nix env, auto enter venv etc)

Former-commit-id: b8eec2e [formerly 3e44e70]
Former-commit-id: 7ef7fe0
cli tooling theme

Former-commit-id: 2f165b7 [formerly c738b79]
Former-commit-id: a056f1e
Former-commit-id: cb4d020 [formerly 1f03ca2]
Former-commit-id: fbf4445
Former-commit-id: 162e2bc [formerly 5dbf7e4]
Former-commit-id: 8ca0e73
Fix spatial memory bug in g1 

Former-commit-id: 084e430 [formerly be94cb6]
Former-commit-id: 46cb2cb
…on2d module and local planner PATH input for nav

Former-commit-id: 65328be [formerly ba5abc9]
Former-commit-id: 8f0c61b
…tons of lag

Former-commit-id: d848dc0 [formerly ca16792]
Former-commit-id: 89cd437
@spomichter spomichter requested a review from a team January 8, 2026 13:59
@spomichter spomichter force-pushed the dynamic-person-tracking-new-detections branch from b38df79 to 0057747 Compare January 8, 2026 13:59
@greptile-apps
Copy link

greptile-apps bot commented Jan 8, 2026

Too many files changed for review.

1 similar comment
@greptile-apps
Copy link

greptile-apps bot commented Jan 8, 2026

Too many files changed for review.

@spomichter spomichter force-pushed the dynamic-person-tracking-new-detections branch from 0057747 to e40f213 Compare January 8, 2026 22:59
@greptile-apps
Copy link

greptile-apps bot commented Jan 8, 2026

Too many files changed for review.

1 similar comment
@greptile-apps
Copy link

greptile-apps bot commented Jan 8, 2026

Too many files changed for review.

@spomichter spomichter force-pushed the dynamic-person-tracking-new-detections branch from e40f213 to 17bb897 Compare January 8, 2026 23:18
@greptile-apps
Copy link

greptile-apps bot commented Jan 8, 2026

Too many files changed for review.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants