104 const auto MaxSteerAngleInRadians = FMath::DegreesToRadians(
Vehicle->GetMaximumSteerAngle());
107 const auto& Control =
Vehicle->GetVehicleControl();
108 const auto Flags = (Control.bReverse ? 0x01 : 0) | (Control.bManualGearShift ? 0x02 : 0);
111 const auto& Lights =
Vehicle->GetVehicleLightState();
112 const bool bHazard = Lights.LeftBlinker && Lights.RightBlinker;
113 const auto TurnMask = (Lights.LeftBlinker ? 0x01 : 0) | (Lights.RightBlinker ? 0x02 : 0) | (bHazard ? 0x04 : 0);
117 static_cast<double>(GetWorld()->GetTimeSeconds()),
125 static_cast<float>(
Vehicle->GetActorRotation().Pitch),
126 static_cast<float>(
Vehicle->GetActorRotation().Yaw),
127 static_cast<float>(
Vehicle->GetActorRotation().Roll),
128 static_cast<float>(
Vehicle->GetVehicleControl().Steer * MaxSteerAngleInRadians),
129 static_cast<int32_t
>(
Vehicle->GetVehicleCurrentGear()),
130 static_cast<uint8_t
>(TurnMask),
131 static_cast<uint8_t
>(Flags),
137#if defined(WITH_ROS2)
140 TRACE_CPUPROFILER_EVENT_SCOPE_STR(
"ROS2 Send");
142 ROS2->ProcessDataFromStatusSensor(
143 DataStream.GetSensorType(),
154 TRACE_CPUPROFILER_EVENT_SCOPE_STR(
"AVehicleStatusSensor Stream Send");
155 DataStream.SerializeAndSend(
159 Msg.vel_x_mps, Msg.vel_y_mps, Msg.vel_z_mps,
160 Msg.angVel_x_mps, Msg.angVel_y_mps, Msg.angVel_z_mps,
161 Msg.rot_pitch, Msg.rot_yaw, Msg.rot_roll,
177 const FVector WorldVel_cmps = VehicleActor->GetVelocity();
180 const FQuat InvRot = VehicleActor->GetActorTransform().GetRotation().Inverse();
185 FVector WorldAngVel = FVector::ZeroVector;
186 if (
const auto* MirroredVehicle = Cast<ACarlaWheeledVehicle>(VehicleActor);
187 (MirroredVehicle !=
nullptr) && MirroredVehicle->HasMirroredMotion())
189 if (MirroredVehicle->IsMirroredSimulatingPhysics())
194 else if (UPrimitiveComponent* RootPrim = Cast<UPrimitiveComponent>(VehicleActor->GetRootComponent()))
196 if (RootPrim->IsSimulatingPhysics())
198 WorldAngVel = RootPrim->GetPhysicsAngularVelocityInRadians();