В недавнем анонсе нового ROS 2 Lyrical Luth среди фич как-то затерялся (или не очень явно был описан)
rosidl::Buffer, хотя он может представлять уже сейчас большой интерес для тех, кто активно использует GPU для обработки массивных сообщений вроде Image или PointCloud. Для кого-то это может быть довольно существенным основанием переходить на ROS 2 LL уже сейчас.Теперь в
uint8[] и других variable-length primitive array полей C++ сообщений появилась подменяемая реализация хранилища. Байты могут лежать в GPU-памяти или в другой (non-CPU) области памяти, адресуемой через вендорский backend-плагин, при этом .msg IDL не меняется.Это может работать примерно так: камера пишет фрейм в память устройства, нода для инференса читает его оттуда же, другие узлы-потребители получают общий дескриптор. PCIe в цепочке perception → planning не нагружается потоками полного разрешения; тензоры между нодами одного inference-pipeline (
ExperimentalTensor + torch_conversions) идут аналогично. Если хоть одна сторона (peer) не поддерживает CUDA, RMW откатывает эту пару на CPU, остальные продолжают zero-copy.Функционал был реализован при поддержке инженеров NVIDIA.
Подробнее о Buffer Backends
https://docs.ros.org/en/lyrical/Concepts/Intermediate/About-Buffer-Backends.html
Как применять
https://docs.ros.org/en/lyrical/How-To-Guides/Using-Buffer-Backends.html