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
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@ those entries into the versioned section when a release is created.
- 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

Expand All @@ -33,6 +36,10 @@ those entries into the versioned section when a release is created.

### 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.
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
1 change: 1 addition & 0 deletions docs/src/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,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
5 changes: 5 additions & 0 deletions docs/src/architecture/protocol.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ Clients send `Request` values:
- `Unsubscribe { topics }`
- `SetJointPosition { joint, position }`
- `ExecutePose { name }`
- `ListParameters { node }`
- `GetParameters { node, names }`
- `SetParameter { node, name, value }`

## Responses

Expand All @@ -33,6 +36,8 @@ The agent replies with `Response` values:
- `Subscribed`
- `Unsubscribed`
- `TopicData`
- `Parameters { node, parameters }`
- `ParameterSet { node, name, successful, reason }`
- `Ok`
- `Error`

Expand Down
50 changes: 50 additions & 0 deletions docs/src/features/parameters.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# Parameters

Talos can view and set ROS 2 parameters on any node in the graph. Parameters
belong to individual nodes, so all parameter operations are addressed to a
fully-qualified node name (for example `/talos_agent`).

## How It Works

The agent acts as a parameter service *client*. For a requested node it creates
short-lived clients to that node's standard `rcl_interfaces` parameter services:

- `<node>/list_parameters`
- `<node>/get_parameters`
- `<node>/set_parameters`

These clients are serviced by the bridge node's spinning executor. The agent
waits briefly for the target services to become available, forwards the call,
and converts the result into transport-agnostic protocol types so clients need
no ROS 2 message definitions.

If the bridge node is not yet running, or the target node does not expose
parameter services within the wait window, the agent returns an error rather
than blocking indefinitely.

## Values

Parameter values are carried as `ParamValue`, mirroring the variants of
`rcl_interfaces/msg/ParameterValue`: `Bool`, `Integer`, `Double`, `String`,
byte/bool/integer/double/string arrays, and `NotSet` for parameters that exist
but have no value.

When setting a value from text (CLI argument or TUI edit field), the type is
inferred:

- `true` / `false` &rarr; bool
- an integer literal &rarr; integer
- a number with a decimal point &rarr; double
- `[ ... ]` &rarr; an array (element type inferred from the contents)
- anything else &rarr; string (surrounding quotes are stripped)

## Clients

The CLI exposes `list-params`, `get-param`, and `set-param`. See
[CLI](../usage/cli.md#parameters).

The TUI Params tab lists graph nodes, loads a selected node's parameters, and
can edit a parameter value in place. See [TUI](../usage/tui.md#params).

Setting a parameter reports the node's per-parameter result; a rejected change
includes the reason supplied by the node.
Loading