Communication Overview#
The WMX ROS2 application uses three communication layers:
ROS2 DDS (CycloneDDS) – All inter-node communication via topics, services, and actions over the ROS2 middleware.
WMX API – C++ shared libraries at
/opt/lmx/(coremotionapi,advancedmotionapi,ioapi,ecapi,wmx3api) that bridge ROS2 nodes to the motion engine via shared memory.EtherCAT – Real-time fieldbus managed by the WMX engine for deterministic, low-latency servo drive communication.
Note
The system does not use TCP/IP to communicate with the robot controller. The WMX motion engine runs on the same machine as the ROS2 nodes and communicates with servo drives over EtherCAT.
The diagram below shows how the three layers stack and which libraries and buses connect them:
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#1a73e8", "primaryTextColor": "#fff", "primaryBorderColor": "#1558b0", "lineColor": "#555"}}}%%
flowchart TB
subgraph L1["Layer 1 — ROS2 DDS (CycloneDDS middleware)"]
direction LR
N1["manipulator_state"]
N2["follow_joint_trajectory_server"]
N3["wmx_engine_node"]
N4["wmx_core_motion_node"]
N5["wmx_io_node"]
N6["wmx_ethercat_node"]
end
subgraph L2["Layer 2 — WMX API (C++ shared libraries at /opt/lmx/)"]
direction LR
A1["libcoremotionapi<br/>Axis position & velocity"]
A2["libadvancedmotionapi<br/>Cubic spline execution"]
A3["libioapi<br/>Digital I/O"]
A4["libecapi<br/>EtherCAT diagnostics"]
A5["libwmx3api<br/>Device lifecycle"]
end
subgraph L3["Layer 3 — EtherCAT (real-time fieldbus, dedicated NIC)"]
direction LR
E1["WMX3 Motion Engine"]
E2["EtherCAT Master"]
E3["Servo Drives J1 → J2 → ... → J6 (daisy-chained)"]
E4["I/O Module (gripper digital output)"]
end
L1 -->|"C++ library calls (same machine, shared memory)"| L2
L2 -->|"WMX3 real-time process"| L3
E1 --> E2 --> E3 & E4
WMX ROS2 — three-layer communication architecture#
For the full list of ROS2 interfaces, see:
ROS2 Topics – Published and subscribed topics
ROS2 Services – Engine, axis, I/O, and EtherCAT services
ROS2 Actions – FollowJointTrajectory action