@@ -141,7 +141,7 @@ void Connect::compute(const InterfaceState& from, const InterfaceState& to) {
141141 const auto & path_constraints = props.get <moveit_msgs::msg::Constraints>(" path_constraints" );
142142
143143 const moveit::core::RobotState& final_goal_state = to.scene ()->getCurrentState ();
144- std::vector<robot_trajectory::RobotTrajectoryConstPtr > sub_trajectories;
144+ std::vector<PlannerIdTrajectoryPair > sub_trajectories;
145145
146146 std::vector<planning_scene::PlanningSceneConstPtr> intermediate_scenes;
147147 planning_scene::PlanningSceneConstPtr start = from.scene ();
@@ -161,7 +161,7 @@ void Connect::compute(const InterfaceState& from, const InterfaceState& to) {
161161
162162 robot_trajectory::RobotTrajectoryPtr trajectory;
163163 success = pair.second ->plan (start, end, jmg, timeout, trajectory, path_constraints);
164- sub_trajectories.push_back (trajectory); // include failed trajectory
164+ sub_trajectories.push_back ({ pair. second -> getPlannerId (), trajectory });
165165
166166 if (!success)
167167 break ;
@@ -181,7 +181,7 @@ void Connect::compute(const InterfaceState& from, const InterfaceState& to) {
181181}
182182
183183SolutionSequencePtr
184- Connect::makeSequential (const std::vector<robot_trajectory::RobotTrajectoryConstPtr >& sub_trajectories,
184+ Connect::makeSequential (const std::vector<PlannerIdTrajectoryPair >& sub_trajectories,
185185 const std::vector<planning_scene::PlanningSceneConstPtr>& intermediate_scenes,
186186 const InterfaceState& from, const InterfaceState& to) {
187187 assert (!sub_trajectories.empty ());
@@ -195,9 +195,10 @@ Connect::makeSequential(const std::vector<robot_trajectory::RobotTrajectoryConst
195195 SolutionSequence::container_type sub_solutions;
196196 for (const auto & sub : sub_trajectories) {
197197 // persistently store sub solution
198- auto inserted = subsolutions_.insert (subsolutions_.end (), SubTrajectory (sub));
198+ auto inserted = subsolutions_.insert (subsolutions_.end (),
199+ SubTrajectory (sub.trajectory , 0.0 , std::string (" " ), sub.planner_id ));
199200 inserted->setCreator (this );
200- if (!sub) // a null RobotTrajectoryPtr indicates a failure
201+ if (!sub. trajectory ) // a null RobotTrajectoryPtr indicates a failure
201202 inserted->markAsFailure ();
202203 // push back solution pointer
203204 sub_solutions.push_back (&*inserted);
@@ -217,17 +218,29 @@ Connect::makeSequential(const std::vector<robot_trajectory::RobotTrajectoryConst
217218 return std::make_shared<SolutionSequence>(std::move (sub_solutions));
218219}
219220
220- SubTrajectoryPtr Connect::merge (const std::vector<robot_trajectory::RobotTrajectoryConstPtr >& sub_trajectories,
221+ SubTrajectoryPtr Connect::merge (const std::vector<PlannerIdTrajectoryPair >& sub_trajectories,
221222 const std::vector<planning_scene::PlanningSceneConstPtr>& intermediate_scenes,
222223 const moveit::core::RobotState& state) {
223224 // no need to merge if there is only a single sub trajectory
224225 if (sub_trajectories.size () == 1 )
225- return std::make_shared<SubTrajectory>(sub_trajectories[0 ]);
226+ return std::make_shared<SubTrajectory>(sub_trajectories.at (0 ).trajectory , 0.0 , std::string (" " ),
227+ sub_trajectories.at (0 ).planner_id );
228+
229+ // split sub_trajectories into trajectories and joined planner_ids
230+ std::string planner_ids;
231+ std::vector<robot_trajectory::RobotTrajectoryConstPtr> subs;
232+ subs.reserve (sub_trajectories.size ());
233+ for (auto it = sub_trajectories.begin (); it != sub_trajectories.end (); ++it) {
234+ subs.push_back (it->trajectory );
235+ if (it != sub_trajectories.begin ())
236+ planner_ids += " , " ;
237+ planner_ids += it->planner_id ;
238+ }
226239
227240 auto jmg = merged_jmg_.get ();
228241 assert (jmg);
229242 auto timing = properties ().get <TimeParameterizationPtr>(" merge_time_parameterization" );
230- robot_trajectory::RobotTrajectoryPtr trajectory = task_constructor::merge (sub_trajectories , state, jmg, *timing);
243+ robot_trajectory::RobotTrajectoryPtr trajectory = task_constructor::merge (subs , state, jmg, *timing);
231244 if (!trajectory)
232245 return SubTrajectoryPtr ();
233246
@@ -237,6 +250,7 @@ SubTrajectoryPtr Connect::merge(const std::vector<robot_trajectory::RobotTraject
237250 return SubTrajectoryPtr ();
238251
239252 return std::make_shared<SubTrajectory>(trajectory);
253+ return std::make_shared<SubTrajectory>(trajectory, 0.0 , std::string (" " ), planner_ids);
240254}
241255} // namespace stages
242256} // namespace task_constructor
0 commit comments