|
Project Information
Featured
Links
|
LCM is a set of libraries and tools 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 automatic marshalling/unmarshalling code generation with bindings for applications in a variety of programming languages. 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, MATLAB, and C#
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- LCM design overview (PDF) -- Describes the design principles of LCM, the best place to start for a quick understanding.
- More Documentation -- Tutorials, API Reference, Troubleshooting, etc.
NewsJan 20, 2012Release 0.8.0 This release changes the C++ API, adds some features to lcm-logplayer-gui, and fixes a few bugs. - lcm-c:
- add new macros LCM_MAJOR_VERSION, LCM_MINOR_VERSION, LCM_MICRO_VERSION to check LCM version from C/C++.
- lcm-c++:
- rename LCM::fileno() to LCM::getFileno(). fileno is implemented as a macro on some platforms, and is thus effectively a reserved keyword.
- lcm-gen:
- C++:
- don't try to dynamically resize fixed-size arrays (re issue #42 )
- Python:
- bugfix in decoding multivariable arrays
- lcm-logplayer-gui:
- add command line parameters to:
- start logplayer with the log paused
- filter out specific channels from being played back by default.
Oct 15, 2011Release 0.7.1 This is a bugfix and maintenance release. - lcm-gen:
- C++:
- fix decoding of zero-length primitive arrays (re issue #38 )
- computeHash() omit parameter name if unused
- don't #include a type's own header file for recursive types
- fix memory leak in LCM::publish() (re issue #35 )
- inline methods for generated code
- use static local variable for getHash() to reduce liblcm dependency of generated C++ code
- #include <string> if a type has a string field
- C:
- don't #include a type's own header file for recursive types
- Java:
- add --with-jardir=DIR option to configure script to allow configuring lcm.jar destination directory.
- General:
- update lcm-gen manpage to document --c-no-pubsub
- lcm-java:
- ClassDiscoverer doesn't try to traverse unreadable files/directories
Aug 22, 2011Release 0.7.0 This release introduces support for native C++ bindings, and includes a number of bugfixes and documentation updates. - lcm-gen:
- Added the -x / --cpp option, which generates native C++ language bindings. See examples/cpp for examples, and the documentation for a tutorial and API reference.
- lcm-c:
- fix a minor memory leak in lcm_tcpq.c (closes issue #33 )
- General:
- Switched documentation from GTK-Doc to Doxygen. To build most documentation, run doxygen from the docs/ directory. Java, C#, and Python API reference docs are still built separately.
June 10, 2011Release 0.6.0 This release includes a number of bugfixes and performance enhancements - lcm-c:
- Change internal buffering from a fixed size ringbuffer to per-subscription FIFO queues. Subscriptions start with a default maximum queue length of 30 messages, which can be adjusted using the new function
<message_type>_subscription_set_queue_capacity()
For example, to set the queue size to 5 for a message type example_t:
example_t_subscription_t* subs =
example_t_subscribe(lcm, "EXAMPLE", message_handler);
example_t_subscription_set_queue_capacity(subs, 5);
- Explicitly disallow recursive calls to lcm_handle.
- fix synchronization issues when allocating receive resources and conducting multicast self-test. see issue #30
- lcm-logplayer-gui:
- expose remote log player play and pause commands
- lcm-logger:
- bugfix when creating subdirectories for output files
- lcm-spy:
- bugfix when LCM URLs contain equal signs
- searches directories on classpath for lcmtype .class files, in addition to .jar files.
- lcm-gen:
- Python
- bugfix. remove extraneous typename
- Constructor initializes valid fixed-size arrays
- initialize float, double to 0.0 instead of 0
- Java
- now appends 'f' for const float
- General:
- flush stdout before failing on parse / semantic error
- General:
- add example for using LCM with GLib event loop
- add example program for using LCM with select()
- minor updates to API documentation
OlderNews
|