Show EOL distros:
Package Summary
The controller manager.
- Maintainer status: developed
- Maintainer: Wim Meeussen <wim AT hidof DOT com>
- Author: Wim Meeussen
- License: BSD
- External website: https://github.com/ros-controls/ros_control/wiki
- Bug / feature tracker: https://github.com/ros-controls/ros_control/issues
- Source: git https://github.com/ros-controls/ros_control.git (branch: hydro-devel)
Package Summary
The controller manager.
- Maintainer status: developed
- Maintainer: Adolfo Rodriguez Tsouroukdissian <adolfo.rodriguez AT pal-robotics DOT com>
- Author: Wim Meeussen, Mathias Lüdtke
- License: BSD
- External website: https://github.com/ros-controls/ros_control/wiki
- Bug / feature tracker: https://github.com/ros-controls/ros_control/issues
- Source: git https://github.com/ros-controls/ros_control.git (branch: indigo-devel)
Package Summary
The controller manager.
- Maintainer status: maintained
- Maintainer: Adolfo Rodriguez Tsouroukdissian <adolfo.rodriguez AT pal-robotics DOT com>
- Author: Wim Meeussen, Mathias Lüdtke
- License: BSD
- External website: https://github.com/ros-controls/ros_control/wiki
- Bug / feature tracker: https://github.com/ros-controls/ros_control/issues
- Source: git https://github.com/ros-controls/ros_control.git (branch: jade-devel)
Package Summary
The controller manager.
- Maintainer status: maintained
- Maintainer: Bence Magyar <bence.magyar.robotics AT gmail DOT com>, Enrique Fernandez <enrique.fernandez.perdomo AT gmail DOT com>, Mathias Lüdtke <mathias.luedtke AT ipa.fraunhofer DOT de>
- Author: Wim Meeussen, Mathias Lüdtke
- License: BSD
- External website: https://github.com/ros-controls/ros_control/wiki
- Bug / feature tracker: https://github.com/ros-controls/ros_control/issues
- Source: git https://github.com/ros-controls/ros_control.git (branch: kinetic-devel)
Package Summary
The controller manager.
- Maintainer status: maintained
- Maintainer: Bence Magyar <bence.magyar.robotics AT gmail DOT com>, Enrique Fernandez <enrique.fernandez.perdomo AT gmail DOT com>, Mathias Lüdtke <mathias.luedtke AT ipa.fraunhofer DOT de>
- Author: Wim Meeussen, Mathias Lüdtke
- License: BSD
- External website: https://github.com/ros-controls/ros_control/wiki
- Bug / feature tracker: https://github.com/ros-controls/ros_control/issues
- Source: git https://github.com/ros-controls/ros_control.git (branch: kinetic-devel)
Package Summary
The controller manager.
- Maintainer status: maintained
- Maintainer: Bence Magyar <bence.magyar.robotics AT gmail DOT com>, Enrique Fernandez <enrique.fernandez.perdomo AT gmail DOT com>, Mathias Lüdtke <mathias.luedtke AT ipa.fraunhofer DOT de>
- Author: Wim Meeussen, Mathias Lüdtke
- License: BSD
- External website: https://github.com/ros-controls/ros_control/wiki
- Bug / feature tracker: https://github.com/ros-controls/ros_control/issues
- Source: git https://github.com/ros-controls/ros_control.git (branch: melodic-devel)
Package Summary
The controller manager.
- Maintainer status: maintained
- Maintainer: Bence Magyar <bence.magyar.robotics AT gmail DOT com>, Enrique Fernandez <enrique.fernandez.perdomo AT gmail DOT com>, Mathias Lüdtke <mathias.luedtke AT ipa.fraunhofer DOT de>
- Author: Wim Meeussen, Mathias Lüdtke
- License: BSD
- External website: https://github.com/ros-controls/ros_control/wiki
- Bug / feature tracker: https://github.com/ros-controls/ros_control/issues
- Source: git https://github.com/ros-controls/ros_control.git (branch: noetic-devel)
Contents
controller_manager は、 hardware_interface::RobotHW インスタンス(hardware_interface パッケージ参照)によって表されるロボットメカニズムを制御するためのhard-realtime互換性があるループを提供します。controller_manager はコントローラーをロード、アンロード、起動、停止を行うためのインフラストラクチャを提供します。
コントローラをロードする際、controller_manager はそれぞれのコントローラー固有のパラメータに対するルートとして、コントローラーネームを使用します。パラメータに関して、type がどのプラグインをロードするかを特定することが特に重要です。
コントローラーのライフサイクル
非リアルタイム操作(Non real-time operations)
- ロード(load)
- アンロード(unload)
リアルタイム操作(Real-time safe operations)
- 起動(start)
- 停止(stop)
コントローラーマネージャーは、コントローラーと対話するためのインフラストラクチャを提供します。コントローラーをlaunch ファイルから実行するか、コマンドラインから実行するか、ROSノードから実行するかによって、コントローラーマネージャーは異なるツールを提供します。
コマンドラインからの実行
controller_manager
controller_manager スクリプトを使って、コマンドラインから controller_manager とやりとりすることができます。特定のコントローラーとやりとりするには以下のように実行します。複数コントローラーを指定することが可能です。
$ rosrun controller_manager controller_manager <command> <controller_name1> <controller_name2> ...
次のコマンドが利用可能です:
load: コントローラーの構築&ロード、プラグインの初期化、要件のチェック
unload: コントローラーの解体&アンロード
start: コントローラーの起動、リソースのコンフリクト処理
stop: コントローラーの停止
spawn: load & start
kill: stop & unload
コントローラーの状態を得るには:
$ rosrun controller_manager controller_manager <command>
次のコマンドが利用可能です:
list: すべてのコントローラーを実行順にリストアップし、各コントローラの状態を表示します。
list-types: コントローラーマネージャが把握している type を全て表示します。コントローラーがこのリストにない場合、それをスポーンすることはできません。
reload-libraries: プラグインとして利用可能なコントローラーライブラリを全てロードし直します。コントローラーを開発しているときに、毎回ロボットを再起動せずに新しいコントローラーのコードのテストができるので便利です。ただし、すでに動作していたコントローラーはいずれも kill されます。
reload-libraries --restore: restoreオプションを加えることで、すでに動作していたコントローラーは kill されたあと、後述のloadサービスやswitchサービスが呼ばれて再びもとの状態の戻されます(InitializedはInitializedに、runnigはrunningに等)。参考1, 参考2, 参考3
spawner
先ほどのcontroller_manager スクリプトを使って同様のことができますが、spawner スクリプトも用意されています。 以下のように実行することでコントローラーをロード、起動することができます。(stoppedオプションをつけた場合はロードのみ)
$ rosrun controller_manager spawner [--stopped] <controller_name1> <controller_name2> ...
(Ctrl-c)でkillすると全てのコントローラーは停止、アンロードされます。プロセスが終了すると自動的にコントローラーもアンロードされるため、launchファイルからの利用ではspawnerスクリプトが用いられます。
unspawner
同様にunspawner スクリプトも用意されています。 以下のように実行することで起動中のコントローラーを停止することができます。(アンロードまではされません)
$ rosrun controller_manager unspawner <controller_name1> <controller_name2> ...
(Ctrl-c)でkillすると全てのコントローラーは再び起動します。launchファイルから一時的にコントローラーを停止したい場合などに便利です。
controller_group
New in melodic
controller_manager allows developers to switch controllers at run time, but it is not so convenient when you want to switch from a group of controllers to another for some special purposes. The controller_group script makes this easy if such groups are defined in ROS parameter controller_groups. It knows all controllers involved, and then controllers that need to be stopped and started when it switches from one group to another. Therefore, different groups can share some controllers.
An example of controller_groups parameter:
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
To run the controller_group script::
$ rosrun controller_manager controller_group <command> <args>
The following commands are available:
list: list all group definitions found in controller_groups parameter
spawn <group>: Load and start all the controllers included in the group named <group>. This is usually used in a ROS launch file
switch <group>: Switch to the group named <group>. This means stopping those running controllers that are defined in other groups but not in this group, and starting the controllers defined in this group that are not running.
launch ファイルからの実行
launch ファイルの中からコントローラーを制御する際にcontroller_managerを用いることができますが、launch ファイルが終了してもコントローラーは起動したままになっている可能性があります。launch ファイルが終了した場合にコントローラーがアンロードされた状態になっていることを保証するためにはspawnerを利用すると良いでしょう。launchファイルの実行状態とコントローラーの起動状態が対応するので便利です。
<launch> <node pkg="controller_manager" type="spawner" args="controller_name1 controller_name2" /> </launch>
もし、コントローラーを起動せずロードまでにとどめたい場合は以下のようにしてください。
<launch> <node pkg="controller_manager" type="spawner" args="--stopped controller_name1 controller_name2" /> </launch>
GUIからの実行
rqt_controller_managerはGUIでコントローラーの状態確認および制御(ロード、アンロード、起動、停止)を可能にするrqt プラグインです。 rqt のプラグインメニューから、またはスタンドアローンの実行可能プログラムとして始められることができます:
rosrun rqt_controller_manager rqt_controller_manager
ROS API
他のROSノードにあるコントローラーと対話するために、コントローラーマネージャーは5つのサービスコールを提供します。
controller_manager
Services
controller_manager/load_controller (controller_manager_msgs/LoadController)- the service request contains the name of the controller to load, and the response contains a boolean indicating success or failure.
- the service request contains the name of the controller to unload, and the response contains a boolean indicating success or failure. A controller can only be unloaded when it is in the stopped state.
- the service request contains a list of controller names to start, a list of controller names to stop and an int to indicate the strictness (BEST_EFFORT or STRICT). STRICT means that switching will fail and result in a no-op if anything goes wrong (an invalid controller name, a controller that failed to start, etc. ). BEST_EFFORT means that even when something goes wrong with on controller, the service will still try to start/stop the remaining controllers. The service response contains a boolean indicating success or failure. The list of controllers to stop or start can be an empty list, if you are only stopping or only starting controllers.
- the service returns all the controllers that are currently loaded. The response includes the following information: controller name, state (running or stopped), type, hardware interface and claimed resources.
- the service returns all the controller types that are known to the controller_manager. Only the controller types that are known can be constructed.
- the service reloads all the controller libraries that are available as plugins. This is convenient when you are developing a controller, and you want to test your new controller code without restarting the robot every time. This service only works when there are NO controller loaded.