controller_manager提供硬实时兼容的环来控制的机械手,由一个hardware_interface::RobotHW实例代表(参见hardware_interface包).该controller_manager提供了加载,卸载,启动和停止控制器的基本结构.

当加载一个控制器时,controller_manager将使用控制器名作为所有控制器特定参数的root,最重要的是,type用于标识要加载哪个插件.

控制器运行的工具(Tools for running controllers)

控制器管理器提供的与控制器进行交互的基本结构.根据控制器从启动文件,命令行,或者ROS节点运行,控制管理器提供不同的工具来运行控制器.

controller_manager

命令行工具(Command-line tools)

控制管理器(controller_manager)

使用controller_manager工具与从命令行运行的控制器交互.要与特定的控制器进行交互,可以使用:

1
$ rosrun controller_manager controller_manager <command> <controller_name>

以下命令可用:

load: 加载控制器 (construct and initialize)
unload: 卸载控制器 (destruct)
start: 启动控制器
stop: 结束控制器
spawn: 加载并启动控制器
kill: 停止并卸载控制器

想获得控制器状态, 用:

1
$ rosrun controller_manager controller_manager <command>

以下命令可用:

list: 根据执行顺序,列出所有控制器,并给出每个控制器的状态
list-types: 列出所有控制器管理知道的控制器类型.如果控制器不在此列表中,将无法加载并启动.
list-joints: 列出所有控制器管理使用的的关节和驱动器的名称.
reload-libraries: 重新加载所有可作为插件的控制器库.当我们正在开发控制器时,可以方便的测试控制器代码,而 不用每次都重新启动机器人.
reload-libraries --restore: 重新加载所有可作为插件的的控制器库,并把所有控制器恢复到初始状态.

加载并启动控制器(spawner)

为了立刻自动加载并启动一系列控制器以及立刻停止并卸载这些控制器,使用spawner工具:

1
$ rosrun controller_manager spawner [--stopped] name1 name2 name3

当运行spawner时,列表中控制器将被载入和启动(除非指定--stopped). 当控制器已开启(controllers are up),spawner将保持运行.当你杀死spawner进程(CTRL-C),会自动停止并卸载所有它最开始启动的控制器.

卸载控制器(unspawner)

想要自动停止一组控制器,然后重新启动,可使用unspawner工具:

1
$ rosrun controller_manager unspawner name1 name2 name3

列表中的控制器将被停止,但没有卸载.一旦spawner关闭,该控制器将重新启动.

控制器组(controller_group)

controller_group允许开发者在运行时切换控制器,但是出于一些特殊意图,当你想从一组控制器切换到另一组时,这就不是很方便.controller_group脚本对于那些在ROS parameter controller_groups已经定义的分组的切换就很容易实现.它知道所有包含的控制器,当它切换控制器组时,控制器需要被停止或者被启动.所以,不同的控制器组可以共享某些控制器.

controller_groups的一个例子:

1
2
3
4
5
6
7
8
9
10
11
12
controller_groups:
production:
- prod_controller_1
- prod_controller_2
development:
- devel_controller_1
- devel_controller_2
- shared_controller_3
diagnostics:
- diag_controller_1
- diag_controller_2
- shared_controller_3

启动controller_groups的脚本:

1
$ rosrun controller_manager controller_group <command> <args>

以下命令可用:

list: 列出所有能在controler_groups参数中找到的组定义
spawn <group>: 载入和启动所有包含在名称为<group>组内的所有控制器,通常在ROS launch文件中使用
switch <group>: 切换到<group>组.这意味着将停止其他组内正在运行的控制器,但是定在在本组内的不会被停止,然后启动在本组内的未运行的控制器器

创建启动文件(Creating launch files)

我们可以运行controller_manager,从启动文件(launch file)内启动控制器.然而,即使启动文件被撤下,控制器仍会保持.而spawner工具会从启动文件中自动加载,启动,停止和卸载控制器.当启动spawner工具时,它会加载并启动控制器.当你停止spawner(当启动文件被撤下),它将停止并卸载控制器.启动文件可能如下:

1
<node pkg="controller_manager" type="spawner" args="controller_name1 controller_name2" />

或者,只是想加载控制器,但是还没有启动:

1
2
3
<launch>
<node pkg="controller_manager" type="spawner" args="--stopped controller_name1 controller_name2" />
</launch>

图形工具(Graphical tools)

rqt_controller_manager是一个rqt插件,该插件以图形化方式加载,卸载,启动和停止控制器;同时用来显示加载的控制器的信息.

它可以从rqtPlugin菜单中启动,或者通过命令行单独执行:

1
rosrun rqt_controller_manager rqt_controller_manager

ROS应用程序接口(ROS API)

为了与另一个ROS节点的控制器交互,控制管理器提供了五种服务调用:

控制管理器 (controller_manager)

服务(Services)

controller_manager/load_controller (controller_manager_msgs/LoadController)

服务请求包含了要加载的控制器的名字,响应包含了一个表示成功或失败的布尔值.

controller_manager/unload_controller (controller_manager_msgs/UnloadController)

服务请求中包含要卸载的控制器的名称,响应包含了一个表示成功或失败的布尔值.控制器只能在当其处于停止状态的时候被卸载.

controller_manager/switch_controller (controller_manager_msgs/SwitchController)

服务请求包含了要开始的控制器的名称列表,要停止的控制器名称列表和一个表明规范性 (strictness: BEST_EFFORT or STRICT)的整型值(int).STRICT表示如果出现任何错误(无效的控制器名称,控制器启动失败,etc),控制器的切换(switching)将会失败并导致空操作(no-op).BEST_EFFORT表示,即使控制器出现了一些问题,该服务仍然会尝试启动/停止余下的控制器.服务响应包含了一个表示成功或失败的布尔值.如果只是停止或者只是启动控制器,控制器启动或停止的列表可能为空.

controller_manager/list_controllers (controller_manager_msgs/ListControllers)

该服务返回所有当前加载的控制器.响应包括以下信息:控制器的名称,状态(运行或停止),类型,硬件接口,和占用的资源.

controller_manager/list_controller_types (controller_manager_msgs/ListControllerTypes)

该服务返回controller_manager已知的所有控制器类型.只有已知的控制器类型可以构建.

controller_manager/reload_controller_libraries (controller_manager_msgs/ReloadControllerLibraries)

服务重新加载所有可作为插件的控制器库.当我们正在开发控制器时,无需每次重新启动机器人 就可以方便的测试控制器代码.此服务只在控制器没有加载情况下工作.

Translated by Ms Wang 2014-8-19

Wiki: controller_manager (last edited 2014-03-10 15:22:46 by AdolfoRodriguez)


参考来源: