The medical robotics revolution is moving at a breakneck pace. From autonomous surgical assistants to AI-driven diagnostic imaging systems, the future of healthcare depends on robots interacting intelligently with the human body.
But behind every cutting-edge medical robot lies a massive, invisible software hurdle: data interoperability. Medical imaging hardware (CT scanners, MRIs, and ultrasounds) speaks one language: DICOM (ISO 12052). Most modern robotics platforms speak another entirely: ROS 2. Historically, getting these two ecosystems to communicate has been a notorious headache for engineering teams, acting as a bottleneck for innovation.
To break down this wall, we are proud to introduce dicom_to_ros: a fully containerized, open-source bridge designed to stream clinical medical data directly into ROS 2 pipelines with zero friction.
The Problem: The Offline Bottleneck in Medical Robotics
Until now, engineers bridging the gap between clinical imaging and robotics had to rely on fragmented pipelines. The workflow usually looked like this:
- Export raw DICOM files from a hospital network or database.
- Write custom scripts to manually convert those files into flat imagery (PNGs, JPEGs) or raw point clouds.
- Attempt to manually reconstruct critical spatial metadata, scaling ratios, and directional patient orientation.
This disjointed process doesn’t just waste engineering hours; it strips away vital clinical context. When a surgical robot is tracking a target based on a preoperative MRI, a single millimeter of lost spatial scaling data or a mismatched coordinate frame can be catastrophic.
Most existing open-source DICOM tools exist strictly as isolated Python or C++ backends, completely disconnected from robotics middleware.
The Solution: A Live, Ready Bridge
dicom_to_ros completely redefines this workflow. It transforms medical data ingestion from a static, multi-step offline conversion task into a live network service.
Instead of polling file systems or running manual preprocessing scripts, dicom_to_ros acts as a distributed microservice architecture. It spins up a live network listener that accepts standard medical imaging protocols (specifically the C-STORE Storage Service Class Provider operation) and instantly translates incoming data into synchronized, ready-to-use ROS 2 topics.
Watch the demo video:
Why dicom_to_ros for your workflow?
We designed this package with a product-first, high-performance mindset, focusing on core capabilities:
- True Plug-and-Play Deployment: No tedious dependencies or complex local environment setups.
dicom_to_rosis fully containerized using Docker. You can integrate a comprehensive medical imaging stream into your existing ROS 2 application stack with a single command. - High-Performance Internal Byte Routing: To avoid redundant disk reads and data loss, the pipeline features an intelligent architecture. A central network listener (
dicom_server) broadcasts raw file bytes over the ROS network via a customDicom.msgfirst. Downstream microservices subscribe to this topic and process the data in parallel, achieving maximum throughput. - Flawless Spatial Intelligence (Patient Frame to TF Tree): Medical scans record orientations relative to the human body using complex directional cosines. Our pipeline natively translates these medical coordinates into a standard ROS transform tree (
/tf). Surgical arms, camera systems, and spatial computing algorithms immediately know exactly where they are relative to the patient’s scan geometry. - Out-of-the-Box Computer Vision Readiness: Medical sensors output 12-bit or 16-bit intensity values that break standard computer vision tooling. The pipeline includes automatic min-max normalization math to scale these dynamically into CV-friendly 8-bit formats while perfectly preserving contrast.
- Rich Clinical Insights: Your robot gets more than just raw pixels. The pipeline parses and publishes essential clinical and demographic metadata (modality types, scan dates, and study info) allowing your application logic to adapt dynamically to different diagnostic contexts.
Note: Because
dicom_to_rosacts as a direct pass-through, it passes metadata as defined by the incoming DICOM files. By default, standard ROS 2 communication is unencrypted. For development and testing, we highly recommend using anonymized or pseudonymized datasets to completely eliminate Protected Health Information (PHI) risks.
What’s Under the Hood?
dicom_to_ros utilizes 6-node separation of concerns to maintain a modular, scalable architecture. A central network listener receives the imaging data, processes it, and streams specialized outputs across independent, modular nodes.
- 2D Clinical Scans: Instantly published as standard, CV-ready grayscale images.
- 3D Volumetric Data: Automatically converted into scrolling video streams and physically accurate, high-density spatial point clouds.
- Out-of-the-Box Visualization: Features a preconfigured RViz2 layout, allowing your team to visualize complex medical data in a robotics context from day one.


Looking Ahead
This open-source release is just the first step toward a unified ecosystem where medical imaging and advanced robotics operate in perfect sync. Moving forward, our vision is to continue expanding this bridge, deepening the connection between clinical data networks and robotic interaction to help the global community build safer, smarter, and more capable healthcare technologies.
If you want to hear more about the technical decisions behind dicom_to_ros, Gonzalo de Pedro and Susana Chavez are presenting DICOM to ROS: Bridging the Clinic and the Robot at ROSCon 2026 in Toronto — Thursday, September 24 at 2:50 PM. Come find us there.
Build the Future of Healthcare
We built dicom_to_ros to empower the global medical tech community and eliminate redundant infrastructure work. The repository is fully open-source under the Apache License 2.0.
Get Started Today
- Explore the Code: Head over to the
dicom_to_rosGitHub Repository. - Try the Demo: Clone the repo, follow the demo guide, and use standard
storescucommands to stream sample clinical scans immediately into RViz2. - Contribute: Have an idea for a new feature, optimization, or transfer syntax support? We welcome pull requests and issues!