IrisCore: The Heart of Project Iris

**IrisCore** is the central module that powers all of Project Iris’s communication capabilities. Think of IrisCore as the engine room – it establishes and manages the DDS entities (participants, topics, publishers, subscribers) that connect Unreal Engine to the ROS 2 ecosystem. By handling the low-level details of Fast DDS, IrisCore frees you to focus on your simulation logic instead of networking intricacies.

When your Unreal application starts, IrisCore initializes a DDS Domain Participant (joining the ROS 2 network on a specified domain ID). It then takes care of registering message types and creating DDS DataWriters and DataReaders for each topic you use. All standard ROS 2 message types are supported out-of-the-box – from basic std_msgs to complex sensor_msgs (images, laser scans, etc.) – meaning IrisCore can publish or subscribe to those topics natively:contentReference[oaicite:18]{index=18}. This comprehensive type support ensures that if ROS 2 can talk about it, Project Iris likely can too.

**High Performance Transport:** IrisCore is built for speed. It utilizes Fast DDS’s efficient publish/subscribe mechanisms, minimizing copies and leveraging optimized transports (shared memory when available, UDP multicast for discovery, etc.). For large data (like HD camera frames or point clouds), IrisCore takes advantage of Fast DDS features to move data quickly – benefiting from zero-copy data sharing when possible:contentReference[oaicite:19]{index=19}. The result is low latency delivery of messages from the game engine to ROS 2 and vice versa.

**Robust and Reliable:** Because it directly uses DDS, IrisCore inherits robust reliability features. Messages can be sent with reliable QoS to guarantee delivery, or best-effort for performance when occasional dropouts are acceptable. It handles reconnections and discovery automatically – for example, if a ROS 2 node appears on the network, IrisCore’s participant will discover it and match any topics in common. All of this happens behind the scenes, without special configuration.

**Separation of Concerns:** Notably, IrisCore runs as a distinct layer separated from game-specific logic. This transport layer can operate independently of the Unreal Engine’s frame updates. In practice, IrisCore might utilize background threads to listen for incoming data and to send outgoing messages without stalling the game thread. This design means that high-frequency data exchange (e.g., a camera publishing at 60 Hz) won't slow down your Unreal scene – IrisCore handles it asynchronously and efficiently.

In summary, IrisCore provides the *fast, reliable pipeline* that moves data between Unreal and ROS 2. It’s configured by Project Iris to use ROS 2’s default settings (for example, using Fast DDS on the default ROS domain ID 0 unless changed). You can customize parameters like the domain ID or QoS policies through configuration if needed, but the defaults let you run things out-of-the-box. IrisCore’s motto could well be, "leave the messaging to me" – it deals with all networking intricacies so the other parts of Project Iris (and you, the developer) don't have to.