Изменение максимальной длины строки в ROS2 IDL

В настоящее время я подключаю ROS2 к собственному RTI DDS Connext через RTI Connector для python.

В моем узле ROS2 у меня есть пользовательский тип сообщения, который использует header сообщения от std_msgs пак. Теперь в шапке есть член string frame_id_, Когда idl генерируется для этого сообщения, размер строки выделяется как 2147483647 bytes, Я могу видеть это в RTI Admin console, Теперь, чтобы соответствовать типам в родных DDS и ROS2, мне нужно задать одинаковый размер строки в RTI Connext через файл QoS.xml. Но проблема в том, что это слишком большой размер, чтобы обработать его, и программа вылетает.

В качестве обходного пути я изменил header_.idl в ROS2 лежит в ROS2_base_ws/install/std_msgs/dds_connext/Header_.idl как string<255> frame_id_ т.е. я ограничил максимальный размер этой строки.

Я перекомпилировал его и запустил один и тот же узел, но он всегда имеет предыдущий размер, т.е. 2147483647 bytes

Любой другой обходной путь?

1 ответ

Попробуйте полностью исключить спецификацию размера из файла IDL, чтобы он выглядел следующим образом:

module std_msgs {
    module msg {
        module dds_ {
            struct Header_ {
                builtin_interfaces::msg::dds_::Time_ stamp_;
                string frame_id_;
            };
            //@Extensibility EXTENSIBLE_EXTENSIBILITY
        }; // end of 'dds_' module
    }; // end of 'msg' module
}; // end of 'std_msgs' module

ROS2 использует неограниченные строки и последовательности; это отображается как размер <2147483617>(0x7FFFFFFF) в консоли администратора. Обязательно включите поддержку "Неограниченный" в генераторе кода RTI при создании кода поддержки для ваших типов, которые содержат строки или последовательности.

Кстати, на какую версию ROS2 вы ориентируетесь? Для взаимодействия ROS2 с приложениями, работающими только с DDS (например, разделы, префиксы названий тем и т. Д.) Требуется несколько других специфичных для версии настроек.

Вы видите какие-либо другие проблемы?

Другие вопросы по тегам