Robossembler - Открытая робототехника
570 subscribers
44 photos
8 videos
2 files
211 links
Ваш персональный фронтир в борьбе роботов за лучшее будущее для кожаных мешков. Open Source Robotics и всё такое. По вопросам сотрудничества пишите @brylev, наш сайт robossembler.org
Download Telegram
​​Topic Keys в ROS 2 Kilted

Одним из главных нововведений в новом промежуточном релизе ROS 2 Kilted стали ключи для топиков, которые удостоились аж двух дополнительных страниц в документации. Наиболее мотивированные разработчики могут ознакомиться ними в исходнике на английском языке (см. Topic Keys Tutorial, Topic Keys Subscription Filtering Tutorial), для занятых кратко изложу суть идеи.

Часто в проектах требуется обеспечить обработку однотипных данных из большого количества источников - например, контроллер-ноды получают сообщения от множества датчиков. Ранее разработчики вынуждены были создавать для каждого из источников отдельный Топик и Подписчика. Это делает код существенно больше, сложнее для сопровождения и модификации. Наивный подход к решению проблемы заключается в создании одного Топика и одного Подписчика для всех источников, но в ряде случаев контроллер не сможет оперативно получить актуальное состояние определённых сенсоров с низкой частотой публикации: придётся ждать пока этот медленный сенсор не отправит новые данные.

Ключи топиков по сути мультиплексируют однотипные данные - каждый топик становится инстансом одного типа сообщения. В этом случае на стороне подписчика у каждого инстанса появляется свой независимый кеш, что позволяет контроллеру получать актуальное состояние датчика в любой момент. К посту приложена наглядная иллюстрация всех трёх сценариев.

Экземпляры топиков хорошо дополняются фильтрацией, которую можно задать для каждого экземпляра под конкретные требования, что позволяет приложениям оптимально управлять сбором данных, обмениваясь исключительно релевантной информацией для своих сценариев использования.

Ключевые топики объявляются в спецификациях сообщений в нотации OMG IDL (Interface Definition Language), где поддерживаются аннотации с @. В .msg и .srv такие аннотации не поддерживаются.

Пример: KeyedMsgName.idl
 package_name {
module msg {
struct KeyedMsgName {
@key long key;
string data;
};
};
};


Фича работает пока только в DDS реализаций rmw_fastrtps и rmw_connextdds. rmw_cyclonedds и rmw_zenoh_cpp не поддерживаются.

#ros #kilted #feature
👍6
rosidpcpp - оптимизация сборки интерфейсных пакетов

В ROS 2 сборка интерфейсов работает довольно медленно и пакеты с большим количеством сообщений могут компилироваться очень много времени (например, на машине с AMD Ryzen 9 9900X 12-Core (24 threads) с 32 Гб ОЗУ ublox-msgs собирается 72 сек., px4-msgs - 42 сек.). Это происходит в связи с тем, что скрипты вроде rosidl generator или rosidl typesupport не оптимизированы для многопоточного исполнения. Другая проблема заключается в том, что изменение даже одного idl-файла запускает пересборку всего пакета, что в сочетании с долгой сборкой усложняет разработку. Автор rosidlcpp ставит целью переписать стоковый Python-пакет rosidl на C++ для оптимизации времени исполнения скриптов сборки. Даже без использования многопоточности он даёт значительное ускорение - она работает в среднем в 3-15 раз быстрее. Если в вашем проекте большая и регулярно пополняемая коллекция интерфейсов в одном пакете, то имеет смысл следить за данным проектом.

Github

#ros #ci #idl
👍4