Add more attributes to waypoints
This commit is contained in:
parent
02be13d9e7
commit
4a77755208
|
@ -181,6 +181,10 @@
|
||||||
## `carla.Waypoint`
|
## `carla.Waypoint`
|
||||||
|
|
||||||
- `transform`
|
- `transform`
|
||||||
|
- `is_intersection`
|
||||||
|
- `lane_width`
|
||||||
|
- `road_id`
|
||||||
|
- `lane_id`
|
||||||
- `next(distance)`
|
- `next(distance)`
|
||||||
|
|
||||||
## `carla.WeatherParameters`
|
## `carla.WeatherParameters`
|
||||||
|
|
|
@ -26,6 +26,14 @@ namespace client {
|
||||||
return _transform;
|
return _transform;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IsIntersection() const {
|
||||||
|
return _waypoint.IsIntersection();
|
||||||
|
}
|
||||||
|
|
||||||
|
double GetLaneWidth() const {
|
||||||
|
return _waypoint.GetLaneWidth();
|
||||||
|
}
|
||||||
|
|
||||||
road::element::id_type GetRoadId() const {
|
road::element::id_type GetRoadId() const {
|
||||||
return _waypoint.GetRoadId();
|
return _waypoint.GetRoadId();
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,13 +48,11 @@ namespace road {
|
||||||
auto &map = waypoint._map;
|
auto &map = waypoint._map;
|
||||||
const auto this_lane_id = waypoint.GetLaneId();
|
const auto this_lane_id = waypoint.GetLaneId();
|
||||||
const auto this_road_id = waypoint.GetRoadId();
|
const auto this_road_id = waypoint.GetRoadId();
|
||||||
const auto *this_road = map->GetData().GetRoad(this_road_id);
|
|
||||||
DEBUG_ASSERT(this_road != nullptr);
|
|
||||||
|
|
||||||
const auto &next_lanes =
|
const auto &next_lanes =
|
||||||
this_lane_id < 0 ?
|
this_lane_id < 0 ?
|
||||||
this_road->GetNextLane(this_lane_id) :
|
waypoint.GetRoadSegment().GetNextLane(this_lane_id) :
|
||||||
this_road->GetPrevLane(this_lane_id);
|
waypoint.GetRoadSegment().GetPrevLane(this_lane_id);
|
||||||
|
|
||||||
if (next_lanes.empty()) {
|
if (next_lanes.empty()) {
|
||||||
log_error("lane id =", this_lane_id, " road id=", this_road_id, ": missing next lanes");
|
log_error("lane id =", this_lane_id, " road id=", this_road_id, ": missing next lanes");
|
||||||
|
@ -80,15 +78,13 @@ namespace road {
|
||||||
auto &map = waypoint._map;
|
auto &map = waypoint._map;
|
||||||
const auto this_lane_id = waypoint.GetLaneId();
|
const auto this_lane_id = waypoint.GetLaneId();
|
||||||
const auto this_road_id = waypoint.GetRoadId();
|
const auto this_road_id = waypoint.GetRoadId();
|
||||||
const auto *this_road = map->GetData().GetRoad(this_road_id);
|
|
||||||
DEBUG_ASSERT(this_road != nullptr);
|
|
||||||
|
|
||||||
double distance_on_next_segment;
|
double distance_on_next_segment;
|
||||||
|
|
||||||
if (this_lane_id < 0) {
|
if (this_lane_id < 0) {
|
||||||
// road goes forward.
|
// road goes forward.
|
||||||
const auto total_distance = waypoint._dist + distance;
|
const auto total_distance = waypoint._dist + distance;
|
||||||
const auto road_length = this_road->GetLength();
|
const auto road_length = waypoint.GetRoadSegment().GetLength();
|
||||||
if (total_distance <= road_length) {
|
if (total_distance <= road_length) {
|
||||||
return { Waypoint(map, this_road_id, this_lane_id, total_distance) };
|
return { Waypoint(map, this_road_id, this_lane_id, total_distance) };
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,6 +35,7 @@ namespace element {
|
||||||
private:
|
private:
|
||||||
|
|
||||||
int _junction_id = -1;
|
int _junction_id = -1;
|
||||||
|
|
||||||
/// A vector of pairs where the first double represents the
|
/// A vector of pairs where the first double represents the
|
||||||
/// offset from the begining of the road and the second represents the
|
/// offset from the begining of the road and the second represents the
|
||||||
/// lateral offest of the lane
|
/// lateral offest of the lane
|
||||||
|
@ -53,6 +54,10 @@ namespace element {
|
||||||
return _junction_id;
|
return _junction_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IsJunction() const {
|
||||||
|
return _junction_id >= 0;
|
||||||
|
}
|
||||||
|
|
||||||
void SetLanesOffset(double offset, double laneOffset) {
|
void SetLanesOffset(double offset, double laneOffset) {
|
||||||
_lanes_offset.emplace_back(std::pair<double, double>(offset, laneOffset));
|
_lanes_offset.emplace_back(std::pair<double, double>(offset, laneOffset));
|
||||||
}
|
}
|
||||||
|
|
|
@ -111,6 +111,23 @@ namespace element {
|
||||||
return RoadInfoList(_map->GetData().GetRoad(_road_id)->GetInfos(_dist));
|
return RoadInfoList(_map->GetData().GetRoad(_road_id)->GetInfos(_dist));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const RoadSegment &Waypoint::GetRoadSegment() const {
|
||||||
|
const auto *road_segment = _map->GetData().GetRoad(_road_id);
|
||||||
|
DEBUG_ASSERT(road_segment != nullptr);
|
||||||
|
return *road_segment;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Waypoint::IsIntersection() const {
|
||||||
|
const auto *info = GetRoadSegment().GetInfo<RoadGeneralInfo>(_dist);
|
||||||
|
return info != nullptr ? info->IsJunction() : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
double Waypoint::GetLaneWidth() const {
|
||||||
|
const auto *info = GetRoadSegment().GetInfo<RoadInfoLane>(_dist);
|
||||||
|
const auto *lane_info = info != nullptr ? info->getLane(_lane_id) : nullptr;
|
||||||
|
return lane_info != nullptr ? lane_info->_width : 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace element
|
} // namespace element
|
||||||
} // namespace road
|
} // namespace road
|
||||||
} // namespace carla
|
} // namespace carla
|
||||||
|
|
|
@ -19,6 +19,8 @@ namespace road {
|
||||||
|
|
||||||
namespace element {
|
namespace element {
|
||||||
|
|
||||||
|
class RoadSegment;
|
||||||
|
|
||||||
class Waypoint {
|
class Waypoint {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -36,6 +38,12 @@ namespace element {
|
||||||
|
|
||||||
RoadInfoList GetRoadInfo() const;
|
RoadInfoList GetRoadInfo() const;
|
||||||
|
|
||||||
|
const RoadSegment &GetRoadSegment() const;
|
||||||
|
|
||||||
|
bool IsIntersection() const;
|
||||||
|
|
||||||
|
double GetLaneWidth() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
friend carla::road::Map;
|
friend carla::road::Map;
|
||||||
|
|
|
@ -65,6 +65,8 @@ void export_map() {
|
||||||
|
|
||||||
class_<cc::Waypoint, boost::noncopyable, boost::shared_ptr<cc::Waypoint>>("Waypoint", no_init)
|
class_<cc::Waypoint, boost::noncopyable, boost::shared_ptr<cc::Waypoint>>("Waypoint", no_init)
|
||||||
.add_property("transform", CALL_RETURNING_COPY(cc::Waypoint, GetTransform))
|
.add_property("transform", CALL_RETURNING_COPY(cc::Waypoint, GetTransform))
|
||||||
|
.add_property("is_intersection", &cc::Waypoint::IsIntersection)
|
||||||
|
.add_property("lane_width", &cc::Waypoint::GetLaneWidth)
|
||||||
.add_property("road_id", &cc::Waypoint::GetRoadId)
|
.add_property("road_id", &cc::Waypoint::GetRoadId)
|
||||||
.add_property("lane_id", &cc::Waypoint::GetLaneId)
|
.add_property("lane_id", &cc::Waypoint::GetLaneId)
|
||||||
.def("next", CALL_RETURNING_LIST_1(cc::Waypoint, Next, double), (args("distance")))
|
.def("next", CALL_RETURNING_LIST_1(cc::Waypoint, Next, double), (args("distance")))
|
||||||
|
|
Loading…
Reference in New Issue