Planet ROS
Planet ROS - http://planet.ros.org
Planet ROS - http://planet.ros.org http://planet.ros.org
ROS Discourse General: Native rcl::tensor type
We propose introducing the concept of a tensor as a natively supported type in ROS 2 Lyrical Luth. Below is a sketch of how this would work for initial feedback before we write a proper REP for review.
Abstract
Tensors are a fundamental data structure often used to represent multi-modal information for deep neural networks (DNNs) at the core of policy-driven robots. We introduce rcl::tensor
as a native type in rcl,
as a container for memory that can be optionally externally managed. This type would be supported through all client libraries (rclcpp
, rclpy
, …) the ROS IDL rosidl
, and all RMW implementations. This enables tensor_msgs
ROS messages based on sensor_msgs
which use tensor
instead of uint8[]
. The default implementation of rcl::tensor
operations for creation/destruction and manipulation will be available on all tiers of supported platforms.. With the presence of an optional package and an environment variable, a platform-optimized implementation for rcl::tensor
operations can then be swapped in at runtime to take advantage of accelerator-managed memory/compute. Through adoption of rcl::tensor
in developer code and ROS messages, we can enable seamless platform-specific acceleration determined at runtime without any recompilation or deployment.
Motivation
ROS 2 should be accelerator-aware but accelerator-agnostic like other popular frameworks such as PyTorch or NumPy. This enables package developers that conform to ROS 2 standards to gain platform-specific optimizations for free (“optimal where possible, compatible where necessary”).
Background
AI robots and policy-driven physical agents rely on accelerated deep neural network (DNN) model inference through tensors. Tensors are a fundamental data structure to represent multi-dimensional data from scalar (rank 0), vectors (rank 1), and matrices (rank 2) to batches of multi-channel matrices (rank 4). These can be used to encode all data flowing through such graphs including images, text, joint positions, poses, trajectories, IMU readings, and more.
Performing inference on these DNN model policies requires these tensors to reside in accelerator memory. ROS messages, however, expect their payloads to reside in main memory with field types such as uint8[]
or multi-dimensional arrays. This requires these payloads to be copied from main memory to accelerator memory and then copied back to main memory after processing in order to populate a new ROS message to publish. This quickly becomes the primary bottleneck for policy inference. Type adaptation in rclcpp
provides a solution for this, but it requires all participating packages to have accelerator-specific dependencies and only applies within the client library, so RMW implementations cannot apply optimized-for-accelerator memory, for example.
Additionally, without a canonical tensor type in ROS 2, a patchwork of different tensor libraries across various ROS packages is causing impedance mismatches with popular deep learning frameworks including PyTorch.
Requirements
- Provide a native way to represent tensors across all interfaces from client libraries through RMW implementations.
- Make available a set of common operations on tensors that can be used by all interfaces.
- Enable accelerated implementations of common tensor operations when available at runtime.
- Enable accelerator memory management backing these tensors when available at runtime.
- Optimize flow of tensors for deep neural network (DNN) model inference to avoid unnecessary memory copies.
- Allow for backwards compatibility with all non-accelerated platforms.
Rough Sketch
struct rcl::tensor
{
std::vector<size_t> shape; // shape of the tensor
std::vector<size_t> strides; // strides of the tensor
size_t rank; // number of dimensions
union {
void* data; // pointer to the data in memory handle
size_t handle; // token stored by rcl::tensor for externally managed memory
}
size_t byte_size; // size of the data
data_type_enum type; // the data type
}
Core Tensor APIs
Inline APIs available on all platforms in core ROS 2 rcl
.
Creation
Create a new tensor from main memory.
rcl_tensor_create_copy_from_bytes(const void *data_ptr, size_t byte_size, data_type_enum type)
rcl_tensor_wrap_bytes(void *data_ptr, size_t size, data_type_enum type)
rcl_tensor_create_copy_from(const struct rcl::tensor & tensor)
Common operations
Manipulations performed on tensors that can be optionally accelerated. The more complete these APIs are, the less fragmented the ecosystem will be but the higher the burden on implementers. These should be modeled after PyTorch tensor API and existing C tensor libraries such as libXM or C++ libraries like xtensor.
reshape()
squeeze()
normalize()
fill()
zero()
- …
Managed access
Provide a way to access elements individually in parallel.
rcl_tensor_apply(<functor on each element with index>)
Direct access
Retrieve the underlying data in main memory but may involve movement of data.
void* rcl_tensor_materialized_data()
Other Conveniences
rcl
functions to check which tensor implementation is active.tensor_msgs::Image
to mirrorsensor_msgs::Image
to enable smooth migration to usingtensor
type in common ROS messages. Alternative is to add a “union” field insensor_msgs::Image
with theuint8[]
data
field.cv_bridge
API to convert betweencv::Mat
andtensor_msgs::Image
.
Platform-specific tensor implementation
Without loss of generality, suppose we have an implementation of tensor
that uses an accelerated library, such as rcl_tensor_cuda
for CUDA. This package provides shared libraries that implement all of the core tensor APIs. An environment variable for RCL_TENSOR_IMPLEMENTATION = rcl_tensor_cuda
enables the loading of rcl_tensor_cuda
at runtime without rebuilding any other packages. Unlike the native implementation, rcl_tensor_cuda
copies the input buffer into a CUDA buffer and uses CUDA to perform operations on that CUDA buffer.
It also provides new APIs for creating a tensor from a CUDA buffer, for checking whether the rcl_tensor_cuda
implementation is active, and for accessing the CUDA buffer from a tensor
available for any other package libraries the link to rcl_tensor_cuda
directly. An RMW implementation linked against rcl_tensor_cuda
would query the CUDA buffer backing a tensor
and use optimized transport paths to handle it, while a general RMW implementation could just call rcl_tensor_materialize_bytes
and transport the main memory payload as normal.
Simple Examples
Example #1: rcl::tensor with “accelerator-aware” subscriber
Node A publishes a ROS message with rcl::tensor
from main memory bytes and sends it to a topic Node B subscribes to. Node B happens to be written to first check whether the rcl::tensor
is backed by externally managed memory AND checks that rcl_tensor_cuda
is active (indicates this is backed by CUDA). Node B has a direct dependency on rcl_tensor_cuda
in order to perform this check.
Alternatively, Node B could have also been written with no dependency on any rcl::tensor
implementation to simply retrieve the bytes from the rcl::tensor
and ignore the externally managed memory flag altogether, which would have forced a copy back from accelerator memory in Scenario 2.
MyMsg.msg
—--------
std_msgs/Header header
tensor payload
Scenario 1: RCL_TENSOR_IMPLEMENTATION = <none>
----------------------------------------------
┌─────────────────┐ ROS Message ┌─────────────────┐
│ Node A │ ────────────────► │ Node B │
│ │ │ │
│ ┌─────────────┐ │ │ ┌─────────────┐ │
│ │Create Tensor│ │ │ │Receive MyMsg│ │
│ │in MyMsg │ │ │ │ │ │
│ └─────────────┘ │ │ └─────────────┘ │
│ │ │ │ │ │
│ ▼ │ │ ▼ │
│ ┌─────────────┐ │ │ ┌─────────────┐ │
│ │Publish │ │ │ │Check if │ │
│ │MyMsg │ │ │ │Externally │ │
│ └─────────────┘ │ │ │Managed │ │
└─────────────────┘ │ └─────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │Copy │ │
│ │to Accel Mem │ │
│ └─────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │Process on │ │
│ │Accelerator │ │
│ └─────────────┘ │
└─────────────────┘
Scenario 2: RCL_TENSOR_IMPLEMENTATION = rcl_tensor_cuda
--------------------------------------------------------
┌─────────────────┐ ROS Message ┌─────────────────┐
│ Node A │ ────────────────► │ Node B │
│ │ │ │
│ ┌─────────────┐ │ │ ┌─────────────┐ │
│ │Create Tensor│ │ │ │Receive MyMsg│ │
│ │in MyMsg │ │ │ │ │ │
│ └─────────────┘ │ │ └─────────────┘ │
│ │ │ │ │ │
│ ▼ │ │ ▼ │
│ ┌─────────────┐ │ │ ┌─────────────┐ │
│ │Publish MyMsg│ │ │ │Check if │ │
│ └─────────────┘ │ │ │Externally │ │
└─────────────────┘ │ │Managed │ │
│ └─────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │Process on │ │
│ │Accelerator │ │
│ └─────────────┘ │
└─────────────────┘
In Scenario 2, the same tensor function call in Node A creates a tensor backed by accelerator memory instead. This allows Node B, which was checking for a rcl_tensor_cuda-managed tensor to skip the extra copy.
Example #2: CPU versus accelerated implementations
SCENARIO 1: RCL_TENSOR_IMPLEMENTATION = <none> (CPU/Main Memory Path)
========================================================================
┌─────────────────────────────────────────────────────────────────────────────┐
│ CPU/Main Memory Path │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Create │ │ Normalize │ │ Reshape │ │ Materialize │
│ Tensor │───▶│ Operation │───▶│ Operation │───▶│ Bytes │
│ [CPU Mem] │ │ [CPU] │ │ [CPU] │ │ [CPU Mem] │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
│ │ │ │
▼ ▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Allocate │ │ CPU-based │ │ CPU-based │ │ Return │
│ main memory │ │ normalize │ │ reshape │ │ pointer to │
│ for tensor │ │ computation │ │ computation │ │ byte array │
│ data │ │ on CPU │ │ on CPU │ │ in main mem │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
Memory Layout:
┌─────────────────────────────────────────────────────────────────────────────┐
│ Main Memory │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Tensor │ │ Normalized │ │ Reshaped │ │ Materialized│ │
│ │ Data │ │ Tensor │ │ Tensor │ │ Bytes │ │
│ │ [CPU] │ │ [CPU] │ │ [CPU] │ │ [CPU] │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
SCENARIO 2: RCL_TENSOR_IMPLEMENTATION = rcl_tensor_cuda (GPU/CUDA Path)
=======================================================================
┌─────────────────────────────────────────────────────────────────────────────┐
│ GPU/CUDA Path │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Create │ │ Normalize │ │ Reshape │ │ Materialize │
│ Tensor │───▶│ Operation │───▶│ Operation │───▶│ Bytes │
│ [GPU Mem] │ │ [CUDA] │ │ [CUDA] │ │ [CPU Mem] │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
│ │ │ │
▼ ▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Allocate │ │ CUDA kernel │ │ CUDA kernel │ │ Copy from │
│ GPU memory │ │ for normalize│ │ for reshape │ │ GPU to CPU │
│ for tensor │ │ computation │ │ computation │ │ memory │
│ data │ │ on GPU │ │ on GPU │ │ (cudaMemcpy)│
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
Memory Layout:
┌─────────────────────────────────────────────────────────────────────────────┐
│ GPU Memory │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Tensor │ │ Normalized │ │ Reshaped │ │
│ │ Data │ │ Tensor │ │ Tensor │ │
│ │ [GPU] │ │ [GPU] │ │ [GPU] │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ Main Memory │
│ │
│ │
│ ┌─────────────┐ │
│ │ Materialized│ │
│ │ Bytes │ │
│ │ [CPU] │ │
│ └─────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
IMPLEMENTATION NOTES
===================
• Environment variable RCL_TENSOR_IMPLEMENTATION controls which path is taken
• Same API calls work in both scenarios (transparent to user code)
• GPU path requires CUDA runtime and rcl_tensor_cuda package
• Memory management handled automatically by implementation
• Backward compatibility maintained for CPU-only systems
Discussion Questions
-
Should we constrain tensor creation functions to using memory allocators instead?
rcl::tensor
implementations would need to provide custom memory allocators for externally managed memory, for example. -
Do we allow for mixed runtimes of cpu-backed/external memory managed tensors in one runtime? What creation pattern would allow for precompiled packages to “pick up” accelerated memory dynamically at runtime by default but also explicitly opt-out from it for specific tensors as well?
-
Do we need to expose the concept of “streams” and “devices” through the
rcl::tensor
API or can that be kept under the abstraction layer? They are generic concepts but may too strongly proscribe the underlying implementation. However, exposing them would let developers provide stronger intent on how they want their code to be executed in an accelerator-agnostic manner. -
What common tensor operations should we keep as supported? The more we choose, the higher the burden on the
rcl::tensor
implementations, but the more standardized and less fragmented our ROS 2 developer base. For example, we do not want fragmentation where packages begin to depend onrcl_tensor_cuda
and thus fallback only to CPU forrcl_tensor_opencl
(wlog). -
Should tensors have a multi-block interfaces from the get-go? Assuming one memory address seems problematic for rank 4 tensors, for example (e.g., sets of images from multiple cameras).
-
Should the ROS 2 canonical implementation of
rcl::tensor
be inline or based on an existing, open source library? If so, which one?
Summary
tensor
as a native type inrcl
and made available through all client libraries, ROS IDL, and all RMW implementations, likestring array
oruint8[]
.tensor_msgs::Image
issensor_msgs::Image
but withtensor
payload instead ofuint8[]
.- Add
cv_bridge
functions to createtensor_msgs::Image
fromcv2::Mat
to spur adoption.
- Implementations for
tensor
lifecycle and manipulation can be dynamically swapped at runtime with a package and an environment variable.- Data for tensors can then be optionally stored in externally managed memory, eliminating need for type adaptation in
rclcpp
. - Operations on tensors can then be optionally implemented with accelerated libraries.
- Data for tensors can then be optionally stored in externally managed memory, eliminating need for type adaptation in
1 post - 1 participant
![[WWW] [WWW]](/moin_static197/rostheme/img/moin-www.png)
ROS Discourse General: ROS 2 Performance Benchmark - Code Release
In our ROS 2 Performance Benchmark tests, we had interesting findings demonstrating potential bottlenecks for message transport in ROS 2(rolling). Now, we’re excited to release the code which can be used to reproduce our results. Check it out here!
1 post - 1 participant
![[WWW] [WWW]](/moin_static197/rostheme/img/moin-www.png)
ROS Discourse General: ROS 2 Rust Meeting: August 2025
The next ROS 2 Rust Meeting will be Mon, Aug 11, 2025 2:00 PM UTC
The meeting room will be at https://meet.google.com/rxr-pvcv-hmu
In the unlikely event that the room needs to change, we will update this thread with the new info!
With the recent announcement about OSRF funding for adding Cargo dependency management to the buildfarm, and a few people having questions on that, I would like to reiterate that this meeting is open to everyone - working group member or not. If you want to learn what we’re trying to accomplish, please drop by! We’d love to have you!
1 post - 1 participant
![[WWW] [WWW]](/moin_static197/rostheme/img/moin-www.png)
ROS Discourse General: ROS 2 Cross-compilation / Multi architecture development
Hi,
I’m in the process of looking into migrating our indoor service robot from an amd64 based system to the Jetson Orin Nano.
How are you doing development when targeting aarch64/arm64 machines?
My development machine is not the newest, but reasonably powerful. (AMD Ryzen 9 3900X, 32GB RAM) But it struggles with the officially recommended QEMU based approach. Even the vanilla osrf/ros docker image is choppy under emulation. Building the actual image, stack or running a simulated environment is totally out of the question.
The different pathways I investigated so far are:
-
Using QEMU emulation - unusable
-
Using the target platform as the development machine - slow build, but reasonable runtime performance
-
Cloud building the development container - A bit pricey, and the question of building the actual stack still remains. Maybe CMake cross compilation in native container.
-
Using Apple Silicon for development - haven’t looked into it
I’m interested in your approach of this problem. I imagine that using ARM based systems in production robots is a fairly common practice given the recent advances in this field.
7 posts - 6 participants
![[WWW] [WWW]](/moin_static197/rostheme/img/moin-www.png)
ROS Discourse General: Why do robotics companies choose not to contribute to open source?
Hi all!
We wrote a blog post at Henki Robotics to share some of our thoughts on open-source collaboration, based on what we’ve seen and learned so far. We thought that it would be interesting for the community to hear and discuss the challenges open-source contributions pose from a company standpoint, while also highlighting the benefits of doing so and encouraging more companies to collaborate together.
We’d be happy to hear your thoughts and if you’ve had similar experiences!
1 post - 1 participant
![[WWW] [WWW]](/moin_static197/rostheme/img/moin-www.png)
ROS Discourse General: A Dockerfile and a systemd service for starting a rmw-zenoh server
Meanwhile there’s no official method for autostarting rmw-zenoh server this might be useful:
4 posts - 2 participants
![[WWW] [WWW]](/moin_static197/rostheme/img/moin-www.png)
ROS Discourse General: How to Implement End-to-End Tracing in ROS 2 (Nav2) with OpenTelemetry for Pub/Sub Workflows?
I’m working on implementing end-to-end tracing for robotic behaviors using OpenTelemetry (OTel) in ROS 2. My goal is to trace:
-
High-level requests (e.g., “move to location”) across components to analyze latency
-
Control commands (e.g., teleop) through the entire pipeline to motors
Current Progress:
-
Successfully wrapped ROS 2 Service and Action servers to generate OTel traces
-
Basic request/response flows are visible in tracing systems
Challenges with Nav2:
-
Nav2 heavily uses pub/sub patterns where traditional instrumentation falls short
-
Difficult to maintain context propagation across:
-
Multiple subscribers processing the same message
-
Chained topic processing (output of one node becomes input to another)
-
Asynchronous publisher/subscriber relationships
-
Questions:
-
Are there established patterns for OTel context propagation in ROS 2 pub/sub systems?
-
How should we handle fan-out scenarios (1 publisher → N subscribers)?
-
Any Nav2-specific considerations for tracing (e.g., lifecycle nodes, behavior trees)?
-
Alternative approaches besides OTel that maintain compatibility with observability tools?
2 posts - 2 participants
![[WWW] [WWW]](/moin_static197/rostheme/img/moin-www.png)
ROS Discourse General: Space ROS Jazzy 2025.07.0 Release
Hello ROS community!
The Space ROS team is excited to announce Space ROS Jazzy 2025.07.0 was released last week and is available as osrf/space-ros:jazzy-2025.07.0
on DockerHub.
Release details
This release includes a significant refactor the build of our base image making the main container over 60% smaller! Additionally, development images are now pushed to DockerHub to make building with Space ROS and an underly easier than ever. For an exhaustive list of all the issues addressed and PRs merged, check out the GitHub Project Board for this release here.
Code
Current versions of all packages released with Space ROS are available at:
-
GitHub - space-ros/space-ros: The Space ROS meta operating system for space robotics.
-
GitHub - space-ros/docker: Docker images to facilitate Docker-based development.
-
GitHub - space-ros/simulation: Simulation assets of space-ros demos
-
GitHub - space-ros/process_sarif: Tools to process and aggregate SARIF output from static analysis.
What’s Next
This release comes 3 months after the last release. The next release is planned for October 31, 2025. If you want to contribute to features, tests, demos, or documentation of Space ROS, get involved on the Space ROS GitHub issues and discussion board.
All the best,
The Space ROS Team
1 post - 1 participant
![[WWW] [WWW]](/moin_static197/rostheme/img/moin-www.png)
ROS Discourse General: Bagel, the Open Source Project | Guest Speakers Arun Venkatadri and Shouheng Yi | Cloud Robotics WG Meeting 2025-08-11
Please come and join us for this coming meeting at Mon, Aug 11, 2025 4:00 PM UTC→Mon, Aug 11, 2025 5:00 PM UTC,
where guest speakers Arun Venkatadri and Shouheng Yi will be presenting Bagel. Bagel is a new open source project that lets you chat with your robotics data by using AI to search through recorded data. Bagel was recently featured in ROS News for the Week, and there’s a follow-up post giving more detail.
Last meeting, we tried out the service from Heex Technologies, which allows you to deploy agents to your robots or search through recorded data for set events. The software then records data around those events and uploads to the cloud, allowing you to view events from your robots. If you’d like to see the meeting, it is available on YouTube.
The meeting link for next meeting is here, and you can sign up to our calendar or our Google Group for meeting notifications or keep an eye on the Cloud Robotics Hub.
Hopefully we will see you there!
2 posts - 2 participants
![[WWW] [WWW]](/moin_static197/rostheme/img/moin-www.png)
ROS Discourse General: What if your Rosbags could talk? Meet Bagel🥯, the open-source tool we just released!
Huge thanks to @Katherine_Scott and @mrpollo for hosting us at the Joint ROS / PX4 Meetup at Neros in El Segundo, CA! It was an absolute blast connecting with the community in person!
Missed the demo? No worries! Here’s the scoop on what we unveiled (we showed it with PX4 ULogs, but yes, ROS2 and ROS1 are fully supported!)
The problem? We felt the pain of wrestling with robotics data and LLMs. Unlike PDF files, we’re talking about massive sensor arrays, complex camera feeds, dense LiDAR point clouds – making LLMs truly useful here has been a real challenge… at least for us.
The solution? Meet Bagel ( GitHub - shouhengyi/bagel: Bagel is ChatGPT for physical data. Just ask questions. No Fuss. )! We built this powerful open-source tool to bridge that gap. Imagine simply asking questions about your robotics data, instead of endless parsing and plotting.
With Bagel, loaded with your ROS2 bag or PX4 ULog, you can ask things like:
- “Is this front left camera calibrated?”
- “Were there any hard decelerations detected in the IMU data?”
Sound like something that could change your workflow? We’re committed to building Bagel in the open, with your help! This is where you come in:
- Dive In! Clone the repo, give Bagel a spin, and tell us what you think.
- Speak Your Mind! Got an idea? File a feature request. Your insights are crucial to Bagel’s evolution.
- Code with Us! Open a PR and become a core contributor. Let’s build something amazing together.
- Feeling the Love? If Bagel sparks joy (or solves a big headache!), please consider giving us a star on GitHub
. It’s a huge motivator!
Thanks a lot for being part of this journey. Happy prompting!
1 post - 1 participant
![[WWW] [WWW]](/moin_static197/rostheme/img/moin-www.png)
ROS Discourse General: ROS Naija Linedlin Group
Exciting News for Nigerian Roboticists!
We now have a ROS Naija Community group on here ,a space for engineers, developers, and enthusiasts passionate about ROS (Robot Operating System) and robotics.
Whether you’re a student, hobbyist, researcher, or professional, this is the place to:
Connect with like-minded individuals
Share knowledge, resources, and opportunities
Collaborate on robotics and ROS-based projects
Ask questions and learn from others in the community
If you’re interested in ROS and robotics, you’re welcome to join:
Join here: LinkedIn Login, Sign in | LinkedIn
Let’s build and grow the Nigerian robotics ecosystem together!
ROS robotics #ROSNaija #NigeriaTech #Engineering #ROSCommunity #RobotOperatingSystem
1 post - 1 participant
![[WWW] [WWW]](/moin_static197/rostheme/img/moin-www.png)
ROS Discourse General: [Case Study] Cross-Morphology Policy Learning with UniVLA and PiPER Robotic Arm
We’d like to share a recent research project where our AgileX Robotics PiPER 6-DOF robotic arm was used to validate UniVLA, a novel cross-morphology policy learning framework developed by the University of Hong Kong and OpenDriveLab.
Paper: Learning to Act Anywhere with Task-Centric Latent Actions
arXiv: [2505.06111] UniVLA: Learning to Act Anywhere with Task-centric Latent Actions
Code: GitHub - OpenDriveLab/UniVLA: [RSS 2025] Learning to Act Anywhere with Task-centric Latent Actions
Motivation
Transferring robot policies across platforms and environments is difficult due to:
- High dependence on manually annotated action data
- Poor generalization between different robot morphologies
- Visual noise (camera motion, background movement) causing instability
UniVLA addresses this by learning latent action representations from videos, without relying on action labels.
Framework Overview
UniVLA introduces a task-centric, latent action space for general-purpose policy learning. Key features include:
- Cross-hardware and cross-environment transfer via a unified latent space
- Unsupervised pretraining from video data
- Lightweight decoder for efficient deploymen
Figure2: Overview of the UniVLA framework. Visual-language features from third-view RGB and task instruction are tokenized and passed through an auto-regressive transformer, generating latent actions which are decoded into executable actions across heterogeneous robot morphologies.
PiPER in Real-World Experiments
To validate UniVLA’s transferability, the researchers selected the AgileX PiPER robotic arm as the real-world testing platform.
Tasks tested:
- Store a screwdriver
- Clean a cutting board
- Fold a towel twice
- Stack the Tower of Hanoi
These tasks evaluate perception, tool use, non-rigid manipulation, and semantic understanding.
Experimental Results
- Average performance improved by 36.7% over baseline models
- Up to 86.7% success rate on semantic tasks (e.g., Tower of Hanoi)
- Fine-tuned with only 20–80 demonstrations per task
- Evaluated using a step-by-step scoring system
About PiPER
PiPER is a 6-DOF lightweight robotic arm developed by AgileX Robotics. Its compact structure, ROS support, and flexible integration make it ideal for research in manipulation, teleoperation, and multimodal learning.
Learn more: PiPER
Company website: https://global.agilex.ai
Click the link below to watch the experiment video using PIPER:
🚨 Our PiPER robotic arm was featured in cutting-edge robotics research!
Collaborate with Us
At AgileX Robotics, we work closely with universities and labs to support cutting-edge research. If you’re building on topics like transferable policies, manipulation learning, or vision-language robotics, we’re open to collaborations.
Let’s advance embodied intelligence—together.
1 post - 1 participant
![[WWW] [WWW]](/moin_static197/rostheme/img/moin-www.png)
ROS Discourse General: [Demo] Remote Teleoperation with Pika on UR7e and UR12e
Hello ROS developers,
We’re excited to share a new demo featuring Pika, AgileX Robotics’ portable and ergonomic teleoperation gripper system. Pika integrates multiple sensors to enable natural human-to-robot skill transfer and rich multimodal data collection.
Key Features of Pika:
- Lightweight design (~370g) for comfortable extended handheld use
- Integrated multimodal sensors including fisheye RGB camera, Intel RealSense depth camera, 6-DoF IMU, and high-precision gripper encoders
- USB-C plug-and-play connectivity supporting ROS 1 and ROS 2
- Open-source Python and C++ APIs for easy integration and control
- Compatible with URDF models, suitable for demonstration-based and teleoperation control
In this demo, Pika teleoperation system remotely controls two collaborative robot arms — UR7e (7.5 kg payload, 850 mm reach) and UR12e (12 kg payload, 33.5 kg robot weight) — to complete several everyday manipulation tasks:
Task Set:
- Twist open a bottle cap
- Pick up a dish and place it in a cabinet
- Grab a toy and put it in a container
System Highlights:
- Precise gripper control with high-resolution encoder feedback
- 6-DoF IMU for accurate motion tracking
- Synchronized multimodal data capture (vision, 6D pose, gripper status)
- Low-latency USB-C connection ensuring real-time responsiveness
- Ergonomic and lightweight design for comfortable long-duration use
Application Scenarios:
- Human-in-the-loop teleoperation
- Learning from Demonstration (LfD) and Imitation Learning (IL)
- Vision-based dexterous manipulation and robot learning
- Remote maintenance and industrial collaboration
- Bimanual coordination and complex task execution
Watch the demo here: Pika Remote Control Demo
Learn more about Pika: https://global.agilex.ai/products/pika
Feel free to contact us for GitHub repositories, integration guides, or collaboration opportunities — we look forward to your feedback!
1 post - 1 participant
![[WWW] [WWW]](/moin_static197/rostheme/img/moin-www.png)
ROS Discourse General: TecGihan Force Sensor Amplifier for Robot Now Supports ROS 2
I would like to share that Tokyo Opensource Robotics Kyokai Association (TORK) has supported the development and release of the ROS 2 / Linux driver software for the DMA-03 for Robot, a force sensor amplifier manufactured by TecGihan Co., Ltd.
- GitHub – tecgihan_driver
The DMA-03 for Robot is a real-time output version of the DMA-03, a compact 3-channel strain gauge amplifier, adapted for robotic applications.
- TecGihan Website (English)
As of July 2025, tecgihan_driver
supports the following Linux / ROS environments:
- Ubuntu 22.04 + ROS 2 Humble
- Ubuntu 24.04 + ROS 2 Jazzy
A bilingual (Japanese/English) README with detailed usage instructions is available on the GitHub repository:
If you have any questions or need support, feel free to open an issue on the repository.
–
Yosuke Yamamoto
Tokyo Opensource Robotics Kyokai Association
1 post - 1 participant
![[WWW] [WWW]](/moin_static197/rostheme/img/moin-www.png)
ROS Discourse General: RobotCAD 9.0.0 (Assemly WB -> RobotCAD converter)
Improvements:
- Add converter FreeCAD Assembly WB (default) to RobotCAD structure.
- Add tool for changing Joint Origin without touching downstream kinematic chain (move only target Joint Origin)
- Optimization of Set placement tools performance. Now it does not require intermediate recalculation scene in process.
- Decrease size of joint arrows to 150.
- Add created collisions to Collision group (folder). Unification of collision part prefix.
- Fix Set placement by orienteer for root link (align it to zero Placement)
- Refactoring of Set Placement tools.
Fixes:
- Fix error when creating collision for empty part.
- Fix getting wrapper for LCS body container. It fixes LCS adding to some objects.
- Fix NotImplementedError (some joint types units) to warning. Instead of error it will give warning and let possible to set values for other types of joints.
https://vkvideo.ru/video-219386643_456239081 - Converter Assembly WB → RobotCAD in work
1 post - 1 participant
![[WWW] [WWW]](/moin_static197/rostheme/img/moin-www.png)
ROS Discourse General: 🚀 [New Release] BUNKER PRO 2.0 – Reinforced Tracked Chassis for Extreme Terrain and Developer-Friendly Integration
Hello ROS community,
AgileX Robotics is excited to introduce the BUNKER PRO 2.0, a reinforced tracked chassis designed for demanding off-road conditions and versatile field robotics applications.
Key Features:
- Christie suspension system + Matilda four-wheel independent balancing suspension provide excellent terrain adaptability and ride stability.
- Easily crosses 30° slope terrain.
- Maximum unloaded range: 20 km; maximum loaded range: 15 km.
- Capable of crossing 40 cm trenches and clearing obstacles up to 180 mm in height.
- IP67-rated enclosure ensures robust protection against dust, water, and mud.
- Rated payload capacity: 120 kg, supporting a wide range of sensors, manipulators, and payloads.
- Maximum speed at full load: 1.5 m/s.
- Minimum turning radius: 67 cm.
- Developer-ready interfaces and ROS compatibility.
Intelligent Expansion, Empowering the Future
- Supports customizable advanced operation modes.
- Communication via CAN bus protocol.
- Open-source SDK and ROS packages for easy integration and development.
Typical Use Cases:
- Outdoor Inspection & Patrol
- Agricultural Transport
- Engineering & Construction Operations
- Specialized Robotics Applications
AgileX Robotics provides full ROS driver support and SDK documentation to accelerate your development process. We welcome collaboration opportunities and field testing partnerships with the community.
For detailed technical specifications or to discuss integration options, please contact us at sales@agilex.ai.
Learn more at https://global.agilex.ai/
4 posts - 2 participants
![[WWW] [WWW]](/moin_static197/rostheme/img/moin-www.png)
ROS Discourse General: Cloud Robotics WG Meeting 2025-07-28 | Heex Technologies Tryout and Anomaly Detection Discussion
Please come and join us for this coming meeting at Mon, Jul 28, 2025 4:00 PM UTC→Mon, Jul 28, 2025 5:00 PM UTC, where we will be trying out Heex Technologies service offering from their website and discussing anomaly detection for Logging & Observability.
Last meeting, we heard from Bruno Mendes De Silva, Co-Founder and CEO of Heex Technologies, and Benoit Hozjan, Project Manager in charge of customer experience at Heex Technologies. The two discussed the company and purpose of the service they offer, then demonstrated a showcase workspace for the visualisation and anomaly detection capabilities of the server. If you’d like to see the meeting, it is available on YouTube.
The meeting link for nex meeting is here, and you can sign up to our calendar or our Google Group for meeting notifications or keep an eye on the Cloud Robotics Hub.
Hopefully we will see you there!
2 posts - 2 participants
![[WWW] [WWW]](/moin_static197/rostheme/img/moin-www.png)
ROS Discourse General: Sponsoring open source project, what do you think?
Hi,
I just saw this and I was thinking about the ROS community.
We have a large and amazing ecosystem of free software, free as in beer and speech!
That accelerated robotic development and we are all very grateful for it.
But I thin that it is also interesting to discuss how to support financially mantainers, keeping the software free for small companies (pre-revenue), students and individuals.
Thoughts’
6 posts - 6 participants
![[WWW] [WWW]](/moin_static197/rostheme/img/moin-www.png)
ROS Discourse General: Baxter Robot Troubleshooting Tips
Hey everyone,
I’ve been working with the Baxter robot recently and ran into a lot of common issues that come up when dealing with an older platform with limited support. Since official Rethink Robotics docs are gone, I compiled this troubleshooting guide from my experience and archived resources. Hopefully, this saves someone hours of frustration!
Finding Documentation
- Use the Wayback Machine to access old docs:
Archived SDK Wiki
Startup & Boot Issues
1. Baxter not powering on / unresponsive screen
- Power cycle at least 3 times, waiting 30 sec each time.
- If it still doesn’t work, go into FSD (Field Service Menu):
PressAlt + F
→ reboot from there.
2. BIOS password lockout
- Use BIOS Password Recovery
- Enter system number shown when opening BIOS.
- Generated password is admin → confirm with
Ctrl+Enter
.
3. Real-time clock shows wrong date (e.g., 2016)
- Sync Baxter’s time with your computer.
- Set in Baxter FSM or use NTP from your computer via command line.
Networking & Communication
4. IP mismatch between Baxter and workstation
- Set Baxter to Manual IP in FSM.
5. Static IP configuration on Linux (example: 192.168.42.1)
- First 3 numbers must match between workstation and Baxter.
- Ensure Baxter knows your IP in
intera.sh
.
6. Ping test: can’t reach baxter.local
- Make sure Baxter’s hostname is set correctly in FSM.
- Disable firewall on your computer.
- Try pinging Baxter’s static IP.
7. ROS Master URI not resolving
export ROS_MASTER_URI=http://baxter.local:11311
8. SSH into Baxter fails
- Verify SSH installed, firewall off, IP correct.
ROS & Intera SDK Issues
9. Wrong catkin workspace sourcing
source ~/ros_ws/devel/setup.bash
10. enable_robot.py or joint_trajectory_action_server.py missing
- Run
catkin_make
orcatkin_build
after troubleshooting.
11. intera.sh script error
- Ensure file is in root of catkin workspace:
~/ros_ws/intera.sh
12. MoveIt integration not working
- Ensure robot is enabled and joint trajectory server is active in a second terminal.
Hardware & Motion Problems
13. Arms not enabled or unresponsive
rosrun baxter_tools enable_robot.py -e
- Test by gripping cuffs (zero-g mode should enable).
14. Joint calibration errors
- Restart robot. Happens if you hit
CTRL+Z
mid-script.
Software/Configuration Mismatches
15. Time sync errors causing ROS disconnect
- Sync Baxter’s time in FSM or use
chrony
orntp
.
Testing, Debugging, & Logging
16. Check robot state:
rostopic echo /robot/state
17. Helpful debug commands:
rostopic list
rosnode list
rosservice list
18. Reading logs:
- Robot:
~/.ros/log/latest/
- Workstation:
/var/log/roslaunch.log
19. Confirm joint angles:
rostopic echo /robot/joint_states
If you have more tips or fixes, add them in the comments. Let’s keep these robots running.
1 post - 1 participant
![[WWW] [WWW]](/moin_static197/rostheme/img/moin-www.png)
ROS Discourse General: Remote (Between Internet Networks) Control of Robot Running Micro-ROS
Hello,
I am looking into solutions for communicating with a robot running Micro-ROS that is not on the same network as the host computer (the computer running ROS 2).
The only solution I have found till now is this blog post by Husarnet. The only problem is that this use-case no longer works, and the Husarnet team does not plan to resolve the issue any time soon.
Does anybody know any solution for this that work?
1 post - 1 participant
![[WWW] [WWW]](/moin_static197/rostheme/img/moin-www.png)
ROS Discourse General: AgileX Robotics at 2025 ROS Summer School: PiPER & LIMO Hands-on Tracks and Schedule
AgileX Robotics at 2025 ROS Summer School
AgileX Robotics is thrilled to announce our participation in the upcoming 2025 ROS Summer School
July 26 – August 1, 2025
Zhejiang University International Science and Innovation Center, Hangzhou, China
Official site: http://www.roseducation.org.cn/ros2025/
Hands-on Tracks
This year, we are bringing two dedicated hands-on tracks designed to empower developers with practical skills in robot navigation and mobile manipulation.
PiPER – Mobile Manipulation Track
Our PiPER-based curriculum introduces core concepts in robotic grasping, visual perception, and motion control. Ideal for those exploring real-world robotic manipulation with ROS!
Date | Time | Session | Topic |
---|---|---|---|
Day 4 | AM | Session 1 | Introduction to PiPER |
Day 4 | AM | Session 2 | Motion analysis |
Day 4 | PM | Session 1 | Overview of PiPER-sdk |
Day 4 | PM | Session 2 | MoveIt + Gazebo simulation |
Day 5 | AM | Session 1 | QR code recognition grasping |
Day 5 | AM | Session 2 | Code-level analysis of grasping logic |
Day 5 | PM | Session 1 | YOLO-based Object Recognition and Grasping with Code Analysis |
Day 5 | PM | Session 2 | Frontier Insights on Embodied Intelligence |
LIMO – Navigation & AI Track
Focused on the LIMO platform, this track offers structured ROS-based training in navigation, SLAM, perception, and deep learning.
Date | Time | Session | Topic |
---|---|---|---|
Day 1 | AM | Session 1 | LIMO basic functions overview |
Day 1 | AM | Session 2 | Chassis Kinematics Analysis |
Day 1 | PM | Session 1 | ROS communication mechanisms |
Day 1 | PM | Session 2 | LiDAR-based Mapping |
Day 2 | AM | Session 1 | Path planning |
Day 2 | AM | Session 2 | Navigation frameworks |
Day 2 | PM | Session 1 | Navigation practice |
Day 2 | PM | Session 2 | Visual perception |
Day 3 | AM | Session 1 | Intro to deep reinforcement learning |
Day 3 | AM | Session 2 | DRL hands-on session |
Day 3 | PM | Session 1 | Multi-robot systems intro |
Day 3 | PM | Session 2 | Multi-robot simulation practice |
We look forward to meeting all ROS developers, enthusiasts, and learners at the event. Come join us for hands-on learning and exciting robotics innovation!
— AgileX Robotics
1 post - 1 participant
![[WWW] [WWW]](/moin_static197/rostheme/img/moin-www.png)
ROS Discourse General: Is DDS suitable for RF datalink communication with intermittent connection?
I’m not using ROS myself, but I understand that ROS 2 relies on DDS as its middleware, so I thought this community might be a good place to ask.
I’m working on a UAV system that includes a secondary datalink between the drone and the ground segment, used for control/status messages. The drone flies up to 35 km away and communicates over an RF-based datalink with an estimated bandwidth of around 2 Mbps, though the link is prone to occasional disconnections and packet loss due to the nature of the environment.
I’m considering whether DDS is a suitable protocol for this kind of scenario, or if its overhead and discovery/heartbeat mechanisms might cause issues in a lossy or intermittent RF link.
Has anyone here tried using DDS over real-world RF communication (not simulated Wi-Fi or Ethernet), and can share experiences or advice?
Thanks in advance!
S.
10 posts - 6 participants
![[WWW] [WWW]](/moin_static197/rostheme/img/moin-www.png)
ROS Discourse General: Feature freeze for Gazebo Jetty (x-post from Gazebo Community)
Hello everyone!
The feature freeze period for Gazebo Jetty starts on Fri, Jul 25, 2025 12:00 AM UTC.
During the feature freeze period, we will not accept new features to Gazebo. This includes new features to Jetty as well as to currently stable versions. If you have a new feature you want to contribute, please open a PR before we go into feature freeze noting that changes can be made to open PRs during the feature freeze period. This period will be close when we go into code freeze on Mon, Aug 25, 2025 12:00 AM UTC.
Bug fixes and documentation changes will still be accepted after the freeze date.
More information on the release timeline can be here: Release Jetty · Issue #1271 · gazebo-tooling/release-tools · GitHub
The Gazebo Dev Team
1 post - 1 participant
![[WWW] [WWW]](/moin_static197/rostheme/img/moin-www.png)
ROS Discourse General: Donate your rosbag (Cloudini benchmark)
Hi,
as my presentation about Cloudini was accepted at ROSCon 2025, I want to come prepared with an automated benchmarking suite that measure performance over a wide range of datasets.
You can contribute to this donating a rosbag!!!
Thanks for your help. Let’s make pointcloud smaller together
How to
-
You can submit it using the Github Issues or sending it to me at davide.faconti@gmail.com, but consider that the rosbag will be made public (I am creating an open benchmarking repo in Gihub).
-
It should contain at least one sensor_msgs::PointCloud2. All other topics can be removed (if you don’t, i will)
-
Please cut your rosbag to 30-45 seconds. You can use any of these resources:
Data Donation Disclaimer: Public Availability for CI Benchmarking
By donating your data files, you acknowledge and agree to the following terms regarding their use and public availability:
Purpose: The donated data will be used for research purposes, specifically to perform and validate benchmarking within Continuous Integration (CI) environments.
Public Availability: You understand and agree that the donated data, or subsets thereof, will be made publicly available. This public release is essential for researchers and the wider community to reproduce, verify, and build upon the benchmarking results, fostering transparency and collaborative progress in pointcloud compression.
Anonymization/Pseudonymization: Please ensure that no personally identifiable information is included in the data you submit, as it will be made public as-is.
5 posts - 3 participants
![[WWW] [WWW]](/moin_static197/rostheme/img/moin-www.png)
ROS Discourse General: Everything I Know About ROS Interfaces: Explainer Video
I made a video about everything I’ve learned about ROS Interfaces (messages/services/actions) in my fifteen years of working with ROS.
Text Version: ROS Interface Primer - Google Docs (Google Doc)
Featuring:
Information about Interfaces, from Super Basic to Complex Design Issues
Original Research analyzing all the interfaces in ROS 2 Humble
Best Practices for designing new interfaces
Hot takes (i.e. the things that I think ROS 2 Interfaces do wrong)
Three different ways to divide information among topics
Fun with multidimensional arrays
Nine different recipes for “optional” components of interfaces
Strong opinions that defy the ROS Orthodoxy
Zero content generated by AI/LLM
Making video is hard, and so I’m calling this version 1.0 of the video, so please let me know what I got wrong and what I’m missing, and I may make another version in the future.
In closing: bring back Pose2D you monsters.
3 posts - 2 participants
![[WWW] [WWW]](/moin_static197/rostheme/img/moin-www.png)