プランニングアルゴリズム基底クラス(PlannerManager)の仕様

クラス図

planning_interface::PlannerManager <|-- chomp_interface::CHOMPPlannerManager
planning_interface::PlannerManager <|-- ompl_interface::OMPLPlannerManager

planning_interface::PlanningContext <|-- chomp_interface::CHOMPPlanningContext
planning_interface::PlanningContext <|-- ompl_interface::ModelBasedPlanningContext

各プランニングアルゴリズムは、PlannerManagerおよびPlanningContextを基底クラスとして実装されており、自由に切り替えて利用できます。

既存のプランニングアルゴリズムを使うだけでなく、独自のアルゴリズムを実装することもできます。 MoveItでは、ROSのpluginlibの仕組みを使って独自アルゴリズムの既存システムへのプラグインを実現しています。 詳しい方法については、以下の外部ドキュメントを参照してください。

https://ros-planning.github.io/moveit_tutorials/doc/creating_moveit_plugins/plugin_tutorial.html

シーケンス図

アプリケーションプログラムは、pluginlibのClassLoaderを利用してPlannerManagerプラグインをロードします。

個々のプランニングは、PlannerManagerからPlanningContextを生成して実行されます。

アプリケーションプログラム -> ClassLoader: createUnmanagedInstance()
ClassLoader -> PlannerManager: インスタンス生成
アプリケーションプログラム <- ClassLoader: PlannerManagerインスタンス
アプリケーションプログラム -> PlannerManager: initialize()
アプリケーションプログラム -> PlannerManager: getPlanningContext()
PlannerManager -> PlanningContext: インスタンス生成
アプリケーションプログラム <- PlannerManager: PlanningContextインスタンス
アプリケーションプログラム -> PlanningContext: solve()
アプリケーションプログラム <- PlanningContext: プランニング結果

コードサンプル

本文書では、クラスの仕様のみを記述します。コードサンプルについては、以下の外部ドキュメントを参照してください。

http://docs.ros.org/melodic/api/moveit_tutorials/html/doc/motion_planning_api/motion_planning_api_tutorial.html

基底クラス

PlannerManager

class planning_interface::PlannerManager

MoveIt!プランナーの基底クラス。

Subclassed by chomp_interface::CHOMPPlannerManager, ompl_interface::OMPLPlannerManager

パブリック関数

bool initialize(const robot_model::RobotModelConstPtr &model, const std::string &ns)

プランナーを初期化します。この関数は、プラグインの読み込み後、他の関数呼び出しが行われる前に呼び出されます。model引数に指定されたロボットモデルに対してモーションプランが計算されます。ns引数は、ROS機能または必要なROSパラメータを読み込む際の名前空間として利用されます。

std::string getDescription() const

Get.

このプランニングインターフェースを識別する短い文字列を取得する。

void getPlanningAlgorithms(std::vector<std::string> &algs) const

登録されたプランニングアルゴリズムの名前(プランニング要求でplanner_idとして入力できる値)を取得します

virtual PlanningContextPtr getPlanningContext(const planning_scene::PlanningSceneConstPtr &planning_scene, const MotionPlanRequest &req, moveit_msgs::MoveItErrorCodes &error_code) const = 0

planning sceneとプランニングリクエストを入力として、プランニングコンテキストを生成します。問題が発生した場合、エラーコードが設定され、空のポインタが返されます。返されるモーションプランナーコンテキストは初期化された状態です。モーションプランは、コンテキストが構築されるたびにゼロから開始します。

パラメータ
  • planning_scene:プランニングに使用するplanning scene

  • req: プランニングリクエスト

  • error_code:プランニングコンテキストの構築が失敗した場合にエラーが設定される変数

PlanningContextPtr getPlanningContext(const planning_scene::PlanningSceneConstPtr &planning_scene, const MotionPlanRequest &req) const

上記の関数を呼び出しますが、error_codeを無視します。

virtual bool canServiceRequest(const MotionPlanRequest &req) const = 0

このプラグインインスタンスが指定されたプランニングリクエストを扱うことができるか判定します。

void setPlannerConfigurations(const PlannerConfigurationMap &pcs)

このアルゴリズムに適用される設定を設定します。

const PlannerConfigurationMap &getPlannerConfigurations() const

このアルゴリズムに適用されている設定を取得します。

void terminate() const

solve関数が現在プランニングを計算している場合、中断を要求します。

PlanningContext

class planning_interface::PlanningContext

プランニングコンテキスト。planning sceneとプランニングリクエストを入力として、解を計算するのがこのコンテキストの役割です。

Subclassed by chomp_interface::CHOMPPlanningContext, ompl_interface::ModelBasedPlanningContext

パブリック関数

PlanningContext(const std::string &name, const std::string &group)

グループ名groupに対するnameという名前のプランニングコンテキストを生成します。

const std::string &getGroupName() const

このプランニングコンテキストの対象となるグループの名前を取得します。

const std::string &getName() const

このプランニングコンテキストの名前を取得します。

const planning_scene::PlanningSceneConstPtr &getPlanningScene() const

このプランニングコンテキストに関連付けられたplanning sceneを取得します。

const MotionPlanRequest &getMotionPlanRequest() const

このプランニングコンテキストに関連付けられているモーションプランリクエストを取得します。

void setPlanningScene(const planning_scene::PlanningSceneConstPtr &planning_scene)

このコンテキストのplanning sceneを設定します。

void setMotionPlanRequest(const MotionPlanRequest &request)

このコンテキストのプランニングリクエストを設定します。

virtual bool solve(MotionPlanResponse &res) = 0

モーションプランニングを実行し、結果をresに保存します。この関数は、計算の前にデータを初期化しません。データを初期化するには、コンストラクタかclear関数を使います。

virtual bool solve(MotionPlanDetailedResponse &res) = 0

モーションプランニングを実行し、結果をresに保存します。この関数は、計算の前にデータを初期化しません。データを初期化するには、コンストラクタかclear関数を使います。

virtual bool terminate() = 0

solve関数が実行中の場合、プランニングを中断します。終了できない場合はfalseを返します。 solve関数が実行されていない場合は何もしません(trueを返します)。

virtual void clear() = 0

プランナーが使用するデータ構造を初期化します。

OMPLプランナー

OMPLPlannerManager

class ompl_interface::OMPLPlannerManager

Inherits from planning_interface::PlannerManager

パブリック関数

bool initialize(const robot_model::RobotModelConstPtr &model, const std::string &ns)

プランナーを初期化します。この関数は、プラグインの読み込み後、他の関数呼び出しが行われる前に呼び出されます。model引数に指定されたロボットモデルに対してモーションプランが計算されます。ns引数は、ROS機能または必要なROSパラメータを読み込む際の名前空間として利用されます。

bool canServiceRequest(const moveit_msgs::MotionPlanRequest &req) const

このプラグインインスタンスが指定されたプランニングリクエストを扱うことができるか判定します。

std::string getDescription() const

Get.

このプランニングインターフェースを識別する短い文字列を取得する。

void getPlanningAlgorithms(std::vector<std::string> &algs) const

登録されたプランニングアルゴリズムの名前(プランニング要求でplanner_idとして入力できる値)を取得します

void setPlannerConfigurations(const planning_interface::PlannerConfigurationMap &pcs)

このアルゴリズムに適用される設定を設定します。

planning_interface::PlanningContextPtr getPlanningContext(const planning_scene::PlanningSceneConstPtr &planning_scene, const planning_interface::MotionPlanRequest &req, moveit_msgs::MoveItErrorCodes &error_code) const

planning sceneとプランニングリクエストを入力として、プランニングコンテキストを生成します。問題が発生した場合、エラーコードが設定され、空のポインタが返されます。返されるモーションプランナーコンテキストは初期化された状態です。モーションプランは、コンテキストが構築されるたびにゼロから開始します。

パラメータ
  • planning_scene:プランニングに使用するplanning scene

  • req: プランニングリクエスト

  • error_code:プランニングコンテキストの構築が失敗した場合にエラーが設定される変数

ModelBasedPlanningContext

class ompl_interface::ModelBasedPlanningContext

Inherits from planning_interface::PlanningContext

パブリック関数

bool solve(planning_interface::MotionPlanResponse &res)

モーションプランニングを実行し、結果をresに保存します。この関数は、計算の前にデータを初期化しません。データを初期化するには、コンストラクタかclear関数を使います。

bool solve(planning_interface::MotionPlanDetailedResponse &res)

モーションプランニングを実行し、結果をresに保存します。この関数は、計算の前にデータを初期化しません。データを初期化するには、コンストラクタかclear関数を使います。

void clear()

プランナーが使用するデータ構造を初期化します。

bool terminate()

solve関数が実行中の場合、プランニングを中断します。終了できない場合はfalseを返します。 solve関数が実行されていない場合は何もしません(trueを返します)。

void setMinimumWaypointCount(unsigned int mwc)

Get the minimum number of waypoints along the solution path.

CHOMPプランナー

CHOMPPlannerManager

class chomp_interface::CHOMPPlannerManager

Inherits from planning_interface::PlannerManager

パブリック関数

bool initialize(const robot_model::RobotModelConstPtr &model, const std::string &ns)

プランナーを初期化します。この関数は、プラグインの読み込み後、他の関数呼び出しが行われる前に呼び出されます。model引数に指定されたロボットモデルに対してモーションプランが計算されます。ns引数は、ROS機能または必要なROSパラメータを読み込む際の名前空間として利用されます。

planning_interface::PlanningContextPtr getPlanningContext(const planning_scene::PlanningSceneConstPtr &planning_scene, const planning_interface::MotionPlanRequest &req, moveit_msgs::MoveItErrorCodes &error_code) const

planning sceneとプランニングリクエストを入力として、プランニングコンテキストを生成します。問題が発生した場合、エラーコードが設定され、空のポインタが返されます。返されるモーションプランナーコンテキストは初期化された状態です。モーションプランは、コンテキストが構築されるたびにゼロから開始します。

パラメータ
  • planning_scene:プランニングに使用するplanning scene

  • req: プランニングリクエスト

  • error_code:プランニングコンテキストの構築が失敗した場合にエラーが設定される変数

bool canServiceRequest(const planning_interface::MotionPlanRequest &req) const

このプラグインインスタンスが指定されたプランニングリクエストを扱うことができるか判定します。

std::string getDescription() const

Get.

このプランニングインターフェースを識別する短い文字列を取得する。

void getPlanningAlgorithms(std::vector<std::string> &algs) const

登録されたプランニングアルゴリズムの名前(プランニング要求でplanner_idとして入力できる値)を取得します

CHOMPPlanningContext

class chomp_interface::CHOMPPlanningContext

Inherits from planning_interface::PlanningContext

パブリック関数

bool solve(planning_interface::MotionPlanResponse &res)

モーションプランニングを実行し、結果をresに保存します。この関数は、計算の前にデータを初期化しません。データを初期化するには、コンストラクタかclear関数を使います。

bool solve(planning_interface::MotionPlanDetailedResponse &res)

モーションプランニングを実行し、結果をresに保存します。この関数は、計算の前にデータを初期化しません。データを初期化するには、コンストラクタかclear関数を使います。

void clear()

プランナーが使用するデータ構造を初期化します。

bool terminate()

solve関数が実行中の場合、プランニングを中断します。終了できない場合はfalseを返します。 solve関数が実行されていない場合は何もしません(trueを返します)。