{"id":499067,"date":"2026-10-17T16:49:42","date_gmt":"2026-10-17T13:49:42","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=499067"},"modified":"2026-10-17T16:49:42","modified_gmt":"2026-10-17T13:49:42","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=499067","title":{"rendered":"Shared memory \u0432 ROS 2 Humble: CycloneDDS + iceoryx \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/01\/b5\/6c\/01b56c8e4a1ad7cdbe4cf2be65338749.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/01\/b5\/6c\/01b56c8e4a1ad7cdbe4cf2be65338749.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/01\/b5\/6c\/01b56c8e4a1ad7cdbe4cf2be65338749.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0445\u0430\u0431\u0440!<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 \u0431\u0430\u0437\u0435 ROS2, \u0442\u043e \u043d\u0435\u0440\u0435\u0434\u043a\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0435\u0440\u0436\u0435\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0435\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435. \u0418 \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0443 ROS2 (\u0430 \u0442\u043e\u0447\u043d\u0435\u0435 \u0443 DDS middleware) \u0435\u0441\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043b\u0451\u0433\u043a\u0438\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u0438 \u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u0441 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430\u043c\u0438, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c shared memory. \u041e\u0434\u043d\u0430\u043a\u043e \u0443 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0435\u0439, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0438 \u043f\u043e\u0439\u0434\u0451\u0442 \u0440\u0435\u0447\u044c. \u0412\u0435\u0440\u0441\u0438\u044f ros \u0432 \u0441\u0442\u0430\u0442\u044c\u0435: ROS2 Humble \u0441 <code>ros-humble-rmw-cyclonedds-cpp<\/code> 1.3.5, <code>ros-humble-cyclonedds<\/code> 0.10.5, <code>ros-humble-iceoryx-*<\/code> 2.0.5<\/p>\n<h3>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 shared memory<\/h3>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c\u0441\u044f \u0432 \u0442\u0435\u043e\u0440\u0438\u0438, \u043e\u0431\u044b\u0447\u043d\u043e \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0432 Linux \u0441\u0432\u043e\u0451 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e, \u0438 \u0447\u0443\u0436\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c \u043e\u043d \u043d\u0435 \u0432\u0438\u0434\u0438\u0442. <strong>Shared memory<\/strong> \u2014 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u041e\u0421, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u044b\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432. \u0412 Linux \u044d\u0442\u043e POSIX API <code>shm_open()<\/code> + <code>mmap()<\/code>, \u0430 \u0441\u0430\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0432\u0438\u0434\u043d\u044b \u043a\u0430\u043a \u0444\u0430\u0439\u043b\u044b \u0432 <code>\/dev\/shm<\/code>.<\/p>\n<p>\u0414\u043b\u044f \u043e\u0431\u043c\u0435\u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435: \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c 2 \u041c\u0411, \u0440\u0435\u0437\u0430\u0442\u044c \u0438\u0445 \u043d\u0430 UDP-\u043f\u0430\u043a\u0435\u0442\u044b (\u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u043d\u0438\u0445 \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 DDS Cyclonedds \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 QoS Reliable), \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0441\u0442\u0435\u043a \u044f\u0434\u0440\u0430 \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u043e, \u0438\u0437\u0434\u0430\u0442\u0435\u043b\u044c \u043f\u0438\u0448\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043e\u0431\u0449\u0438\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442, \u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u00ab\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u00bb (\u0442\u043e\u0447\u043d\u0435\u0435, \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0451\u043d \u043f\u043e \u0441\u0432\u043e\u0435\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443).<\/p>\n<p>\u0412\u0430\u0436\u043d\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0442\u044c \u0434\u0432\u0430 \u0440\u0435\u0436\u0438\u043c\u0430, \u0438\u0445 \u0447\u0430\u0441\u0442\u043e \u043f\u0443\u0442\u0430\u044e\u0442:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0422\u0435\u0440\u043c\u0438\u043d<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0447\u0435\u0440\u0435\u0437 SHM<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f (\u0438\u043b\u0438 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f) \u0432 \u043e\u0431\u0449\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c, \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a \u0447\u0438\u0442\u0430\u0435\u0442 \u043e\u0442\u0442\u0443\u0434\u0430. \u0421\u0435\u0442\u044c \u043d\u0435 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442, \u043d\u043e \u043a\u043e\u043f\u0438\u044f\/\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0435\u0441\u0442\u044c.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Zero-copy<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0418\u0437\u0434\u0430\u0442\u0435\u043b\u044c \u0441\u0440\u0430\u0437\u0443 <em>\u0441\u0442\u0440\u043e\u0438\u0442<\/em> \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u043e\u0431\u0449\u0435\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 (loan, \u00ab\u0437\u0430\u0439\u043c\u00bb \u0431\u043b\u043e\u043a\u0430), \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0442\u043e\u0442 \u0436\u0435 \u0431\u043b\u043e\u043a. \u041d\u0438 \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0438.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>Eclipse iceoryx<\/strong> \u2014 middleware, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0442\u0430\u043a\u043e\u0439 \u043e\u0431\u043c\u0435\u043d. \u041a\u0430\u043a \u043e\u043d\u043e \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e:<\/p>\n<ul>\n<li>\n<p><strong>RouDi<\/strong> (Routing and Discovery) \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441-\u0434\u0435\u043c\u043e\u043d. \u041f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u043e\u043d \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0432 <code>\/dev\/shm<\/code>: \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0439 <code>iceoryx_mgmt<\/code> \u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0440\u0430\u0437\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 <strong>mempool\u2019\u044b<\/strong> \u2014 \u043d\u0430\u0431\u043e\u0440\u044b \u0431\u043b\u043e\u043a\u043e\u0432 (chunk) \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430. \u0415\u0449\u0451 RouDi \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442 publisher\u2019\u043e\u0432 \u0441 subscriber\u2019\u0430\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0431\u0435\u0440\u0451\u0442 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 chunk \u0438\u0437 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e mempool, \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0435\u0433\u043e \u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442. \u0412 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 chunk \u0441\u043e \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u043c \u0441\u0441\u044b\u043b\u043e\u043a.<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u0433\u0434\u0430 chunk \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u043a\u043e\u043c\u0443 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d, \u043e\u043d \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 mempool.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 CycloneDDS iceoryx \u0432\u0441\u0442\u0440\u043e\u0435\u043d \u043a\u0430\u043a \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442 \u0434\u043b\u044f <strong>\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445<\/strong> (\u043d\u0430 \u0442\u043e\u0439 \u0436\u0435 \u043c\u0430\u0448\u0438\u043d\u0435) \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439. Discovery (SPDP\/SEDP) \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0438\u0434\u0451\u0442 \u043f\u043e UDP, \u0430 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0438, \u043a\u0430\u043a \u0438 \u0440\u0430\u043d\u044c\u0448\u0435, \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0441\u0435\u0442\u0438.<\/p>\n<h3>\u0415\u0441\u0442\u044c \u0436\u0435 composable-\u043d\u043e\u0434\u044b, \u0437\u0430\u0447\u0435\u043c \u0442\u043e\u0433\u0434\u0430 SHM?<\/h3>\n<p>\u0421omposable-\u043d\u043e\u0434\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 shared memory, \u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u043e\u0434 (\u043a\u0430\u043a <code>.so<\/code>-\u043f\u043b\u0430\u0433\u0438\u043d\u044b) \u0432 <strong>\u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0446\u0435\u0441\u0441<\/strong>. \u0415\u0441\u043b\u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c intra-process communication (IPC), rclcpp \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043d\u043e\u0434\u0430\u043c\u0438 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0447\u0435\u0440\u0435\u0437 <code>std::unique_ptr<\/code>\/<code>std::shared_ptr<\/code>, \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430. DDS, \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u041e\u0421 \u0432 \u044d\u0442\u043e\u043c \u043d\u0435 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u044e\u0442.<\/p>\n<p>IPC \u0432 Humble \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438 \u043d\u0435 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e:<\/p>\n<ol>\n<li>\n<p><strong>IPC \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.<\/strong> \u0415\u0433\u043e \u043d\u0430\u0434\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c: <code>rclcpp::NodeOptions().use_intra_process_comms(true)<\/code> \u0438\u043b\u0438 \u0432 launch <code>extra_arguments=[{'use_intra_process_comms': True}]<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>Zero-copy \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 <\/strong><code><strong>std::unique_ptr<\/strong><\/code><strong>.<\/strong> <code>publish(const Msg&amp;)<\/code> \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u043e\u043c IPC \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0435\u043b\u0430\u0435\u0442 \u043a\u043e\u043f\u0438\u044e. \u0415\u0441\u043b\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u043e\u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438 \u0447\u0430\u0441\u0442\u044c \u0445\u043e\u0447\u0435\u0442 \u0432\u043b\u0430\u0434\u0435\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u043c (<code>unique_ptr<\/code>-callback), rclcpp \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043d\u0438\u0445, \u043a\u0440\u043e\u043c\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e.<\/p>\n<\/li>\n<li>\n<p><strong>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f QoS \u0432 Humble.<\/strong> Publisher \u0441 IPC \u0431\u0440\u043e\u0441\u0430\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0435\u0441\u043b\u0438 QoS \u043d\u0435 <code>KEEP_LAST<\/code>, depth = 0 \u0438\u043b\u0438 durability \u043d\u0435 <code>VOLATILE<\/code>. \u0417\u043d\u0430\u0447\u0438\u0442, <code>transient_local<\/code>-\u0442\u043e\u043f\u0438\u043a\u0438 (<code>\/tf_static<\/code>, <code>\/map<\/code>, <code>\/robot_description<\/code>) \u0447\u0435\u0440\u0435\u0437 IPC \u043d\u0435 \u043f\u0443\u0441\u0442\u0438\u0442\u044c.<\/p>\n<\/li>\n<li>\n<p><strong>\u0412\u043d\u0435\u0448\u043d\u0438\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0438 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 DDS.<\/strong> \u0415\u0441\u043b\u0438 \u043d\u0430 \u0442\u043e\u043f\u0438\u043a \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u044b rviz, <code>ros2 bag record<\/code> \u0438\u043b\u0438 \u043d\u043e\u0434\u0430 \u0438\u0437 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, rclcpp \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u043e\u0431\u044b\u0447\u043d\u0443\u044e \u043c\u0435\u0436\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043d\u0443\u044e \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044e \u0441 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439.<\/p>\n<\/li>\n<\/ol>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0443 \u00ab\u0432\u0441\u0451 \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435\u00bb \u0435\u0441\u0442\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u043c\u0438\u043d\u0443\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 SHM \u043b\u0438\u0448\u0451\u043d:<\/p>\n<ul>\n<li>\n<p>Segfault \u0432 \u043e\u0434\u043d\u043e\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0435 \u0443\u0431\u0438\u0432\u0430\u0435\u0442 \u0432\u0435\u0441\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435 \u0432\u0441\u0435 \u043d\u043e\u0434\u044b \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 Python-\u043d\u043e\u0434\u044b, \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0438, \u043d\u043e\u0434\u044b \u0438\u0437 \u0447\u0443\u0436\u0438\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0431\u0435\u0437 <code>rclcpp_components_register_node<\/code>, \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0434\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0434\u0438\u043d executor (\u0438\u043b\u0438 \u0435\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430), \u043e\u0431\u0449\u0430\u044f \u043a\u0443\u0447\u0430, \u043e\u0431\u0449\u0438\u0439 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430. \u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043e\u0434\u043d\u0443 \u043d\u043e\u0434\u0443 \u043d\u0435\u043b\u044c\u0437\u044f.<\/p>\n<\/li>\n<\/ul>\n<p>IPC \u2014 \u0441\u0430\u043c\u044b\u0439 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u043f\u0443\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0438 \u0435\u0433\u043e \u0441\u0442\u043e\u0438\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043c, \u0433\u0434\u0435 \u043d\u043e\u0434\u044b \u0438 \u0442\u0430\u043a \u0436\u0438\u0432\u0443\u0442 \u0432\u043c\u0435\u0441\u0442\u0435. SHM \u043d\u0443\u0436\u0435\u043d \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043e\u0431\u043c\u0435\u043d\u0430 \u043c\u0435\u0436\u0434\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438 \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435. \u042d\u0442\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c: \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441 IPC \u0432\u043d\u0443\u0442\u0440\u0438 \u0438 SHM \u0434\u043b\u044f \u0441\u0432\u044f\u0437\u0438 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438.<\/p>\n<h3>\u041a\u0430\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0431\u0435\u0437 SHM \u0438 \u0441 SHM<\/h3>\n<h4>\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e (SHM \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d)<\/h4>\n<p>\u041f\u0443\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f <code>pub-&gt;publish(msg)<\/code> \u2192 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043d\u0430 \u0442\u043e\u0439 \u0436\u0435 \u043c\u0430\u0448\u0438\u043d\u0435:<\/p>\n<pre><code>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 A (publisher)                                    \u041f\u0440\u043e\u0446\u0435\u0441\u0441 B (subscriber)\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500                                    \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500rclcpp::Publisher::publish  \u2192 rcl_publish    \u2192 rmw_publish (rmw_cyclonedds)      \u2192 dds_write        \u2192 \u0421\u0415\u0420\u0418\u0410\u041b\u0418\u0417\u0410\u0426\u0418\u042f \u0432 CDR (\u043a\u043e\u043f\u0438\u044f \u21161)        \u2192 DDSI-RTPS: \u043d\u0430\u0440\u0435\u0437\u043a\u0430 \u043d\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b          (MaxMessageSize 14720 B, FragmentSize 1344 B)        \u2192 sendmsg() UDP  \u2500\u2500 \u044f\u0434\u0440\u043e, loopback (\u043a\u043e\u043f\u0438\u044f \u21162) \u2500\u2500\u2192 recvmsg() (\u043a\u043e\u043f\u0438\u044f \u21163)                                                          \u2192 \u0441\u0431\u043e\u0440\u043a\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432                                                          \u2192 reader history cache                                                          \u2192 rmw_take \u2192 \u0414\u0415\u0421\u0415\u0420\u0418\u0410\u041b\u0418\u0417\u0410\u0426\u0418\u042f (\u043a\u043e\u043f\u0438\u044f \u21164)                                                          \u2192 callback(msg)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper\"><\/span><\/a><\/div><\/pre>\n<p>\u041e\u0434\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043d\u0430 2 \u041c\u0411 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043e\u0442\u043d\u0438 UDP-\u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c. \u041d\u0430 \u043c\u043e\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 150 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043f\u043e 2 \u041c\u0411 \u0434\u0430\u043b\u0438 <strong>24 214<\/strong> \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0445 UDP-\u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c, \u0442\u043e \u0435\u0441\u0442\u044c ~160 \u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 (\u0441\u043c. \u0440\u0430\u0437\u0434\u0435\u043b \u043f\u0440\u043e \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438 UDP \u043d\u0438\u0436\u0435). \u041f\u0440\u0438 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0431\u0443\u0444\u0435\u0440\u0430 \u0441\u043e\u043a\u0435\u0442\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u0442\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u0438 \u0443\u0445\u043e\u0434\u044f\u0442 \u043d\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443, \u043e\u0442\u0441\u044e\u0434\u0430 \u0434\u043b\u0438\u043d\u043d\u044b\u0435 \u0445\u0432\u043e\u0441\u0442\u044b \u0437\u0430\u0434\u0435\u0440\u0436\u0435\u043a. README <code>rmw_cyclonedds<\/code> \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043f\u0440\u044f\u043c\u043e \u0441\u043e\u0432\u0435\u0442\u0443\u0435\u0442 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0442\u044c <code>net.core.rmem_max<\/code>\/<code>rmem_default<\/code>.<\/p>\n<h4>\u0421 \u0432\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u043c SHM<\/h4>\n<p>\u041a\u043e\u0433\u0434\u0430 SHM \u0432\u043a\u043b\u044e\u0447\u0451\u043d, <strong>\u043e\u0431\u0435<\/strong> \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u0438 QoS \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442, data path \u0432 Humble \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 A (publisher)                     RouDi \/ \/dev\/shm              \u041f\u0440\u043e\u0446\u0435\u0441\u0441 B (subscriber)\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500                     \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500              \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500publish(msg)  \u2192 dds_write    \u2192 iox: \u0432\u0437\u044f\u0442\u044c chunk \u0438\u0437 mempool  \u2500\u2500\u2500\u2500\u2192  [chunk]    \u2192 POD: memcpy \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 chunk      \u043d\u0435-POD: \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432 chunk    \u2192 iox_pub_publish_chunk \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 chunk \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2192 \u043e\u0447\u0435\u0440\u0435\u0434\u044c iox-subscriber                                                                   \u2192 \u043f\u043e\u0442\u043e\u043a shm_monitor \u043a\u043b\u0430\u0434\u0451\u0442                                                                     \u0441\u044d\u043c\u043f\u043b \u0432 reader history cache                                                                   \u2192 rmw_take:                                                                      loans \u0412\u042b\u041a\u041b (\u0434\u0435\u0444\u043e\u043b\u0442 Humble):                                                                        chunk \u2192 CDR \u2192 \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f                                                                      loans \u0412\u041a\u041b + POD:                                                                        callback \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c                                                                        \u043f\u0440\u044f\u043c\u043e \u0432 chunk (zero-copy)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0445 \u0432\u0435\u0449\u0435\u0439:<\/p>\n<ol>\n<li>\n<p><strong>\u041e\u0431\u044b\u0447\u043d\u044b\u0439 <\/strong><code><strong>publish()<\/strong><\/code><strong> \u043d\u0435 \u0434\u0430\u0451\u0442 zero-copy.<\/strong> \u0415\u0441\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043d\u0435 \u0431\u044b\u043b\u043e \u0432\u0437\u044f\u0442\u043e \u0447\u0435\u0440\u0435\u0437 loan, Cyclone \u0431\u0435\u0440\u0451\u0442 chunk \u0438 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0432 \u043d\u0435\u0433\u043e POD \u0438\u043b\u0438 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043d\u0435-POD.<\/p>\n<\/li>\n<li>\n<p><strong>\u041d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0430 \u0432 Humble \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u044e\u0442\u0441\u044f \u0438 \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u044e\u0442\u0441\u044f \u0437\u0430\u043d\u043e\u0432\u043e.<\/strong> Loans \u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u043e\u043a \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u044b (\u0441\u043c. \u00ab<code>ROS_DISABLE_LOANED_MESSAGES<\/code> \u0432 Humble\u00bb). \u0422\u043e\u0433\u0434\u0430 <code>rmw_take<\/code> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 <code>serdata_rmw_to_sample<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043b\u044f \u00ab\u0441\u044b\u0440\u043e\u0433\u043e\u00bb chunk \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0435\u043b\u0430\u0435\u0442 <code>serialize_into_serdata_rmw<\/code> (\u0432 CDR), \u0430 \u043f\u043e\u0442\u043e\u043c <code>deserializeROSmessage<\/code> (<code>serdata.cpp<\/code>). \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0438 \u0443\u0432\u0438\u0434\u0435\u043b\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Cyclone \u0432 flame graph \u0432 <a href=\"https:\/\/github.com\/eclipse-cyclonedds\/cyclonedds\/issues\/2155\" rel=\"noopener nofollow\">issue #2155<\/a>. \u0414\u0430\u0436\u0435 \u0442\u0430\u043a \u044d\u0442\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435 UDP: \u043d\u0435\u0442 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0441\u0442\u0435\u043a\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>\u041d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 zero-copy \u0432 Humble<\/strong> \u2014 \u044d\u0442\u043e <code>borrow_loaned_message()<\/code> \u0443 \u0438\u0437\u0434\u0430\u0442\u0435\u043b\u044f <strong>\u043f\u043b\u044e\u0441<\/strong> <code>ROS_DISABLE_LOANED_MESSAGES=0<\/code> \u0443 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0430 <strong>\u043f\u043b\u044e\u0441<\/strong> POD-\u0442\u0438\u043f.<\/p>\n<\/li>\n<li>\n<p><strong>\u0418\u043d\u043e\u0433\u0434\u0430 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0443\u0436\u043d\u0430 \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435.<\/strong> \u00ab\u0422\u043e\u043b\u044c\u043a\u043e iceoryx\u00bb \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439, durability = <code>VOLATILE<\/code> \u0438 \u043d\u0435\u0442 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043d\u0435-SHM \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439 \u0432 \u0442\u043e\u043c \u0436\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435. \u0418\u043d\u0430\u0447\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0441\u0435\u0442\u0438\/\u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043f\u0438\u0441\u0430\u0442\u0435\u043b\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>Discovery \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u0434\u0451\u0442 \u043f\u043e UDP.<\/strong> SHM \u0443\u0441\u043a\u043e\u0440\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<\/li>\n<\/ol>\n<h3>POD-\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438 \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0441 \u043d\u0435-POD<\/h3>\n<h4>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 POD \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u0445 rmw_cyclonedds<\/h4>\n<p>POD (plain old data) \u2014 \u0442\u0438\u043f \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043b\u0435\u0436\u0438\u0442 \u0432 \u0441\u0432\u043e\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0438 \u043d\u0435 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043a\u0443\u0447\u0443. \u0415\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c <code>memcpy<\/code> \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0438 \u043e\u043d \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c.<\/p>\n<p>\u0422\u0438\u043f \u043d\u0435 POD, \u0435\u0441\u043b\u0438 \u0433\u0434\u0435-\u0442\u043e \u0432 \u043d\u0451\u043c, \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u043f\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c, \u0435\u0441\u0442\u044c:<\/p>\n<ul>\n<li>\n<p><code>string<\/code> \u0438\u043b\u0438 <code>wstring<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0435\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c <code>T[]<\/code>;<\/p>\n<\/li>\n<li>\n<p><strong>\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u0430\u044f<\/strong> \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c <code>T[&lt;=N]<\/code> (\u0443 \u043d\u0435\u0451 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0434\u043b\u0438\u043d\u0430!).<\/p>\n<\/li>\n<\/ul>\n<p>\u0424\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b <code>T[N]<\/code> \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">POD<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u043d\u0435 POD<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>std_msgs\/Float64<\/code>, <code>UInt32<\/code>, <code>Bool<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>std_msgs\/String<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>geometry_msgs\/Point<\/code>, <code>Pose<\/code>, <code>Twist<\/code>, <code>Vector3<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0432\u0441\u0451 \u0441 <\/strong><code><strong>std_msgs\/Header<\/strong><\/code> (\u0432 \u043d\u0451\u043c <code>string frame_id<\/code>): <code>sensor_msgs\/Image<\/code>, <code>PointCloud2<\/code>, <code>Imu<\/code>, <code>LaserScan<\/code>, <code>PoseStamped<\/code>\u2026<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0441\u0432\u043e\u0439 <code>uint8[2000000] data<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>std_msgs\/Float64MultiArray<\/code>, <code>uint8[] data<\/code>, <code>uint8[&lt;=100] data<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u00ab\u0442\u044f\u0436\u0451\u043b\u044b\u0445\u00bb \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 (<code>Image<\/code>, <code>PointCloud2<\/code>) \u2014 <strong>\u043d\u0435 POD<\/strong>. \u0414\u043b\u044f zero-copy \u0434\u0435\u043b\u0430\u044e\u0442 \u0441\u0432\u043e\u0438 \u0442\u0438\u043f\u044b \u0441 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438 (\u043f\u0440\u0438\u043c\u0435\u0440 \u2014 \u043f\u0440\u043e\u0435\u043a\u0442 <a href=\"https:\/\/github.com\/ZhenshengLee\/ros2_shm_msgs\" rel=\"noopener nofollow\">ros2_shm_msgs<\/a>) \u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043d\u0435\u0440\u0430\u0437\u043c\u0435\u0440\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0432\u0440\u043e\u0434\u0435 Agnocast.<\/p>\n<h4>\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u043d\u0435-POD \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u043e\u043c SHM<\/h4>\n<p>\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f Cyclone \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u043b\u044f \u043d\u0435-fixed-size \u0442\u0438\u043f\u043e\u0432 SHM \u00ab\u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f\u00bb. <strong>\u0414\u043b\u044f rmw_cyclonedds \u0432 Humble \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a:<\/strong><\/p>\n<ol>\n<li>\n<p>rmw_cyclonedds \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 <code>sertype_get_serialized_size<\/code> \u0438 <code>sertype_serialize_into<\/code> (<code>serdata.cpp<\/code>), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 writer\/reader \u0434\u043b\u044f \u043d\u0435-POD <strong>\u0442\u043e\u0436\u0435<\/strong> \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 iceoryx (<code>dds_writer_support_shm<\/code>). \u041f\u0440\u0438 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0435 \u0432\u0438\u0434\u043d\u043e <code>Writer's topic name will be DDS:Cyclone:rt\/chatter<\/code> \u0443 <code>std_msgs\/String<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438 <code>publish()<\/code> \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 <strong>\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0432 CDR \u043f\u0440\u044f\u043c\u043e \u0432 chunk<\/strong> (<code>IOX_CHUNK_CONTAINS_SERIALIZED_DATA<\/code>), \u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a \u0435\u0433\u043e \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442. \u0421\u0435\u0442\u044c \u043d\u0435 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442, \u043d\u043e \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432 \u043e\u0431\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>Loans \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b.<\/strong> <code>is_loaning_available = is_fixed_type &amp;&amp; dds_is_loan_available(...)<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 <code>can_loan_messages()<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>false<\/code>. <code>borrow_loaned_message()<\/code> \u043d\u0435 \u043f\u0430\u0434\u0430\u0435\u0442: rclcpp \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440\u043e\u043c \u0438 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043f\u0438\u0448\u0435\u0442 <code>Currently used middleware can't loan messages. Local allocator will be used.<\/code> \u041f\u0440\u044f\u043c\u043e\u0439 \u0432\u044b\u0437\u043e\u0432 <code>rmw_publish_loaned_message<\/code> \u0434\u043b\u044f \u043d\u0435-POD \u0432\u0435\u0440\u043d\u0451\u0442 \u043e\u0448\u0438\u0431\u043a\u0443 <code>Publishing a loaned message of non fixed type is not allowed<\/code>.<\/p>\n<\/li>\n<\/ol>\n<p>\u041e\u0448\u0438\u0431\u043a\u0438 \u0438\u043b\u0438 \u043f\u0430\u0434\u0435\u043d\u0438\u044f \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u0411\u0443\u0434\u0435\u0442 \u201cSHM \u0441 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439\u201d.<\/p>\n<h4>\u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 loaned messages:<\/h4>\n<p>\u0418\u0437\u0434\u0430\u0442\u0435\u043b\u044c:<\/p>\n<pre><code class=\"cpp\">auto pub = create_publisher&lt;my_msgs::msg::Pod&gt;(\"topic\", rclcpp::QoS(5).reliable());\/\/ ...auto loaned = pub-&gt;borrow_loaned_message();   \/\/ chunk \u043f\u0440\u044f\u043c\u043e \u0438\u0437 mempool iceoryxloaned.get().stamp_ns = now_ns();fill(loaned.get().data);                      \/\/ \u043f\u0438\u0448\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u0432 shared memorypub-&gt;publish(std::move(loaned));              \/\/ \u0431\u0435\u0437 \u043a\u043e\u043f\u0438\u0438; \u043f\u043e\u0441\u043b\u0435 move \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a loaned \u043d\u0435\u043b\u044c\u0437\u044f<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a \u2014 <strong>\u0442\u043e\u043b\u044c\u043a\u043e \u0441 callback \u043f\u043e <\/strong><code><strong>const &amp;<\/strong><\/code>:<\/p>\n<pre><code class=\"cpp\">auto sub = create_subscription&lt;my_msgs::msg::Pod&gt;(  \"topic\", rclcpp::QoS(5).reliable(),  [](const my_msgs::msg::Pod &amp; msg) { \/* msg \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432 chunk *\/ });<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<h4>ROS_DISABLE_LOANED_MESSAGES \u0432 Humble<\/h4>\n<p>\u041f\u043e\u0441\u043b\u0435 <a href=\"https:\/\/github.com\/ros2\/rmw_cyclonedds\/issues\/469\" rel=\"noopener nofollow\">rmw_cyclonedds#469<\/a> \u0432 Humble \u0431\u044d\u043a\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f (<a href=\"https:\/\/github.com\/ros2\/rcl\/pull\/1110\" rel=\"noopener nofollow\">rcl#1110<\/a>, <a href=\"https:\/\/github.com\/ros2\/rclcpp\/pull\/2335\" rel=\"noopener nofollow\">rclcpp#2335<\/a>). \u041f\u0440\u0438\u0447\u0438\u043d\u0430: executor \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 loaned-\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 middleware \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 callback, \u0438 <code>shared_ptr<\/code>, \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c, \u043d\u0430\u0447\u0438\u043d\u0430\u043b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0432 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0451\u043d\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c (use-after-free).<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\n<\/th>\n<th>\n<p align=\"left\">\u041f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Publisher<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">loans \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u044b, \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043d\u0435 \u0440\u0430\u0432\u043d\u0430 <code>\"1\"<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Subscription<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">loans <strong>\u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u044b<\/strong>, \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043d\u0435 \u0440\u0430\u0432\u043d\u0430 \u0440\u043e\u0432\u043d\u043e <code>\"0\"<\/code> (\u0442\u043e \u0435\u0441\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c loans \u043d\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0435: <code>export ROS_DISABLE_LOANED_MESSAGES=0<\/code>. rclcpp \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0438\u0442: <em>\u201cLoaned messages are only safe with const ref subscription callbacks\u2026\u201d<\/em>. \u042d\u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u043e\u043d\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0430 \u0432\u0441\u0435 \u0435\u0433\u043e \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438. \u0412\u043a\u043b\u044e\u0447\u0430\u0439\u0442\u0435 \u0435\u0451 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432, \u0433\u0434\u0435 \u0432\u0441\u0435 callback\u2019\u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 <code>const &amp;<\/code>.<\/p>\n<h3>\u041a\u0430\u043a\u0438\u0435 middleware \u0432 ROS 2 \u0443\u043c\u0435\u044e\u0442 shared memory<\/h3>\n<p>\u0412\u0441\u0451 \u043d\u0438\u0436\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a Humble.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">RMW<\/p>\n<\/th>\n<th>\n<p align=\"left\">SHM \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e<\/p>\n<\/th>\n<th>\n<p align=\"left\">Zero-copy (loans)<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041d\u0443\u0436\u0435\u043d \u0434\u0435\u043c\u043e\u043d<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>rmw_fastrtps_cpp<\/strong> (Fast DDS) \u2014 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0439 RMW Humble<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0414\u0430<\/strong>, SHM-\u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442 \u0432\u043a\u043b\u044e\u0447\u0451\u043d \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 UDPv4<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412 Humble \u043d\u0443\u0436\u043d\u044b POD-\u0442\u0438\u043f <strong>\u0438<\/strong> \u0432\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u0439 Data Sharing (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e <code>OFF<\/code>, \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f XML-\u043f\u0440\u043e\u0444\u0438\u043b\u0435\u043c + <code>RMW_FASTRTPS_USE_QOS_FROM_XML=1<\/code>)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\"><a href=\"https:\/\/github.com\/ros2\/rmw_fastrtps\/tree\/humble\" rel=\"noopener nofollow\">README rmw_fastrtps<\/a>, <a href=\"https:\/\/fast-dds.docs.eprosima.com\/en\/2.6.x\/fastdds\/transport\/shared_memory\/shared_memory.html\" rel=\"noopener nofollow\">Fast DDS SHM transport<\/a><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>rmw_cyclonedds_cpp<\/strong> (Cyclone DDS + iceoryx)<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u041d\u0435\u0442<\/strong>, \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 XML<\/p>\n<\/td>\n<td>\n<p align=\"left\">POD + <code>borrow_loaned_message<\/code> (+ <code>ROS_DISABLE_LOANED_MESSAGES=0<\/code> \u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438)<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0414\u0430, RouDi<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0422\u0435\u043c\u0430 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438. <a href=\"https:\/\/github.com\/ros2\/rmw_cyclonedds\/blob\/humble\/shared_memory_support.md\" rel=\"noopener nofollow\">shared_memory_support.md<\/a><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>rmw_connextdds<\/strong> (RTI Connext)<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0414\u0430<\/strong>, builtin transport mask <code>UDPv4|SHMEM<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">Loans \u0432 rmw \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f (<a href=\"https:\/\/docs.ros.org\/en\/humble\/How-To-Guides\/Configure-ZeroCopy-loaned-messages.html\" rel=\"noopener nofollow\">\u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0432 \u0434\u043e\u043a\u0430\u0445 ROS<\/a>)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0430\u044f \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u044f. <a href=\"https:\/\/community.rti.com\/static\/documentation\/connext-dds\/current\/doc\/manuals\/connext_dds_professional\/users_manual\/users_manual\/TRANSPORT_BUILTIN_Qos.htm\" rel=\"noopener nofollow\">RTI: TRANSPORT_BUILTIN<\/a><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>rmw_iceoryx<\/strong> (\u043d\u0435 DDS)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0422\u043e\u043b\u044c\u043a\u043e SHM<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0414\u043b\u044f POD<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0414\u0430, RouDi<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0422\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0430. README: \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f <code>ros2 param list<\/code>, rmw-\u0441\u043e\u0431\u044b\u0442\u0438\u044f; \u00abunder heavy development\u00bb. <a href=\"https:\/\/github.com\/ros2\/rmw_iceoryx\/tree\/humble\" rel=\"noopener nofollow\">README<\/a><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>rmw_zenoh_cpp<\/strong> (\u043d\u0435 DDS)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435\u0442, \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u043b\u044e\u0447\u0430\u043c\u0438 <code>transport\/shared_memory\/enabled<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">SHM \u00ab\u043d\u0435\u044f\u0432\u043d\u043e\u00bb \u0434\u043b\u044f \u043b\u044e\u0431\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0440\u043e\u0433\u0430 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 512 \u0411)<\/p>\n<\/td>\n<td>\n<p align=\"left\">zenohd-\u0440\u043e\u0443\u0442\u0435\u0440 (\u0434\u043b\u044f discovery)<\/p>\n<\/td>\n<td>\n<p align=\"left\"><a href=\"https:\/\/github.com\/ros2\/rmw_zenoh\/tree\/humble\" rel=\"noopener nofollow\">README (humble)<\/a><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e \u0443 Fast DDS <strong>SHM-\u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442<\/strong> (\u043a\u043e\u043f\u0438\u044f \u0432 \u043e\u0431\u0449\u0438\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442) \u0432\u043a\u043b\u044e\u0447\u0451\u043d \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0430 <strong>Data Sharing<\/strong> (\u0431\u043b\u0438\u0437\u043a\u0438\u0439 \u043a zero-copy \u043f\u0443\u0442\u044c) \u2014 \u043d\u0435\u0442. \u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0430 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u043e\u043c RMW, \u0447\u0430\u0441\u0442\u044c \u0432\u044b\u0438\u0433\u0440\u044b\u0448\u0430 \u043e\u0442 SHM \u0443 \u0432\u0430\u0441, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0443\u0436\u0435 \u0435\u0441\u0442\u044c.<\/p>\n<h3>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430: cyclonedds.xml \u0438 RouDi<\/h3>\n<h4>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430<\/h4>\n<pre><code class=\"bash\">sudo apt install ros-humble-rmw-cyclonedds-cpp        # \u043f\u043e\u0434\u0442\u044f\u043d\u0435\u0442 cyclonedds \u0438 iceoryx_{hoofs,posh,binding_c}sudo apt install ros-humble-iceoryx-introspection     # iox-introspection-client (\u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0411\u0438\u043d\u0430\u0440\u043d\u044b\u0439 Cyclone \u0432 Humble <strong>\u0441\u043e\u0431\u0440\u0430\u043d \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 iceoryx<\/strong> (<code>DDS_HAS_SHM<\/code>). \u041f\u0435\u0440\u0435\u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e, <code>iox-roudi<\/code> \u043b\u0435\u0436\u0438\u0442 \u0432 <code>\/opt\/ros\/humble\/bin<\/code>.<\/p>\n<h4>cyclonedds.xml<\/h4>\n<p>\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0444\u0438\u0433:<\/p>\n<pre><code class=\"xml\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\" ?&gt;&lt;CycloneDDS xmlns=\"https:\/\/cdds.io\/config\"            xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"            xsi:schemaLocation=\"https:\/\/cdds.io\/config https:\/\/raw.githubusercontent.com\/eclipse-cyclonedds\/cyclonedds\/releases\/0.10.x\/etc\/cyclonedds.xsd\"&gt;  &lt;Domain id=\"any\"&gt;    &lt;SharedMemory&gt;      &lt;Enable&gt;true&lt;\/Enable&gt;      &lt;LogLevel&gt;info&lt;\/LogLevel&gt;    &lt;\/SharedMemory&gt;  &lt;\/Domain&gt;&lt;\/CycloneDDS&gt;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412\u0441\u0435 \u043e\u043f\u0446\u0438\u0438 \u0441\u0435\u043a\u0446\u0438\u0438 <code>\/\/CycloneDDS\/Domain\/SharedMemory<\/code> \u0432 Cyclone 0.10.x (<code>docs\/manual\/options.md<\/code>):<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u042d\u043b\u0435\u043c\u0435\u043d\u0442<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Enable<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>true<\/code>\/<code>false<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>false<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u043a\u043b\u044e\u0447\u0430\u0435\u0442 iceoryx-\u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>LogLevel<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>off<\/code>, <code>fatal<\/code>, <code>error<\/code>, <code>warn<\/code>, <code>info<\/code>, <code>debug<\/code>, <code>verbose<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>info<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u043b\u043e\u0433\u043e\u0432 <strong>\u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430 iceoryx<\/strong> \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Locator<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u0442\u0440\u043e\u043a\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>\"\"<\/code> (\u043e\u0434\u0438\u043d \u0438\u0437 MAC-\u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u043c\u0430\u0448\u0438\u043d\u044b)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e \u043d\u0435\u043c\u0443 Cyclone \u0440\u0435\u0448\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u0432\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u043a \u043e\u0434\u043d\u043e\u043c\u0443 RouDi. \u0422\u0440\u043e\u0433\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u043e \u0440\u0435\u0434\u043a\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u0445, \u0433\u0434\u0435 MAC \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Prefix<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u0442\u0440\u043e\u043a\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>DDS_CYCLONE<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0418\u043c\u044f \u00ab\u0441\u0435\u0440\u0432\u0438\u0441\u0430\u00bb iceoryx, \u043f\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u043c Cyclone \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442 \u0442\u043e\u043f\u0438\u043a\u0438<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041b\u043e\u0433\u0438 \u0441\u0430\u043c\u043e\u0433\u043e Cyclone \u043f\u043e SHM \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0443:<\/p>\n<pre><code class=\"xml\">&lt;Tracing&gt;  &lt;Category&gt;shm&lt;\/Category&gt;  &lt;OutputFile&gt;stdout&lt;\/OutputFile&gt;&lt;\/Tracing&gt;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<h4>\u041a\u0430\u043a \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433<\/h4>\n<pre><code class=\"bash\">export RMW_IMPLEMENTATION=rmw_cyclonedds_cppexport CYCLONEDDS_URI=file:\/\/\/abs\/path\/cyclonedds.xml<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p><code>CYCLONEDDS_URI<\/code> \u2014 \u044d\u0442\u043e <strong>\u0441\u043f\u0438\u0441\u043e\u043a \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u044f\u0442\u0443\u044e<\/strong>. \u042d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c <code>file:\/\/...<\/code> \u0438\u043b\u0438 XML \u043f\u0440\u044f\u043c\u043e \u0432 \u0441\u0442\u0440\u043e\u043a\u0435, \u0432 \u0441\u043e\u043a\u0440\u0430\u0449\u0451\u043d\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435 \u0431\u0435\u0437 \u043a\u043e\u0440\u043d\u0435\u0432\u044b\u0445 <code>&lt;CycloneDDS&gt;&lt;Domain&gt;<\/code>. \u041f\u0440\u0438\u043c\u0435\u0440\u044b:<\/p>\n<pre><code class=\"bash\"># inlineexport CYCLONEDDS_URI='&lt;SharedMemory&gt;&lt;Enable&gt;true&lt;\/Enable&gt;&lt;\/SharedMemory&gt;'# \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b + \u0434\u043e\u0431\u0430\u0432\u043a\u0430 \u0441\u0432\u0435\u0440\u0445\u0443export CYCLONEDDS_URI=\"file:\/\/$HOME\/base.xml,&lt;Tracing&gt;&lt;Category&gt;shm&lt;\/Category&gt;&lt;OutputFile&gt;stdout&lt;\/OutputFile&gt;&lt;\/Tracing&gt;\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<h4>RouDi<\/h4>\n<pre><code class=\"bash\">iox-roudi                               # \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0444\u0438\u0433 mempool'\u043e\u0432iox-roudi -c \/etc\/iceoryx\/roudi.toml    # \u0441\u0432\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p><strong>RouDi \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u0434\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0441 SHM.<\/strong> \u0415\u0441\u043b\u0438 \u0435\u0433\u043e \u043d\u0435\u0442, \u043d\u043e\u0434\u0430 \u043f\u0438\u0448\u0435\u0442 <code>RouDi not found - waiting ...<\/code>, \u0440\u043e\u0432\u043d\u043e \u0447\u0435\u0440\u0435\u0437 60 \u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u0430\u0434\u0430\u0435\u0442 \u0441 <code>Timeout registering at RouDi. Is RouDi running?<\/code> \u0438 <code>terminate called<\/code>. \u041d\u0430 \u043e\u0434\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 (\u0432 \u043e\u0434\u043d\u043e\u043c IPC-namespace) \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u0438\u043d RouDi.<\/p>\n<h3>\u041e\u043f\u0446\u0438\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 (iceoryx 2.0.5, iox-roudi &#8212;help)<\/h3>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041e\u043f\u0446\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>-c, --config-file &lt;path&gt;<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">TOML-\u043a\u043e\u043d\u0444\u0438\u0433. \u0411\u0435\u0437 \u043e\u043f\u0446\u0438\u0438 \u0438\u0449\u0435\u0442\u0441\u044f <code>\/etc\/iceoryx\/roudi_config.toml<\/code>, \u0438\u043d\u0430\u0447\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0444\u0438\u0433<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>-l, --log-level<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>off<\/code>, <code>fatal<\/code>, <code>error<\/code>, <code>warning<\/code>, <code>info<\/code>, <code>debug<\/code>, <code>verbose<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>-m, --monitoring-mode on|off<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u00ab\u0436\u0438\u0432\u043e\u0441\u0442\u0438\u00bb \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e <code>on<\/code>). \u041f\u0440\u0438 <code>on<\/code> RouDi \u0432\u044b\u0447\u0438\u0449\u0430\u0435\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0443\u043f\u0430\u0432\u0448\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432; \u0432 \u043b\u043e\u0433\u0435 \u044d\u0442\u043e <code>Application ... not responding ... --&gt; removing it<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>-k, --kill-delay &lt;\u0441\u0435\u043a&gt;<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0427\u0435\u0440\u0435\u0437 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u043e\u0441\u043b\u0435 SIGTERM RouDi \u043f\u043e\u0448\u043b\u0451\u0442 SIGKILL \u043d\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0432\u0448\u0438\u043c\u0441\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c \u043f\u0440\u0438 \u0441\u0432\u043e\u0451\u043c \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0435<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>-u, --unique-roudi-id &lt;int&gt;<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 id RouDi<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>-x, --compatibility<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0442\u0440\u043e\u0433\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0432\u0435\u0440\u0441\u0438\u0439 runtime \u2194 RouDi: <code>off<\/code>, <code>major<\/code>, <code>minor<\/code>, <code>patch<\/code>, <code>commitId<\/code>, <code>buildDate<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h3>TOML-\u043a\u043e\u043d\u0444\u0438\u0433: \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0438 mempool\u2019\u044b<\/h3>\n<pre><code>[general]version = 1[[segment]]# reader = \"group_a\"   # \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e: POSIX-\u0433\u0440\u0443\u043f\u043f\u0430 \u0441 \u043f\u0440\u0430\u0432\u043e\u043c \u0447\u0442\u0435\u043d\u0438\u044f# writer = \"group_b\"   # \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e: POSIX-\u0433\u0440\u0443\u043f\u043f\u0430 \u0441 \u043f\u0440\u0430\u0432\u043e\u043c \u0437\u0430\u043f\u0438\u0441\u0438[[segment.mempool]]size = 128        # \u0440\u0430\u0437\u043c\u0435\u0440 payload \u0432 \u0431\u0430\u0439\u0442\u0430\u0445 (\u043a\u0440\u0430\u0442\u043d\u043e 8)count = 10000     # \u0447\u0438\u0441\u043b\u043e \u0431\u043b\u043e\u043a\u043e\u0432[[segment.mempool]]size = 2100000    # \u043f\u043e\u0434 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f ~2 \u041c\u0411count = 64<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<ul>\n<li>\n<p><code>size<\/code> \u2014 \u0440\u0430\u0437\u043c\u0435\u0440 <strong>payload<\/strong> chunk\u2019\u0430. Chunk-header iceoryx \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0432\u0435\u0440\u0445\u0443 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438. Cyclone \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0432\u043e\u0439 user-header, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0435 ROS-\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 <code>sizeof(msg)<\/code>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u0448\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043d\u0430 2 000 016 \u0431\u0430\u0439\u0442 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e chunk \u043d\u0430 <strong>2 000 120<\/strong> \u0431\u0430\u0439\u0442 (\u0432\u0438\u0434\u043d\u043e \u0432 \u043b\u043e\u0433\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0438\u0436\u0435). \u0412 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Cyclone \u0443\u043a\u0430\u0437\u0430\u043d \u0437\u0430\u043f\u0430\u0441 \u00ab+64 \u0431\u0430\u0439\u0442\u0430 \u043a \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u0442\u0438\u043f\u0430\u00bb. \u0417\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0439\u0442\u0435 \u0441 \u0437\u0430\u043f\u0430\u0441\u043e\u043c.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434 \u043a\u0430\u0436\u0434\u0443\u044e \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044e \u0431\u0435\u0440\u0451\u0442\u0441\u044f <strong>\u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439<\/strong> \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u0431\u043b\u043e\u043a.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e <code>[[segment]]<\/code> \u0441 <code>reader<\/code>\/<code>writer<\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0440\u0430\u0437\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043f\u043e \u0433\u0440\u0443\u043f\u043f\u0430\u043c \u041e\u0421.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0444\u0438\u0433 (\u0435\u0441\u043b\u0438 <code>-c<\/code> \u043d\u0435 \u0437\u0430\u0434\u0430\u043d):<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">size<\/p>\n<\/th>\n<th>\n<p align=\"left\">count<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">128<\/p>\n<\/td>\n<td>\n<p align=\"left\">10000<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">1 024<\/p>\n<\/td>\n<td>\n<p align=\"left\">5000<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">16 384<\/p>\n<\/td>\n<td>\n<p align=\"left\">1000<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">131 072<\/p>\n<\/td>\n<td>\n<p align=\"left\">200<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">524 288<\/p>\n<\/td>\n<td>\n<p align=\"left\">50<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">1 048 576<\/p>\n<\/td>\n<td>\n<p align=\"left\">30<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">4 194 304<\/p>\n<\/td>\n<td>\n<p align=\"left\">10<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 RouDi \u0441 \u0434\u0435\u0444\u043e\u043b\u0442\u0430\u043c\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0432 <code>\/dev\/shm<\/code> ~66,8 \u041c\u0411 \u043f\u043e\u0434 <code>iceoryx_mgmt<\/code> \u0438 ~149 \u041c\u0411 \u043f\u043e\u0434 \u0434\u0430\u043d\u043d\u044b\u0435 (\u0438\u0437 \u043b\u043e\u0433\u0430). \u0412 Docker \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0443 \u043d\u0443\u0436\u043d\u044b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b\u0439 <code>--shm-size<\/code> \u0438 \u043e\u0431\u0449\u0438\u0439 IPC-namespace \u0441 RouDi.<\/p>\n<p><strong>\u0427\u0442\u043e \u0431\u0443\u0434\u0435\u0442, \u0435\u0441\u043b\u0438 \u0431\u043b\u043e\u043a\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043d\u0435\u0442<\/strong> (\u043a\u043e\u043d\u0444\u0438\u0433, \u0433\u0434\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u043b 128 \u041a\u0411):<\/p>\n<pre><code>ICEORYX error! MEPOO__MEMPOOL_GETCHUNK_CHUNK_IS_TOO_LARGECould not find a fitting mempool for a chunk of size 2000120terminate called after throwing an instance of 'rclcpp::exceptions::RCLError'  what():  failed to publish message: failed to publish data, at .\/src\/rmw_node.cpp:1837<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0427\u0435\u0440\u0435\u0437 <code>borrow_loaned_message()<\/code> \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 <code>sample_ptr is null<\/code>. \u0415\u0441\u043b\u0438 \u0431\u043b\u043e\u043a\u0438 \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0435\u0441\u0442\u044c, \u043d\u043e \u0432\u0441\u0435 \u0437\u0430\u043d\u044f\u0442\u044b, Cyclone \u0434\u0435\u043b\u0430\u0435\u0442 10 \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0441 \u043f\u0430\u0443\u0437\u043e\u0439 1 \u043c\u0441, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e <code>publish<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443. \u041d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0442\u0438\u0445\u043e\u0433\u043e fallback \u0432 \u0441\u0435\u0442\u044c \u043d\u0435\u0442. \u0420\u0430\u0437\u043c\u0435\u0440 \u043f\u0443\u043b\u043e\u0432 \u043d\u0430\u0434\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0437\u0430\u0440\u0430\u043d\u0435\u0435: \u0431\u043b\u043e\u043a\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u043e \u0445\u0432\u0430\u0442\u0430\u0442\u044c \u043d\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u043e\u0432, \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0438\u0437\u0434\u0430\u0442\u0435\u043b\u0435\u0439 \u0438 \u00ab\u0432\u0438\u0441\u044f\u0449\u0438\u0435\u00bb loans. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0437\u0430\u043f\u0430\u0441 \u0443\u0434\u043e\u0431\u043d\u043e \u043f\u043e \u043a\u043e\u043b\u043e\u043d\u043a\u0435 <em>Min Free<\/em> \u0432 \u0438\u043d\u0442\u0440\u043e\u0441\u043f\u0435\u043a\u0446\u0438\u0438 (<code>iox-introspection-client<\/code>).<\/p>\n<h3>\u041b\u0438\u043c\u0438\u0442\u044b, \u0437\u0430\u0448\u0438\u0442\u044b\u0435 \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 iceoryx<\/h3>\n<p>\u041f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u043e\u0439 iceoryx (\u0438 Cyclone \u043f\u0440\u043e\u0442\u0438\u0432 \u043d\u0435\u0451). \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f 2.0.x (<code>IceoryxPoshDeployment.cmake<\/code>, <code>iceoryx_posh_types.hpp<\/code>):<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>IOX_MAX_PUBLISHERS<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">512 \u043d\u0430 RouDi<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>IOX_MAX_SUBSCRIBERS<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">1024 \u043d\u0430 RouDi<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>IOX_MAX_SUBSCRIBERS_PER_PUBLISHER<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">256<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>IOX_MAX_PUBLISHER_HISTORY<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">16<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>IOX_MAX_CHUNKS_ALLOCATED_PER_PUBLISHER_SIMULTANEOUSLY<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">8 (\u043d\u0435 \u0431\u043e\u043b\u0435\u0435 8 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 loans \u043d\u0430 publisher)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>IOX_MAX_CHUNKS_HELD_PER_SUBSCRIBER_SIMULTANEOUSLY<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">256 (= \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0451\u043c\u043a\u043e\u0441\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0430)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>MAX_PROCESS_NUMBER<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">300 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>MAX_NUMBER_OF_MEMPOOLS<\/code> \/ <code>MAX_SHM_SEGMENTS<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">32 \/ 100<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>IOX_INTERNAL_MAX_NUMBER_OF_NOTIFIERS<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">256 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043d\u0430 listener, \u043e\u0442\u0441\u044e\u0434\u0430 \u043b\u0438\u043c\u0438\u0442 SHM-\u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 (\u0441\u043c. \u00ab\u041b\u0438\u043c\u0438\u0442 SHM-\u043f\u043e\u0434\u043f\u0438\u0441\u043e\u043a \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435\u00bb)<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4>\u041a\u043e\u0433\u0434\u0430 Cyclone \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 SHM \u0434\u043b\u044f \u0442\u043e\u043f\u0438\u043a\u0430<\/h4>\n<p>\u0414\u0430\u0436\u0435 \u043f\u0440\u0438 <code>Enable=true<\/code> \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e writer\/reader \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u0443\u0441\u043b\u043e\u0432\u0438\u044f. \u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u044c \u043e\u0434\u043d\u043e \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e, \u044d\u0442\u043e\u0442 endpoint <strong>\u0442\u0438\u0445\u043e<\/strong> \u0443\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u0435\u0442\u044c. \u0423\u0441\u043b\u043e\u0432\u0438\u044f \u043d\u0438\u0436\u0435 \u0432\u0437\u044f\u0442\u044b \u0438\u0437 \u043a\u043e\u0434\u0430 0.10.x (<code>dds_writer_support_shm<\/code>, <code>dds_reader_support_shm<\/code>). \u0412 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Cyclone \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u0440\u043e\u0436\u0435 \u0438 \u0443\u0441\u0442\u0430\u0440\u0435\u043b, \u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430\u0434\u043e \u043a\u043e\u0434\u0443:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0423\u0441\u043b\u043e\u0432\u0438\u0435<\/p>\n<\/th>\n<th>\n<p align=\"left\">Writer<\/p>\n<\/th>\n<th>\n<p align=\"left\">Reader<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0422\u0438\u043f<\/p>\n<\/td>\n<td>\n<p align=\"left\">fixed-size <strong>\u0438\u043b\u0438<\/strong> \u0443 sertype \u0435\u0441\u0442\u044c <code>serialize_into<\/code> (\u0432 rmw_cyclonedds Humble \u0435\u0441\u0442\u044c, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 <strong>\u043b\u044e\u0431\u043e\u0439<\/strong> \u0442\u0438\u043f)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0442\u043e \u0436\u0435<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">History<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0442\u043e\u043b\u044c\u043a\u043e <code>KEEP_LAST<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0442\u043e\u043b\u044c\u043a\u043e <code>KEEP_LAST<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Durability<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>VOLATILE<\/code> \u0438\u043b\u0438 <code>TRANSIENT_LOCAL<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>VOLATILE<\/code> \u0438\u043b\u0438 <code>TRANSIENT_LOCAL<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Depth<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u043b\u044f <code>TRANSIENT_LOCAL<\/code> \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 16 (<code>IOX_MAX_PUBLISHER_HISTORY<\/code>)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043b\u044e\u0431\u0430\u044f; \u043e\u0447\u0435\u0440\u0435\u0434\u044c iceoryx \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f 256<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Reliability<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>RELIABLE<\/code> \u0438 <code>BEST_EFFORT<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043e\u0431\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Liveliness<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>AUTOMATIC<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>AUTOMATIC<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Deadline<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">ignore_local<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u0442<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f:<\/p>\n<ul>\n<li>\n<p><code>KEEP_ALL<\/code> (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>rclcpp::QoS(rclcpp::KeepAll())<\/code>) \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e SHM \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u0441 <code>ignore_local_publications = true<\/code> \u0442\u043e\u0436\u0435 \u0438\u0434\u0451\u0442 \u043c\u0438\u043c\u043e SHM. \u0422\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0439 reader <code>ros_discovery_info<\/code> \u0432\u043d\u0443\u0442\u0440\u0438 rmw.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u0441 depth 1000 (<code>\/parameter_events<\/code>) \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 SHM, \u043d\u043e iceoryx-\u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0443 \u043d\u0435\u0451 \u0431\u0443\u0434\u0435\u0442 256.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f iceoryx-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f SHM \u043d\u0443\u0436\u0435\u043d <strong>\u043e\u0431\u043e\u0438\u043c<\/strong> \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430\u043c. \u0415\u0441\u043b\u0438 \u0443 \u043e\u0434\u043d\u043e\u0433\u043e \u043e\u043d \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d, \u043e\u0431\u043c\u0435\u043d \u0438\u0434\u0451\u0442 \u043f\u043e UDP (\u0441\u043c. \u00ab\u0420\u0430\u0437\u043d\u044b\u0439 \u043a\u043e\u043d\u0444\u0438\u0433 Cyclone \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u043d\u043e\u0434\u00bb).<\/p>\n<\/li>\n<\/ul>\n<h3>\u041a\u0430\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e SHM \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/h3>\n<p>\u0412\u043d\u0435\u0448\u043d\u0435 SHM \u043d\u0438\u0447\u0435\u043c \u0441\u0435\u0431\u044f \u043d\u0435 \u0432\u044b\u0434\u0430\u0451\u0442: \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0434\u043e\u0445\u043e\u0434\u044f\u0442 \u0438 \u0431\u0435\u0437 \u043d\u0435\u0433\u043e. \u041d\u0438\u0436\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u044d\u0442\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c.<\/p>\n<h4>\u0422\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0430 Cyclone (\u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f shm)<\/h4>\n<pre><code class=\"bash\">export CYCLONEDDS_URI=\"file:\/\/$PWD\/cyclonedds.xml,&lt;Tracing&gt;&lt;Category&gt;shm&lt;\/Category&gt;&lt;OutputFile&gt;stdout&lt;\/OutputFile&gt;&lt;\/Tracing&gt;\"ros2 run demo_nodes_cpp talker<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0420\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434:<\/p>\n<pre><code>talker: Current process name for iceoryx is iceoryx_rt_313712_1789571835193512600talker: Writer's topic name will be DDS:Cyclone:ros_discovery_infotalker: Writer's topic name will be DDS:Cyclone:rr\/talker\/get_parametersReplytalker: Reader's topic name will be DDS:Cyclone:rq\/talker\/get_parametersRequest...talker: Writer's topic name will be DDS:Cyclone:rt\/parameter_eventstalker: Reader's topic name will be DDS:Cyclone:rt\/parameter_eventstalker: Writer's topic name will be DDS:Cyclone:rt\/chatter<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0421\u0442\u0440\u043e\u043a\u0430 <code>Writer's\/Reader's topic name will be DDS:Cyclone:&lt;\u0442\u043e\u043f\u0438\u043a&gt;<\/code> \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442\u0441\u044f <strong>\u0442\u043e\u043b\u044c\u043a\u043e<\/strong> \u0434\u043b\u044f endpoint\u2019\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0434\u043e\u0441\u0442\u0430\u043b\u0441\u044f iceoryx. \u0415\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0442\u043e\u043f\u0438\u043a\u0430 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u043d\u0435\u0442, \u0437\u043d\u0430\u0447\u0438\u0442 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e \u043e\u0434\u043d\u043e \u0438\u0437 \u0443\u0441\u043b\u043e\u0432\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044f \u043e\u043f\u0438\u0441\u0430\u043b \u0432\u044b\u0448\u0435. \u041f\u0440\u0435\u0444\u0438\u043a\u0441\u044b: <code>rt\/<\/code> \u2014 \u0442\u043e\u043f\u0438\u043a\u0438, <code>rq\/<\/code>\/<code>rr\/<\/code> \u2014 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438 \u043e\u0442\u0432\u0435\u0442\u044b \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u0421\u0435\u0440\u0432\u0438\u0441\u044b, \u043e\u0434\u043d\u0430\u043a\u043e, \u0442\u043e\u0436\u0435 \u0445\u043e\u0434\u044f\u0442 \u0447\u0435\u0440\u0435\u0437 SHM.<\/p>\n<p>\u042d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435, \u043d\u043e \u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435: \u0443 <strong>\u0432\u0442\u043e\u0440\u043e\u0439<\/strong> \u0441\u0442\u043e\u0440\u043e\u043d\u044b iceoryx \u0442\u043e\u0436\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c.<\/p>\n<h4>iox-introspection-client<\/h4>\n<pre><code class=\"bash\">iox-introspection-client --all          # \u0438\u043b\u0438 --mempool \/ --port \/ --process, -t &lt;ms&gt; \u2014 \u043f\u0435\u0440\u0438\u043e\u0434<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>TUI \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0442\u0440\u0438 \u0431\u043b\u043e\u043a\u0430:<\/p>\n<ul>\n<li>\n<p><strong>MemPool Status<\/strong> \u2014 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043f\u0443\u043b\u0443: <em>Chunks In Use<\/em>, <em>Total<\/em>, <em>Min Free<\/em>, <em>Chunk Size<\/em>. \u0415\u0441\u043b\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0440\u0430\u0441\u0442\u0451\u0442 <em>Chunks In Use<\/em> \u0432 \u043f\u0443\u043b\u0435 \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0434\u0443\u0442 \u0447\u0435\u0440\u0435\u0437 SHM.<\/p>\n<\/li>\n<li>\n<p><strong>Processes<\/strong> \u2014 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b. Cyclone \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0440\u0430\u043d\u0442\u0430\u0439\u043c <code>iceoryx_rt_&lt;PID&gt;_&lt;timestamp&gt;<\/code>, \u0442\u0430\u043a \u0447\u0442\u043e <strong>PID \u0432\u0438\u0434\u0435\u043d \u043f\u0440\u044f\u043c\u043e \u0432 \u0438\u043c\u0435\u043d\u0438<\/strong>.<\/p>\n<\/li>\n<li>\n<p><strong>Min Free<\/strong> \u2014 \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432 \u0437\u0430 \u0432\u0441\u0451 \u0432\u0440\u0435\u043c\u044f. \u0415\u0441\u043b\u0438 \u043e\u043d \u0431\u043b\u0438\u0437\u043e\u043a \u043a 0, \u043f\u0443\u043b\u044b \u043d\u0430\u0434\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c. <\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/56\/9f\/b7\/569fb7e582295a7a7e64f7aefa538998.png\" alt=\"MemPool Status, Processes \u0438 Min Free\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/56\/9f\/b7\/569fb7e582295a7a7e64f7aefa538998.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/56\/9f\/b7\/569fb7e582295a7a7e64f7aefa538998.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>MemPool Status, Processes \u0438 Min Free<\/figcaption><\/div>\n<\/figure>\n<\/li>\n<li>\n<p><strong>Connections<\/strong> \u2014 publisher-\u043f\u043e\u0440\u0442\u044b: \u0441\u0435\u0440\u0432\u0438\u0441 <code>DDS_CYCLONE<\/code>, \u0442\u0438\u043f, \u0442\u043e\u043f\u0438\u043a (<code>rt\/parameter_events<\/code>,  <code>ros_discovery_info<\/code>, \u2026) \u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441-\u0432\u043b\u0430\u0434\u0435\u043b\u0435\u0446. \u0415\u0441\u043b\u0438 \u0432\u0430\u0448\u0435\u0433\u043e \u0442\u043e\u043f\u0438\u043a\u0430 \u0437\u0434\u0435\u0441\u044c \u043d\u0435\u0442, SHM \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f. <\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/3c\/b5\/a6\/3cb5a65a0b59387ed4202396a56bf01f.png\" alt=\"Connections\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/3c\/b5\/a6\/3cb5a65a0b59387ed4202396a56bf01f.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/3c\/b5\/a6\/3cb5a65a0b59387ed4202396a56bf01f.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Connections<\/figcaption><\/div>\n<\/figure>\n<\/li>\n<\/ul>\n<h4>\u041b\u043e\u0433\u0438 RouDi<\/h4>\n<p>\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\n<p><code>Chunk history request exceeds history capacity! Request is 100. Capacity is 1.<\/code> \u2014 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a <code>transient_local<\/code> \u0445\u043e\u0447\u0435\u0442 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442 \u0438\u0437\u0434\u0430\u0442\u0435\u043b\u044c (\u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 <code>\/tf_static<\/code>).<\/p>\n<\/li>\n<li>\n<p><code>Application iceoryx_rt_&lt;PID&gt;_... not responding ... --&gt; removing it<\/code> \u2014 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0443\u043f\u0430\u043b \u0438\u043b\u0438 \u0431\u044b\u043b \u0443\u0431\u0438\u0442, RouDi \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442 \u0435\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u044b.<\/p>\n<\/li>\n<li>\n<p><code>MEPOO__MEMPOOL_GETCHUNK_CHUNK_IS_TOO_LARGE<\/code> \u2014 \u043d\u0435\u0442 \u043f\u0443\u043b\u0430 \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430.<\/p>\n<\/li>\n<\/ul>\n<h4>\u041a\u043e\u0441\u0432\u0435\u043d\u043d\u043e: \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438 UDP (\u0431\u0435\u0437 root)<\/h4>\n<pre><code class=\"bash\">awk '\/^Udp:\/{getline; print \"OutDatagrams:\", $5}' \/proc\/net\/snmp   # \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0433\u043e\u043d\u0430<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u0440\u043e\u0433\u043e\u043d 150 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 POD \u043f\u043e 2 \u041c\u0411 \u0441 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 30 \u0413\u0446:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0420\u0435\u0436\u0438\u043c<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0394 UDP OutDatagrams (\u043f\u043e \u0432\u0441\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435)<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0431\u0435\u0437 SHM<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>24 214<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0441 SHM<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>260<\/strong> (discovery \u0438 \u043f\u0440\u043e\u0447\u0438\u0439 \u0444\u043e\u043d)<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c root, \u0442\u043e \u0436\u0435 \u0432\u0438\u0434\u043d\u043e \u0432 <code>tcpdump -i lo udp<\/code> \u0438\u043b\u0438 Wireshark.<\/p>\n<h4>\u0412 \u043a\u043e\u0434\u0435<\/h4>\n<p><code>publisher-&gt;can_loan_messages()<\/code> \/ <code>subscription-&gt;can_loan_messages()<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 <code>true<\/code> \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 SHM \u0430\u043a\u0442\u0438\u0432\u0435\u043d \u0434\u043b\u044f endpoint\u2019\u0430, \u0442\u0438\u043f POD \u0438 loans \u043d\u0435 \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f. \u0423\u0434\u043e\u0431\u043d\u043e \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0432 \u043b\u043e\u0433 \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435.<\/p>\n<h3>\u0420\u0430\u0437\u043d\u044b\u0439 \u043a\u043e\u043d\u0444\u0438\u0433 Cyclone \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u043d\u043e\u0434<\/h3>\n<p><code>CYCLONEDDS_URI<\/code> \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f <strong>\u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 DDS-\u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430<\/strong>, \u0442\u043e \u0435\u0441\u0442\u044c \u044d\u0442\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <strong>\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430<\/strong>, \u0430 \u043d\u0435 \u043d\u043e\u0434\u044b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0430\u0437\u043d\u044b\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c \u043c\u043e\u0436\u043d\u043e \u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0438. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, SHM \u0441\u0442\u043e\u0438\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043c, \u0433\u0434\u0435 \u0438\u0434\u0443\u0442 \u0442\u044f\u0436\u0451\u043b\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<p>\u041a\u0430\u043a \u0432\u0435\u0434\u0443\u0442 \u0441\u0435\u0431\u044f \u0441\u043c\u0435\u0448\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 (talker + <code>ros2 node list<\/code> \/ <code>ros2 param get<\/code>, RouDi \u0437\u0430\u043f\u0443\u0449\u0435\u043d):<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041d\u043e\u0434\u044b<\/p>\n<\/th>\n<th>\n<p align=\"left\">CLI (<code>ros2 \u2026<\/code>)<\/p>\n<\/th>\n<th>\n<p align=\"left\"><code>node list<\/code><\/p>\n<\/th>\n<th>\n<p align=\"left\"><code>param get<\/code><\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">SHM<\/p>\n<\/td>\n<td>\n<p align=\"left\">SHM<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043f\u0443\u0441\u0442\u043e<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>Node not found<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">SHM<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0431\u0435\u0437 SHM<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0431\u0435\u0437 SHM<\/p>\n<\/td>\n<td>\n<p align=\"left\">SHM<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0431\u0435\u0437 SHM<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0431\u0435\u0437 SHM<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043e\u0434\u0438\u043d \u0438\u0437 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u0432 \u0431\u0435\u0437 SHM, \u043e\u0431\u043c\u0435\u043d \u0438\u0434\u0451\u0442 \u043f\u043e UDP \u0438 \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041e\u0442\u0441\u044e\u0434\u0430 \u0443\u0434\u043e\u0431\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430: SHM \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u0445 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 \u0441\u0435\u043d\u0441\u043e\u0440\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430 \u0432\u0441\u0451 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 (CLI, rviz, \u043d\u043e\u0434\u0430 \u0441\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 TF, <code>robot_state_publisher<\/code>, map_server) \u0431\u0435\u0437 \u043d\u0435\u0433\u043e.<\/p>\n<h4>Launch-\u0444\u0430\u0439\u043b<\/h4>\n<pre><code class=\"python\">from launch import LaunchDescriptionfrom launch_ros.actions import Node, ComposableNodeContainerfrom launch_ros.descriptions import ComposableNodeSHM = 'file:\/\/\/opt\/robot\/config\/cyclonedds_shm.xml'NO_SHM = 'file:\/\/\/opt\/robot\/config\/cyclonedds.xml'def generate_launch_description():    return LaunchDescription([        # \u0442\u044f\u0436\u0451\u043b\u044b\u0439 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440: SHM        Node(package='my_camera', executable='camera_driver',             additional_env={'CYCLONEDDS_URI': SHM}),        ComposableNodeContainer(            name='perception', namespace='', package='rclcpp_components',            executable='component_container_mt',            additional_env={'CYCLONEDDS_URI': SHM},       # \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0430 \u0412\u0415\u0421\u042c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440            composable_node_descriptions=[                ComposableNode(package='my_perception', plugin='my::Detector',                               extra_arguments=[{'use_intra_process_comms': True}]),            ]),        # transient_local-\u0438\u0437\u0434\u0430\u0442\u0435\u043b\u0438 \u0438 \u00ab\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u044b\u0435\u00bb \u043d\u043e\u0434\u044b: \u0431\u0435\u0437 SHM        Node(package='robot_state_publisher', executable='robot_state_publisher',             additional_env={'CYCLONEDDS_URI': NO_SHM}),    ])<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p><code>additional_env<\/code> \u2014 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>launch.actions.ExecuteProcess<\/code>, \u0430 <code>launch_ros.actions.Node<\/code> \u043e\u0442 \u043d\u0435\u0433\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442\u0441\u044f. \u0414\u043b\u044f \u0433\u0440\u0443\u043f\u043f\u044b \u043d\u043e\u0434 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 <code>SetEnvironmentVariable<\/code> \u0432\u043d\u0443\u0442\u0440\u0438 <code>GroupAction<\/code>.<\/p>\n<p>\u041d\u044e\u0430\u043d\u0441\u044b:<\/p>\n<ul>\n<li>\n<p><strong>\u0412\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u043a\u043e\u043d\u0444\u0438\u0433 \u043e\u0434\u0438\u043d \u043d\u0430 \u0432\u0441\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b<\/strong> (\u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u2014 \u043e\u0434\u0438\u043d \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a DDS).<\/p>\n<\/li>\n<li>\n<p><code><strong>ros2<\/strong><\/code><strong> daemon \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 CLI.<\/strong> \u041f\u043e\u0441\u043b\u0435 \u0441\u043c\u0435\u043d\u044b <code>CYCLONEDDS_URI<\/code> \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 <code>ros2 daemon stop<\/code>, \u0438\u043d\u0430\u0447\u0435 CLI \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u0430\u0440\u044b\u0439 daemon.<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u0436\u0434\u043e\u043c\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \u0441 SHM \u043d\u0443\u0436\u0435\u043d \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0439 RouDi. \u041f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c \u0431\u0435\u0437 SHM RouDi \u043d\u0435 \u043d\u0443\u0436\u0435\u043d.<\/p>\n<\/li>\n<\/ul>\n<h3>\u041f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u0435 \u043a\u0430\u043c\u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e SHM-\u043a\u043e\u043d\u0444\u0438\u0433\u0430 \u043d\u0430 \u0432\u0441\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443<\/h3>\n<p>\u0421\u0430\u043c\u044b\u0439 \u0447\u0430\u0441\u0442\u044b\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u2014 <code>export CYCLONEDDS_URI=...shm.xml<\/code> \u0432 <code>~\/.bashrc<\/code>, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e SHM \u0432\u043a\u043b\u044e\u0447\u0451\u043d \u0443 \u0432\u0441\u0435\u0445 \u043d\u043e\u0434, CLI, rviz \u0438 rqt. \u041d\u0438\u0436\u0435 \u0447\u0442\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f. \u041f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0434\u043b\u044f Humble (Cyclone 0.10.5, iceoryx 2.0.5).<\/p>\n<h4>transient_local \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043b\u044f \u043f\u043e\u0437\u0434\u043d\u0438\u0445 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u043e\u0432<\/h4>\n<p>\u0415\u0441\u043b\u0438 \u0438\u0437\u0434\u0430\u0442\u0435\u043b\u044c <code>TRANSIENT_LOCAL<\/code> \u0443\u0436\u0435 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a (\u0442\u043e\u0436\u0435 \u0441 SHM) \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f <strong>\u043f\u043e\u0437\u0436\u0435<\/strong>, \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u043d <strong>\u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442<\/strong>:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>static_transform_publisher<\/code> \u2192 \u043f\u043e\u0442\u043e\u043c <code>ros2 topic echo \/tf_static<\/code> (transient_local)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0442\u043e \u0436\u0435 \u2192 <code>tf2_echo world foo<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>frame does not exist<\/code>; RouDi: <code>Chunk history request exceeds history capacity! Request is 100. Capacity is 1.<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>robot_state_publisher<\/code> \u2192 \u043f\u043e\u0442\u043e\u043c echo <code>\/robot_description<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u274c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>ros2 topic pub \/late \u2026<\/code> (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e transient_local, depth 1) \u2192 \u043f\u043e\u0442\u043e\u043c echo<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u274c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0441\u043d\u0430\u0447\u0430\u043b\u0430<\/strong> \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a, \u043f\u043e\u0442\u043e\u043c <code>static_transform_publisher<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u042d\u0442\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u0431\u0430\u0433\u0438: <a href=\"https:\/\/github.com\/ros2\/rmw_cyclonedds\/issues\/401\" rel=\"noopener nofollow\">rmw_cyclonedds#401<\/a> (\u043e\u0442\u043a\u0440\u044b\u0442 \u0441 2022, \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 Humble \u0432 2026) \u0438 <a href=\"https:\/\/github.com\/eclipse-cyclonedds\/cyclonedds\/issues\/1584\" rel=\"noopener nofollow\">cyclonedds#1584<\/a> (\u0432 \u044f\u043d\u0432\u0430\u0440\u0435 2026 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043d \u043d\u0430 0.10.5). \u041f\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044e \u043c\u0435\u0439\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 Cyclone, iceoryx \u043a\u043b\u0430\u0434\u0451\u0442 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0430, \u043d\u043e \u043d\u0435 \u0431\u0443\u0434\u0438\u0442 listener, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 Cyclone \u043d\u0435 \u0437\u0430\u0431\u0438\u0440\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u0440\u0438\u0434\u0451\u0442 <em>\u0441\u0432\u0435\u0436\u0435\u0435<\/em> \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435. \u0423 \u043e\u0434\u043d\u043e\u043a\u0440\u0430\u0442\u043d\u043e \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u043c\u044b\u0445 \u0442\u043e\u043f\u0438\u043a\u043e\u0432 \u0441\u0432\u0435\u0436\u0438\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435 \u0431\u044b\u0432\u0430\u0435\u0442.<\/p>\n<p>\u041f\u043e\u0434 \u0443\u0434\u0430\u0440 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 <code>\/tf_static<\/code>, <code>\/robot_description<\/code>, <code>\/map<\/code> (map_server), \u0432\u0441\u0451, \u0447\u0442\u043e \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437.<\/p>\n<h4>\u041d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 ros2cli-\u0443\u0442\u0438\u043b\u0438\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043f\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0438\u043c\u0435\u043d\u0430 \u043d\u043e\u0434<\/h4>\n<p>\u0421\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a\u043e\u0439 \u043d\u043e\u0434\u0435 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442 \u043a\u0430\u043a\u0438\u0435 \u0442\u043e\u043f\u0438\u043a\u0438 \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u044b, rmw \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0447\u0435\u0440\u0435\u0437 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0439 \u0442\u043e\u043f\u0438\u043a <code><strong>ros_discovery_info<\/strong><\/code> (<code>TRANSIENT_LOCAL<\/code>, <code>KEEP_LAST 1<\/code>). \u0423 \u043d\u0430\u0441 \u0435\u0433\u043e writer \u0432 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0435 \u0438\u0434\u0451\u0442 \u0447\u0435\u0440\u0435\u0437 iceoryx. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0439 <em>\u043f\u043e\u0441\u043b\u0435<\/em> \u043d\u043e\u0434\u044b, \u043d\u0435 \u0443\u0437\u043d\u0430\u0451\u0442 \u043e \u043d\u0435\u0439:<\/p>\n<ul>\n<li>\n<p><code>ros2 daemon<\/code> \u0437\u0430\u043f\u0443\u0449\u0435\u043d <strong>\u0434\u043e<\/strong> talker \u2192 <code>ros2 node list<\/code> \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 <code>\/talker<\/code> \u2705;<\/p>\n<\/li>\n<li>\n<p>\u0442\u043e\u0442 \u0436\u0435 <code>ros2 node list --no-daemon<\/code> (\u0441\u0432\u0435\u0436\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043f\u043e\u0437\u0434\u043d\u0438\u0439 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a) \u2192 \u043f\u0443\u0441\u0442\u043e.<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u0430\u043a\u0438\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u0442\u044b \u043f\u0440\u0438 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u043c SHM:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041a\u043e\u043c\u0430\u043d\u0434\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>ros2 node list<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043f\u0443\u0441\u0442\u043e<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>ros2 node info \/talker<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>Unable to find node '\/talker'<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>ros2 param list\/get\/set\/dump\/load\/describe\/delete<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>Node not found<\/code> (\u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0449\u0443\u0442 \u043d\u043e\u0434\u0443 \u043f\u043e \u0438\u043c\u0435\u043d\u0438)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>ros2 lifecycle nodes<\/code> \/ <code>get<\/code> \/ <code>set<\/code> \/ <code>list<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043f\u0443\u0441\u0442\u043e \/ <code>Node not found<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>ros2 component list<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043f\u0443\u0441\u0442\u043e<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>ros2 component load \/ComponentManager \u2026<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>Unable to find container node '\/ComponentManager'<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>ros2 action info \/fibonacci<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u26a0\ufe0f <code>Action servers: 0<\/code> \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>ros2 topic info -v \/chatter<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u26a0\ufe0f <code>Node name: _NODE_NAME_UNKNOWN_<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>ros2 topic list<\/code>, <code>ros2 topic echo<\/code> (volatile), <code>ros2 service list<\/code>, <code>ros2 service call<\/code>, <code>ros2 action list<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 DDS discovery \u0438 \u043f\u0440\u044f\u043c\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041f\u043e\u0434 \u0443\u0434\u0430\u0440 \u0442\u0430\u043a \u0436\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 <code>rqt_graph<\/code> \u0438 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0433\u043b\u0430\u0433\u043e\u043b\u044b <code>ros2 component<\/code>\/<code>ros2 lifecycle<\/code>. \u0412 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u0442\u043e \u0436\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f <code>Node::get_node_names()<\/code> \u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 graph API: \u043e\u043d\u0438 \u0432\u0438\u0434\u044f\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u043e\u0434\u044b, \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u0432\u0448\u0438\u0435 \u043f\u043e\u0441\u043b\u0435 \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430.<\/p>\n<h4>\u0414\u0440\u0443\u0433\u0438\u0435 \u0433\u0440\u0430\u0431\u043b\u0438<\/h4>\n<ul>\n<li>\n<p><strong>RouDi \u2014 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u0438 \u0435\u0434\u0438\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u043e\u0442\u043a\u0430\u0437\u0430.<\/strong> \u0411\u0435\u0437 \u043d\u0435\u0433\u043e \u043b\u044e\u0431\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441 SHM \u0432\u0438\u0441\u0438\u0442 60 \u0441 \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u0435 \u0438 \u043f\u0430\u0434\u0430\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p><strong>\u041d\u0435\u0445\u0432\u0430\u0442\u043a\u0430 mempool \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044e \u0432 <\/strong><code><strong>publish()<\/strong><\/code>, \u0430 \u043d\u0435 \u043a \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0443 \u043d\u0430 \u0441\u0435\u0442\u044c.<\/p>\n<\/li>\n<li>\n<p><strong>Loans + <\/strong><code><strong>shared_ptr<\/strong><\/code><strong>-callback = use-after-free<\/strong> (\u0441\u043c. \u00ab<code>ROS_DISABLE_LOANED_MESSAGES<\/code> \u0432 Humble\u00bb). \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 Humble loans \u043d\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0435 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u044b.<\/p>\n<\/li>\n<li>\n<p><strong>\u041c\u0443\u0441\u043e\u0440\u043d\u044b\u0435 loans\/\u0447\u0430\u043d\u043a\u0438.<\/strong> \u0412 <a href=\"https:\/\/github.com\/ros2\/rmw_cyclonedds\/issues\/471\" rel=\"noopener nofollow\">rmw_cyclonedds#471<\/a> \u043f\u0440\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0438\u0437\u0434\u0430\u0442\u0435\u043b\u044f\u0445 \u043a\u043e\u043f\u0438\u043b\u0438\u0441\u044c \u043d\u0435\u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0451\u043d\u043d\u044b\u0435 chunk\u2019\u0438, iceoryx \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b <code>TOO_MANY_CHUNKS_HELD_IN_PARALLEL<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>Composable-\u043d\u043e\u0434\u044b \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0438 SHM<\/strong>: <a href=\"https:\/\/github.com\/ros2\/rmw_cyclonedds\/issues\/472\" rel=\"noopener nofollow\">rmw_cyclonedds#472<\/a> (\u043e\u0442\u043a\u0440\u044b\u0442). \u0410\u0432\u0442\u043e\u0440 issue \u0432 \u043a\u0440\u0443\u043f\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 (&gt;100 \u043d\u043e\u0434) \u0432 \u0438\u0442\u043e\u0433\u0435 \u043e\u0441\u0442\u0430\u0432\u0438\u043b iceoryx \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f volatile-\u0442\u043e\u043f\u0438\u043a\u043e\u0432 \u0441 \u0441\u0435\u043d\u0441\u043e\u0440\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0430 \u0441\u0435\u0440\u0432\u0438\u0441\u044b, \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438 transient_local \u0443\u0432\u0451\u043b \u0441 SHM. \u042d\u0442\u043e \u0442\u0430 \u0436\u0435 \u0441\u0445\u0435\u043c\u0430, \u0447\u0442\u043e \u0432 \u0433\u043b\u0430\u0432\u0435 \u00ab\u0420\u0430\u0437\u043d\u044b\u0439 \u043a\u043e\u043d\u0444\u0438\u0433 Cyclone \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u043d\u043e\u0434\u00bb.<\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b.<\/strong> RouDi \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u0438\u0434\u0435\u0442\u044c \u043e\u0434\u0438\u043d <code>\/dev\/shm<\/code> \u0438 IPC-namespace. \u0418\u043d\u0430\u0447\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u00ab\u0436\u0434\u0443\u0442 RouDi\u00bb \u0438\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u0440\u0430\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0432 <code>Locator<\/code> (\u0441\u043c. <a href=\"https:\/\/github.com\/ros2\/rmw_cyclonedds\/issues\/476\" rel=\"noopener nofollow\">rmw_cyclonedds#476<\/a>).<\/p>\n<\/li>\n<li>\n<p><strong>\u0422\u043e\u043b\u044c\u043a\u043e Linux.<\/strong> \u041d\u0430 Windows SHM \u0443 Cyclone \u043d\u0435\u0442.<\/p>\n<\/li>\n<\/ul>\n<h4>\u041b\u0438\u043c\u0438\u0442 SHM-\u043f\u043e\u0434\u043f\u0438\u0441\u043e\u043a \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435<\/h4>\n<p>\u0412\u0441\u0435 iceoryx-reader\u2019\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0432\u0435\u0448\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043e\u0434\u0438\u043d iceoryx listener, \u0430 \u0443 listener\u2019\u0430 \u0432 iceoryx 2.0.5 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c <strong>256<\/strong> \u0441\u043e\u0431\u044b\u0442\u0438\u0439 (<code>IOX_INTERNAL_MAX_NUMBER_OF_NOTIFIERS<\/code>). \u041f\u0440\u0438\u043c\u0435\u0440: python-\u043d\u043e\u0434\u0430 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438 <code>std_msgs\/Float64<\/code> \u0432 \u0446\u0438\u043a\u043b\u0435:<\/p>\n<pre><code>FAILED after 250 subscriptions: RCLError: Failed to create subscription: invalid allocatorpython3: .\/src\/core\/ddsc\/src\/dds_entity.c:338: delete_children: Assertion ... failed.<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>250 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043f\u043e\u0434\u043f\u0438\u0441\u043e\u043a + 6 reader\u2019\u043e\u0432 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043d\u043e\u0434\u044b = 256. \u041f\u0440\u0438 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0438 \u043b\u0438\u043c\u0438\u0442\u0430 <strong>\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438 \u043f\u0430\u0434\u0430\u0435\u0442<\/strong> (<code>Failed to attach iox subscriber to iox listener<\/code> \u2192 \u043e\u0448\u0438\u0431\u043a\u0430), \u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0435\u0449\u0451 \u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u0441 assert \u043f\u0440\u0438 \u0432\u044b\u0445\u043e\u0434\u0435. \u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f rmw_cyclonedds \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0446\u0438\u0444\u0440\u0443 <strong>127<\/strong>. \u041e\u043d\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0430\u0440\u043e\u0433\u043e iceoryx, \u043d\u043e \u043a\u0430\u043a \u043a\u043e\u043d\u0441\u0435\u0440\u0432\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440 \u0433\u043e\u0434\u0438\u0442\u0441\u044f.<\/p>\n<p>\u0421\u0447\u0438\u0442\u0430\u0439\u0442\u0435 reader\u2019\u044b, \u0430 \u043d\u0435 \u0442\u043e\u043f\u0438\u043a\u0438. \u041a\u0430\u0436\u0434\u0430\u044f rclcpp-\u043d\u043e\u0434\u0430 \u0441\u0430\u043c\u0430 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 ~6 reader\u2019\u043e\u0432 \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0438 1 \u0434\u043b\u044f <code>\/parameter_events<\/code> (7 reader\u2019\u043e\u0432 \u0443 talker). <strong>\u0411\u043e\u043b\u044c\u0448\u043e\u0439 component_container \u043d\u0430 30+ \u043d\u043e\u0434 \u0443\u043f\u0440\u0451\u0442\u0441\u044f \u0432 \u043b\u0438\u043c\u0438\u0442<\/strong> \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043f\u043e\u0434\u043f\u0438\u0441\u043e\u043a.<\/p>\n<h3>\u0411\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438<\/h3>\n<ul>\n<li>\n<p><strong>Apex.AI performance_test, 8 \u041c\u0411 @ 30 \u0413\u0446, 1\u202632 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0430, Cyclone 0.9<\/strong> (<a href=\"https:\/\/github.com\/eclipse-cyclonedds\/cyclonedds\/issues\/2155\" rel=\"noopener nofollow\">cyclonedds#2155<\/a>, \u044f\u043d\u0432\u0430\u0440\u044c 2025). \u041f\u043e \u0441\u043b\u043e\u0432\u0430\u043c \u0430\u0432\u0442\u043e\u0440\u0430, SHM \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443 \u00ab\u0432\u0441\u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432\u0434\u0432\u043e\u0435\u00bb \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e UDP, \u043d\u043e \u043e\u043d\u0430 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0432 \u0434\u0435\u0441\u044f\u0442\u043a\u0430\u0445 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434 \u0438 \u0440\u0430\u0441\u0442\u0451\u0442 \u0441 \u0447\u0438\u0441\u043b\u043e\u043c \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u043e\u0432. Standalone iceoryx \u043d\u0430 \u0442\u043e\u043c \u0436\u0435 \u0442\u0435\u0441\u0442\u0435 \u0434\u0430\u0451\u0442 \u0434\u043e\u043b\u0438 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u044b.<\/p>\n<\/li>\n<li>\n<p><strong>ROS 2 TSC RMW Report \u0434\u043b\u044f Humble, \u0440\u0430\u0437\u0434\u0435\u043b Cyclone DDS<\/strong> (<a href=\"https:\/\/osrf.github.io\/TSC-RMW-Reports\/humble\/eclipse-cyclonedds-report.html\" rel=\"noopener nofollow\">osrf.github.io<\/a>). <strong>\u042d\u0442\u043e \u043e\u0442\u0447\u0451\u0442 \u0441\u0430\u043c\u043e\u0433\u043e \u0432\u0435\u043d\u0434\u043e\u0440\u0430 (ADLINK)<\/strong>, performance_test, Ryzen 5 5600X. \u0412 \u043d\u0451\u043c \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u043e, \u0447\u0442\u043e <em>\u00abCyclone DDS with iceoryx improves upon Cyclone DDS in every measure: latency, jitter, throughput, memory, total CPU usage\u00bb<\/em> \u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u0445 \u0434\u043e 4\u20138 \u041c\u0411 \u0447\u0435\u0440\u0435\u0437 LoanedMessage API. \u0427\u0438\u0441\u043b\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u0445.<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 zero-copy Fast DDS (Data Sharing) \u0438 Cyclone+iceoryx<\/strong> \u043e\u0442 eProsima (<a href=\"https:\/\/discourse.openrobotics.org\/t\/zero-copy-dds-performance-comparison-for-rmw-providers-in-ros-2\/22696\" rel=\"noopener nofollow\">Discourse, \u043e\u043a\u0442\u044f\u0431\u0440\u044c 2021<\/a>). <strong>\u0422\u043e\u0436\u0435 \u0432\u0435\u043d\u0434\u043e\u0440, \u044d\u043f\u043e\u0445\u0430 Galactic.<\/strong> \u041f\u043e \u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u043c Fast DDS \u0432\u044b\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 \u043f\u043e throughput \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u0445. \u0423 Cyclone+iceoryx \u0432\u044b\u0448\u0435 ~1000 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439\/\u0441 \u043a\u043e\u043d\u0447\u0430\u043b\u0438\u0441\u044c mempool\u2019\u044b, RouDi \u043f\u0430\u0434\u0430\u043b.<\/p>\n<\/li>\n<li>\n<p><strong>Agnocast<\/strong> (Ishikawa-Aso, Kato, IEEE ISORC 2025, <a href=\"https:\/\/arxiv.org\/abs\/2506.16882\" rel=\"noopener nofollow\">arXiv:2506.16882<\/a>). \u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0441\u0442\u0430\u0442\u044c\u0438 \u2014 iceoryx-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u043d\u0435\u0440\u0430\u0437\u043c\u0435\u0440\u043d\u044b\u0435 \u0442\u0438\u043f\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0432\u0441\u044e\u0434\u0443 \u0432 Autoware. \u041d\u0430 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0435 \u043f\u0440\u0435\u0434\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043e\u0431\u043b\u0430\u043a\u043e\u0432 \u0442\u043e\u0447\u0435\u043a Autoware \u0430\u0432\u0442\u043e\u0440\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 <strong>\u221216 % \u0441\u0440\u0435\u0434\u043d\u0435\u0439 \u0438 \u221225 % \u0445\u0443\u0434\u0448\u0435\u0439 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u043e\u0442\u043a\u043b\u0438\u043a\u0430<\/strong>.<\/p>\n<\/li>\n<li>\n<p><strong>\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f Cyclone<\/strong> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0433\u0440\u0430\u0444\u0438\u043a \u00ab\u0441\u0435\u0442\u044c (lo) \u043f\u0440\u043e\u0442\u0438\u0432 iceoryx\u00bb \u043f\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 (<a href=\"https:\/\/github.com\/eclipse-cyclonedds\/cyclonedds\/blob\/releases\/0.10.x\/docs\/manual\/shared_memory.rst\" rel=\"noopener nofollow\">shared_memory.rst<\/a>). \u0412\u044b\u0438\u0433\u0440\u044b\u0448 \u0440\u0430\u0441\u0442\u0451\u0442 \u0441 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. \u0421\u0430\u043c\u0438 \u0430\u0432\u0442\u043e\u0440\u044b \u043e\u0433\u043e\u0432\u0430\u0440\u0438\u0432\u0430\u044e\u0442, \u0447\u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0441\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043f\u0443\u043b\u043e\u0432 \u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438.<\/p>\n<\/li>\n<\/ul>\n<h4>\u041f\u0440\u043e \u043d\u043e\u0432\u044b\u0435 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u044b<\/h4>\n<p>\u0412 Lyrical \u0438 Rolling \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f Cyclone DDS 11.0.x. iceoryx \u0442\u0430\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043f\u043b\u0430\u0433\u0438\u043d (<code>&lt;General&gt;&lt;Interfaces&gt;&lt;PubSubMessageExchange type=\"iox\" library=\"psmx_iox\" config=\"...\"\/&gt;<\/code>), \u0430 \u0441\u0435\u043a\u0446\u0438\u044f <code>&lt;SharedMemory&gt;<\/code> \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u0430 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0435\u0439 \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 PSMX. \u0412 master \u043c\u0435\u0439\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0438 \u043f\u0443\u0442\u044c take \u0441 loans (<a href=\"https:\/\/github.com\/eclipse-cyclonedds\/cyclonedds\/issues\/2155\" rel=\"noopener nofollow\">cyclonedds#2155<\/a>). \u0412\u044b\u0432\u043e\u0434\u044b \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u0431\u0430\u0433\u0438 \u043a Cyclone 11 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u044f\u0442\u0441\u044f.<\/p>\n<h3>\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438<\/h3>\n<p><strong>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434:<\/strong><\/p>\n<ul>\n<li>\n<p><code>ros2\/rmw_cyclonedds@humble<\/code>: <code>rmw_cyclonedds_cpp\/src\/rmw_node.cpp<\/code>, <code>serdata.cpp<\/code>, <code>TypeSupport_impl.hpp<\/code>, <a href=\"https:\/\/github.com\/ros2\/rmw_cyclonedds\/blob\/humble\/shared_memory_support.md\" rel=\"noopener nofollow\"><code>shared_memory_support.md<\/code><\/a><\/p>\n<\/li>\n<li>\n<p><code>eclipse-cyclonedds\/cyclonedds@releases\/0.10.x<\/code>: <code>src\/core\/ddsc\/src\/dds_writer.c<\/code>, <code>dds_reader.c<\/code>, <code>dds_write.c<\/code>, <code>shm_monitor.c<\/code>, <code>src\/core\/ddsi\/src\/ddsi_shm_transport.c<\/code>, <code>q_init.c<\/code>, <code>docs\/manual\/options.md<\/code>, <code>docs\/manual\/shared_memory.rst<\/code><\/p>\n<\/li>\n<li>\n<p><code>eclipse-iceoryx\/iceoryx@release_2.0<\/code>: <code>iceoryx_posh\/cmake\/IceoryxPoshDeployment.cmake<\/code>, <code>iceoryx_posh_types.hpp<\/code>, <code>source\/roudi\/roudi_cmd_line_parser*.cpp<\/code>, <code>source\/mepoo\/mepoo_config.cpp<\/code>, <a href=\"https:\/\/github.com\/eclipse-iceoryx\/iceoryx\/blob\/release_2.0\/doc\/website\/advanced\/configuration-guide.md\" rel=\"noopener nofollow\"><code>configuration-guide.md<\/code><\/a><\/p>\n<\/li>\n<li>\n<p><code>ros2\/rclcpp@humble<\/code>: <code>publisher.hpp<\/code>, <code>loaned_message.hpp<\/code>, <code>experimental\/intra_process_manager.hpp<\/code>, <code>subscription_base.cpp<\/code>, <code>executor.cpp<\/code>, <code>rclcpp_components\/src\/component_manager.cpp<\/code><\/p>\n<\/li>\n<li>\n<p><code>ros2\/rcl@humble<\/code>: <code>rcl\/src\/rcl\/publisher.c<\/code>, <code>subscription.c<\/code>, <code>node.c<\/code><\/p>\n<\/li>\n<li>\n<p><code>ros2cli<\/code> (Humble): <code>ros2topic\/verb\/pub.py<\/code> (QoS \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e <code>TRANSIENT_LOCAL<\/code>, depth 1), <code>ros2param<\/code>, <code>ros2node<\/code>, <code>ros2lifecycle<\/code>, <code>ros2component<\/code><\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f:<\/strong><\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/docs.ros.org\/en\/humble\/How-To-Guides\/Configure-ZeroCopy-loaned-messages.html\" rel=\"noopener nofollow\">ROS 2 Humble: Configure Zero Copy Loaned Messages<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.ros.org\/en\/humble\/Tutorials\/Demos\/Intra-Process-Communication.html\" rel=\"noopener nofollow\">ROS 2 Humble: Intra-Process Communication<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/cyclonedds.io\/docs\/cyclonedds\/0.10.2\/shared_memory.html\" rel=\"noopener nofollow\">Cyclone DDS 0.10 Shared Memory<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/cyclonedds.io\/docs\/cyclonedds\/latest\/shared_memory\/shared_mem_config.html\" rel=\"noopener nofollow\">Cyclone DDS 11 Shared memory configuration<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/ros2\/rmw_fastrtps\/tree\/humble\" rel=\"noopener nofollow\">rmw_fastrtps README (humble)<\/a>, <a href=\"https:\/\/fast-dds.docs.eprosima.com\/en\/2.6.x\/fastdds\/transport\/shared_memory\/shared_memory.html\" rel=\"noopener nofollow\">Fast DDS SHM transport<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/community.rti.com\/static\/documentation\/connext-dds\/current\/doc\/manuals\/connext_dds_professional\/users_manual\/users_manual\/TRANSPORT_BUILTIN_Qos.htm\" rel=\"noopener nofollow\">RTI Connext TRANSPORT_BUILTIN<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/ros2\/rmw_iceoryx\" rel=\"noopener nofollow\">rmw_iceoryx<\/a>, <a href=\"https:\/\/github.com\/ros2\/rmw_zenoh\/tree\/humble\" rel=\"noopener nofollow\">rmw_zenoh<\/a><\/p>\n<\/li>\n<\/ul>\n<p><strong>Issues \u0438 \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f:<\/strong><\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/github.com\/ros2\/rmw_cyclonedds\/issues\/401\" rel=\"noopener nofollow\">rmw_cyclonedds#401<\/a>, <a href=\"https:\/\/github.com\/eclipse-cyclonedds\/cyclonedds\/issues\/1584\" rel=\"noopener nofollow\">cyclonedds#1584<\/a> \u2014 transient_local + SHM<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/ros2\/rmw_cyclonedds\/issues\/469\" rel=\"noopener nofollow\">rmw_cyclonedds#469<\/a> \u2014 loans + shared_ptr \u2192 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 loans \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/ros2\/rmw_cyclonedds\/issues\/471\" rel=\"noopener nofollow\">rmw_cyclonedds#471<\/a>, <a href=\"https:\/\/github.com\/ros2\/rmw_cyclonedds\/issues\/472\" rel=\"noopener nofollow\">#472<\/a>, <a href=\"https:\/\/github.com\/ros2\/rmw_cyclonedds\/issues\/476\" rel=\"noopener nofollow\">#476<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/eclipse-cyclonedds\/cyclonedds\/issues\/2155\" rel=\"noopener nofollow\">cyclonedds#2155<\/a> \u2014 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c SHM \u043f\u0440\u043e\u0442\u0438\u0432 standalone iceoryx<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/osrf.github.io\/TSC-RMW-Reports\/humble\/eclipse-cyclonedds-report.html\" rel=\"noopener nofollow\">TSC RMW Report Humble: Cyclone DDS<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/discourse.openrobotics.org\/t\/zero-copy-dds-performance-comparison-for-rmw-providers-in-ros-2\/22696\" rel=\"noopener nofollow\">Discourse: Zero-copy DDS Performance Comparison<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/arxiv.org\/abs\/2506.16882\" rel=\"noopener nofollow\">Agnocast, arXiv:2506.16882<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1095648\/\">https:\/\/habr.com\/ru\/articles\/1095648\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0445\u0430\u0431\u0440!\u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 \u0431\u0430\u0437\u0435 ROS2, \u0442\u043e \u043d\u0435\u0440\u0435\u0434\u043a\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0435\u0440\u0436\u0435\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0435\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435. \u0418 \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0443 ROS2 (\u0430 \u0442\u043e\u0447\u043d\u0435\u0435 \u0443 DDS middleware) \u0435\u0441\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043b\u0451\u0433\u043a\u0438\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u0438 \u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u0441 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430\u043c\u0438, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c shared memory. \u041e\u0434\u043d\u0430\u043a\u043e \u0443 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0435\u0439, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0438 \u043f\u043e\u0439\u0434\u0451\u0442 \u0440\u0435\u0447\u044c. \u0412\u0435\u0440\u0441\u0438\u044f ros \u0432 \u0441\u0442\u0430\u0442\u044c\u0435: ROS2 Humble \u0441 ros-humble-rmw-cyclonedds-cpp 1.3.5, ros-humble-cyclonedds 0.10.5, ros-humble-iceoryx-* 2.0.5\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 shared memory\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c\u0441\u044f \u0432 \u0442\u0435\u043e\u0440\u0438\u0438, \u043e\u0431\u044b\u0447\u043d\u043e \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0432 Linux \u0441\u0432\u043e\u0451 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e, \u0438 \u0447\u0443\u0436\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c \u043e\u043d \u043d\u0435 \u0432\u0438\u0434\u0438\u0442. Shared memory \u2014 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u041e\u0421, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u044b\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432. \u0412 Linux \u044d\u0442\u043e POSIX API shm_open() + mmap(), \u0430 \u0441\u0430\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0432\u0438\u0434\u043d\u044b \u043a\u0430\u043a \u0444\u0430\u0439\u043b\u044b \u0432 \/dev\/shm.\u0414\u043b\u044f \u043e\u0431\u043c\u0435\u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435: \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c 2 \u041c\u0411, \u0440\u0435\u0437\u0430\u0442\u044c \u0438\u0445 \u043d\u0430 UDP-\u043f\u0430\u043a\u0435\u0442\u044b (\u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u043d\u0438\u0445 \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 DDS Cyclonedds \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 QoS Reliable), \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0441\u0442\u0435\u043a \u044f\u0434\u0440\u0430 \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u043e, \u0438\u0437\u0434\u0430\u0442\u0435\u043b\u044c \u043f\u0438\u0448\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043e\u0431\u0449\u0438\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442, \u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u00ab\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u00bb (\u0442\u043e\u0447\u043d\u0435\u0435, \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0451\u043d \u043f\u043e \u0441\u0432\u043e\u0435\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443).\u0412\u0430\u0436\u043d\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0442\u044c \u0434\u0432\u0430 \u0440\u0435\u0436\u0438\u043c\u0430, \u0438\u0445 \u0447\u0430\u0441\u0442\u043e \u043f\u0443\u0442\u0430\u044e\u0442:\u0422\u0435\u0440\u043c\u0438\u043d\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0447\u0435\u0440\u0435\u0437 SHM\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f (\u0438\u043b\u0438 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f) \u0432 \u043e\u0431\u0449\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c, \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a \u0447\u0438\u0442\u0430\u0435\u0442 \u043e\u0442\u0442\u0443\u0434\u0430. \u0421\u0435\u0442\u044c \u043d\u0435 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442, \u043d\u043e \u043a\u043e\u043f\u0438\u044f\/\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0435\u0441\u0442\u044c.Zero-copy\u0418\u0437\u0434\u0430\u0442\u0435\u043b\u044c \u0441\u0440\u0430\u0437\u0443 \u0441\u0442\u0440\u043e\u0438\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u043e\u0431\u0449\u0435\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 (loan, \u00ab\u0437\u0430\u0439\u043c\u00bb \u0431\u043b\u043e\u043a\u0430), \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0442\u043e\u0442 \u0436\u0435 \u0431\u043b\u043e\u043a. \u041d\u0438 \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0438.Eclipse iceoryx \u2014 middleware, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0442\u0430\u043a\u043e\u0439 \u043e\u0431\u043c\u0435\u043d. \u041a\u0430\u043a \u043e\u043d\u043e \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e:RouDi (Routing and Discovery) \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441-\u0434\u0435\u043c\u043e\u043d. \u041f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u043e\u043d \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0432 \/dev\/shm: \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0439 iceoryx_mgmt \u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0440\u0430\u0437\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 mempool\u2019\u044b \u2014 \u043d\u0430\u0431\u043e\u0440\u044b \u0431\u043b\u043e\u043a\u043e\u0432 (chunk) \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430. \u0415\u0449\u0451 RouDi \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442 publisher\u2019\u043e\u0432 \u0441 subscriber\u2019\u0430\u043c\u0438.\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0431\u0435\u0440\u0451\u0442 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 chunk \u0438\u0437 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e mempool, \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0435\u0433\u043e \u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442. \u0412 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 chunk \u0441\u043e \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u043c \u0441\u0441\u044b\u043b\u043e\u043a.\u041a\u043e\u0433\u0434\u0430 chunk \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u043a\u043e\u043c\u0443 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d, \u043e\u043d \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 mempool.\u0412 CycloneDDS iceoryx \u0432\u0441\u0442\u0440\u043e\u0435\u043d \u043a\u0430\u043a \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442 \u0434\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 (\u043d\u0430 \u0442\u043e\u0439 \u0436\u0435 \u043c\u0430\u0448\u0438\u043d\u0435) \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439. Discovery (SPDP\/SEDP) \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0438\u0434\u0451\u0442 \u043f\u043e UDP, \u0430 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0438, \u043a\u0430\u043a \u0438 \u0440\u0430\u043d\u044c\u0448\u0435, \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0441\u0435\u0442\u0438.\u0415\u0441\u0442\u044c \u0436\u0435 composable-\u043d\u043e\u0434\u044b, \u0437\u0430\u0447\u0435\u043c \u0442\u043e\u0433\u0434\u0430 SHM?\u0421omposable-\u043d\u043e\u0434\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 shared memory, \u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u043e\u0434 (\u043a\u0430\u043a .so-\u043f\u043b\u0430\u0433\u0438\u043d\u044b) \u0432 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0446\u0435\u0441\u0441. \u0415\u0441\u043b\u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c intra-process communication (IPC), rclcpp \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043d\u043e\u0434\u0430\u043c\u0438 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0447\u0435\u0440\u0435\u0437 std::unique_ptr\/std::shared_ptr, \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430. DDS, \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u041e\u0421 \u0432 \u044d\u0442\u043e\u043c \u043d\u0435 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u044e\u0442.IPC \u0432 Humble \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438 \u043d\u0435 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e:IPC \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0415\u0433\u043e \u043d\u0430\u0434\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c: rclcpp::NodeOptions().use_intra_process_comms(true) \u0438\u043b\u0438 \u0432 launch extra_arguments=[{&#8216;use_intra_process_comms&#8217;: True}].Zero-copy \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 std::unique_ptr. publish(const Msg&amp;) \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u043e\u043c IPC \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0435\u043b\u0430\u0435\u0442 \u043a\u043e\u043f\u0438\u044e. \u0415\u0441\u043b\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u043e\u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438 \u0447\u0430\u0441\u0442\u044c \u0445\u043e\u0447\u0435\u0442 \u0432\u043b\u0430\u0434\u0435\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u043c (unique_ptr-callback), rclcpp \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043d\u0438\u0445, \u043a\u0440\u043e\u043c\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e.\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f QoS \u0432 Humble. Publisher \u0441 IPC \u0431\u0440\u043e\u0441\u0430\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0435\u0441\u043b\u0438 QoS \u043d\u0435 KEEP_LAST, depth = 0 \u0438\u043b\u0438 durability \u043d\u0435 VOLATILE. \u0417\u043d\u0430\u0447\u0438\u0442, transient_local-\u0442\u043e\u043f\u0438\u043a\u0438 (\/tf_static, \/map, \/robot_description) \u0447\u0435\u0440\u0435\u0437 IPC \u043d\u0435 \u043f\u0443\u0441\u0442\u0438\u0442\u044c.\u0412\u043d\u0435\u0448\u043d\u0438\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0438 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 DDS. \u0415\u0441\u043b\u0438 \u043d\u0430 \u0442\u043e\u043f\u0438\u043a \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u044b rviz, ros2 bag record \u0438\u043b\u0438 \u043d\u043e\u0434\u0430 \u0438\u0437 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, rclcpp \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u043e\u0431\u044b\u0447\u043d\u0443\u044e \u043c\u0435\u0436\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043d\u0443\u044e \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044e \u0441 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439.\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0443 \u00ab\u0432\u0441\u0451 \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435\u00bb \u0435\u0441\u0442\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u043c\u0438\u043d\u0443\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 SHM \u043b\u0438\u0448\u0451\u043d:Segfault \u0432 \u043e\u0434\u043d\u043e\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0435 \u0443\u0431\u0438\u0432\u0430\u0435\u0442 \u0432\u0435\u0441\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440.\u041d\u0435 \u0432\u0441\u0435 \u043d\u043e\u0434\u044b \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 Python-\u043d\u043e\u0434\u044b, \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0438, \u043d\u043e\u0434\u044b \u0438\u0437 \u0447\u0443\u0436\u0438\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0431\u0435\u0437 rclcpp_components_register_node, \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0434\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e.\u041e\u0434\u0438\u043d executor (\u0438\u043b\u0438 \u0435\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430), \u043e\u0431\u0449\u0430\u044f \u043a\u0443\u0447\u0430, \u043e\u0431\u0449\u0438\u0439 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430. \u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043e\u0434\u043d\u0443 \u043d\u043e\u0434\u0443 \u043d\u0435\u043b\u044c\u0437\u044f.IPC \u2014 \u0441\u0430\u043c\u044b\u0439 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u043f\u0443\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0438 \u0435\u0433\u043e \u0441\u0442\u043e\u0438\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043c, \u0433\u0434\u0435 \u043d\u043e\u0434\u044b \u0438 \u0442\u0430\u043a \u0436\u0438\u0432\u0443\u0442 \u0432\u043c\u0435\u0441\u0442\u0435. SHM \u043d\u0443\u0436\u0435\u043d \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043e\u0431\u043c\u0435\u043d\u0430 \u043c\u0435\u0436\u0434\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438 \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435. \u042d\u0442\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c: \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441 IPC \u0432\u043d\u0443\u0442\u0440\u0438 \u0438 SHM \u0434\u043b\u044f \u0441\u0432\u044f\u0437\u0438 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438.\u041a\u0430\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0431\u0435\u0437 SHM \u0438 \u0441 SHM\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e (SHM \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d)\u041f\u0443\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f pub-&gt;publish(msg) \u2192 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043d\u0430 \u0442\u043e\u0439 \u0436\u0435 \u043c\u0430\u0448\u0438\u043d\u0435:\u041f\u0440\u043e\u0446\u0435\u0441\u0441 A (publisher)                                    \u041f\u0440\u043e\u0446\u0435\u0441\u0441 B (subscriber)\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500                                    \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500rclcpp::Publisher::publish  \u2192 rcl_publish    \u2192 rmw_publish (rmw_cyclonedds)      \u2192 dds_write        \u2192 \u0421\u0415\u0420\u0418\u0410\u041b\u0418\u0417\u0410\u0426\u0418\u042f \u0432 CDR (\u043a\u043e\u043f\u0438\u044f \u21161)        \u2192 DDSI-RTPS: \u043d\u0430\u0440\u0435\u0437\u043a\u0430 \u043d\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b          (MaxMessageSize 14720 B, FragmentSize 1344 B)        \u2192 sendmsg() UDP  \u2500\u2500 \u044f\u0434\u0440\u043e, loopback (\u043a\u043e\u043f\u0438\u044f \u21162) \u2500\u2500\u2192 recvmsg() (\u043a\u043e\u043f\u0438\u044f \u21163)                                                          \u2192 \u0441\u0431\u043e\u0440\u043a\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432                                                          \u2192 reader history cache                                                          \u2192 rmw_take \u2192 \u0414\u0415\u0421\u0415\u0420\u0418\u0410\u041b\u0418\u0417\u0410\u0426\u0418\u042f (\u043a\u043e\u043f\u0438\u044f \u21164)                                                          \u2192 callback(msg)\u041e\u0434\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043d\u0430 2 \u041c\u0411 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043e\u0442\u043d\u0438 UDP-\u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c. \u041d\u0430 \u043c\u043e\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 150 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043f\u043e 2 \u041c\u0411 \u0434\u0430\u043b\u0438 24 214 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0445 UDP-\u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c, \u0442\u043e \u0435\u0441\u0442\u044c ~160 \u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 (\u0441\u043c. \u0440\u0430\u0437\u0434\u0435\u043b \u043f\u0440\u043e \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438 UDP \u043d\u0438\u0436\u0435). \u041f\u0440\u0438 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0431\u0443\u0444\u0435\u0440\u0430 \u0441\u043e\u043a\u0435\u0442\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u0442\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u0438 \u0443\u0445\u043e\u0434\u044f\u0442 \u043d\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443, \u043e\u0442\u0441\u044e\u0434\u0430 \u0434\u043b\u0438\u043d\u043d\u044b\u0435 \u0445\u0432\u043e\u0441\u0442\u044b \u0437\u0430\u0434\u0435\u0440\u0436\u0435\u043a. README rmw_cyclonedds \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043f\u0440\u044f\u043c\u043e \u0441\u043e\u0432\u0435\u0442\u0443\u0435\u0442 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0442\u044c net.core.rmem_max\/rmem_default.\u0421 \u0432\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u043c SHM\u041a\u043e\u0433\u0434\u0430 SHM \u0432\u043a\u043b\u044e\u0447\u0451\u043d, \u043e\u0431\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u0438 QoS \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442, data path \u0432 Humble \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:\u041f\u0440\u043e\u0446\u0435\u0441\u0441 A (publisher)                     RouDi \/ \/dev\/shm              \u041f\u0440\u043e\u0446\u0435\u0441\u0441 B (subscriber)\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500                     \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500              \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500publish(msg)  \u2192 dds_write    \u2192 iox: \u0432\u0437\u044f\u0442\u044c chunk \u0438\u0437 mempool  \u2500\u2500\u2500\u2500\u2192  [chunk]    \u2192 POD: memcpy \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 chunk      \u043d\u0435-POD: \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432 chunk    \u2192 iox_pub_publish_chunk \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 chunk \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2192 \u043e\u0447\u0435\u0440\u0435\u0434\u044c iox-subscriber                                                                   \u2192 \u043f\u043e\u0442\u043e\u043a shm_monitor \u043a\u043b\u0430\u0434\u0451\u0442                                                                     \u0441\u044d\u043c\u043f\u043b \u0432 reader history cache                                                                   \u2192 rmw_take:                                                                      loans \u0412\u042b\u041a\u041b (\u0434\u0435\u0444\u043e\u043b\u0442 Humble):                                                                        chunk \u2192 CDR \u2192 \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f                                                                      loans \u0412\u041a\u041b + POD:                                                                        callback \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c                                                                        \u043f\u0440\u044f\u043c\u043e \u0432 chunk (zero-copy)\u041e\u0434\u043d\u0430\u043a\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0445 \u0432\u0435\u0449\u0435\u0439:\u041e\u0431\u044b\u0447\u043d\u044b\u0439 publish() \u043d\u0435 \u0434\u0430\u0451\u0442 zero-copy. \u0415\u0441\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043d\u0435 \u0431\u044b\u043b\u043e \u0432\u0437\u044f\u0442\u043e \u0447\u0435\u0440\u0435\u0437 loan, Cyclone \u0431\u0435\u0440\u0451\u0442 chunk \u0438 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0432 \u043d\u0435\u0433\u043e POD \u0438\u043b\u0438 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043d\u0435-POD.\u041d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0430 \u0432 Humble \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u044e\u0442\u0441\u044f \u0438 \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u044e\u0442\u0441\u044f \u0437\u0430\u043d\u043e\u0432\u043e. Loans \u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u043e\u043a \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u044b (\u0441\u043c. \u00abROS_DISABLE_LOANED_MESSAGES \u0432 Humble\u00bb). \u0422\u043e\u0433\u0434\u0430 rmw_take \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 serdata_rmw_to_sample, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043b\u044f \u00ab\u0441\u044b\u0440\u043e\u0433\u043e\u00bb chunk \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0435\u043b\u0430\u0435\u0442 serialize_into_serdata_rmw (\u0432 CDR), \u0430 \u043f\u043e\u0442\u043e\u043c deserializeROSmessage (serdata.cpp). \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0438 \u0443\u0432\u0438\u0434\u0435\u043b\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Cyclone \u0432 flame graph \u0432 issue #2155. \u0414\u0430\u0436\u0435 \u0442\u0430\u043a \u044d\u0442\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435 UDP: \u043d\u0435\u0442 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0441\u0442\u0435\u043a\u0430.\u041d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 zero-copy \u0432 Humble \u2014 \u044d\u0442\u043e borrow_loaned_message() \u0443 \u0438\u0437\u0434\u0430\u0442\u0435\u043b\u044f \u043f\u043b\u044e\u0441 ROS_DISABLE_LOANED_MESSAGES=0 \u0443 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0430 \u043f\u043b\u044e\u0441 POD-\u0442\u0438\u043f.\u0418\u043d\u043e\u0433\u0434\u0430 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0443\u0436\u043d\u0430 \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435. \u00ab\u0422\u043e\u043b\u044c\u043a\u043e iceoryx\u00bb \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439, durability = VOLATILE \u0438 \u043d\u0435\u0442 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043d\u0435-SHM \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439 \u0432 \u0442\u043e\u043c \u0436\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435. \u0418\u043d\u0430\u0447\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0441\u0435\u0442\u0438\/\u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043f\u0438\u0441\u0430\u0442\u0435\u043b\u044f.Discovery \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u0434\u0451\u0442 \u043f\u043e UDP. SHM \u0443\u0441\u043a\u043e\u0440\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.POD-\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438 \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0441 \u043d\u0435-POD\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 POD \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u0445 rmw_cycloneddsPOD (plain old data) \u2014 \u0442\u0438\u043f \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043b\u0435\u0436\u0438\u0442 \u0432 \u0441\u0432\u043e\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0438 \u043d\u0435 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043a\u0443\u0447\u0443. \u0415\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c memcpy \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0438 \u043e\u043d \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c.\u0422\u0438\u043f \u043d\u0435 POD, \u0435\u0441\u043b\u0438 \u0433\u0434\u0435-\u0442\u043e \u0432 \u043d\u0451\u043c, \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u043f\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c, \u0435\u0441\u0442\u044c:string \u0438\u043b\u0438 wstring;\u043d\u0435\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c T[];\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c T[&lt;=N] (\u0443 \u043d\u0435\u0451 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0434\u043b\u0438\u043d\u0430!).\u0424\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b T[N] \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b.POD\u043d\u0435 PODstd_msgs\/Float64, UInt32, Boolstd_msgs\/Stringgeometry_msgs\/Point, Pose, Twist, Vector3\u0432\u0441\u0451 \u0441 std_msgs\/Header (\u0432 \u043d\u0451\u043c string frame_id): sensor_msgs\/Image, PointCloud2, Imu, LaserScan, PoseStamped\u2026\u0441\u0432\u043e\u0439 uint8[2000000] datastd_msgs\/Float64MultiArray, uint8[] data, uint8[&lt;=100] data\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u00ab\u0442\u044f\u0436\u0451\u043b\u044b\u0445\u00bb \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 (Image, PointCloud2) \u2014 \u043d\u0435 POD. \u0414\u043b\u044f zero-copy \u0434\u0435\u043b\u0430\u044e\u0442 \u0441\u0432\u043e\u0438 \u0442\u0438\u043f\u044b \u0441 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438 (\u043f\u0440\u0438\u043c\u0435\u0440 \u2014 \u043f\u0440\u043e\u0435\u043a\u0442 ros2_shm_msgs) \u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043d\u0435\u0440\u0430\u0437\u043c\u0435\u0440\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0432\u0440\u043e\u0434\u0435 Agnocast.\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u043d\u0435-POD \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u043e\u043c SHM\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f Cyclone \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u043b\u044f \u043d\u0435-fixed-size \u0442\u0438\u043f\u043e\u0432 SHM \u00ab\u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f\u00bb. \u0414\u043b\u044f rmw_cyclonedds \u0432 Humble \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a:rmw_cyclonedds \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 sertype_get_serialized_size \u0438 sertype_serialize_into (serdata.cpp), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 writer\/reader \u0434\u043b\u044f \u043d\u0435-POD \u0442\u043e\u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 iceoryx (dds_writer_support_shm). \u041f\u0440\u0438 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0435 \u0432\u0438\u0434\u043d\u043e Writer&#8217;s topic name will be DDS:Cyclone:rt\/chatter \u0443 std_msgs\/String.\u041f\u0440\u0438 publish() \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0432 CDR \u043f\u0440\u044f\u043c\u043e \u0432 chunk (IOX_CHUNK_CONTAINS_SERIALIZED_DATA), \u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a \u0435\u0433\u043e \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442. \u0421\u0435\u0442\u044c \u043d\u0435 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442, \u043d\u043e \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432 \u043e\u0431\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f.Loans \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b. is_loaning_available = is_fixed_type &amp;&amp; dds_is_loan_available(&#8230;), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 can_loan_messages() \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-499067","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/499067","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=499067"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/499067\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=499067"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=499067"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=499067"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}