問題点
本家のmoveitリポジトリのissueにも書いているんですが,どうやらOptimization Objectiveの設定がmoveit側から意図したものに設定できず困っています.
moveit/moveit#358
環境
- Ubuntu 14.04
- ROS Indigo
- motoman_project内のmotoman
このコミットf321cf5で
motoman_moveit/config/sia5_with_dhand/ompl_planning.yaml
等の装備ごとのompl_planning.yamlを読みに行くようにしています(いままではデフォルトのyamlしか呼んで行ってなかった).
状況
このチュートリアルにあるようにyamlファイルにoptimization_objectiveの設定ができるようになりました.
OMPL Interface
OMPL Optimization Objective Tutorial
http://docs.ros.org/indigo/api/moveit_tutorials/html/doc/ompl_interface_tutorial.html
しかし, TRRTクラスの親クラスであるompl::base::Plannerのメンバー変数pdef_に上手に反映できてないようです.RRTstarも同じ状況.
93 void ompl::geometric::TRRT::setup()
94 {
95 Planner::setup();
96 tools::SelfConfig selfConfig(si_, getName());
97
98 if (!pdef_->hasOptimizationObjective())
99 {
100 OMPL_INFORM("%s: No optimization objective specified. Defaulting to mechanical work minimization.", getName().c_str());
101 opt_.reset(new base::MechanicalWorkOptimizationObjective(si_));
102 }
104 void ompl::geometric::RRTstar::setup()
105 {
106 Planner::setup();
107 tools::SelfConfig sc(si_, getName());
108 sc.configurePlannerRange(maxDistance_);
109 if (!si_->getStateSpace()->hasSymmetricDistance() || !si_->getStateSpace()->hasSymmetricInterpolate())
110 {
111 OMPL_WARN("%s requires a state space with symmetric distance and symmetric interpolation.", getName().c_str());
112 }
113
114 if (!nn_)
115 nn_.reset(tools::SelfConfig::getDefaultNearestNeighbors<Motion*>(this));
116 nn_->setDistanceFunction(std::bind(&RRTstar::distanceFunction, this, std::placeholders::_1, std::placeholders::_2));
117
118 // Setup optimization objective
119 //
120 // If no optimization objective was specified, then default to
121 // optimizing path length as computed by the distance() function
122 // in the state space.
123 if (pdef_)
124 {
125 if (pdef_->hasOptimizationObjective())
126 opt_ = pdef_->getOptimizationObjective();
127 else
128 {
129 OMPL_INFORM("%s: No optimization objective specified. Defaulting to optimizing path length for the allowed planning time.", getName().c_str());
130 opt_.reset(new base::PathLengthOptimizationObjective(si_));
131
132 // Store the new objective in the problem def'n
133 pdef_->setOptimizationObjective(opt_);
134 }
135 }
T-RRTとRRTstarでpdef_の扱いが少し違います.
OMPL1.0.0のT-RRTではpdef_がヌルポインタの状況で98行目からのif文に入り,elseの方に入るので
コアダンプします.
103 else
104 opt_ = pdef_->getOptimizationObjective();
一方,RRTstarでは
136 else
137 {
138 OMPL_INFORM("%s: problem definition is not set, deferring setup completion...", getName().c_str());
139 setup_ = false;
140 }
となるので,ompl_planning.yamlで設定したOptimization Objectiveではないものの,動作はします.
これをどうにかしたいと思います!!
がんばります...
問題点
本家のmoveitリポジトリのissueにも書いているんですが,どうやらOptimization Objectiveの設定がmoveit側から意図したものに設定できず困っています.
moveit/moveit#358
環境
このコミットf321cf5で
motoman_moveit/config/sia5_with_dhand/ompl_planning.yaml等の装備ごとの
ompl_planning.yamlを読みに行くようにしています(いままではデフォルトのyamlしか呼んで行ってなかった).状況
このチュートリアルにあるようにyamlファイルにoptimization_objectiveの設定ができるようになりました.
しかし,
TRRTクラスの親クラスであるompl::base::Plannerのメンバー変数pdef_に上手に反映できてないようです.RRTstarも同じ状況.T-RRTとRRTstarで
pdef_の扱いが少し違います.OMPL1.0.0のT-RRTでは
pdef_がヌルポインタの状況で98行目からのif文に入り,elseの方に入るのでコアダンプします.
一方,RRTstarでは
となるので,
ompl_planning.yamlで設定したOptimization Objectiveではないものの,動作はします.これをどうにかしたいと思います!!
がんばります...