ます。http://wiki.ros.org/pluginlib公式文書にはを参照してください。
時には、あなたは別のプランナーや私たち自身のプランナーに置き換えデフォルトのプランナーのROSを交換する必要があるかもしれません。これは、設定と新しいプランナーパッケージを構成する必要があります。
新しいプランナーの確立は、大きく次のステップに分け:
1.新しいプランナーパッケージを作成するには、nav_coreパッケージbase_global_plannerのbase_local_plannerまたはインターフェイスを実現しています。
2.プランナーのソースコードを追加します。プランナーを登録するためのPLUGINLIB_EXPORT_CLASSマクロを、ROSのいくつかは、あなたのクラスは、プランナーが何であるかを知ることができません。
3.あなたのプランナーを宣言するため、プロジェクトでyour_planner_plugin.xmlを追加します。
4.輸出のpackage.xmlを追加します。ここで特に注目すべきことは、あなたがエクスポートする場合は、次のようになります。
< エクスポート> < nav_core プラグイン= "$ {接頭辞} /planner_plugin.xml" /> </ エクスポート>
だから、package.xmlの中に追加することを忘れないように確認してください。
< build_depend > nav_core </ build_depend > < exec_depend > nav_core </ exec_depend >
そうでなければ、あなたはそれがすべての権利をコンパイル見つけるだろうが、私はあなたのプランナーを開始move_base見つけることができませんでした。これは、次のエラーに似て出てきます。
あなたはそれが正しく登録されており、含むライブラリーが構築されていることを確認している、your_planner / YourPlannerROSプランナーの作成に失敗しましたか?
例外:基本クラス型nav_core持つクラスyour_planner / YourPlannerROSがロードされたプラグインの説明によると:: BaseGlobalPlannerが存在しません。
宣言された型は、carrot_planner / CarrotPlanner global_planner / GlobalPlanner navfn / NavfnROSです。
あなたはシステムをデバッグする方法に関係なく、あなたのプランナーを見つけることができませんでした。
5.最後のステップはCMakefileLists.txtを書くことです。あなたはLIBファイルとplugin.xmlファイルをインストールするには注意を払う必要があります。インストールしないでください、そして時には、これらのファイルが失敗した見つけることができませんでした:
インストール(TARGETSをyour_planner
アーカイブ先の$ {CATKIN_PACKAGE_LIB_DESTINATION}
LIBRARY先$ {CATKIN_PACKAGE_LIB_DESTINATION}
)
インストール(FILES your_planner_plugin.xml
DESTINATIONの$ {CATKIN_PACKAGE_SHARE_DESTINATION}
)
コンパイルしたソースinstall_isolated / setup.bash --install catkin_make_isolated推奨独自のプランナーのテストをされて使用している場合。devel_isolated / setup.bashを使用して、時にはあなたがプランナーを見つけることができません。
PS:あなたは、デバッグまたは間違ったの時間を見つけて、エラーの特定の原因を確認したい場合は、以下のmove_baseを変更することができ、この:
// グローバルプランナ初期化する 試みを{ planner_ = bgp_loader_.createInstance(global_planner)。 planner_ - > 初期化する(bgp_loader_.getName(global_planner)、planner_costmap_ros_)。 } キャッチ(constの pluginlib :: PluginlibException&EX){ ROS_FATAL(" %sのプランナーの作成に失敗しましたが、あなたはそれが正しく登録して含むライブラリーが構築されていることを確認している例外:%sの" 、global_planner.c_str()、元。何()); 出口(1 )。 }
それを次のように変更します。
// グローバルプランナ初期化する 試みを{ planner_ = bgp_loader_.createInstance(global_planner)。 planner_ - > 初期化する(bgp_loader_.getName(global_planner)、planner_costmap_ros_)。 } キャッチ(CONST pluginlib :: LibraryLoadException&EX){ ROS_FATAL(" pluginlib :: LibraryLoadException " )。 出口(1 )。 } キャッチ(CONST pluginlib :: ClassLoaderException&EX){ ROS_FATAL("pluginlib :: ClassLoaderException " ); 出口(1 ); } キャッチ(CONST pluginlib :: LibraryUnloadException&EX){ ROS_FATAL(" pluginlib :: LibraryUnloadException " ); 出口(1 ); } キャッチ(CONST pluginlib :: CreateClassException&EX){ ROS_FATAL(" pluginlib :: CreateClassException " ); 出口(1 ); } キャッチ(CONSTpluginlib :: PluginlibException&EX){ ROS_FATAL(" %sのプランナーの作成に失敗しました、あなたはそれが正しく登録して含むライブラリーが構築されていることを確認している例外:%sの" 、global_planner.c_str()、ex.what() ); 出口(1 )。 }
あなたは、エラーの特定の原因、地元のプランナーとグローバルプランナー同様の方法を見ることができます。