0.29.0 - URDF improvements, improved ROS 2 docs, and memory panel
Rerun is an easy-to-use database and visualization toolbox for multimodal and temporal data. Try it live at https://rerun.io/viewer.
- Python:
pip install rerun-sdk - Rust:
cargo add rerunandcargo install rerun-cli --locked - Online demo: https://rerun.io/viewer
- C++ FetchContent: https://github.com/rerun-io/rerun/releases/download/0.29.0/rerun_cpp_sdk.zip
π§³ Migration guide: https://rerun.io/docs/reference/migration/migration-0-29
β¨ Overview & highlights
URDF loader improvements
In the previous 0.28 release, we overhauled Rerun's built-in URDF loader to work with TF-style transforms with parent and child frames.
Now, taking advantage of these entity-path-independent transforms, we simplified the hierarchy in which URDF assets are stored.
Collision and visual meshes are now below separate entity path roots, making it easy to toggle one or the other.
Additionally, the paths are now more compact to make it easier to scroll through them.
https://github.com/user-attachments/assets/7a3f6112-e87f-4249-977b-ed9944e2c356
UrdfTree utility in Python
We added a UrdfTree Python utility that can be used to simplify operations with URDF models, e.g.:
- accessing links and joints
- computing transforms from joint states
- retrieving geometry entity paths for links
We also updated our animated_urdf.py demo to use this utility, showing for example how you can dynamically change the color of a gripper link based on its angle.
https://github.com/user-attachments/assets/e0b6882f-b5dd-47d9-9afc-3ea30bc38e28
Experimental screenshots from Python
There's now an experimental screenshot API which allows to take screenshots of the Viewer or individual views:
# Connect to a local viewer.
viewer = ViewerClient()
# Screenshot the entire viewer.
viewer.save_screenshot("entire_viewer.jpg")
# Screenshot only the view we created earlier.
viewer.save_screenshot("my_view.png", view_id=view.id)
For a full snippet check here.
β οΈ There's still a lot of rough edges and this API may change in the future.
Improved target frame selection UI
The target frame selection UI now shows matching suggestions, making it easier to select a frame name from the transforms in your data.
https://github.com/user-attachments/assets/4ba25a41-de6a-4209-bd06-c31a33d8d993
Updated ROS 2 example & documentation
We refreshed the documentation showing examples of how some ROS concepts and messages can be mapped to Rerun, together with an updated Python node example. The documentation page can be found here.
Improved memory panel
You can now get some insight on which parts of your recording use how much memory in the viewer using the improved memory panel:
β οΈ Breaking changes
- Python: New API for visualizer overrides -
VisualizerOverridesremoved, now pass visualizer objects directly (e.g.,rr.SeriesLines()) - Python:
Entry.update()deprecated in favor ofEntry.set_name() - Python:
CatalogClientandServerconstructor parameters renamed (addrβurl/host) - Python: Removed deprecated
rerun.dataframemodule (usererun.server.Serverandrerun.cataloginstead) - Python: Removed deprecated
rerun.catalogAPIs from 0.28 - Python: Internal submodules moved to underscore-prefixed names (e.g.,
rr.color_conversionβrr._color_conversion) - CLI:
rerun server --addrrenamed torerun server --host - Blueprint: Component overrides from
.rblfiles created in previous versions cannot be loaded in 0.29 - Data Platform: Datasets need re-registration to populate
nameandstart_timein segment table
π§³ Check the migration guide for details: https://rerun.io/docs/reference/migration/migration-0-29
π Details
πͺ΅ Log API
- Fix dropping of entities when using
rerun rrd filter#12584 - Apply backpressure in gRPC proxy server cac538e
- Enforce
Selectorusage inre_sdk::lenses521c796
π Python API
- Allow tables to be created without providing a URL #12132
- Remove deprecated dataframe API (
rerun.dataframe) #12320 - Remove deprecated APIs in
rerun.catalog#12321 - Deprecate
Entry.updatein favor ofEntry.set_name#12370 - Fix missing
child_frame/parent_framearguments from pinhole constructor #12360 - Use visualizer objects in blueprint override API #12345
- Rename
addresstourlorhostdepending on context #12402 - Check for unset attr from extension class init #12376
- Add time axis in snippet in time series view snippet #12506
- Fix
RecordingStreamso it has a unique recording id when none is provided eb14e16 - Do not assume top-level bindings in
RecordingStream.__del__201e7c3 - Fix rare deadlock in Python send/log API 7f72b23
- Catch keyboard interrupt in
rerun-sdkCLI and return exit codes #12496 - Make
rr.experimental.ViewerClient.send_tablemore flexible ba733ad
π¦ Rust API
- Allow tables to be created without providing a URL #12132
- Rust SDK:
blueprintsupport #12307 (thanks @sectore!) - Update MSRV to 1.90 #12337
- Make
RecordingStreamBuilder::with_blueprint()apply to everything, not justspawn()#12347 (thanks @kpreid!) - Rust SDK: Change default server memory limit 5cb7213
- Update ply-rs-bw to 3.0.0 (corrected) #12593 (thanks @bourumir-wyngs!)
πͺ³ Bug fixes
- Fix bad error reporting when registering a (faulty) RRD URI built from a relative path #12309
- Only do
furthest_fromGC when we can download chunks again #12363 - URDF loader: use
InstancePoses3Dfor geometry scale #12371 - Fix incorrect handling for cameras and depth images for 3D views that use target frames other than the scene root #12361
- Fix OSS server locking up when asked for many chunks at once #12384
- Fix GC sometimes not collecting anything #12398
- URDF: Bundle pose + mesh scale in single
InstancePoses3D#12385 (thanks @yujeong1jeong!) - Don't show error for implicit transform axes if we're already showing named transforms #12419
- Fix opening link with only time selection in fragment #12428
- Fix decoding errors for MCAP files with gaps in protobufs #12436
- Fix time point sharing for duration timelines #12466
- Fix transforms & videos breaking when receiving new data in the background #12452
- Fix ignoring nested
oneoffields inprotobufMCAP messages #12462 - Fix early disconnect with
--newest-first#12484 - Fix: tap stream view to move time cursor #12476
- Fix
RecordingInfoproperties not included in the segment table 3781b18 - Fix DAE import crash caused by duplicate XML id attributes #12555 (thanks @yujeong1jeong!)
- Warn when logging transform at
/without setparent_frame#12588 - Fix
sensor_msgs::PointCloud2MCAP parser for small pointclouds f705229
π Viewer improvements
- Automatically cast to
Float64Arrayin time series views #12342 - Show loaded indicator when time panel is collapsed #12396
- Video stream changes to support out of order samples #12277
- Measure and display network latency to redap servers #12426
- Enable vulkan backend for Mac Viewer builds, select graphics adapter more explicitly internally #12449
- More robust world grid rendering #12444
- Display downloaded & max size of recording in selection panel #12429
- Allow multiple visualizers of same type per
Entity#12275 - Warn if an entity has multiple
CoordinateFrameinstances #12514 - Fix case of unstable camera image plane distance #12559
- Simplify memory panel with more tabs 9dada34
π Performance improvements
- Implement backpressure in
re_log_channel3a25a25
π§βπ« Examples
- Modernize
ros_nodeexample and documentation #11968 - Add MCAP example #12353
- Add eye control example #12459
- Use optical flow tracking in detect and track objects example #12564
- Show dynamic mesh update in
animated_urdf.pyexample #12571
π Docs
- Reshuffle documentation organization #12355
- Update documentation about MCAP ROS 2 message support #12406
- feat: Add the SAM 3D Body example #12499 (thanks @pablovela5620!)
- Add how to guide on querying videos 5a36526
- Mention memory limit settings UI in docs 50ebee6
- docs(sdk): add thread safety warning for log() with mutexes #12579 (thanks @ecto!)
πΌ UI improvements
- Add user menu #12336
- Larger than ram time panel UI #12338
- Improved auth section in server modal #12369
- Show info message after screenshot from command palette #12465
- Display chunk download bandwidth #12451
- Fix icon colors in light theme edac1a1
πΈπͺ Name
This release has a name β Riddarholmen!