src
traceback.cpp
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2017, <copyright holder> <email>
3
* All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions are met:
7
* * Redistributions of source code must retain the above copyright
8
* notice, this list of conditions and the following disclaimer.
9
* * Redistributions in binary form must reproduce the above copyright
10
* notice, this list of conditions and the following disclaimer in the
11
* documentation and/or other materials provided with the distribution.
12
* * Neither the name of the <organization> nor the
13
* names of its contributors may be used to endorse or promote products
14
* derived from this software without specific prior written permission.
15
*
16
* THIS SOFTWARE IS PROVIDED BY <copyright holder> <email> ''AS IS'' AND ANY
17
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19
* DISCLAIMED. IN NO EVENT SHALL <copyright holder> <email> BE LIABLE FOR ANY
20
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
*
27
*/
28
29
#include <
tuw_global_router/traceback.h
>
30
#include <
ros/ros.h
>
31
32
namespace
multi_robot_router
33
{
34
35
bool
Traceback::getPath
(
const
Vertex
&_startSeg,
const
Vertex
&_endSeg, std::vector<RouteVertex> &_path)
const
36
{
37
const
Vertex
*current = &_endSeg;
38
const
Vertex
*predecessor = current->
predecessor_
;
39
40
//Set moving direction
41
_path.emplace_back(*current);
42
_path.back().direction =
RouteVertex::path_direction::end_to_start
;
43
44
if
(predecessor != NULL &&
isSuccessor
(current, predecessor))
45
_path.back().direction =
RouteVertex::path_direction::start_to_end
;
46
47
while
(current->
predecessor_
!= NULL)
48
{
49
const
Vertex
*pred = current->
predecessor_
;
50
51
_path.emplace_back(*pred);
52
53
if
(
isSuccessor
(pred, current))
54
_path.back().direction =
RouteVertex::path_direction::end_to_start
;
//-1
55
else
56
_path.back().direction =
RouteVertex::path_direction::start_to_end
;
//1
57
58
current = pred;
59
}
60
61
if
(_path.back().getSegment().getSegmentId() != _startSeg.
getSegment
().
getSegmentId
())
62
return
false
;
63
64
return
true
;
65
}
66
67
bool
Traceback::isSuccessor
(
const
Vertex
*_vertex,
const
Vertex
*_succ)
const
68
{
69
const
std::vector<std::reference_wrapper<Vertex>> succ = _vertex->
getPlanningSuccessors
();
70
71
for
(
const
Vertex
&
s
: succ)
72
{
73
if
(
s
.getSegment().getSegmentId() == _succ->
getSegment
().
getSegmentId
())
74
return
true
;
75
}
76
77
return
false
;
78
}
79
80
}
// namespace multi_robot_router
s
XmlRpcServer s
ros.h
multi_robot_router::Vertex::getSegment
const Segment & getSegment() const
Definition:
srr_utils.cpp:88
multi_robot_router::Traceback::getPath
virtual bool getPath(const Vertex &_startSeg, const Vertex &_endSeg, std::vector< RouteVertex > &_path) const
traces back the graph to find the shortest route of the graph
Definition:
traceback.cpp:35
multi_robot_router::Segment::getSegmentId
uint32_t getSegmentId() const
Definition:
srr_utils.cpp:60
multi_robot_router::Vertex::getPlanningSuccessors
const std::vector< std::reference_wrapper< Vertex > > & getPlanningSuccessors() const
Definition:
srr_utils.cpp:98
multi_robot_router::Vertex::predecessor_
Vertex * predecessor_
Definition:
srr_utils.h:83
multi_robot_router::Vertex
Definition:
srr_utils.h:65
multi_robot_router::RouteVertex::path_direction::start_to_end
@ start_to_end
multi_robot_router::RouteVertex::path_direction::end_to_start
@ end_to_start
multi_robot_router
Definition:
avoidance_resolution.h:37
traceback.h
multi_robot_router::Traceback::isSuccessor
virtual bool isSuccessor(const Vertex *_vertex, const Vertex *_succ) const
Definition:
traceback.cpp:67
tuw_multi_robot_router
Author(s): Benjamin Binder
autogenerated on Wed Mar 2 2022 01:10:16