ros_control: control_toolbox| controller_interface | controller_manager | controller_manager_msgs |
controller_manager_tests | hardware_interface | joint_limits_interface | realtime_tools | transmission_interface
- controller_manager提供硬实时兼容的环来控制的机械手,由一个hardware_interface::RobotHW实例代表(参见hardware_interface包)。该controller_manager提供了加载,卸载,启动和停止控制器的基本结构。
0 控制器运行的工具(Tools for running controllers)
- 控制器管理器提供的与控制器进行交互的基本结构。根据控制器从启动文件,命令行,或者ROS节点运行,控制管理器提供不同的工具来运行控制器。
命令行工具(Command-line tools)
控制管理器(controller_manager)
- 使用 controller_manager工具与从命令行运行的控制器交互。要与特定的控制器进行交互,可以使用:
$ rosrun controller_manager controller_manager <command> <controller_name>
- 以下命令可用:
- load:加载控制器 (construct and initialize)
- unload:卸载控制器 (destruct)
- start:启动控制器
- stop:结束控制器
- spawn:加载并启动控制器
- kill:停止并卸载控制器
- 想获得控制器状态, 用:
$ rosrun controller_manager controller_manager <command>
- 以下命令可用:
- 1) list:根据执行顺序,列出所有控制器,并给出每个控制器的状态
- 2) list-types:列出所有控制器管理知道的控制器类型。如果控制器不在此列表中,将无法加载并启动。
- 3) list-joints: l列出所有控制器管理使用的的关节和驱动器的名称。
- 4) reload-libraries:重新加载所有可作为插件的控制器库。当我们正在开发控制器时,可以方便的测试控制器代码,而 不用每次都重新启动机器人。
- 5) reload-libraries --restore:重新加载所有可作为插件的的控制器库,并把所有控制器恢复到初始状态。
加载并启动控制器(spawner)
- 为了立刻自动加载并启动一系列控制器以及立刻停止并卸载这些控制器,使用 spawner工具:
$ rosrun controller_manager spawner [--stopped] name1 name2 name3
- 当运行 spawner时,列表中控制器将被载入和启动(除非指定 --stopped)。 当控制器已开启(controllers are up),spawner将保持运行。当你杀死 spawner进程(CTRL-C),会自动停止并卸载所有它最开始启动的控制器。
载控制器(unspawner)
- 想要自动停止一组控制器,然后重新启动,可使用 unspawner工具:
$ rosrun controller_manager unspawner name1 name2 name3
- 列表中的控制器将被停止,但没有卸载。一旦 spawner关闭,该控制器将重新启动。
创建启动文件(Creating launch files)
- 我们可以运行 controller_manager,从启动文件(launch file)内启动控制器。然而,即使启动文件被撤下,控制器仍会保持。而 spawner工具会从启动文件中自动加载,启动,停止和卸载控制器。当启动 spawn工具时,它会加载并启动控制器。当你停止 spawner(当启动文件被撤下),它将停止并卸载控制器。启动文件可能如下:
<node pkg="controller_manager" type="spawner" args="controller_name1 controller_name2" />
- 或者,只是想加载控制器,但是还没有启动:
<launch> <node pkg="controller_manager" type="spawner" args="--stopped controller_name1 controller_name2" /> </launch>
图形工具(Graphical tools)
- rqt_controller_manager是一个 rqt插件,该插件以图形化方式加载,卸载,启动和停止控制器;同时用来显示加载的控制器的信息。
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)