Изменение максимальной длины строки в 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 (например, разделы, префиксы названий тем и т. Д.) Требуется несколько других специфичных для версии настроек.
Вы видите какие-либо другие проблемы?