Expand description
TDATA (TrackingData) message type implementation
The TDATA message type is used to transfer 3D positions and orientations of surgical tools, markers, etc. using transformation matrices.
§Use Cases
- Surgical Tool Tracking - Real-time tracking of multiple instruments (scalpel, probe, drill)
- Optical Tracking Systems - NDI Polaris, Atracsys, or similar optical trackers
- Electromagnetic Tracking - Aurora or Ascension electromagnetic trackers
- Surgical Navigation - Displaying tool positions relative to patient anatomy
- Multi-Tool Coordination - Tracking multiple tools simultaneously in robotic surgery
§TDATA vs TRANSFORM
- TDATA: Array of named transforms, efficient for tracking multiple tools
- TRANSFORM: Single 4x4 matrix, simpler but requires multiple messages
Use TDATA when tracking ≥2 tools to reduce network overhead.
§Examples
§Tracking Multiple Surgical Instruments
use openigtlink_rust::protocol::types::{TDataMessage, TrackingDataElement, TrackingInstrumentType};
use openigtlink_rust::protocol::message::IgtlMessage;
use openigtlink_rust::io::ClientBuilder;
let mut client = ClientBuilder::new()
.tcp("127.0.0.1:18944")
.sync()
.build()?;
// Tool 1: Scalpel
let scalpel = TrackingDataElement::with_translation(
"Scalpel",
TrackingInstrumentType::Instrument5D,
100.0, // X translation: 100mm
50.0, // Y translation: 50mm
200.0 // Z translation: 200mm
);
// Tool 2: Probe
let probe = TrackingDataElement::with_translation(
"Probe",
TrackingInstrumentType::Instrument6D,
150.0,
75.0,
180.0
);
let tdata = TDataMessage::new(vec![scalpel, probe]);
let msg = IgtlMessage::new(tdata, "OpticalTracker")?;
client.send(&msg)?;§Receiving Tracking Data at 60Hz
use openigtlink_rust::io::IgtlServer;
use openigtlink_rust::protocol::types::TDataMessage;
let server = IgtlServer::bind("0.0.0.0:18944")?;
let mut client_conn = server.accept()?;
loop {
let message = client_conn.receive::<TDataMessage>()?;
for element in &message.content.elements {
let x = element.matrix[0][3];
let y = element.matrix[1][3];
let z = element.matrix[2][3];
println!("{}: position = ({:.2}, {:.2}, {:.2}) mm",
element.name, x, y, z);
}
}Structs§
- TData
Message - TDATA message containing multiple tracking data elements
- Tracking
Data Element - Tracking data element with name, type, and transformation matrix
Enums§
- Tracking
Instrument Type - Instrument type for tracking data