LCM is a library for message passing and data marshalling targeted at real-time systems where high-bandwidth and low latency are critical. It provides a publish/subscribe message passing model and an XDR-style message specification language with bindings for applications in C, Java, and Python. It was originally designed and used by the MIT DARPA Urban Challenge Team as its message passing system.
LCM is designed for tightly-coupled systems connected via a dedicated local-area network. It is not intended for message passing over the Internet. LCM has been developed for soft real-time systems: its default messaging model permits dropping messages in order to minimize the latency of new messages.
Features
- Low-latency inter-process communication
- Efficient broadcast mechanism using UDP Multicast
- Provides type-safe message marshaling that automatically detects most types of errors (such as version mismatches between different modules)
- User-friendly logging and playback
- Essentially unlimited packet size
- No centralized "database" or "hub" -- peers communicate directly
- No daemons
- Supports C/C++, Java, Python, and MATLAB
Requirements
- POSIX.1-2001 system (GNU/Linux, OS X, Cygwin, Solaris, etc.) or Windows XP/Vista/7
- GLib >= 2.0
Java >= 1.5 is strongly recommended, as several important utilities distributed with LCM are written in Java.
Documentation
- Technical Report (PDF) -- This document describes the design principles of LCM, and is the best place to start for a comprehensive understanding.
- More Documentation -- Tutorials, API Reference, Troubleshooting, etc.
News
Jan 6, 2010
Release 0.4.0:
This release includes experimental support for Microsoft Visual C++. Thanks go to Randy Sybel for providing this port. Although it's undergone some testing, it should be considered highly experimental, and is not well documented or packaged at all. Bug reports and patches are greatly appreciated.
This release also incorporates a number of minor bugfixes for the Java port. See the changelog for details.
Aug 14, 2009
Release 0.3.1:
This is a maintenance release, and incorporates a number of minor bugfixes and enhancements.
- Java:
- lcm-spy, lcm-logplayer-gui warn if gcj is detected as JRE
- minor enhancements to lcm-spy
- Python:
- update comment docs
- Other:
- add --lcm-url=URL cmd line option to lcm-{spy,logger,logplayer,logplayer-gui}
- updated examples