管理行人导航,使用 Recast & Detour 库进行低层计算。 更多...
#include <Navigation.h>
Public 成员函数 | |
bool | AddOrUpdateVehicle (VehicleCollisionInfo &vehicle) |
在人群中创造一辆新的车辆,让行人避开 | |
bool | AddWalker (ActorId id, carla::geom::Location from) |
创建新的行人 | |
void | CreateCrowd (void) |
创建人群对象 | |
bool | GetAgentRoute (ActorId id, carla::geom::Location from, carla::geom::Location to, std::vector< carla::geom::Location > &path, std::vector< unsigned char > &area) |
dtCrowd * | GetCrowd () |
double | GetDeltaSeconds () |
返回最后增量秒数 | |
bool | GetPath (carla::geom::Location from, carla::geom::Location to, dtQueryFilter *filter, std::vector< carla::geom::Location > &path, std::vector< unsigned char > &area) |
返回从一个位置到另一个位置的路径点 | |
bool | GetRandomLocation (carla::geom::Location &location, dtQueryFilter *filter=nullptr) const |
获取导航的随机位置 | |
bool | GetWalkerPosition (ActorId id, carla::geom::Location &location) |
获取行人的当前位置 | |
float | GetWalkerSpeed (ActorId id) |
获取步行人速度 | |
bool | GetWalkerTransform (ActorId id, carla::geom::Transform &trans) |
获取步行人当前变换 | |
bool | HasVehicleNear (ActorId id, float distance, carla::geom::Location direction) |
如果代理在附近有车辆(作为邻居),则返回 | |
bool | IsWalkerAlive (ActorId id, bool &alive) |
如果行人代理被车辆撞死,则返回 | |
bool | Load (const std::string &filename) |
从磁盘中加载导航数据 | |
bool | Load (std::vector< uint8_t > content) |
从内存中加载导航数据 | |
Navigation () | |
void | PauseAgent (ActorId id, bool pause) |
将人群中的代理设置为暂停 | |
bool | RemoveAgent (ActorId id) |
移除代理 | |
void | SetPedestriansCrossFactor (float percentage) |
设置行人代理在路径跟随过程中穿过马路的概率 | |
void | SetSeed (unsigned int seed) |
设置随机数种子 | |
void | SetSimulator (std::weak_ptr< carla::client::detail::Simulator > simulator) |
引用模拟器来访问API函数 | |
bool | SetWalkerDirectTarget (ActorId id, carla::geom::Location to) |
bool | SetWalkerDirectTargetIndex (int index, carla::geom::Location to) |
bool | SetWalkerLookAt (ActorId id, carla::geom::Location location) |
让代理查看某个位置 | |
bool | SetWalkerMaxSpeed (ActorId id, float max_speed) |
设置新的最大速度 | |
bool | SetWalkerTarget (ActorId id, carla::geom::Location to) |
设置新的目标点以通过有事件的路线 | |
void | UpdateCrowd (const client::detail::EpisodeState &state) |
更新人群中的所有步行者 | |
bool | UpdateVehicles (std::vector< VehicleCollisionInfo > vehicles) |
在人群中添加/更新/删除车辆 | |
~Navigation () | |
Private 成员函数 | |
void | SetAgentFilter (int agent_index, int filter_index) |
为代理分配过滤索引 | |
![]() | |
NonCopyable ()=default | |
NonCopyable (const NonCopyable &)=delete | |
NonCopyable (NonCopyable &&)=delete | |
NonCopyable & | operator= (const NonCopyable &)=delete |
NonCopyable & | operator= (NonCopyable &&)=delete |
Private 属性 | |
std::vector< uint8_t > | _binary_mesh |
dtCrowd * | _crowd { nullptr } |
crowd | |
double | _delta_seconds { 0.0 } |
std::unordered_map< int, ActorId > | _mapped_by_index |
std::unordered_map< ActorId, int > | _mapped_vehicles_id |
std::unordered_map< ActorId, int > | _mapped_walkers_id |
mapping Id | |
std::mutex | _mutex |
dtNavMesh * | _nav_mesh { nullptr } |
网格 | |
dtNavMeshQuery * | _nav_query { nullptr } |
float | _probability_crossing { 0.0f } |
bool | _ready { false } |
std::weak_ptr< carla::client::detail::Simulator > | _simulator |
double | _time_to_unblock { 0.0 } |
WalkerManager | _walker_manager |
行人管理器负责带事件的路线规划 | |
std::unordered_map< int, carla::geom::Vector3D > | _walkers_blocked_position |
每隔一段时间保存每个参与者的位置,并检查是否有参与者被阻挡 | |
std::unordered_map< ActorId, float > | _yaw_walkers |
存储上一个节拍的行人偏航角 | |
管理行人导航,使用 Recast & Detour 库进行低层计算。
该类从服务器获取地图的二进制内容,这是查找路径所必需的。然后,这个类可以添加或删除行人,并为每个行人设置目标步行点。
在文件 Navigation.h 第 86 行定义.
carla::nav::Navigation::Navigation | ( | ) |
carla::nav::Navigation::~Navigation | ( | ) |
在文件 Navigation.cpp 第 55 行定义.
引用了 _binary_mesh, _crowd, _mapped_by_index, _mapped_vehicles_id, _mapped_walkers_id, _nav_mesh, _nav_query, _ready, _time_to_unblock, _walkers_blocked_position , 以及 _yaw_walkers.
bool carla::nav::Navigation::AddOrUpdateVehicle | ( | VehicleCollisionInfo & | vehicle | ) |
在人群中创造一辆新的车辆,让行人避开
在文件 Navigation.cpp 第 563 行定义.
引用了 _crowd, _mapped_by_index, _mapped_vehicles_id, _mutex, _ready, carla::nav::AGENT_HEIGHT, carla::nav::VehicleCollisionInfo::bounding, DEBUG_ASSERT, carla::nav::DT_CROWD_SEPARATION, carla::geom::BoundingBox::extent, carla::nav::VehicleCollisionInfo::id, carla::geom::Transform::location, carla::logging::log(), carla::geom::Transform::rotation, carla::nav::VehicleCollisionInfo::transform, carla::geom::Vector3D::x, carla::geom::Vector3D::y, carla::geom::Rotation::yaw , 以及 carla::geom::Vector3D::z.
被这些函数引用 UpdateVehicles().
bool carla::nav::Navigation::AddWalker | ( | ActorId | id, |
carla::geom::Location | from ) |
创建新的行人
在文件 Navigation.cpp 第 503 行定义.
引用了 _crowd, _mapped_by_index, _mapped_walkers_id, _mutex, _probability_crossing, _ready, _walker_manager, _yaw_walkers, carla::nav::WalkerManager::AddWalker(), carla::nav::AGENT_HEIGHT, carla::nav::AGENT_RADIUS, DEBUG_ASSERT, carla::nav::DT_CROWD_ANTICIPATE_TURNS, carla::nav::DT_CROWD_OBSTACLE_AVOIDANCE, carla::nav::DT_CROWD_SEPARATION, carla::nav::frand(), carla::geom::Vector3D::x, carla::geom::Vector3D::y , 以及 carla::geom::Vector3D::z.
被这些函数引用 carla::client::detail::WalkerNavigation::AddWalker().
void carla::nav::Navigation::CreateCrowd | ( | void | ) |
创建人群对象
在文件 Navigation.cpp 第 220 行定义.
引用了 _crowd, _nav_mesh, _ready, carla::nav::AGENT_RADIUS, carla::nav::AREA_GRASS_COST, carla::nav::AREA_ROAD_COST, carla::nav::CARLA_AREA_GRASS, carla::nav::CARLA_AREA_ROAD, carla::nav::CARLA_TYPE_NONE, carla::nav::CARLA_TYPE_ROAD, carla::nav::CARLA_TYPE_WALKABLE, DEBUG_ASSERT, carla::logging::log() , 以及 carla::nav::MAX_AGENTS.
被这些函数引用 Load().
bool carla::nav::Navigation::GetAgentRoute | ( | ActorId | id, |
carla::geom::Location | from, | ||
carla::geom::Location | to, | ||
std::vector< carla::geom::Location > & | path, | ||
std::vector< unsigned char > & | area ) |
在文件 Navigation.cpp 第 393 行定义.
引用了 _crowd, _mapped_walkers_id, _mutex, _nav_mesh, _nav_query, _ready, DEBUG_ASSERT, carla::nav::MAX_POLYS, carla::geom::Vector3D::x, carla::geom::Vector3D::y , 以及 carla::geom::Vector3D::z.
被这些函数引用 carla::nav::WalkerManager::SetWalkerRoute().
|
inline |
在文件 Navigation.h 第 181 行定义.
引用了 _crowd.
被这些函数引用 carla::client::detail::WalkerNavigation::UpdateVehiclesInCrowd().
|
inline |
bool carla::nav::Navigation::GetPath | ( | carla::geom::Location | from, |
carla::geom::Location | to, | ||
dtQueryFilter * | filter, | ||
std::vector< carla::geom::Location > & | path, | ||
std::vector< unsigned char > & | area ) |
返回从一个位置到另一个位置的路径点
在文件 Navigation.cpp 第 287 行定义.
引用了 _mutex, _nav_mesh, _nav_query, _ready, carla::nav::AREA_GRASS_COST, carla::nav::AREA_ROAD_COST, carla::nav::CARLA_AREA_GRASS, carla::nav::CARLA_AREA_ROAD, carla::nav::CARLA_TYPE_NONE, carla::nav::CARLA_TYPE_WALKABLE, DEBUG_ASSERT, carla::nav::MAX_POLYS, carla::geom::Vector3D::x, carla::geom::Vector3D::y , 以及 carla::geom::Vector3D::z.
bool carla::nav::Navigation::GetRandomLocation | ( | carla::geom::Location & | location, |
dtQueryFilter * | filter = nullptr ) const |
获取导航的随机位置
在文件 Navigation.cpp 第 1091 行定义.
引用了 _mutex, _nav_query, _ready, carla::nav::CARLA_TYPE_NONE, carla::nav::CARLA_TYPE_SIDEWALK, DEBUG_ASSERT, carla::nav::frand(), carla::geom::Vector3D::x, carla::geom::Vector3D::y , 以及 carla::geom::Vector3D::z.
被这些函数引用 carla::client::detail::WalkerNavigation::GetRandomLocation(), carla::nav::WalkerManager::SetWalkerRoute() , 以及 UpdateCrowd().
bool carla::nav::Navigation::GetWalkerPosition | ( | ActorId | id, |
carla::geom::Location & | location ) |
获取行人的当前位置
在文件 Navigation.cpp 第 1016 行定义.
引用了 _crowd, _mapped_walkers_id, _mutex, _ready, DEBUG_ASSERT, carla::geom::Vector3D::x, carla::geom::Vector3D::y , 以及 carla::geom::Vector3D::z.
被这些函数引用 carla::nav::WalkerEventVisitor::operator()(), carla::nav::WalkerManager::SetWalkerRoute() , 以及 carla::nav::WalkerManager::Update().
float carla::nav::Navigation::GetWalkerSpeed | ( | ActorId | id | ) |
获取步行人速度
在文件 Navigation.cpp 第 1057 行定义.
引用了 _crowd, _mapped_walkers_id, _mutex, _ready , 以及 DEBUG_ASSERT.
被这些函数引用 carla::client::detail::WalkerNavigation::Tick().
bool carla::nav::Navigation::GetWalkerTransform | ( | ActorId | id, |
carla::geom::Transform & | trans ) |
获取步行人当前变换
在文件 Navigation.cpp 第 952 行定义.
引用了 _crowd, _delta_seconds, _mapped_walkers_id, _mutex, _ready, _yaw_walkers, DEBUG_ASSERT, carla::geom::Transform::location, min(), carla::geom::Transform::rotation, carla::geom::Vector3D::x, carla::geom::Vector3D::y, carla::geom::Rotation::yaw , 以及 carla::geom::Vector3D::z.
被这些函数引用 carla::client::detail::WalkerNavigation::Tick().
bool carla::nav::Navigation::HasVehicleNear | ( | ActorId | id, |
float | distance, | ||
carla::geom::Location | direction ) |
如果代理在附近有车辆(作为邻居),则返回
在文件 Navigation.cpp 第 1185 行定义.
引用了 _crowd, _mapped_vehicles_id, _mapped_walkers_id, _mutex, carla::geom::Vector3D::x, carla::geom::Vector3D::y , 以及 carla::geom::Vector3D::z.
被这些函数引用 carla::nav::WalkerEventVisitor::operator()().
bool carla::nav::Navigation::IsWalkerAlive | ( | ActorId | id, |
bool & | alive ) |
如果行人代理被车辆撞死,则返回
在文件 Navigation.cpp 第 1242 行定义.
引用了 _crowd, _mapped_walkers_id, _mutex, _ready , 以及 DEBUG_ASSERT.
被这些函数引用 carla::client::detail::WalkerNavigation::Tick().
bool carla::nav::Navigation::Load | ( | const std::string & | filename | ) |
从磁盘中加载导航数据
在文件 Navigation.cpp 第 86 行定义.
被这些函数引用 Load() , 以及 carla::client::detail::WalkerNavigation::WalkerNavigation().
bool carla::nav::Navigation::Load | ( | std::vector< uint8_t > | content | ) |
从内存中加载导航数据
在文件 Navigation.cpp 第 105 行定义.
引用了 _binary_mesh, _nav_mesh, _nav_query, _ready, CreateCrowd(), carla::logging::log() , 以及 carla::nav::MAX_QUERY_SEARCH_NODES.
void carla::nav::Navigation::PauseAgent | ( | ActorId | id, |
bool | pause ) |
将人群中的代理设置为暂停
在文件 Navigation.cpp 第 1153 行定义.
引用了 _crowd, _mapped_walkers_id, _mutex, _ready , 以及 DEBUG_ASSERT.
被这些函数引用 carla::nav::WalkerEventVisitor::operator()() , 以及 carla::nav::WalkerManager::SetWalkerNextPoint().
bool carla::nav::Navigation::RemoveAgent | ( | ActorId | id | ) |
移除代理
在文件 Navigation.cpp 第 692 行定义.
引用了 _crowd, _mapped_by_index, _mapped_vehicles_id, _mapped_walkers_id, _mutex, _ready, _walker_manager, DEBUG_ASSERT , 以及 carla::nav::WalkerManager::RemoveWalker().
被这些函数引用 carla::client::detail::WalkerNavigation::CheckIfWalkerExist(), carla::client::detail::WalkerNavigation::RemoveWalker(), carla::client::detail::WalkerNavigation::Tick() , 以及 UpdateVehicles().
|
private |
void carla::nav::Navigation::SetPedestriansCrossFactor | ( | float | percentage | ) |
设置行人代理在路径跟随过程中穿过马路的概率
在文件 Navigation.cpp 第 1147 行定义.
被这些函数引用 carla::client::detail::WalkerNavigation::SetPedestriansCrossFactor().
void carla::nav::Navigation::SetSeed | ( | unsigned int | seed | ) |
设置随机数种子
在文件 Navigation.cpp 第 80 行定义.
被这些函数引用 carla::client::detail::WalkerNavigation::SetPedestriansSeed().
void carla::nav::Navigation::SetSimulator | ( | std::weak_ptr< carla::client::detail::Simulator > | simulator | ) |
引用模拟器来访问API函数
在文件 Navigation.cpp 第 70 行定义.
引用了 _simulator, _walker_manager , 以及 carla::nav::WalkerManager::SetSimulator().
被这些函数引用 carla::client::detail::WalkerNavigation::WalkerNavigation().
bool carla::nav::Navigation::SetWalkerDirectTarget | ( | ActorId | id, |
carla::geom::Location | to ) |
在文件 Navigation.cpp 第 811 行定义.
引用了 _mapped_walkers_id, _ready , 以及 SetWalkerDirectTargetIndex().
被这些函数引用 carla::nav::WalkerManager::SetWalkerNextPoint().
bool carla::nav::Navigation::SetWalkerDirectTargetIndex | ( | int | index, |
carla::geom::Location | to ) |
在文件 Navigation.cpp 第 828 行定义.
引用了 _crowd, _mutex, _nav_query, _ready, DEBUG_ASSERT, carla::geom::Vector3D::x, carla::geom::Vector3D::y , 以及 carla::geom::Vector3D::z.
被这些函数引用 SetWalkerDirectTarget().
bool carla::nav::Navigation::SetWalkerLookAt | ( | ActorId | id, |
carla::geom::Location | location ) |
让代理查看某个位置
在文件 Navigation.cpp 第 1206 行定义.
引用了 _crowd, _mapped_vehicles_id, _mapped_walkers_id, _mutex, carla::geom::Vector3D::x, carla::geom::Vector3D::y , 以及 carla::geom::Vector3D::z.
bool carla::nav::Navigation::SetWalkerMaxSpeed | ( | ActorId | id, |
float | max_speed ) |
设置新的最大速度
在文件 Navigation.cpp 第 764 行定义.
引用了 _crowd, _mapped_walkers_id, _mutex, _ready , 以及 DEBUG_ASSERT.
被这些函数引用 carla::client::detail::WalkerNavigation::SetWalkerMaxSpeed().
bool carla::nav::Navigation::SetWalkerTarget | ( | ActorId | id, |
carla::geom::Location | to ) |
设置新的目标点以通过有事件的路线
在文件 Navigation.cpp 第 794 行定义.
引用了 _mapped_walkers_id, _ready, _walker_manager , 以及 carla::nav::WalkerManager::SetWalkerRoute().
被这些函数引用 carla::client::detail::WalkerNavigation::SetWalkerTarget().
void carla::nav::Navigation::UpdateCrowd | ( | const client::detail::EpisodeState & | state | ) |
更新人群中的所有步行者
在文件 Navigation.cpp 第 863 行定义.
引用了 _crowd, _delta_seconds, _mapped_by_index, _mutex, _probability_crossing, _ready, _time_to_unblock, _walker_manager, _walkers_blocked_position, carla::nav::AGENT_UNBLOCK_DISTANCE_SQUARED, carla::nav::AGENT_UNBLOCK_TIME, DEBUG_ASSERT, carla::nav::frand(), GetRandomLocation(), carla::client::detail::EpisodeState::GetTimestamp(), SetAgentFilter(), carla::nav::WalkerManager::SetWalkerRoute(), carla::geom::Vector3D::SquaredLength() , 以及 carla::nav::WalkerManager::Update().
被这些函数引用 carla::client::detail::WalkerNavigation::Tick().
bool carla::nav::Navigation::UpdateVehicles | ( | std::vector< VehicleCollisionInfo > | vehicles | ) |
在人群中添加/更新/删除车辆
在文件 Navigation.cpp 第 738 行定义.
引用了 _mapped_vehicles_id, AddOrUpdateVehicle() , 以及 RemoveAgent().
被这些函数引用 carla::client::detail::WalkerNavigation::UpdateVehiclesInCrowd().
|
private |
在文件 Navigation.h 第 189 行定义.
被这些函数引用 Load() , 以及 ~Navigation().
|
private |
crowd
在文件 Navigation.h 第 195 行定义.
被这些函数引用 AddOrUpdateVehicle(), AddWalker(), CreateCrowd(), GetAgentRoute(), GetCrowd(), GetWalkerPosition(), GetWalkerSpeed(), GetWalkerTransform(), HasVehicleNear(), IsWalkerAlive(), PauseAgent(), RemoveAgent(), SetAgentFilter(), SetWalkerDirectTargetIndex(), SetWalkerLookAt(), SetWalkerMaxSpeed(), UpdateCrowd() , 以及 ~Navigation().
|
private |
在文件 Navigation.h 第 190 行定义.
被这些函数引用 GetDeltaSeconds(), GetWalkerTransform() , 以及 UpdateCrowd().
|
private |
在文件 Navigation.h 第 200 行定义.
被这些函数引用 AddOrUpdateVehicle(), AddWalker(), RemoveAgent(), UpdateCrowd() , 以及 ~Navigation().
|
private |
在文件 Navigation.h 第 198 行定义.
被这些函数引用 AddOrUpdateVehicle(), HasVehicleNear(), RemoveAgent(), SetWalkerLookAt(), UpdateVehicles() , 以及 ~Navigation().
|
private |
mapping Id
在文件 Navigation.h 第 197 行定义.
被这些函数引用 AddWalker(), GetAgentRoute(), GetWalkerPosition(), GetWalkerSpeed(), GetWalkerTransform(), HasVehicleNear(), IsWalkerAlive(), PauseAgent(), RemoveAgent(), SetWalkerDirectTarget(), SetWalkerLookAt(), SetWalkerMaxSpeed(), SetWalkerTarget() , 以及 ~Navigation().
|
mutableprivate |
在文件 Navigation.h 第 212 行定义.
被这些函数引用 AddOrUpdateVehicle(), AddWalker(), GetAgentRoute(), GetPath(), GetRandomLocation(), GetWalkerPosition(), GetWalkerSpeed(), GetWalkerTransform(), HasVehicleNear(), IsWalkerAlive(), PauseAgent(), RemoveAgent(), SetAgentFilter(), SetWalkerDirectTargetIndex(), SetWalkerLookAt(), SetWalkerMaxSpeed() , 以及 UpdateCrowd().
|
private |
网格
在文件 Navigation.h 第 192 行定义.
被这些函数引用 CreateCrowd(), GetAgentRoute(), GetPath(), Load() , 以及 ~Navigation().
|
private |
在文件 Navigation.h 第 193 行定义.
被这些函数引用 GetAgentRoute(), GetPath(), GetRandomLocation(), Load(), SetWalkerDirectTargetIndex() , 以及 ~Navigation().
|
private |
在文件 Navigation.h 第 214 行定义.
被这些函数引用 AddWalker(), SetPedestriansCrossFactor() , 以及 UpdateCrowd().
|
private |
在文件 Navigation.h 第 188 行定义.
被这些函数引用 AddOrUpdateVehicle(), AddWalker(), CreateCrowd(), GetAgentRoute(), GetPath(), GetRandomLocation(), GetWalkerPosition(), GetWalkerSpeed(), GetWalkerTransform(), IsWalkerAlive(), Load(), PauseAgent(), RemoveAgent(), SetWalkerDirectTarget(), SetWalkerDirectTargetIndex(), SetWalkerMaxSpeed(), SetWalkerTarget(), UpdateCrowd() , 以及 ~Navigation().
|
private |
在文件 Navigation.h 第 210 行定义.
被这些函数引用 SetSimulator().
|
private |
在文件 Navigation.h 第 205 行定义.
被这些函数引用 UpdateCrowd() , 以及 ~Navigation().
|
private |
行人管理器负责带事件的路线规划
在文件 Navigation.h 第 208 行定义.
被这些函数引用 AddWalker(), Navigation(), RemoveAgent(), SetSimulator(), SetWalkerTarget() , 以及 UpdateCrowd().
|
private |
|
private |
存储上一个节拍的行人偏航角
在文件 Navigation.h 第 202 行定义.
被这些函数引用 AddWalker(), GetWalkerTransform() , 以及 ~Navigation().