LCM (Lightweight Communications and Marshalling) to lekka biblioteka komunikacyjna typu publish/subscribe stworzona w MIT CSAIL w 2006 roku na potrzeby pojazdu autonomicznego MIT Talos rywalizującego w DARPA Urban Challenge. Wszystkie komunikaty są przesyłane przez UDP multicast — bez brokera, bez centralnego procesu master. Każda wiadomość jest opisana w prostym pliku .lcm (analogicznym do .proto z Protobuf) i kompilowana do C, C++, Java, Python, MATLAB, C# lub Lua.
Architektura LCM jest celowo minimalistyczna: zero zależności od ROS, brak serwera nazw, brak dynamicznego odkrywania węzłów poza standardowym multicastem IP. To czyni LCM idealnym wyborem dla systemów embedded, gdzie pełen stos DDS lub ROS 2 jest zbyt ciężki. LCM jest powszechnie używany jako warstwa komunikacyjna w stackach prywatnych firm robotycznych (Boston Dynamics historycznie, niektóre wewnętrzne narzędzia Toyota Research Institute), w robotyce humanoidalnej (Atlas DARPA Robotics Challenge), w badaniach autonomicznych pojazdów (Mercedes-Benz Bertha Drive Project) oraz w środowisku akademickim jako lekka alternatywa dla ROS 1.
Format wire jest deterministyczny i wersjonowany — istnieje narzędzie lcm-spy do inspekcji ruchu i lcm-logger/lcm-logplayer do zapisu i odtwarzania logów (analogicznie do rosbag). LCM nie posiada wbudowanego mechanizmu QoS, security czy discovery — to świadoma decyzja projektowa upraszczająca implementację kosztem ograniczonego zastosowania w sieciach rozproszonych geograficznie. W typowych zastosowaniach robotycznych (jeden host lub kilka węzłów w jednej podsieci) LCM jest jedną z najszybszych dostępnych warstw transportowych.
Biblioteka jest open source na licencji LGPL 2.1, utrzymywana przez społeczność na GitHub (lcm-proj/lcm) z udziałem inżynierów z MIT, Boston Dynamics, TRI i Drake Project. Ostatnie wydanie 1.5.1 (luty 2024) dodało wsparcie dla nowych dystrybucji Pythona i Javy. LCM jest niezbędną zależnością projektu Drake (Toyota Research / MIT), gdzie używany jest do komunikacji wewnętrznej między modułami planowania i sterowania.
W ekosystemie ROS LCM ma kilka community wrapperów (ros1_bridge, lcm_to_ros, ros2_lcm_bridge), ale nie jest oficjalnym middleware ROS — funkcjonuje jako równoległa, niezależna technologia. W praktyce zespoły robotyczne często mieszają stacki — używają ROS 2 do warstwy aplikacyjnej i LCM do szybkiej komunikacji niskopoziomowej między modułami sterującymi w czasie rzeczywistym.