Implemented changes to account for corners
of unregistered vehicles during localization.
This commit is contained in:
parent
a25842d924
commit
8c7ac56f8f
|
@ -607,17 +607,29 @@ namespace LocalizationConstants {
|
|||
cg::Location location = it->second->GetLocation();
|
||||
const auto type = it->second->GetTypeId();
|
||||
|
||||
SimpleWaypointPtr nearest_waypoint = nullptr;
|
||||
std::vector<SimpleWaypointPtr> nearest_waypoints;
|
||||
if (type[0] == 'v') {
|
||||
nearest_waypoint = local_map.GetWaypointInVicinity(location);
|
||||
} else if (type[0] == 'w') {
|
||||
nearest_waypoint = local_map.GetPedWaypoint(location);
|
||||
auto vehicle_ptr = boost::static_pointer_cast<cc::Vehicle>(it->second);
|
||||
cg::Vector3D extent = vehicle_ptr->GetBoundingBox().extent;
|
||||
float bx = extent.x;
|
||||
float by = extent.y;
|
||||
std::vector<cg::Location> corners = {location + cg::Location(bx, by, 0.0f),
|
||||
location + cg::Location(-bx, by, 0.0f),
|
||||
location + cg::Location(bx, -by, 0.0f),
|
||||
location + cg::Location(-bx, -by, 0.0f)};
|
||||
for (cg::Location &vertex: corners) {
|
||||
SimpleWaypointPtr nearest_waypoint = local_map.GetWaypointInVicinity(vertex);
|
||||
if (nearest_waypoint == nullptr) {nearest_waypoint = local_map.GetPedWaypoint(vertex);};
|
||||
if (nearest_waypoint == nullptr) {nearest_waypoint = local_map.GetWaypoint(location);};
|
||||
nearest_waypoints.push_back(nearest_waypoint);
|
||||
}
|
||||
if (nearest_waypoint == nullptr) {
|
||||
nearest_waypoint = local_map.GetWaypoint(location);
|
||||
} else if (type[0] == 'w') {
|
||||
SimpleWaypointPtr nearest_waypoint = local_map.GetPedWaypoint(location);
|
||||
if (nearest_waypoint == nullptr) {nearest_waypoint = local_map.GetWaypoint(location);};
|
||||
nearest_waypoints.push_back(nearest_waypoint);
|
||||
}
|
||||
|
||||
track_traffic.UpdateUnregisteredGridPosition(it->first, nearest_waypoint);
|
||||
track_traffic.UpdateUnregisteredGridPosition(it->first, nearest_waypoints);
|
||||
|
||||
++it;
|
||||
}
|
||||
|
|
|
@ -62,7 +62,8 @@ namespace LocalizationConstants {
|
|||
|
||||
TrackTraffic::TrackTraffic() {}
|
||||
|
||||
void TrackTraffic::UpdateUnregisteredGridPosition(const ActorId actor_id, const SimpleWaypointPtr& waypoint) {
|
||||
void TrackTraffic::UpdateUnregisteredGridPosition(const ActorId actor_id,
|
||||
const std::vector<SimpleWaypointPtr> waypoints) {
|
||||
|
||||
// Add actor entry, if not present.
|
||||
if (actor_to_grids.find(actor_id) == actor_to_grids.end()) {
|
||||
|
@ -85,7 +86,7 @@ namespace LocalizationConstants {
|
|||
current_grids.clear();
|
||||
|
||||
// Step through buffer and update grid list for actor and actor list for grids.
|
||||
if (waypoint != nullptr) {
|
||||
for (auto &waypoint: waypoints) {
|
||||
|
||||
GeoGridId ggid = waypoint->GetGeodesicGridId();
|
||||
current_grids.insert(ggid);
|
||||
|
|
|
@ -50,7 +50,8 @@ namespace traffic_manager {
|
|||
ActorIdSet GetPassingVehicles(uint64_t waypoint_id);
|
||||
|
||||
void UpdateGridPosition(const ActorId actor_id, const Buffer& buffer);
|
||||
void UpdateUnregisteredGridPosition(const ActorId actor_id, const SimpleWaypointPtr& waypoint);
|
||||
void UpdateUnregisteredGridPosition(const ActorId actor_id,
|
||||
const std::vector<SimpleWaypointPtr> waypoints);
|
||||
/// Method to return the wayPoints from the waypoint Buffer by using target point distance
|
||||
std::pair<SimpleWaypointPtr,uint64_t> GetTargetWaypoint(const Buffer& waypoint_buffer, const float& target_point_distance);
|
||||
|
||||
|
|
Loading…
Reference in New Issue