デフォルトエッセイ・プランナーを交換する方法ROS ROS

ます。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の中で輸出を追加します。あなたはこのようなルックスをエクスポートする場合、そのここで特に注目すべきことは:

だから、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です。

あなたはシステムをデバッグする方法に関係なく、あなたのプランナーを見つけることができませんでした。

  1. 最後のステップは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}

コードをコピー

独自のプランナーのテストを使用している場合catkin_make_isolated --installコンパイルおよびソースinstall_isolated / setup.bashお勧めします。使用はdevel_isolated / setup.bashを、時にはあなたがプランナーを見つけることができません。

PS:エラーの特定の原因を確認したい、あなたはデバッグまたは間違ったまでの時間を見つけた場合、あなたはmove_baseの以下の部分を変更することができます。
コピーコード

//initialize the global planner
try {
  planner_ = bgp_loader_.createInstance(global_planner);
  planner_->initialize(bgp_loader_.getName(global_planner), planner_costmap_ros_);
} catch (const pluginlib::PluginlibException& ex) {
  ROS_FATAL("Failed to create the %s planner, are you sure it is properly registered and that the containing library is built? Exception: %s", global_planner.c_str(), ex.what());
  exit(1);
}

コードをコピー

:に変更し
たコードのコピー

//initialize the global planner
try {
  planner_ = bgp_loader_.createInstance(global_planner);
  planner_->initialize(bgp_loader_.getName(global_planner), planner_costmap_ros_);
}
catch (const pluginlib::LibraryLoadException& ex) {
    ROS_FATAL("pluginlib::LibraryLoadException");
    exit(1);
}
catch (const pluginlib::ClassLoaderException& ex) {
    ROS_FATAL("pluginlib::ClassLoaderException");
    exit(1);
}
catch (const pluginlib::LibraryUnloadException& ex) {
    ROS_FATAL("pluginlib::LibraryUnloadException");
    exit(1);
}
catch (const pluginlib::CreateClassException& ex) {
    ROS_FATAL("pluginlib::CreateClassException");
    exit(1);
}
catch (const pluginlib::PluginlibException& ex) {
  ROS_FATAL("Failed to create the %s planner, are you sure it is properly registered and that the containing library is built? Exception: %s", global_planner.c_str(), ex.what());
  exit(1);
}

コードをコピー

あなたは、特定のエラーの原因、地元のプランナーとグローバルプランナー同様の方法を見ることができます。

リリース元の4件の記事 ウォン称賛10 ビュー7069

おすすめ

転載: blog.csdn.net/m0_37931718/article/details/104036824
おすすめ