fix a recorder crash and replay hang for 0.9.15 log issue after introducing vehicle door animation into the log

This commit is contained in:
Jiayuan Zhu 2025-03-23 05:48:00 +00:00 committed by glopezdiest
parent f45dd6943c
commit 7b07075480
3 changed files with 59 additions and 30 deletions

View File

@ -553,12 +553,18 @@ void FFrameData::AddTriggerVolume(const ATrafficSignBase &TrafficSign)
{
return;
}
auto CarlaActor = Episode->GetActorRegistry().FindCarlaActor(&TrafficSign);
if (!CarlaActor)
{
return;
}
UBoxComponent* Trigger = Triggers.Top();
auto VolumeOrigin = Trigger->GetComponentLocation();
auto VolumeExtent = Trigger->GetScaledBoxExtent();
CarlaRecorderActorBoundingBox TriggerVolume =
{
Episode->GetActorRegistry().FindCarlaActor(&TrafficSign)->GetActorId(),
CarlaActor->GetActorId(),
{VolumeOrigin, VolumeExtent}
};
TriggerVolumes.Add(TriggerVolume);
@ -567,21 +573,29 @@ void FFrameData::AddTriggerVolume(const ATrafficSignBase &TrafficSign)
void FFrameData::AddPhysicsControl(const ACarlaWheeledVehicle& Vehicle)
{
CarlaRecorderPhysicsControl Control;
Control.DatabaseId = Episode->GetActorRegistry().FindCarlaActor(&Vehicle)->GetActorId();
Control.VehiclePhysicsControl = Vehicle.GetVehiclePhysicsControl();
PhysicsControls.Add(Control);
auto CarlaActor = Episode->GetActorRegistry().FindCarlaActor(&Vehicle);
if (CarlaActor)
{
Control.DatabaseId = CarlaActor->GetActorId();
Control.VehiclePhysicsControl = Vehicle.GetVehiclePhysicsControl();
PhysicsControls.Add(Control);
}
}
void FFrameData::AddTrafficLightTime(const ATrafficLightBase& TrafficLight)
{
auto DatabaseId = Episode->GetActorRegistry().FindCarlaActor(&TrafficLight)->GetActorId();
CarlaRecorderTrafficLightTime TrafficLightTime{
DatabaseId,
TrafficLight.GetGreenTime(),
TrafficLight.GetYellowTime(),
TrafficLight.GetRedTime()
};
TrafficLightTimes.Add(TrafficLightTime);
auto CarlaActor = Episode->GetActorRegistry().FindCarlaActor(&TrafficLight);
if (CarlaActor)
{
auto DatabaseId = CarlaActor->GetActorId();
CarlaRecorderTrafficLightTime TrafficLightTime{
DatabaseId,
TrafficLight.GetGreenTime(),
TrafficLight.GetYellowTime(),
TrafficLight.GetRedTime()
};
TrafficLightTimes.Add(TrafficLightTime);
}
}
void FFrameData::AddPosition(const CarlaRecorderPosition &Position)

View File

@ -307,10 +307,14 @@ void ACarlaRecorder::AddVehicleLight(FCarlaActor *CarlaActor)
void ACarlaRecorder::AddVehicleDoor(const ACarlaWheeledVehicle &Vehicle, const EVehicleDoor SDoors, bool bIsOpen)
{
CarlaRecorderDoorVehicle DoorVehicle;
DoorVehicle.DatabaseId = Episode->GetActorRegistry().FindCarlaActor(&Vehicle)->GetActorId();
DoorVehicle.Doors = static_cast<CarlaRecorderDoorVehicle::VehicleDoorType>(SDoors);
DoorVehicle.bIsOpen = bIsOpen;
AddDoorVehicle(DoorVehicle);
auto CarlaActor = Episode->GetActorRegistry().FindCarlaActor(&Vehicle);
if (CarlaActor)
{
DoorVehicle.DatabaseId = CarlaActor->GetActorId();
DoorVehicle.Doors = static_cast<CarlaRecorderDoorVehicle::VehicleDoorType>(SDoors);
DoorVehicle.bIsOpen = bIsOpen;
AddDoorVehicle(DoorVehicle);
}
}
void ACarlaRecorder::AddActorKinematics(FCarlaActor *CarlaActor)
@ -353,12 +357,17 @@ void ACarlaRecorder::AddTriggerVolume(const ATrafficSignBase &TrafficSign)
{
return;
}
auto CarlaActor = Episode->GetActorRegistry().FindCarlaActor(&TrafficSign);
if (!CarlaActor)
{
return;
}
UBoxComponent* Trigger = Triggers.Top();
auto VolumeOrigin = Trigger->GetComponentLocation();
auto VolumeExtent = Trigger->GetScaledBoxExtent();
CarlaRecorderActorBoundingBox TriggerVolume =
{
Episode->GetActorRegistry().FindCarlaActor(&TrafficSign)->GetActorId(),
CarlaActor->GetActorId(),
{VolumeOrigin, VolumeExtent}
};
TriggerVolumes.Add(TriggerVolume);
@ -370,9 +379,12 @@ void ACarlaRecorder::AddPhysicsControl(const ACarlaWheeledVehicle& Vehicle)
if (bAdditionalData)
{
CarlaRecorderPhysicsControl Control;
Control.DatabaseId = Episode->GetActorRegistry().FindCarlaActor(&Vehicle)->GetActorId();
Control.VehiclePhysicsControl = Vehicle.GetVehiclePhysicsControl();
PhysicsControls.Add(Control);
if (auto CarlaActor = Episode->GetActorRegistry().FindCarlaActor(&Vehicle))
{
Control.DatabaseId = CarlaActor->GetActorId();
Control.VehiclePhysicsControl = Vehicle.GetVehiclePhysicsControl();
PhysicsControls.Add(Control);
}
}
}
@ -380,14 +392,17 @@ void ACarlaRecorder::AddTrafficLightTime(const ATrafficLightBase& TrafficLight)
{
if (bAdditionalData)
{
auto DatabaseId = Episode->GetActorRegistry().FindCarlaActor(&TrafficLight)->GetActorId();
CarlaRecorderTrafficLightTime TrafficLightTime{
DatabaseId,
TrafficLight.GetGreenTime(),
TrafficLight.GetYellowTime(),
TrafficLight.GetRedTime()
};
TrafficLightTimes.Add(TrafficLightTime);
if (auto CarlaActor = Episode->GetActorRegistry().FindCarlaActor(&TrafficLight))
{
auto DatabaseId = CarlaActor->GetActorId();
CarlaRecorderTrafficLightTime TrafficLightTime{
DatabaseId,
TrafficLight.GetGreenTime(),
TrafficLight.GetYellowTime(),
TrafficLight.GetRedTime()
};
TrafficLightTimes.Add(TrafficLightTime);
}
}
}

View File

@ -69,9 +69,9 @@ enum class CarlaRecorderPacketId : uint8_t
FrameCounter,
WalkerBones,
VisualTime,
VehicleDoor,
AnimVehicleWheels,
AnimBiker
AnimBiker,
VehicleDoor
};
/// Recorder for the simulation