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
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.
官方文档
https://docs.ros.org/en/humble/Tutorials/Intermediate/Composition.html解决方案
-
在组件源文件中添加 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>` -
检查插件描述 XML 文件(例如 my_plugins.xml)中的库路径是否正确:`<library path="libmy_pkg_component"><class type="my_pkg::MyComponent" base_class_type="rclcpp::Node"/></library>`
-
运行 `ros2 component types` 验证组件是否已注册;如果未列出,则导出缺失。
无效尝试
常见但无效的做法:
-
Recompiling the package without cleaning build artifacts
40% 失败
The issue is in plugin registration, not compilation; rebuild doesn't fix missing exports.
-
Manually copying the .so file to the container's library path
80% 失败
The container loads via pluginlib, not direct library loading; registration is required.
-
Using component_container instead of component_container_isolated
60% 失败
Both containers use the same plugin registration mechanism; the error will persist.