デフォルト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を追加します。ここで特に注目すべきことは、あなたがエクスポートする場合は、次のようになります。

    < エクスポート> 
        < 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 )。
    }

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

おすすめ

転載: www.cnblogs.com/qyit/p/11390373.html
おすすめ