ros2 runtime_error ai_generated true

[component_container_isolated]:加载组件失败:未找到名为 'my_pkg::MyComponent' 的类:无匹配项

[component_container_isolated]: Failed to load component: Failed to find class with name 'my_pkg::MyComponent': No match

ID: ros2/component-container-isolated-failed-load

其他格式: JSON · Markdown 中文 · English
85%修复率
88%置信度
1证据数
2023-09-10首次发现

版本兼容性

版本状态引入弃用备注
ROS 2 Humble active
ROS 2 Iron active
ROS 2 Rolling active

根因分析

组件类未向组件容器注册;要么缺少类导出宏,要么包的插件描述 XML 不正确。

English

The component class is not registered with the component container; either the class export macro is missing or the package's plugin description XML is incorrect.

generic

官方文档

https://docs.ros.org/en/humble/Tutorials/Intermediate/Composition.html

解决方案

  1. 在组件源文件中添加 RCLCPP_COMPONENTS_REGISTER_NODE 宏:`RCLCPP_COMPONENTS_REGISTER_NODE(my_pkg::MyComponent)`,并确保 package.xml 导出插件:`<export><build_type>ament_cmake</build_type><ros2_component plugin="${prefix}/my_plugins.xml"/></export>`
  2. 检查插件描述 XML 文件(例如 my_plugins.xml)中的库路径是否正确:`<library path="libmy_pkg_component"><class type="my_pkg::MyComponent" base_class_type="rclcpp::Node"/></library>`
  3. 运行 `ros2 component types` 验证组件是否已注册;如果未列出,则导出缺失。

无效尝试

常见但无效的做法:

  1. Recompiling the package without cleaning build artifacts 40% 失败

    The issue is in plugin registration, not compilation; rebuild doesn't fix missing exports.

  2. Manually copying the .so file to the container's library path 80% 失败

    The container loads via pluginlib, not direct library loading; registration is required.

  3. Using component_container instead of component_container_isolated 60% 失败

    Both containers use the same plugin registration mechanism; the error will persist.