adding --ignore-spectator to the replayer
This commit is contained in:
parent
ed53705b5b
commit
7f5bb15731
|
@ -3,6 +3,9 @@
|
||||||
* Fixed bug causing the TM's unstuck logic to incorrectly remove the vehicles in some situations.
|
* Fixed bug causing the TM's unstuck logic to incorrectly remove the vehicles in some situations.
|
||||||
* Fixed the extra data in Directx textures, so we need to copy row by row on Windows to remove extra bytes on images
|
* Fixed the extra data in Directx textures, so we need to copy row by row on Windows to remove extra bytes on images
|
||||||
* Restored gamma value to 2.2 instead of 2.4
|
* Restored gamma value to 2.2 instead of 2.4
|
||||||
|
* Added API function to avoid replaying the spectator
|
||||||
|
* `Client.set_replayer_ignore_spectator(bool)`
|
||||||
|
* `start_replaying.py` using flag `--move-spectator`
|
||||||
|
|
||||||
## CARLA 0.9.14
|
## CARLA 0.9.14
|
||||||
|
|
||||||
|
|
|
@ -137,6 +137,10 @@ namespace client {
|
||||||
_simulator->SetReplayerIgnoreHero(ignore_hero);
|
_simulator->SetReplayerIgnoreHero(ignore_hero);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SetReplayerIgnoreSpectator(bool ignore_spectator) {
|
||||||
|
_simulator->SetReplayerIgnoreSpectator(ignore_spectator);
|
||||||
|
}
|
||||||
|
|
||||||
void ApplyBatch(
|
void ApplyBatch(
|
||||||
std::vector<rpc::Command> commands,
|
std::vector<rpc::Command> commands,
|
||||||
bool do_tick_cue = false) const {
|
bool do_tick_cue = false) const {
|
||||||
|
|
|
@ -574,6 +574,10 @@ namespace detail {
|
||||||
_pimpl->AsyncCall("set_replayer_ignore_hero", ignore_hero);
|
_pimpl->AsyncCall("set_replayer_ignore_hero", ignore_hero);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Client::SetReplayerIgnoreSpectator(bool ignore_spectator) {
|
||||||
|
_pimpl->AsyncCall("set_replayer_ignore_spectator", ignore_spectator);
|
||||||
|
}
|
||||||
|
|
||||||
void Client::SubscribeToStream(
|
void Client::SubscribeToStream(
|
||||||
const streaming::Token &token,
|
const streaming::Token &token,
|
||||||
std::function<void(Buffer)> callback) {
|
std::function<void(Buffer)> callback) {
|
||||||
|
|
|
@ -362,6 +362,8 @@ namespace detail {
|
||||||
|
|
||||||
void SetReplayerIgnoreHero(bool ignore_hero);
|
void SetReplayerIgnoreHero(bool ignore_hero);
|
||||||
|
|
||||||
|
void SetReplayerIgnoreSpectator(bool ignore_spectator);
|
||||||
|
|
||||||
void StopReplayer(bool keep_actors);
|
void StopReplayer(bool keep_actors);
|
||||||
|
|
||||||
void SubscribeToStream(
|
void SubscribeToStream(
|
||||||
|
|
|
@ -576,6 +576,10 @@ namespace detail {
|
||||||
_client.SetReplayerIgnoreHero(ignore_hero);
|
_client.SetReplayerIgnoreHero(ignore_hero);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SetReplayerIgnoreSpectator(bool ignore_spectator) {
|
||||||
|
_client.SetReplayerIgnoreSpectator(ignore_spectator);
|
||||||
|
}
|
||||||
|
|
||||||
void StopReplayer(bool keep_actors) {
|
void StopReplayer(bool keep_actors) {
|
||||||
_client.StopReplayer(keep_actors);
|
_client.StopReplayer(keep_actors);
|
||||||
}
|
}
|
||||||
|
|
|
@ -210,6 +210,7 @@ void export_client() {
|
||||||
.def("stop_replayer", &cc::Client::StopReplayer, (arg("keep_actors")))
|
.def("stop_replayer", &cc::Client::StopReplayer, (arg("keep_actors")))
|
||||||
.def("set_replayer_time_factor", &cc::Client::SetReplayerTimeFactor, (arg("time_factor")))
|
.def("set_replayer_time_factor", &cc::Client::SetReplayerTimeFactor, (arg("time_factor")))
|
||||||
.def("set_replayer_ignore_hero", &cc::Client::SetReplayerIgnoreHero, (arg("ignore_hero")))
|
.def("set_replayer_ignore_hero", &cc::Client::SetReplayerIgnoreHero, (arg("ignore_hero")))
|
||||||
|
.def("set_replayer_ignore_spectator", &cc::Client::SetReplayerIgnoreSpectator, (arg("ignore_spectator")))
|
||||||
.def("apply_batch", &ApplyBatchCommands, (arg("commands"), arg("do_tick")=false))
|
.def("apply_batch", &ApplyBatchCommands, (arg("commands"), arg("do_tick")=false))
|
||||||
.def("apply_batch_sync", &ApplyBatchCommandsSync, (arg("commands"), arg("do_tick")=false))
|
.def("apply_batch_sync", &ApplyBatchCommandsSync, (arg("commands"), arg("do_tick")=false))
|
||||||
.def("get_trafficmanager", CONST_CALL_WITHOUT_GIL_1(cc::Client, GetInstanceTM, uint16_t), (arg("port")=ctm::TM_DEFAULT_PORT))
|
.def("get_trafficmanager", CONST_CALL_WITHOUT_GIL_1(cc::Client, GetInstanceTM, uint16_t), (arg("port")=ctm::TM_DEFAULT_PORT))
|
||||||
|
|
|
@ -71,6 +71,10 @@ def main():
|
||||||
'-i', '--ignore-hero',
|
'-i', '--ignore-hero',
|
||||||
action='store_true',
|
action='store_true',
|
||||||
help='ignore hero vehicles')
|
help='ignore hero vehicles')
|
||||||
|
argparser.add_argument(
|
||||||
|
'--move-spectator',
|
||||||
|
action='store_true',
|
||||||
|
help='move spectator camera')
|
||||||
argparser.add_argument(
|
argparser.add_argument(
|
||||||
'--spawn-sensors',
|
'--spawn-sensors',
|
||||||
action='store_true',
|
action='store_true',
|
||||||
|
@ -88,6 +92,9 @@ def main():
|
||||||
# set to ignore the hero vehicles or not
|
# set to ignore the hero vehicles or not
|
||||||
client.set_replayer_ignore_hero(args.ignore_hero)
|
client.set_replayer_ignore_hero(args.ignore_hero)
|
||||||
|
|
||||||
|
# set to ignore the spectator camera or not
|
||||||
|
client.set_replayer_ignore_spectator(not args.move_spectator)
|
||||||
|
|
||||||
# replay the session
|
# replay the session
|
||||||
print(client.replay_file(args.recorder_filename, args.start, args.duration, args.camera, args.spawn_sensors))
|
print(client.replay_file(args.recorder_filename, args.start, args.duration, args.camera, args.spawn_sensors))
|
||||||
|
|
||||||
|
|
|
@ -73,6 +73,11 @@ void ACarlaRecorder::SetReplayerIgnoreHero(bool IgnoreHero)
|
||||||
Replayer.SetIgnoreHero(IgnoreHero);
|
Replayer.SetIgnoreHero(IgnoreHero);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ACarlaRecorder::SetReplayerIgnoreSpectator(bool IgnoreSpectator)
|
||||||
|
{
|
||||||
|
Replayer.SetIgnoreSpectator(IgnoreSpectator);
|
||||||
|
}
|
||||||
|
|
||||||
void ACarlaRecorder::StopReplayer(bool KeepActors)
|
void ACarlaRecorder::StopReplayer(bool KeepActors)
|
||||||
{
|
{
|
||||||
Replayer.Stop(KeepActors);
|
Replayer.Stop(KeepActors);
|
||||||
|
|
|
@ -166,6 +166,7 @@ public:
|
||||||
uint32_t FollowId, bool ReplaySensors);
|
uint32_t FollowId, bool ReplaySensors);
|
||||||
void SetReplayerTimeFactor(double TimeFactor);
|
void SetReplayerTimeFactor(double TimeFactor);
|
||||||
void SetReplayerIgnoreHero(bool IgnoreHero);
|
void SetReplayerIgnoreHero(bool IgnoreHero);
|
||||||
|
void SetReplayerIgnoreSpectator(bool IgnoreSpectator);
|
||||||
void StopReplayer(bool KeepActors = false);
|
void StopReplayer(bool KeepActors = false);
|
||||||
|
|
||||||
void Ticking(float DeltaSeconds);
|
void Ticking(float DeltaSeconds);
|
||||||
|
|
|
@ -175,6 +175,12 @@ std::string CarlaReplayer::ReplayFile(std::string Filename, double TimeStart, do
|
||||||
Info << "Replaying from " << TimeStart << " s - " << TimeToStop << " s (" << TotalTime << " s) at " <<
|
Info << "Replaying from " << TimeStart << " s - " << TimeToStop << " s (" << TotalTime << " s) at " <<
|
||||||
std::setprecision(1) << std::fixed << TimeFactor << "x" << std::endl;
|
std::setprecision(1) << std::fixed << TimeFactor << "x" << std::endl;
|
||||||
|
|
||||||
|
if (IgnoreHero)
|
||||||
|
Info << "Ignoring Hero vehicle" << std::endl;
|
||||||
|
|
||||||
|
if (IgnoreSpectator)
|
||||||
|
Info << "Ignoring Spectator camera" << std::endl;
|
||||||
|
|
||||||
// set the follow Id
|
// set the follow Id
|
||||||
FollowId = ThisFollowId;
|
FollowId = ThisFollowId;
|
||||||
|
|
||||||
|
@ -446,6 +452,7 @@ void CarlaReplayer::ProcessEventsAdd(void)
|
||||||
EventAdd.Description,
|
EventAdd.Description,
|
||||||
EventAdd.DatabaseId,
|
EventAdd.DatabaseId,
|
||||||
IgnoreHero,
|
IgnoreHero,
|
||||||
|
IgnoreSpectator,
|
||||||
bReplaySensors);
|
bReplaySensors);
|
||||||
|
|
||||||
switch (Result.first)
|
switch (Result.first)
|
||||||
|
@ -466,10 +473,16 @@ void CarlaReplayer::ProcessEventsAdd(void)
|
||||||
// mapping id (say desired Id is mapped to what)
|
// mapping id (say desired Id is mapped to what)
|
||||||
MappedId[EventAdd.DatabaseId] = Result.second;
|
MappedId[EventAdd.DatabaseId] = Result.second;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
// actor ignored (either Hero or Spectator)
|
||||||
|
case 3:
|
||||||
|
UE_LOG(LogCarla, Log, TEXT("ignoring actor from replayer (Hero or Spectator)"));
|
||||||
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// check to mark if actor is a hero vehicle or not
|
// check to mark if actor is a hero vehicle or not
|
||||||
if (Result.first > 0)
|
if (Result.first > 0 && Result.first < 3)
|
||||||
{
|
{
|
||||||
// init
|
// init
|
||||||
IsHeroMap[Result.second] = false;
|
IsHeroMap[Result.second] = false;
|
||||||
|
@ -727,8 +740,9 @@ void CarlaReplayer::UpdatePositions(double Per, double DeltaTime)
|
||||||
// go through each actor and update
|
// go through each actor and update
|
||||||
for (auto &Pos : CurrPos)
|
for (auto &Pos : CurrPos)
|
||||||
{
|
{
|
||||||
// check if ignore this actor
|
// check if ignore this actor (hero) or the spectator (id == 1)
|
||||||
if (!(IgnoreHero && IsHeroMap[Pos.DatabaseId]))
|
if (!(IgnoreHero && IsHeroMap[Pos.DatabaseId]) &&
|
||||||
|
!(IgnoreSpectator && Pos.DatabaseId == 1))
|
||||||
{
|
{
|
||||||
// check if exist a previous position
|
// check if exist a previous position
|
||||||
auto Result = TempMap.find(Pos.DatabaseId);
|
auto Result = TempMap.find(Pos.DatabaseId);
|
||||||
|
|
|
@ -86,6 +86,12 @@ public:
|
||||||
IgnoreHero = InIgnoreHero;
|
IgnoreHero = InIgnoreHero;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set ignore spectator
|
||||||
|
void SetIgnoreSpectator(bool InIgnoreSpectator)
|
||||||
|
{
|
||||||
|
IgnoreSpectator = InIgnoreSpectator;
|
||||||
|
}
|
||||||
|
|
||||||
// check if after a map is loaded, we need to replay
|
// check if after a map is loaded, we need to replay
|
||||||
void CheckPlayAfterMapLoaded(void);
|
void CheckPlayAfterMapLoaded(void);
|
||||||
|
|
||||||
|
@ -119,6 +125,7 @@ private:
|
||||||
double TimeFactor { 1.0 };
|
double TimeFactor { 1.0 };
|
||||||
// ignore hero vehicles
|
// ignore hero vehicles
|
||||||
bool IgnoreHero { false };
|
bool IgnoreHero { false };
|
||||||
|
bool IgnoreSpectator { true };
|
||||||
std::unordered_map<uint32_t, bool> IsHeroMap;
|
std::unordered_map<uint32_t, bool> IsHeroMap;
|
||||||
|
|
||||||
// utils
|
// utils
|
||||||
|
@ -157,4 +164,4 @@ private:
|
||||||
void UpdatePositions(double Per, double DeltaTime);
|
void UpdatePositions(double Per, double DeltaTime);
|
||||||
|
|
||||||
void InterpolatePosition(const CarlaRecorderPosition &Start, const CarlaRecorderPosition &End, double Per, double DeltaTime);
|
void InterpolatePosition(const CarlaRecorderPosition &Start, const CarlaRecorderPosition &End, double Per, double DeltaTime);
|
||||||
};
|
};
|
||||||
|
|
|
@ -179,6 +179,7 @@ std::pair<int, uint32_t> CarlaReplayerHelper::ProcessReplayerEventAdd(
|
||||||
CarlaRecorderActorDescription Description,
|
CarlaRecorderActorDescription Description,
|
||||||
uint32_t DesiredId,
|
uint32_t DesiredId,
|
||||||
bool bIgnoreHero,
|
bool bIgnoreHero,
|
||||||
|
bool bIgnoreSpectator,
|
||||||
bool ReplaySensors)
|
bool ReplaySensors)
|
||||||
{
|
{
|
||||||
check(Episode != nullptr);
|
check(Episode != nullptr);
|
||||||
|
@ -200,6 +201,13 @@ std::pair<int, uint32_t> CarlaReplayerHelper::ProcessReplayerEventAdd(
|
||||||
IsHero = true;
|
IsHero = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// check to ignore Hero or Spectator
|
||||||
|
if ((bIgnoreHero && IsHero) ||
|
||||||
|
(bIgnoreSpectator && ActorDesc.Id.StartsWith("spectator")))
|
||||||
|
{
|
||||||
|
return std::make_pair(3, 0);
|
||||||
|
}
|
||||||
|
|
||||||
auto result = TryToCreateReplayerActor(
|
auto result = TryToCreateReplayerActor(
|
||||||
Location,
|
Location,
|
||||||
Rotation,
|
Rotation,
|
||||||
|
|
|
@ -38,6 +38,7 @@ public:
|
||||||
CarlaRecorderActorDescription Description,
|
CarlaRecorderActorDescription Description,
|
||||||
uint32_t DesiredId,
|
uint32_t DesiredId,
|
||||||
bool bIgnoreHero,
|
bool bIgnoreHero,
|
||||||
|
bool bIgnoreSpectator,
|
||||||
bool ReplaySensors);
|
bool ReplaySensors);
|
||||||
|
|
||||||
// replay event for removing actor
|
// replay event for removing actor
|
||||||
|
|
|
@ -2232,6 +2232,13 @@ void FCarlaServer::FPimpl::BindActions()
|
||||||
return R<void>::Success();
|
return R<void>::Success();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
BIND_SYNC(set_replayer_ignore_spectator) << [this](bool ignore_spectator) -> R<void>
|
||||||
|
{
|
||||||
|
REQUIRE_CARLA_EPISODE();
|
||||||
|
Episode->GetRecorder()->SetReplayerIgnoreSpectator(ignore_spectator);
|
||||||
|
return R<void>::Success();
|
||||||
|
};
|
||||||
|
|
||||||
BIND_SYNC(stop_replayer) << [this](bool keep_actors) -> R<void>
|
BIND_SYNC(stop_replayer) << [this](bool keep_actors) -> R<void>
|
||||||
{
|
{
|
||||||
REQUIRE_CARLA_EPISODE();
|
REQUIRE_CARLA_EPISODE();
|
||||||
|
|
Loading…
Reference in New Issue