如何查看工作空间内的所有插件
在 ROS 2 中,查看当前工作空间内所有已注册插件(pluginlib 类型),核心是用 ament index + ros2plugin API,并配合命令行与 Python 两种方式。
一、先确保工作空间已被生效
必须先 编译并 source 工作空间,否则只能看到系统插件,看不到本地工作空间插件:
bash
运行
cd ~/ros2_ws
colcon build
source install/setup.bash # 或 setup.zsh
二、命令行快速查看(推荐)
1. 列出所有含插件的包(ament 索引)
bash
运行
ament index list --resource-type plugin
输出示例:
plaintext
polygon_plugins
nav2_core
rclcpp
2. 查看某个包内的所有插件 XML
bash
运行
ament index list --resource-type plugin --package polygon_plugins
3. 用 ros2pkg 过滤插件相关包
bash
运行
ros2 pkg list | xargs -I {} bash -c 'ament index list --resource-type plugin --package {} 2>/dev/null | grep .'
三、用 Python 脚本精确遍历所有插件(最全面)
ROS 2 提供 ros2plugin API,可遍历所有注册插件(含工作空间内):
1. 新建 list_all_plugins.py
python
运行
#!/usr/bin/env python3
import ros2plugin.api
# 获取所有注册的插件资源(包名, 插件类型)
all_plugins=ros2plugin.api.get_registered_plugin_resources()
print("=== 工作空间内所有插件 ===")
for pkg, plugin_type in all_plugins:
print(f"包: {pkg:20} | 插件类型: {plugin_type}")
# 单独获取所有含插件的包名
pkg_names=ros2plugin.api.get_package_names_with_plugin_resource_types()
print("\n=== 含插件的包列表 ===")
for pkg in pkg_names:
print(pkg)
2. 运行脚本
bash
运行
chmod +x list_all_plugins.py
./list_all_plugins.py
四、查看特定基类的插件(如 nav2_core)
若只想看某类插件(如导航插件):
bash
运行
# 先查该基类对应的资源类型(通常是包名/基类名)
ament index list --resource-type plugin | grep nav2_core
五、常见问题
-
看不到工作空间插件 :一定是没
source install/setup.bash,或未编译。 -
ros2 plugin list 报错 :ROS 2 Humble/Jazzy 无内置
ros2 plugin命令,用上述 ament/ros2plugin 方法。 -
插件未注册 :检查包的
CMakeLists.txt是否有:cmake
ament_export_plugin(plugin_description.xml)