docs/content/reference/migration/migration-0-24.md
To accommodate the new tree keyboard navigation feature, the timeline navigation is changed as follows:
Scalar, SeriesLine, SeriesPoint archetypesHave been removed in favor of Scalars, SeriesLines, SeriesPoints respectively.
RERUN_FLUSH_TICK_SECS previously always defaulted to 8ms when left unspecified.
This now only applies to recording streams that use a GRPC connection, all others default to 200ms.
You can learn more about micro-batching in our dedicated documentation page.
InstancePoses3D with orientations in Boxes3D/Ellipsoids3D/Capsules3D behaves differently in some cases nowPreviously, Boxes3D/Ellipsoids3D/Capsules3D all mirrored some transform components from InstancePoses3D.
However, now that all components have distinct archetype-tags from the transform components in InstancePoses3D, form a separate transform
that is applied prior to InstancePoses3D.
I.e. transform resolve order was previously:
final = `Transform3D` * … * `Transform3D` * ([Box3D or `InstancePoses3D].quaternion * [Box3D or `InstancePoses3D].rotation_axis_angle * [Box3D or `InstancePoses3D].centers/translations)
And is now
final = `Transform3D` * … * `Transform3D` * InstancePoses3D * (Box3D.quaternion * Box3D.rotation_axis_angle * Box3D.centers)
As a concrete example, if you previously scaled boxes/ellipsoids/capsules using InstancePoses3D they would be scaled relative to the individual box centers.
Now instead they are scaled relative to the entity's center.
serve_web is now deprecated in Rust and Pythonserve_web will be removed in a future release but is still available for now.
Instead prefer an explicit combination of serve_grpc and serve_web_viewer:
snippet: howto/serve_web_viewer
Rust's even older serve (deprecated since 0.20) has been removed entirely now.
One limitation that we previously had with our data model was that it was only possible to use any Component once per entity path.
This severely effected the design and flexibility of our archetypes.
The underlying reason for this was that the our internal datastructures used the component's type names (previously also referred to as ComponentName) to index into the data.
This release changes how components are identified within the viewer and within our APIs:
Instead of specifying the component's type name, components are now referenced by a new syntax that consists of the (short) archetype name + the archetype field name separated by a colon (:).
As an example, Points3D:positions refers to the positions component in the rerun.archetypes.Points3D archetype.
(Previously, it would only be identified by its component type, i.e. rerun.components.Position3D.)
For custom data, such as AnyValues, it is possible to omit the archetype part of this syntax and only specify the field name.
To View.select columns in dataframe queries, we additionally need to specify the entity that a component belongs to.
Starting with this release, this is achieved by adding the entity_path as a prefix to the component identifier, for example: /helix/structure/left:Points3D:positions.
In general, the syntax for uniquely identifying a component in recording then becomes:
<entity_path>:[<archetype>:]<field>
Internally we use, what we call a ComponentDescriptor to describe the structure and semantics of a component.
Conceptually, it looks like the following:
struct ComponentDescriptor {
archetype: Option<String>, // e.g. `rerun.archetypes.Points3D
component: String, // e.g. `Points3D:positions`
component_type: Option<String>, // e.g. `rerun.components.Position3D
}
Custom data can still use simple field names such as confidences, but it is advised to supply a full ComponentDescriptor, if possible.
For this we also provide a new AnyValues.with_field method.
When logging data to Rerun using the builtin archetypes no changes to user code should be required.
There is also migration code in place so that you can open .rrd files that were created with v0.23.
Recordings from v0.22 can also be loaded, but need to be migrated using the migration tool from v0.23 first.
These changes are reflected in various parts of the Rerun viewer:
ComponentDescriptor for each component.:-based syntax needs to be used when referring to components in the dataframe API and in the dataframe view.blueprint.datatypes.ComponentColumnSelector to use the new component identifier.Blueprint component defaults were previously applied to component types.
They are now instead, applies to archetype fields, i.e. what is now just called component (e.g. GraphNodes:positions).
In practice this means that component defaults are now limited to a single archetype, making them a lot more useful!
<picture> </picture>v0.23, the LeRobot dataloader logged incomplete ComponentDescriptors for robot observations and actions. To fix this, load the dataset in v0.24 and resave your episodes to .rrd (v0.24 now supports saving all selected recordings).VisualizerOverrides are now limited to time series views, and stop to be supported for general views, such as the spatial views.markers component on SeriesPoints is now marked as required, to avoid accidentally logging an archetype without any associated data. In Python, when no component is supplied we automatically set the markers shape to Circle to avoid breaking user code.View.select_static is deprecatedThe dataframe API was originally introduced with the View.select_static() variant of View.select() used when the view only contains static columns. In such cases, select() would yield no row as no data is logged at any index value (by definition of static-only content). Instead, select_static() would force the generation of a single, index-less row populated with the static data.
The same behavior can now be achieved by using Recording.view(index=None, content=...).