Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
uses: actions/checkout@v6

- name: Cache mdBook tools
uses: actions/cache@v4
uses: actions/cache@v5
with:
path: |
~/.cargo/bin/mdbook
Expand Down
34 changes: 34 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,44 @@ those entries into the versioned section when a release is created.

## [Unreleased]

### Added

- Add a source map and rustdoc notes clarifying `talos-common` protocol,
session, transport, config, and URDF ownership boundaries.
- Add per-topic subscribe and unsubscribe controls in the TUI Topics tab, with subscription choices preserved across reconnects.
- Document how customized topic subscriptions handle newly discovered topics and retry failed manual toggles after reconnect.
- Add `sensor_msgs/msg/LaserScan` subscription support with full field conversion (`header`, `angle_min/max/increment`, `time_increment`, `scan_time`, `range_min/max`, `ranges`, `intensities`).
- Add `sensor_msgs/msg/Imu` subscription support with full field conversion (`header`, `orientation` + covariance, `angular_velocity` + covariance, `linear_acceleration` + covariance).
- Add `geometry_msgs/msg/PoseStamped` subscription support (`header`, `pose`).
- Add per-subscription `qos` config field accepting `"default"` (Reliable, Volatile, KeepLast — rclrs default depth) or `"sensor_data"` (BestEffort, Volatile, KeepLast 5). Omitting `qos` preserves existing behavior.
- View and set ROS 2 parameters on any node via the standard `rcl_interfaces` parameter services. The agent gains `ListParameters`, `GetParameters`, and `SetParameter` protocol requests.
- CLI commands `list-params`, `get-param`, and `set-param`.
- A TUI Params tab to browse a node's parameters and edit values in place.

### Changed

- Split CLI command handling, parameter protocol types, and TUI parameter input handling into focused modules.
- Centralize talos-agent supported ROS message type subscription wiring in a registry for easier message support additions.
- Split the agent server implementation into focused UDS, QUIC, request, graph, and control modules without changing the public server API.
- Cache mdBook tooling in the Docs workflow to reduce CI time.
- Split TUI app state topic, log, and joint behavior into focused state modules without changing UI behavior.
- Update the release workflow so feature development targets `dev` and version bumps run when `dev` is promoted to `main`.
- Keep TUI topic ordering stable while subscription acknowledgements and refreshed topic lists arrive mid-session.
- Stop reconnect requests from retrying topics that disappeared from the latest agent topic list, and document that those topics drop out of the pane until re-advertised.
- Treat a fresh `TopicList` as a reconnect catalog rather than proof of active subscriptions, which avoids false subscribed badges before subscribe acknowledgements land.
- Let `s` toggle the selected topic from either Topics pane and make pending subscription badges easier to distinguish without relying on color.
- Split TUI input handling from terminal setup so key behavior can be tested independently of the terminal lifecycle.

### Fixed

- Preserve existing parameter types when editing TUI parameter values that look like another type.
- Return CLI errors for failed `list-params` and `get-param` responses.
- Show fully-qualified node names in the TUI Params tab so namespaced nodes are distinguishable.
- Fix clean `pixi run build` of `rclrs_ws` failing on the first Rust package: the parent talos cargo workspace leaked into the nested build via `.cargo/config.toml` `[patch.crates-io]` paths and the root `Cargo.toml` workspace. The build now isolates the ancestor cargo config, and `rclrs_ws` is excluded from the talos workspace.
- Clear stale TUI topic subscription errors when later topic data confirms a desired subscription is healthy again.
- Clear stale unsubscribe errors after reconnect when the desired state is already unsubscribed.
- Ignore stale TUI subscribe or unsubscribe acknowledgements after desired topic intent changes.
- Roll back optimistic TUI topic toggles if the client command channel has already stopped.

## [0.1.5] - 2026-04-28

Expand Down
128 changes: 112 additions & 16 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ members = [
"talos-agent",
"talos-tui",
]
# rclrs_ws is a nested colcon/cargo workspace built via pixi; keep its crates
# out of this workspace so cargo doesn't try to adopt them.
exclude = ["rclrs_ws"]

[workspace.package]
version = "0.1.5"
Expand Down
2 changes: 2 additions & 0 deletions docs/src/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

- [Overview](architecture/overview.md)
- [Agent and Clients](architecture/agent-client-model.md)
- [Source Map](architecture/source-map.md)
- [Protocol](architecture/protocol.md)
- [Transports](architecture/transports.md)

Expand All @@ -26,6 +27,7 @@
- [Node Introspection](features/node-introspection.md)
- [Logs](features/logs.md)
- [Joint Control](features/joint-control.md)
- [Parameters](features/parameters.md)

# Design History

Expand Down
17 changes: 10 additions & 7 deletions docs/src/architecture/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ flowchart LR
TUI["talos-tui"]
end

Common["talos-common<br/>protocol, config, transports"]
Common["talos-common<br/>protocol, session, transport, config, URDF"]

subgraph Runtime["Robot runtime"]
Agent["talos-agent"]
Expand All @@ -22,9 +22,9 @@ flowchart LR
Agent -->|"links to"| ROS
```

`talos-common` is the shared base. It defines the protocol types, bincode
framing, client session trait, transport setup, configuration model, and URDF
parsing. It has no ROS 2 dependency.
`talos-common` is the shared base. It defines protocol schema and framing,
the application-facing client session trait, transport endpoint setup,
configuration data, and URDF parsing helpers. It has no ROS 2 dependency.

`talos-agent` is the only crate that links to ROS 2. It creates the ROS 2 node,
subscribes to configured topics, converts ROS 2 messages into `DynValue`, and
Expand All @@ -46,9 +46,12 @@ protocol and a reachable agent.
The agent owns ROS 2 message typing and conversion. Clients receive generic
Talos protocol data and do not need ROS 2 message definitions.

The protocol layer hides transport differences from the CLI and TUI. UDS uses a
single framed connection. QUIC uses a bidirectional control stream plus
server-initiated unidirectional data streams.
The `session` layer hides transport differences from the CLI and TUI through
`ProtocolClient`. UDS uses a single framed connection. QUIC uses a
bidirectional control stream plus server-initiated unidirectional data streams.

For a task-oriented guide to which source files own each change, see
[Source Map](source-map.md).

The terminal UI is a client of the protocol, not a special case inside the
agent. It reconnects, lists topics, subscribes, and renders the latest data it
Expand Down
Loading