Вопрос или проблема
ㅁУстройство1
- Raspberry5, ubuntu24.04, установка ROS2 jazzy ver
ㅁУстройство2
- MiniPC, ubuntu22.04, установка ROS2 Humble ver
====================== следующий шаг
ㅁУстройство2
Создание издателя темы
- команда оболочки: ros2 topic pub /test std_msgs/msg/String “data: 1”
ㅁУстройство1
Эхо темы устройства2
- команда оболочки: ros2 topic echo /test
Следующий журнал выводится на устройстве2
>>> [rcutils|error_handling.c:108] rcutils_set_error_state()
Это состояние ошибки перезаписывается:
'Исключение Fast CDR при десериализации сообщения типа rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_., в ./src/type_support_common.cpp:118'
с этим новым сообщением об ошибке:
''Исключение 'Плохое выделение' при десериализации сообщения типа rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_., в ./src/type_support_common.cpp:123'
rcutils_reset_error() следует вызывать после обработки ошибок, чтобы избежать этого.
<<<
Я не знаю, почему этот журнал выводится. Это потому что версии разные?
Ответ или решение
Ошибки связи между устройствами ROS2
При работе с системой ROS2 (Robot Operating System 2), особенно при использовании различных версий на разных устройствах, могут возникнуть ошибки связи. В вашем случае вы используете два устройства: Raspberry Pi с установленной версией ROS2 Jazzy и MiniPC с версией ROS2 Humble. Это может стать источником ряда проблем, включая ошибки сериализации и десериализации сообщений, квотируемые в логе.
Причины ошибок
-
Несоответствие версий ROS2: Рекомендуется использовать одну и ту же версию ROS2 для всех устройств в сети, чтобы избежать проблем совместимости. Jazzy и Humble могут иметь различные реализации и структуры данных, приводящие к несовместимости при обмене сообщениями.
-
Проблемы с сериализацией/десериализацией: Сообщение, которое отправляется с помощью команды
ros2 topic pub
, может не соответствовать ожиданиям системы на стороне устройства, получающего сообщение. ОшибкаBad alloc
указывает на то, что возникла проблема с выделением памяти при попытке десериализовать сообщение с типомParticipantEntitiesInfo
. -
Сеть и конфигурация DDS: ROS2 использует DDS (Data Distribution Service) как основу для обмена сообщениями, и любые проблемы в конфигурации сети (например, настройки файрвола, недоступность сервера DDS) могут привести к ошибкам связи.
Рекомендации по устранению ошибок
-
Унификация версий: Убедитесь, что оба устройства используют одинаковую версию ROS2. Проверьте документацию по миграции и обновлению, если вам нужно перейти с Jazzy на Humble или наоборот.
-
Отладка сети:
- Убедитесь, что устройства находятся в одной сети и могут видеть друг друга (пинг).
- Проверьте настройки файрвола на обоих устройствах. Убедитесь, что порты, используемые ROS2 и DDS, открыты.
-
Проверка конфигурации DDS:
- Ознакомьтесь с настройками DDS. Убедитесь, что параметры QoS (Quality of Service) соответствуют ожиданиям. Неправильные настройки могут привести к потере пакетов.
-
Тестирование обмена сообщениями:
- Попробуйте отправить сообщения с использованием различных типов данных. Например, используйте стандартные типы и проверьте, появятся ли ошибки.
- Попробуйте запустить несколько простых примеров из документации ROS2, чтобы понять, возникает ли проблема в вашей конфигурации или в самой системе.
Завершение
Если все вышеперечисленное не помогло, обратитесь к сообществу ROS2 для получения дополнительной поддержки. Поделитесь подробной информацией о ваших настройках и проблемах; возможно, другие пользователи столкнулись с аналогичными трудностями. Также рассматривайте возможность обновления систем до более стабильных версий, если это является приемлемым вариантом. Успехов в отладке и налаживании взаимодействия между вашими устройствами!