27 auto files =
_simulator.lock()->GetRequiredFiles(
"Nav");
35 if (walkers->empty()) {
40 std::shared_ptr<const EpisodeState> state = episode->GetState();
53 std::vector<Cmd> commands;
54 commands.reserve(walkers->size());
55 for (
auto handle : *walkers) {
59 commands.emplace_back(Cmd::ApplyWalkerState{ handle.walker, trans, speed });
62 _simulator.lock()->ApplyBatchSync(std::move(commands),
false);
66 for (
auto handle : *walkers) {
70 _simulator.lock()->SetActorCollisions(handle.walker,
true);
71 _simulator.lock()->SetActorDead(handle.walker);
75 _simulator.lock()->DestroyActor(handle.controller);
105 std::vector<carla::nav::VehicleCollisionInfo> vehicles;
108 std::shared_ptr<const EpisodeState> state = episode->GetState();
111 for (
auto &&actor : episode->GetActors()) {
113 if (actor.description.id.rfind(
"vehicle.", 0) == 0) {
129 for (
int i = 0; i <
_nav.
GetCrowd()->getAgentCount(); ++i) {
131 const dtCrowdAgent *agent =
_nav.
GetCrowd()->getAgent(i);
132 if (agent && agent->params.useObb) {
135 p1.
x = agent->params.obb[0];
136 p1.
z = agent->params.obb[1];
137 p1.
y = agent->params.obb[2];
138 p2.
x = agent->params.obb[3];
139 p2.
z = agent->params.obb[4];
140 p2.
y = agent->params.obb[5];
141 p3.
x = agent->params.obb[6];
142 p3.
z = agent->params.obb[7];
143 p3.
y = agent->params.obb[8];
144 p4.
x = agent->params.obb[9];
145 p4.
z = agent->params.obb[10];
146 p4.
y = agent->params.obb[11];
152 line1.
color = { 0, 255, 0 };
156 line1.
color = { 255, 0, 0 };
160 line1.
color = { 0, 0, 255 };
164 line1.
color = { 255, 255, 0 };
170 for (
int i = 0; i <
_nav.
GetCrowd()->getAgentCount(); ++i) {
172 const dtCrowdAgent *agent =
_nav.
GetCrowd()->getAgent(i);
176 if (agent->params.userData) {
177 std::ostringstream out;
178 out << *(reinterpret_cast<const float *>(agent->params.userData));
183 text.
color = { 0, 255, 0 };
bool ContainsActorSnapshot(ActorId actor_id) const
unsigned long _next_check_index
void UpdateVehiclesInCrowd(std::shared_ptr< Episode > episode, bool show_debug=false)
添加/更新/删除人群中的所有车辆
WalkerNavigation(std::weak_ptr< Simulator > simulator)
std::weak_ptr< Simulator > _simulator
void Tick(std::shared_ptr< Episode > episode)
void CheckIfWalkerExist(std::vector< WalkerHandle > walkers, const EpisodeState &state)
检查一些行人,如果不存在,则将其从人群中移除
void UnregisterWalker(ActorId walker_id, ActorId controller_id)
carla::nav::Navigation _nav
AtomicList< WalkerHandle > _walkers
void UpdateCrowd(const client::detail::EpisodeState &state)
更新人群中的所有步行者
bool RemoveAgent(ActorId id)
移除代理
float GetWalkerSpeed(ActorId id)
获取步行人速度
bool Load(const std::string &filename)
从磁盘中加载导航数据
bool UpdateVehicles(std::vector< VehicleCollisionInfo > vehicles)
在人群中添加/更新/删除车辆
bool GetWalkerTransform(ActorId id, carla::geom::Transform &trans)
获取步行人当前变换
bool IsWalkerAlive(ActorId id, bool &alive)
如果行人代理被车辆撞死,则返回
void SetSimulator(std::weak_ptr< carla::client::detail::Simulator > simulator)
引用模拟器来访问API函数
boost::variant2::variant< Point, Line, Arrow, Box, String, HUDPoint, HUDLine, HUDArrow, HUDBox > primitive
geom::Transform transform