CARLA
 
载入中...
搜索中...
未找到
Public 成员函数 | Private 成员函数 | Private 属性 | 所有成员列表
carla::nav::Navigation类 参考

管理行人导航,使用 Recast & Detour 库进行低层计算。 更多...

#include <Navigation.h>

+ 类 carla::nav::Navigation 继承关系图:
+ carla::nav::Navigation 的协作图:

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)
 为代理分配过滤索引
 
- Private 成员函数 继承自 carla::NonCopyable
 NonCopyable ()=default
 
 NonCopyable (const NonCopyable &)=delete
 
 NonCopyable (NonCopyable &&)=delete
 
NonCopyableoperator= (const NonCopyable &)=delete
 
NonCopyableoperator= (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.h86 行定义.

构造及析构函数说明

◆ Navigation()

carla::nav::Navigation::Navigation ( )

在文件 Navigation.cpp50 行定义.

引用了 _walker_manager , 以及 carla::nav::WalkerManager::SetNav().

+ 函数调用图:

◆ ~Navigation()

carla::nav::Navigation::~Navigation ( )

成员函数说明

◆ AddOrUpdateVehicle()

bool carla::nav::Navigation::AddOrUpdateVehicle ( VehicleCollisionInfo & vehicle)

在人群中创造一辆新的车辆,让行人避开

在文件 Navigation.cpp563 行定义.

引用了 _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().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ AddWalker()

bool carla::nav::Navigation::AddWalker ( ActorId id,
carla::geom::Location from )

创建新的行人

在文件 Navigation.cpp503 行定义.

引用了 _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().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ CreateCrowd()

void carla::nav::Navigation::CreateCrowd ( void )

创建人群对象

在文件 Navigation.cpp220 行定义.

引用了 _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().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ GetAgentRoute()

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.cpp393 行定义.

引用了 _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().

+ 这是这个函数的调用关系图:

◆ GetCrowd()

dtCrowd * carla::nav::Navigation::GetCrowd ( )
inline

在文件 Navigation.h181 行定义.

引用了 _crowd.

被这些函数引用 carla::client::detail::WalkerNavigation::UpdateVehiclesInCrowd().

+ 这是这个函数的调用关系图:

◆ GetDeltaSeconds()

double carla::nav::Navigation::GetDeltaSeconds ( )
inline

返回最后增量秒数

在文件 Navigation.h184 行定义.

引用了 _delta_seconds.

◆ GetPath()

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 )

◆ GetRandomLocation()

bool carla::nav::Navigation::GetRandomLocation ( carla::geom::Location & location,
dtQueryFilter * filter = nullptr ) const

获取导航的随机位置

在文件 Navigation.cpp1091 行定义.

引用了 _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().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ GetWalkerPosition()

bool carla::nav::Navigation::GetWalkerPosition ( ActorId id,
carla::geom::Location & location )

获取行人的当前位置

在文件 Navigation.cpp1016 行定义.

引用了 _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().

+ 这是这个函数的调用关系图:

◆ GetWalkerSpeed()

float carla::nav::Navigation::GetWalkerSpeed ( ActorId id)

获取步行人速度

在文件 Navigation.cpp1057 行定义.

引用了 _crowd, _mapped_walkers_id, _mutex, _ready , 以及 DEBUG_ASSERT.

被这些函数引用 carla::client::detail::WalkerNavigation::Tick().

+ 这是这个函数的调用关系图:

◆ GetWalkerTransform()

bool carla::nav::Navigation::GetWalkerTransform ( ActorId id,
carla::geom::Transform & trans )

获取步行人当前变换

在文件 Navigation.cpp952 行定义.

引用了 _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().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ HasVehicleNear()

bool carla::nav::Navigation::HasVehicleNear ( ActorId id,
float distance,
carla::geom::Location direction )

如果代理在附近有车辆(作为邻居),则返回

在文件 Navigation.cpp1185 行定义.

引用了 _crowd, _mapped_vehicles_id, _mapped_walkers_id, _mutex, carla::geom::Vector3D::x, carla::geom::Vector3D::y , 以及 carla::geom::Vector3D::z.

被这些函数引用 carla::nav::WalkerEventVisitor::operator()().

+ 这是这个函数的调用关系图:

◆ IsWalkerAlive()

bool carla::nav::Navigation::IsWalkerAlive ( ActorId id,
bool & alive )

如果行人代理被车辆撞死,则返回

在文件 Navigation.cpp1242 行定义.

引用了 _crowd, _mapped_walkers_id, _mutex, _ready , 以及 DEBUG_ASSERT.

被这些函数引用 carla::client::detail::WalkerNavigation::Tick().

+ 这是这个函数的调用关系图:

◆ Load() [1/2]

bool carla::nav::Navigation::Load ( const std::string & filename)

从磁盘中加载导航数据

在文件 Navigation.cpp86 行定义.

引用了 end() , 以及 Load().

被这些函数引用 Load() , 以及 carla::client::detail::WalkerNavigation::WalkerNavigation().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ Load() [2/2]

bool carla::nav::Navigation::Load ( std::vector< uint8_t > content)

从内存中加载导航数据

在文件 Navigation.cpp105 行定义.

引用了 _binary_mesh, _nav_mesh, _nav_query, _ready, CreateCrowd(), carla::logging::log() , 以及 carla::nav::MAX_QUERY_SEARCH_NODES.

+ 函数调用图:

◆ PauseAgent()

void carla::nav::Navigation::PauseAgent ( ActorId id,
bool pause )

将人群中的代理设置为暂停

在文件 Navigation.cpp1153 行定义.

引用了 _crowd, _mapped_walkers_id, _mutex, _ready , 以及 DEBUG_ASSERT.

被这些函数引用 carla::nav::WalkerEventVisitor::operator()() , 以及 carla::nav::WalkerManager::SetWalkerNextPoint().

+ 这是这个函数的调用关系图:

◆ RemoveAgent()

bool carla::nav::Navigation::RemoveAgent ( ActorId id)

移除代理

在文件 Navigation.cpp692 行定义.

引用了 _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().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ SetAgentFilter()

void carla::nav::Navigation::SetAgentFilter ( int agent_index,
int filter_index )
private

为代理分配过滤索引

在文件 Navigation.cpp1132 行定义.

引用了 _crowd , 以及 _mutex.

被这些函数引用 UpdateCrowd().

+ 这是这个函数的调用关系图:

◆ SetPedestriansCrossFactor()

void carla::nav::Navigation::SetPedestriansCrossFactor ( float percentage)

设置行人代理在路径跟随过程中穿过马路的概率

在文件 Navigation.cpp1147 行定义.

引用了 _probability_crossing.

被这些函数引用 carla::client::detail::WalkerNavigation::SetPedestriansCrossFactor().

+ 这是这个函数的调用关系图:

◆ SetSeed()

void carla::nav::Navigation::SetSeed ( unsigned int seed)

设置随机数种子

在文件 Navigation.cpp80 行定义.

被这些函数引用 carla::client::detail::WalkerNavigation::SetPedestriansSeed().

+ 这是这个函数的调用关系图:

◆ SetSimulator()

void carla::nav::Navigation::SetSimulator ( std::weak_ptr< carla::client::detail::Simulator > simulator)

引用模拟器来访问API函数

在文件 Navigation.cpp70 行定义.

引用了 _simulator, _walker_manager , 以及 carla::nav::WalkerManager::SetSimulator().

被这些函数引用 carla::client::detail::WalkerNavigation::WalkerNavigation().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ SetWalkerDirectTarget()

bool carla::nav::Navigation::SetWalkerDirectTarget ( ActorId id,
carla::geom::Location to )

在文件 Navigation.cpp811 行定义.

引用了 _mapped_walkers_id, _ready , 以及 SetWalkerDirectTargetIndex().

被这些函数引用 carla::nav::WalkerManager::SetWalkerNextPoint().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ SetWalkerDirectTargetIndex()

bool carla::nav::Navigation::SetWalkerDirectTargetIndex ( int index,
carla::geom::Location to )

在文件 Navigation.cpp828 行定义.

引用了 _crowd, _mutex, _nav_query, _ready, DEBUG_ASSERT, carla::geom::Vector3D::x, carla::geom::Vector3D::y , 以及 carla::geom::Vector3D::z.

被这些函数引用 SetWalkerDirectTarget().

+ 这是这个函数的调用关系图:

◆ SetWalkerLookAt()

bool carla::nav::Navigation::SetWalkerLookAt ( ActorId id,
carla::geom::Location location )

◆ SetWalkerMaxSpeed()

bool carla::nav::Navigation::SetWalkerMaxSpeed ( ActorId id,
float max_speed )

设置新的最大速度

在文件 Navigation.cpp764 行定义.

引用了 _crowd, _mapped_walkers_id, _mutex, _ready , 以及 DEBUG_ASSERT.

被这些函数引用 carla::client::detail::WalkerNavigation::SetWalkerMaxSpeed().

+ 这是这个函数的调用关系图:

◆ SetWalkerTarget()

bool carla::nav::Navigation::SetWalkerTarget ( ActorId id,
carla::geom::Location to )

设置新的目标点以通过有事件的路线

在文件 Navigation.cpp794 行定义.

引用了 _mapped_walkers_id, _ready, _walker_manager , 以及 carla::nav::WalkerManager::SetWalkerRoute().

被这些函数引用 carla::client::detail::WalkerNavigation::SetWalkerTarget().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ UpdateCrowd()

void carla::nav::Navigation::UpdateCrowd ( const client::detail::EpisodeState & state)

更新人群中的所有步行者

在文件 Navigation.cpp863 行定义.

引用了 _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().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ UpdateVehicles()

bool carla::nav::Navigation::UpdateVehicles ( std::vector< VehicleCollisionInfo > vehicles)

在人群中添加/更新/删除车辆

在文件 Navigation.cpp738 行定义.

引用了 _mapped_vehicles_id, AddOrUpdateVehicle() , 以及 RemoveAgent().

被这些函数引用 carla::client::detail::WalkerNavigation::UpdateVehiclesInCrowd().

+ 函数调用图:
+ 这是这个函数的调用关系图:

类成员变量说明

◆ _binary_mesh

std::vector<uint8_t> carla::nav::Navigation::_binary_mesh
private

在文件 Navigation.h189 行定义.

被这些函数引用 Load() , 以及 ~Navigation().

◆ _crowd

dtCrowd* carla::nav::Navigation::_crowd { nullptr }
private

◆ _delta_seconds

double carla::nav::Navigation::_delta_seconds { 0.0 }
private

在文件 Navigation.h190 行定义.

被这些函数引用 GetDeltaSeconds(), GetWalkerTransform() , 以及 UpdateCrowd().

◆ _mapped_by_index

std::unordered_map<int, ActorId> carla::nav::Navigation::_mapped_by_index
private

在文件 Navigation.h200 行定义.

被这些函数引用 AddOrUpdateVehicle(), AddWalker(), RemoveAgent(), UpdateCrowd() , 以及 ~Navigation().

◆ _mapped_vehicles_id

std::unordered_map<ActorId, int> carla::nav::Navigation::_mapped_vehicles_id
private

◆ _mapped_walkers_id

std::unordered_map<ActorId, int> carla::nav::Navigation::_mapped_walkers_id
private

◆ _mutex

std::mutex carla::nav::Navigation::_mutex
mutableprivate

◆ _nav_mesh

dtNavMesh* carla::nav::Navigation::_nav_mesh { nullptr }
private

网格

在文件 Navigation.h192 行定义.

被这些函数引用 CreateCrowd(), GetAgentRoute(), GetPath(), Load() , 以及 ~Navigation().

◆ _nav_query

dtNavMeshQuery* carla::nav::Navigation::_nav_query { nullptr }
private

在文件 Navigation.h193 行定义.

被这些函数引用 GetAgentRoute(), GetPath(), GetRandomLocation(), Load(), SetWalkerDirectTargetIndex() , 以及 ~Navigation().

◆ _probability_crossing

float carla::nav::Navigation::_probability_crossing { 0.0f }
private

在文件 Navigation.h214 行定义.

被这些函数引用 AddWalker(), SetPedestriansCrossFactor() , 以及 UpdateCrowd().

◆ _ready

bool carla::nav::Navigation::_ready { false }
private

◆ _simulator

std::weak_ptr<carla::client::detail::Simulator> carla::nav::Navigation::_simulator
private

在文件 Navigation.h210 行定义.

被这些函数引用 SetSimulator().

◆ _time_to_unblock

double carla::nav::Navigation::_time_to_unblock { 0.0 }
private

在文件 Navigation.h205 行定义.

被这些函数引用 UpdateCrowd() , 以及 ~Navigation().

◆ _walker_manager

WalkerManager carla::nav::Navigation::_walker_manager
private

行人管理器负责带事件的路线规划

在文件 Navigation.h208 行定义.

被这些函数引用 AddWalker(), Navigation(), RemoveAgent(), SetSimulator(), SetWalkerTarget() , 以及 UpdateCrowd().

◆ _walkers_blocked_position

std::unordered_map<int, carla::geom::Vector3D> carla::nav::Navigation::_walkers_blocked_position
private

每隔一段时间保存每个参与者的位置,并检查是否有参与者被阻挡

在文件 Navigation.h204 行定义.

被这些函数引用 UpdateCrowd() , 以及 ~Navigation().

◆ _yaw_walkers

std::unordered_map<ActorId, float> carla::nav::Navigation::_yaw_walkers
private

存储上一个节拍的行人偏航角

在文件 Navigation.h202 行定义.

被这些函数引用 AddWalker(), GetWalkerTransform() , 以及 ~Navigation().


该类的文档由以下文件生成: