Show EOL distros: 

pr2_mechanism: pr2_controller_interface | pr2_controller_manager | pr2_hardware_interface | pr2_mechanism_diagnostics | pr2_mechanism_model | pr2_mechanism_msgs | realtime_tools

Package Summary

This package specifies the interface to a realtime controller. A controller that implements this interface can be executed by the controller manager in the real time control loop. The package basically contains the C++ controller base class that all controllers need to inherit from.

pr2_mechanism: pr2_controller_interface | pr2_controller_manager | pr2_hardware_interface | pr2_mechanism_diagnostics | pr2_mechanism_model

Package Summary

This package specifies the interface to a realtime controller. A controller that implements this interface can be executed by the controller manager in the real time control loop. The package basically contains the C++ controller base class that all controllers need to inherit from.

pr2_mechanism: pr2_controller_interface | pr2_controller_manager | pr2_hardware_interface | pr2_mechanism_diagnostics | pr2_mechanism_model

Package Summary

This package specifies the interface to a realtime controller. A controller that implements this interface can be executed by the controller manager in the real time control loop. The package basically contains the C++ controller base class that all controllers need to inherit from.

Package Summary

This package specifies the interface to a realtime controller. A controller that implements this interface can be executed by thecontroller managerin the real time control loop. The package basically contains the C++ controller base class that all controllers need to inherit from.

  • Maintainer status: maintained
  • Maintainer: Devon Ash <dash AT clearpathrobotics DOT com>
  • Author: Wim Meeussen
  • License: BSD
pr2_mechanism: pr2_controller_interface | pr2_controller_manager | pr2_hardware_interface | pr2_mechanism_diagnostics | pr2_mechanism_model

Package Summary

This package specifies the interface to a realtime controller. A controller that implements this interface can be executed by the controller manager in the real time control loop. The package basically contains the C++ controller base class that all controllers need to inherit from.

  • Maintainer status: unmaintained
  • Maintainer: ROS Orphaned Package Maintainers <ros-orphaned-packages AT googlegroups DOT com>
  • Author: Wim Meeussen
  • License: BSD
  • Source: git https://github.com/pr2/pr2_mechanism.git (branch: kinetic-devel)
pr2_mechanism: pr2_controller_interface | pr2_controller_manager | pr2_hardware_interface | pr2_mechanism_diagnostics | pr2_mechanism_model

Package Summary

This package specifies the interface to a realtime controller. A controller that implements this interface can be executed by the controller manager in the real time control loop. The package basically contains the C++ controller base class that all controllers need to inherit from.

  • Maintainer status: unmaintained
  • Maintainer: ROS Orphaned Package Maintainers <ros-orphaned-packages AT googlegroups DOT com>
  • Author: Wim Meeussen
  • License: BSD
  • Source: git https://github.com/pr2/pr2_mechanism.git (branch: kinetic-devel)
pr2_mechanism: pr2_controller_interface | pr2_controller_manager | pr2_hardware_interface | pr2_mechanism_diagnostics | pr2_mechanism_model

Package Summary

This package specifies the interface to a realtime controller. A controller that implements this interface can be executed by the controller manager in the real time control loop. The package basically contains the C++ controller base class that all controllers need to inherit from.

  • Maintainer status: unmaintained
  • Maintainer: ROS Orphaned Package Maintainers <ros-orphaned-packages AT googlegroups DOT com>
  • Author: Wim Meeussen
  • License: BSD
  • Source: git https://github.com/pr2/pr2_mechanism.git (branch: melodic-devel)
pr2_mechanism: pr2_controller_interface | pr2_controller_manager | pr2_hardware_interface | pr2_mechanism_diagnostics | pr2_mechanism_model

Package Summary

This package specifies the interface to a realtime controller. A controller that implements this interface can be executed by the controller manager in the real time control loop. The package basically contains the C++ controller base class that all controllers need to inherit from.

  • Maintainer status: maintained
  • Maintainer: ROS Orphaned Package Maintainers <ros-orphaned-packages AT googlegroups DOT com>
  • Author: Wim Meeussen
  • License: BSD
  • Source: git https://github.com/pr2/pr2_mechanism.git (branch: melodic-devel)

コントローラーインタフェース

リアルタイムコントローラーとして実装するために、あなたのコントローラはpr2_controller_interface::Controllerベースクラスから継承する必要があります。 ベースクラスは下記を含みます

  • あなたが実装する必要がある4つのメソッド:init, starting, update と stopping,
  • 1つのあなたが呼ぶことができるメソッド; getController

ベースクラスはこのように見えます:

   1 namespace pr2_controller_interface
   2 {
   3   class Controller
   4   {
   5   public:
   6     virtual bool init(pr2_mechanism_model::RobotState *robot,
   7                      ros::NodeHandle &n);
   8     virtual void starting();
   9     virtual void update();
  10     virtual void stopping();
  11 
  12     bool getController(const std::string& name,
  13                        int sched,
  14                        ControllerType*& c);
  15   };
  16 }

下のイメージはこれらの4つの方法がどういう順序で呼び出されるか示すフローチャートを与えます (より詳細は下記の文章で).

controllers.png

コントローラーの初期化

init メソッドは non-realtime で実行されます。

   6     virtual bool init(pr2_mechanism_model::RobotState *robot,
   7                      ros::NodeHandle &n);

コントローラーを初期化するために、コントローラーをロードするとき、initメソッドが呼ばれます。 コントローラーを初期化することは、それをスタートすることについて、独立していることに注意を払ってください: コントローラーをスタートする前に、 initialization はどんな量の時間も与えられることができます。 init メソッドは2つのアーギュメントをとります:

  • robot: これは pr2_mechanism_model::RobotState ロボットモデルを記述します. (ja/pr2_mechanism_model参照). モデルはロボット Joint へのアクセス(アクチュエータ、エンコーダなど)を提供して、そしてロボットメカニズムのキネマティックの / ダイナミックな記述を含んでいます。

  • n: この ros::NodeHandle はコントローラの "namespace" です. このノードハンドルの namespace で、コントローラーはパラメータサーバーからコンフィギュレーションを読み込んで、トピックを公表するなどすることができます。

もし initialization が成功した、あるいはそうでないなら、initメソッドは戻ります。 もし initialization が失敗するなら、コントローラーはja/pr2_controller_managerによってアンロードされるでしょう。ユーザーにあなたのコントローラーがなぜ初期化することに失敗したかについて通知するために常にROS_ERROR("explanation");を使うことを確実にしてください。コントローラーはただ1度初期化されることができるだけです。もしあなたがコントローラーを再度初期化することを望むなら、あなたは最初にそれをアンロードして、そして次に再びそれをロードする必要があります。

コントローラのスタート

startingメソッドはhard realtimeで実行されます。

   8     virtual void starting();

starting メソッドはcontroller managerによって、コントローラーがスタートされる時いつも、1度呼ばれます。 スタートすることは、このアップデートコールの直前に、最初のアップデートコールと同じサイクルの中で実行されます。

最初のアップデートが呼び出される直前に、`startingメソッドはコントローラーを初期化します。 controller managerは、コントローラーをアンロードして / ロードすることを必要とせずに、後の時にコントローラーをリスタートすることを許されます.

コントローラーの更新

updateメソッドはhard realtimeで実行されます。

   9     virtual void update();

すべてのコントローラーのupdateメソッドは周期的にpr2_controller_managerで1000 Hzの周波数でコールされます。これはすべてのコントローラーの時間が結合した実行が1ミリ 秒以上を要することができないことを意味します。アップデートループで、本当のコントロールの作業がされます。

コントローラーの停止

stoppingメソッドはhard realtimeで実行されます。

  10     virtual void stopping();

stopping メソッドは毎回1度呼ばれコントローラーはストップします。 ストップすることは、このアップデートコールのすぐ後に、同じサイクルの中で最後のアップデートコールとして実行されます。stoppingメソッドは何も返しません、それは失敗することを許されません。

他のコントローラーへのポインターを要求

getControllerメソッドはnon-realtimeで実行されます。

  12     bool getController(const std::string& name,
  13                        int sched,
  14                        ControllerType*& c);

getControllerメソッドはコントローラーがもう1つのコントローラーへのポインタを得ることを可能にします。 これはリアルタイムでそれぞれのコントローラーがそのアウトプットを次のコントローラーに送るコントローラーの"チェーン"を作成するために使われます。このシステムは不十分な非リアルタイムの ROS コミュニケーションの代替物です。

getController メソッドは3つのアーギュメントをとります:

  • name: あなたがポインタをもっていくことを望むコントローラーの名前を持った文字列

  • sched: int (ENUM) これはリクエストされたコントローラーがあなたのコントローラーの前か後に実行されるべきであるかどうか明示します。可能な値は pr2_controller_interface:BEFORE_MEpr2_controller_interface::AFTER_MEです.

  • c これはあなたが、リクエストされたコントローラーのタイプとマッチするタイプの、リクエストしたコントローラーへのポインタです。タイプは getController メソッドのについての同じくテンプレートアーギュメントです。

Wiki: ja/pr2_controller_interface (last edited 2016-08-13 03:00:16 by Crescent)