LCM (Lightweight Communications and Marshalling) is a lightweight publish/subscribe messaging library created at MIT CSAIL in 2006 for the MIT Talos autonomous vehicle competing in the DARPA Urban Challenge. All messages are sent via UDP multicast — no broker, no central master process. Each message is described in a simple .lcm file (analogous to Protobuf's .proto) and compiled to C, C++, Java, Python, MATLAB, C# or Lua.
LCM's architecture is intentionally minimal: zero ROS dependencies, no name server, no dynamic node discovery beyond standard IP multicast. This makes LCM an ideal choice for embedded systems where a full DDS or ROS 2 stack is too heavy. LCM is widely used as the communication layer in proprietary robotics company stacks (Boston Dynamics historically, some internal Toyota Research Institute tools), in humanoid robotics (Atlas DARPA Robotics Challenge), in autonomous vehicle research (Mercedes-Benz Bertha Drive Project), and in academia as a lightweight alternative to ROS 1.
The wire format is deterministic and versioned — there is an lcm-spy tool for traffic inspection and lcm-logger/lcm-logplayer for record/replay (analogous to rosbag). LCM has no built-in QoS, security or discovery mechanism — a deliberate design decision that simplifies implementation at the cost of limited use in geographically distributed networks. In typical robotic applications (single host or several nodes in a single subnet) LCM is one of the fastest transport layers available.
The library is open source under LGPL 2.1, maintained by the community on GitHub (lcm-proj/lcm) with contributions from MIT, Boston Dynamics, TRI and Drake Project engineers. The latest release 1.5.1 (February 2024) added support for newer Python and Java distributions. LCM is a required dependency of the Drake project (Toyota Research / MIT), where it is used for internal communication between planning and control modules.
In the ROS ecosystem LCM has several community wrappers (ros1_bridge, lcm_to_ros, ros2_lcm_bridge), but is not an official ROS middleware — it functions as a parallel, independent technology. In practice, robotics teams often mix stacks — they use ROS 2 for the application layer and LCM for fast low-level communication between real-time control modules.