Fix #345 rollback vehicle's location and send relative transform of the bounding box

This commit is contained in:
nsubiron 2018-04-14 16:36:54 +02:00
parent c5ccf00134
commit d6b61aac63
15 changed files with 211 additions and 103 deletions

View File

@ -19,7 +19,7 @@ DESCRIPTOR = _descriptor.FileDescriptor(
name='carla_server.proto',
package='carla_server',
syntax='proto3',
serialized_pb=_b('\n\x12\x63\x61rla_server.proto\x12\x0c\x63\x61rla_server\"+\n\x08Vector3D\x12\t\n\x01x\x18\x01 \x01(\x02\x12\t\n\x01y\x18\x02 \x01(\x02\x12\t\n\x01z\x18\x03 \x01(\x02\"6\n\nRotation3D\x12\r\n\x05pitch\x18\x01 \x01(\x02\x12\x0b\n\x03yaw\x18\x02 \x01(\x02\x12\x0c\n\x04roll\x18\x03 \x01(\x02\"\x92\x01\n\tTransform\x12(\n\x08location\x18\x01 \x01(\x0b\x32\x16.carla_server.Vector3D\x12/\n\x0borientation\x18\x02 \x01(\x0b\x32\x16.carla_server.Vector3DB\x02\x18\x01\x12*\n\x08rotation\x18\x03 \x01(\x0b\x32\x18.carla_server.Rotation3D\"\x80\x01\n\x06Sensor\x12\n\n\x02id\x18\x01 \x01(\x07\x12\'\n\x04type\x18\x02 \x01(\x0e\x32\x19.carla_server.Sensor.Type\x12\x0c\n\x04name\x18\x03 \x01(\t\"3\n\x04Type\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06\x43\x41MERA\x10\x01\x12\x12\n\x0eLIDAR_RAY_CAST\x10\x02\"x\n\x07Vehicle\x12*\n\ttransform\x18\x01 \x01(\x0b\x32\x17.carla_server.Transform\x12*\n\nbox_extent\x18\x02 \x01(\x0b\x32\x16.carla_server.Vector3D\x12\x15\n\rforward_speed\x18\x03 \x01(\x02\"{\n\nPedestrian\x12*\n\ttransform\x18\x01 \x01(\x0b\x32\x17.carla_server.Transform\x12*\n\nbox_extent\x18\x02 \x01(\x0b\x32\x16.carla_server.Vector3D\x12\x15\n\rforward_speed\x18\x03 \x01(\x02\"\x94\x01\n\x0cTrafficLight\x12*\n\ttransform\x18\x01 \x01(\x0b\x32\x17.carla_server.Transform\x12/\n\x05state\x18\x02 \x01(\x0e\x32 .carla_server.TrafficLight.State\"\'\n\x05State\x12\t\n\x05GREEN\x10\x00\x12\n\n\x06YELLOW\x10\x01\x12\x07\n\x03RED\x10\x02\"Q\n\x0eSpeedLimitSign\x12*\n\ttransform\x18\x01 \x01(\x0b\x32\x17.carla_server.Transform\x12\x13\n\x0bspeed_limit\x18\x02 \x01(\x02\"\xe5\x01\n\x05\x41gent\x12\n\n\x02id\x18\x01 \x01(\x07\x12(\n\x07vehicle\x18\x02 \x01(\x0b\x32\x15.carla_server.VehicleH\x00\x12.\n\npedestrian\x18\x03 \x01(\x0b\x32\x18.carla_server.PedestrianH\x00\x12\x33\n\rtraffic_light\x18\x04 \x01(\x0b\x32\x1a.carla_server.TrafficLightH\x00\x12\x38\n\x10speed_limit_sign\x18\x05 \x01(\x0b\x32\x1c.carla_server.SpeedLimitSignH\x00\x42\x07\n\x05\x61gent\"%\n\x11RequestNewEpisode\x12\x10\n\x08ini_file\x18\x01 \x01(\t\"n\n\x10SceneDescription\x12\x33\n\x12player_start_spots\x18\x01 \x03(\x0b\x32\x17.carla_server.Transform\x12%\n\x07sensors\x18\x02 \x03(\x0b\x32\x14.carla_server.Sensor\"/\n\x0c\x45pisodeStart\x12\x1f\n\x17player_start_spot_index\x18\x01 \x01(\r\"\x1d\n\x0c\x45pisodeReady\x12\r\n\x05ready\x18\x01 \x01(\x08\"^\n\x07\x43ontrol\x12\r\n\x05steer\x18\x01 \x01(\x02\x12\x10\n\x08throttle\x18\x02 \x01(\x02\x12\r\n\x05\x62rake\x18\x03 \x01(\x02\x12\x12\n\nhand_brake\x18\x04 \x01(\x08\x12\x0f\n\x07reverse\x18\x05 \x01(\x08\"\xcc\x04\n\x0cMeasurements\x12\x14\n\x0c\x66rame_number\x18\x05 \x01(\x04\x12\x1a\n\x12platform_timestamp\x18\x01 \x01(\r\x12\x16\n\x0egame_timestamp\x18\x02 \x01(\r\x12J\n\x13player_measurements\x18\x03 \x01(\x0b\x32-.carla_server.Measurements.PlayerMeasurements\x12.\n\x11non_player_agents\x18\x04 \x03(\x0b\x32\x13.carla_server.Agent\x1a\xf5\x02\n\x12PlayerMeasurements\x12*\n\ttransform\x18\x01 \x01(\x0b\x32\x17.carla_server.Transform\x12*\n\nbox_extent\x18\x0b \x01(\x0b\x32\x16.carla_server.Vector3D\x12,\n\x0c\x61\x63\x63\x65leration\x18\x03 \x01(\x0b\x32\x16.carla_server.Vector3D\x12\x15\n\rforward_speed\x18\x04 \x01(\x02\x12\x1a\n\x12\x63ollision_vehicles\x18\x05 \x01(\x02\x12\x1d\n\x15\x63ollision_pedestrians\x18\x06 \x01(\x02\x12\x17\n\x0f\x63ollision_other\x18\x07 \x01(\x02\x12\x1e\n\x16intersection_otherlane\x18\x08 \x01(\x02\x12\x1c\n\x14intersection_offroad\x18\t \x01(\x02\x12\x30\n\x11\x61utopilot_control\x18\n \x01(\x0b\x32\x15.carla_server.ControlB\x03\xf8\x01\x01\x62\x06proto3')
serialized_pb=_b('\n\x12\x63\x61rla_server.proto\x12\x0c\x63\x61rla_server\"+\n\x08Vector3D\x12\t\n\x01x\x18\x01 \x01(\x02\x12\t\n\x01y\x18\x02 \x01(\x02\x12\t\n\x01z\x18\x03 \x01(\x02\"6\n\nRotation3D\x12\r\n\x05pitch\x18\x01 \x01(\x02\x12\x0b\n\x03yaw\x18\x02 \x01(\x02\x12\x0c\n\x04roll\x18\x03 \x01(\x02\"\x92\x01\n\tTransform\x12(\n\x08location\x18\x01 \x01(\x0b\x32\x16.carla_server.Vector3D\x12/\n\x0borientation\x18\x02 \x01(\x0b\x32\x16.carla_server.Vector3DB\x02\x18\x01\x12*\n\x08rotation\x18\x03 \x01(\x0b\x32\x18.carla_server.Rotation3D\"a\n\x0b\x42oundingBox\x12*\n\ttransform\x18\x01 \x01(\x0b\x32\x17.carla_server.Transform\x12&\n\x06\x65xtent\x18\x02 \x01(\x0b\x32\x16.carla_server.Vector3D\"\x80\x01\n\x06Sensor\x12\n\n\x02id\x18\x01 \x01(\x07\x12\'\n\x04type\x18\x02 \x01(\x0e\x32\x19.carla_server.Sensor.Type\x12\x0c\n\x04name\x18\x03 \x01(\t\"3\n\x04Type\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06\x43\x41MERA\x10\x01\x12\x12\n\x0eLIDAR_RAY_CAST\x10\x02\"}\n\x07Vehicle\x12*\n\ttransform\x18\x01 \x01(\x0b\x32\x17.carla_server.Transform\x12/\n\x0c\x62ounding_box\x18\x04 \x01(\x0b\x32\x19.carla_server.BoundingBox\x12\x15\n\rforward_speed\x18\x03 \x01(\x02\"\x80\x01\n\nPedestrian\x12*\n\ttransform\x18\x01 \x01(\x0b\x32\x17.carla_server.Transform\x12/\n\x0c\x62ounding_box\x18\x04 \x01(\x0b\x32\x19.carla_server.BoundingBox\x12\x15\n\rforward_speed\x18\x03 \x01(\x02\"\x94\x01\n\x0cTrafficLight\x12*\n\ttransform\x18\x01 \x01(\x0b\x32\x17.carla_server.Transform\x12/\n\x05state\x18\x02 \x01(\x0e\x32 .carla_server.TrafficLight.State\"\'\n\x05State\x12\t\n\x05GREEN\x10\x00\x12\n\n\x06YELLOW\x10\x01\x12\x07\n\x03RED\x10\x02\"Q\n\x0eSpeedLimitSign\x12*\n\ttransform\x18\x01 \x01(\x0b\x32\x17.carla_server.Transform\x12\x13\n\x0bspeed_limit\x18\x02 \x01(\x02\"\xe5\x01\n\x05\x41gent\x12\n\n\x02id\x18\x01 \x01(\x07\x12(\n\x07vehicle\x18\x02 \x01(\x0b\x32\x15.carla_server.VehicleH\x00\x12.\n\npedestrian\x18\x03 \x01(\x0b\x32\x18.carla_server.PedestrianH\x00\x12\x33\n\rtraffic_light\x18\x04 \x01(\x0b\x32\x1a.carla_server.TrafficLightH\x00\x12\x38\n\x10speed_limit_sign\x18\x05 \x01(\x0b\x32\x1c.carla_server.SpeedLimitSignH\x00\x42\x07\n\x05\x61gent\"%\n\x11RequestNewEpisode\x12\x10\n\x08ini_file\x18\x01 \x01(\t\"n\n\x10SceneDescription\x12\x33\n\x12player_start_spots\x18\x01 \x03(\x0b\x32\x17.carla_server.Transform\x12%\n\x07sensors\x18\x02 \x03(\x0b\x32\x14.carla_server.Sensor\"/\n\x0c\x45pisodeStart\x12\x1f\n\x17player_start_spot_index\x18\x01 \x01(\r\"\x1d\n\x0c\x45pisodeReady\x12\r\n\x05ready\x18\x01 \x01(\x08\"^\n\x07\x43ontrol\x12\r\n\x05steer\x18\x01 \x01(\x02\x12\x10\n\x08throttle\x18\x02 \x01(\x02\x12\r\n\x05\x62rake\x18\x03 \x01(\x02\x12\x12\n\nhand_brake\x18\x04 \x01(\x08\x12\x0f\n\x07reverse\x18\x05 \x01(\x08\"\xd1\x04\n\x0cMeasurements\x12\x14\n\x0c\x66rame_number\x18\x05 \x01(\x04\x12\x1a\n\x12platform_timestamp\x18\x01 \x01(\r\x12\x16\n\x0egame_timestamp\x18\x02 \x01(\r\x12J\n\x13player_measurements\x18\x03 \x01(\x0b\x32-.carla_server.Measurements.PlayerMeasurements\x12.\n\x11non_player_agents\x18\x04 \x03(\x0b\x32\x13.carla_server.Agent\x1a\xfa\x02\n\x12PlayerMeasurements\x12*\n\ttransform\x18\x01 \x01(\x0b\x32\x17.carla_server.Transform\x12/\n\x0c\x62ounding_box\x18\x0c \x01(\x0b\x32\x19.carla_server.BoundingBox\x12,\n\x0c\x61\x63\x63\x65leration\x18\x03 \x01(\x0b\x32\x16.carla_server.Vector3D\x12\x15\n\rforward_speed\x18\x04 \x01(\x02\x12\x1a\n\x12\x63ollision_vehicles\x18\x05 \x01(\x02\x12\x1d\n\x15\x63ollision_pedestrians\x18\x06 \x01(\x02\x12\x17\n\x0f\x63ollision_other\x18\x07 \x01(\x02\x12\x1e\n\x16intersection_otherlane\x18\x08 \x01(\x02\x12\x1c\n\x14intersection_offroad\x18\t \x01(\x02\x12\x30\n\x11\x61utopilot_control\x18\n \x01(\x0b\x32\x15.carla_server.ControlB\x03\xf8\x01\x01\x62\x06proto3')
)
@ -45,8 +45,8 @@ _SENSOR_TYPE = _descriptor.EnumDescriptor(
],
containing_type=None,
options=None,
serialized_start=364,
serialized_end=415,
serialized_start=463,
serialized_end=514,
)
_sym_db.RegisterEnumDescriptor(_SENSOR_TYPE)
@ -71,8 +71,8 @@ _TRAFFICLIGHT_STATE = _descriptor.EnumDescriptor(
],
containing_type=None,
options=None,
serialized_start=774,
serialized_end=813,
serialized_start=884,
serialized_end=923,
)
_sym_db.RegisterEnumDescriptor(_TRAFFICLIGHT_STATE)
@ -212,6 +212,44 @@ _TRANSFORM = _descriptor.Descriptor(
)
_BOUNDINGBOX = _descriptor.Descriptor(
name='BoundingBox',
full_name='carla_server.BoundingBox',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='transform', full_name='carla_server.BoundingBox.transform', index=0,
number=1, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='extent', full_name='carla_server.BoundingBox.extent', index=1,
number=2, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=286,
serialized_end=383,
)
_SENSOR = _descriptor.Descriptor(
name='Sensor',
full_name='carla_server.Sensor',
@ -253,8 +291,8 @@ _SENSOR = _descriptor.Descriptor(
extension_ranges=[],
oneofs=[
],
serialized_start=287,
serialized_end=415,
serialized_start=386,
serialized_end=514,
)
@ -273,8 +311,8 @@ _VEHICLE = _descriptor.Descriptor(
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='box_extent', full_name='carla_server.Vehicle.box_extent', index=1,
number=2, type=11, cpp_type=10, label=1,
name='bounding_box', full_name='carla_server.Vehicle.bounding_box', index=1,
number=4, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
@ -298,8 +336,8 @@ _VEHICLE = _descriptor.Descriptor(
extension_ranges=[],
oneofs=[
],
serialized_start=417,
serialized_end=537,
serialized_start=516,
serialized_end=641,
)
@ -318,8 +356,8 @@ _PEDESTRIAN = _descriptor.Descriptor(
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='box_extent', full_name='carla_server.Pedestrian.box_extent', index=1,
number=2, type=11, cpp_type=10, label=1,
name='bounding_box', full_name='carla_server.Pedestrian.bounding_box', index=1,
number=4, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
@ -343,8 +381,8 @@ _PEDESTRIAN = _descriptor.Descriptor(
extension_ranges=[],
oneofs=[
],
serialized_start=539,
serialized_end=662,
serialized_start=644,
serialized_end=772,
)
@ -382,8 +420,8 @@ _TRAFFICLIGHT = _descriptor.Descriptor(
extension_ranges=[],
oneofs=[
],
serialized_start=665,
serialized_end=813,
serialized_start=775,
serialized_end=923,
)
@ -420,8 +458,8 @@ _SPEEDLIMITSIGN = _descriptor.Descriptor(
extension_ranges=[],
oneofs=[
],
serialized_start=815,
serialized_end=896,
serialized_start=925,
serialized_end=1006,
)
@ -482,8 +520,8 @@ _AGENT = _descriptor.Descriptor(
name='agent', full_name='carla_server.Agent.agent',
index=0, containing_type=None, fields=[]),
],
serialized_start=899,
serialized_end=1128,
serialized_start=1009,
serialized_end=1238,
)
@ -513,8 +551,8 @@ _REQUESTNEWEPISODE = _descriptor.Descriptor(
extension_ranges=[],
oneofs=[
],
serialized_start=1130,
serialized_end=1167,
serialized_start=1240,
serialized_end=1277,
)
@ -551,8 +589,8 @@ _SCENEDESCRIPTION = _descriptor.Descriptor(
extension_ranges=[],
oneofs=[
],
serialized_start=1169,
serialized_end=1279,
serialized_start=1279,
serialized_end=1389,
)
@ -582,8 +620,8 @@ _EPISODESTART = _descriptor.Descriptor(
extension_ranges=[],
oneofs=[
],
serialized_start=1281,
serialized_end=1328,
serialized_start=1391,
serialized_end=1438,
)
@ -613,8 +651,8 @@ _EPISODEREADY = _descriptor.Descriptor(
extension_ranges=[],
oneofs=[
],
serialized_start=1330,
serialized_end=1359,
serialized_start=1440,
serialized_end=1469,
)
@ -672,8 +710,8 @@ _CONTROL = _descriptor.Descriptor(
extension_ranges=[],
oneofs=[
],
serialized_start=1361,
serialized_end=1455,
serialized_start=1471,
serialized_end=1565,
)
@ -692,8 +730,8 @@ _MEASUREMENTS_PLAYERMEASUREMENTS = _descriptor.Descriptor(
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='box_extent', full_name='carla_server.Measurements.PlayerMeasurements.box_extent', index=1,
number=11, type=11, cpp_type=10, label=1,
name='bounding_box', full_name='carla_server.Measurements.PlayerMeasurements.bounding_box', index=1,
number=12, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
@ -766,8 +804,8 @@ _MEASUREMENTS_PLAYERMEASUREMENTS = _descriptor.Descriptor(
extension_ranges=[],
oneofs=[
],
serialized_start=1673,
serialized_end=2046,
serialized_start=1783,
serialized_end=2161,
)
_MEASUREMENTS = _descriptor.Descriptor(
@ -824,19 +862,21 @@ _MEASUREMENTS = _descriptor.Descriptor(
extension_ranges=[],
oneofs=[
],
serialized_start=1458,
serialized_end=2046,
serialized_start=1568,
serialized_end=2161,
)
_TRANSFORM.fields_by_name['location'].message_type = _VECTOR3D
_TRANSFORM.fields_by_name['orientation'].message_type = _VECTOR3D
_TRANSFORM.fields_by_name['rotation'].message_type = _ROTATION3D
_BOUNDINGBOX.fields_by_name['transform'].message_type = _TRANSFORM
_BOUNDINGBOX.fields_by_name['extent'].message_type = _VECTOR3D
_SENSOR.fields_by_name['type'].enum_type = _SENSOR_TYPE
_SENSOR_TYPE.containing_type = _SENSOR
_VEHICLE.fields_by_name['transform'].message_type = _TRANSFORM
_VEHICLE.fields_by_name['box_extent'].message_type = _VECTOR3D
_VEHICLE.fields_by_name['bounding_box'].message_type = _BOUNDINGBOX
_PEDESTRIAN.fields_by_name['transform'].message_type = _TRANSFORM
_PEDESTRIAN.fields_by_name['box_extent'].message_type = _VECTOR3D
_PEDESTRIAN.fields_by_name['bounding_box'].message_type = _BOUNDINGBOX
_TRAFFICLIGHT.fields_by_name['transform'].message_type = _TRANSFORM
_TRAFFICLIGHT.fields_by_name['state'].enum_type = _TRAFFICLIGHT_STATE
_TRAFFICLIGHT_STATE.containing_type = _TRAFFICLIGHT
@ -860,7 +900,7 @@ _AGENT.fields_by_name['speed_limit_sign'].containing_oneof = _AGENT.oneofs_by_na
_SCENEDESCRIPTION.fields_by_name['player_start_spots'].message_type = _TRANSFORM
_SCENEDESCRIPTION.fields_by_name['sensors'].message_type = _SENSOR
_MEASUREMENTS_PLAYERMEASUREMENTS.fields_by_name['transform'].message_type = _TRANSFORM
_MEASUREMENTS_PLAYERMEASUREMENTS.fields_by_name['box_extent'].message_type = _VECTOR3D
_MEASUREMENTS_PLAYERMEASUREMENTS.fields_by_name['bounding_box'].message_type = _BOUNDINGBOX
_MEASUREMENTS_PLAYERMEASUREMENTS.fields_by_name['acceleration'].message_type = _VECTOR3D
_MEASUREMENTS_PLAYERMEASUREMENTS.fields_by_name['autopilot_control'].message_type = _CONTROL
_MEASUREMENTS_PLAYERMEASUREMENTS.containing_type = _MEASUREMENTS
@ -869,6 +909,7 @@ _MEASUREMENTS.fields_by_name['non_player_agents'].message_type = _AGENT
DESCRIPTOR.message_types_by_name['Vector3D'] = _VECTOR3D
DESCRIPTOR.message_types_by_name['Rotation3D'] = _ROTATION3D
DESCRIPTOR.message_types_by_name['Transform'] = _TRANSFORM
DESCRIPTOR.message_types_by_name['BoundingBox'] = _BOUNDINGBOX
DESCRIPTOR.message_types_by_name['Sensor'] = _SENSOR
DESCRIPTOR.message_types_by_name['Vehicle'] = _VEHICLE
DESCRIPTOR.message_types_by_name['Pedestrian'] = _PEDESTRIAN
@ -904,6 +945,13 @@ Transform = _reflection.GeneratedProtocolMessageType('Transform', (_message.Mess
))
_sym_db.RegisterMessage(Transform)
BoundingBox = _reflection.GeneratedProtocolMessageType('BoundingBox', (_message.Message,), dict(
DESCRIPTOR = _BOUNDINGBOX,
__module__ = 'carla_server_pb2'
# @@protoc_insertion_point(class_scope:carla_server.BoundingBox)
))
_sym_db.RegisterMessage(BoundingBox)
Sensor = _reflection.GeneratedProtocolMessageType('Sensor', (_message.Message,), dict(
DESCRIPTOR = _SENSOR,
__module__ = 'carla_server_pb2'

View File

@ -9,11 +9,9 @@
#include "Carla.h"
#include "VehicleAgentComponent.h"
#include "Vehicle/CarlaWheeledVehicle.h"
static bool IsPlayer(const ACarlaWheeledVehicle &Vehicle)
static bool IsPlayer(const ACarlaWheeledVehicle &InVehicle)
{
auto *Controller = Cast<AWheeledVehicleAIController>(Vehicle.GetController());
auto *Controller = Cast<AWheeledVehicleAIController>(InVehicle.GetController());
return (Controller != nullptr) && Controller->IsPossessingThePlayer();
}
@ -22,11 +20,11 @@ UVehicleAgentComponent::UVehicleAgentComponent(const FObjectInitializer &ObjectI
void UVehicleAgentComponent::BeginPlay()
{
WheeledVehicle = Cast<ACarlaWheeledVehicle>(GetOwner());
checkf(WheeledVehicle != nullptr, TEXT("UVehicleAgentComponent can only be attached to ACarlaWheeledVehicle"));
Vehicle = Cast<ACarlaWheeledVehicle>(GetOwner());
checkf(Vehicle != nullptr, TEXT("UVehicleAgentComponent can only be attached to ACarlaWheeledVehicle"));
// We only want to register non-player agents.
bRegisterAgentComponent = !IsPlayer(*WheeledVehicle);
bRegisterAgentComponent = !IsPlayer(*Vehicle);
Super::BeginPlay();
}

View File

@ -8,9 +8,9 @@
#include "Agent/AgentComponent.h"
#include "VehicleAgentComponent.generated.h"
#include "Vehicle/CarlaWheeledVehicle.h"
class ACarlaWheeledVehicle;
#include "VehicleAgentComponent.generated.h"
UCLASS(ClassGroup=(Custom), meta=(BlueprintSpawnableComponent))
class CARLA_API UVehicleAgentComponent : public UAgentComponent
@ -21,10 +21,25 @@ public:
UVehicleAgentComponent(const FObjectInitializer &ObjectInitializer);
ACarlaWheeledVehicle &GetVehicle() const
/// Return forward speed in cm/s.
float GetForwardSpeed() const
{
check(WheeledVehicle != nullptr);
return *WheeledVehicle;
return Vehicle->GetVehicleForwardSpeed();
}
FTransform GetTransform() const
{
return Vehicle->GetVehicleTransform();
}
FTransform GetBoundingBoxTransform() const
{
return Vehicle->GetVehicleBoundingBoxTransform();
}
FVector GetBoundingBoxExtent() const
{
return Vehicle->GetVehicleBoundingBoxExtent();
}
protected:
@ -38,5 +53,6 @@ protected:
private:
ACarlaWheeledVehicle *WheeledVehicle = nullptr;
UPROPERTY()
ACarlaWheeledVehicle *Vehicle = nullptr;
};

View File

@ -9,17 +9,9 @@
#include "Carla.h"
#include "WalkerAgentComponent.h"
#include "GameFramework/Character.h"
UWalkerAgentComponent::UWalkerAgentComponent(const FObjectInitializer &ObjectInitializer)
: Super(ObjectInitializer) {}
float UWalkerAgentComponent::GetForwardSpeed() const
{
/// @todo Is it necessary to compute this speed every tick?
return FVector::DotProduct(Walker->GetVelocity(), Walker->GetActorRotation().Vector());
}
void UWalkerAgentComponent::BeginPlay()
{
Walker = Cast<ACharacter>(GetOwner());

View File

@ -8,9 +8,9 @@
#include "Agent/AgentComponent.h"
#include "WalkerAgentComponent.generated.h"
#include "GameFramework/Character.h"
class ACharacter;
#include "WalkerAgentComponent.generated.h"
/// This component can be added to any ACharacter to be added as agent.
/// See UAgentComponent.
@ -24,7 +24,20 @@ public:
UWalkerAgentComponent(const FObjectInitializer &ObjectInitializer);
/// Return forward speed in cm/s.
float GetForwardSpeed() const;
float GetForwardSpeed() const
{
return FVector::DotProduct(Walker->GetVelocity(), Walker->GetActorRotation().Vector());
}
FTransform GetTransform() const
{
return Walker->GetActorTransform();
}
FTransform GetBoundingBoxTransform() const
{
return FTransform();
}
FVector GetBoundingBoxExtent() const
{

View File

@ -88,9 +88,15 @@ public:
}
UFUNCTION(BlueprintCallable)
FVector GetBoundsExtent() const
FTransform GetBoundingBoxTransform() const
{
return BoundsExtent;
return BoundingBoxTransform;
}
UFUNCTION(BlueprintCallable)
FVector GetBoundingBoxExtent() const
{
return BoundingBoxExtent;
}
UFUNCTION(BlueprintCallable)
@ -235,7 +241,10 @@ private:
FTransform Transform;
UPROPERTY(VisibleAnywhere)
FVector BoundsExtent;
FTransform BoundingBoxTransform;
UPROPERTY(VisibleAnywhere)
FVector BoundingBoxExtent;
UPROPERTY(VisibleAnywhere)
float ForwardSpeed = 0.0f;

View File

@ -111,7 +111,8 @@ void FCarlaEncoder::Encode(
Data.game_timestamp = PlayerState.GetGameTimeStamp();
auto &Player = Data.player_measurements;
::Encode(PlayerState.GetTransform(), Player.transform);
::Encode(PlayerState.GetBoundsExtent() * TO_METERS, Player.box_extent);
::Encode(PlayerState.GetBoundingBoxTransform(), Player.bounding_box.transform);
::Encode(PlayerState.GetBoundingBoxExtent() * TO_METERS, Player.bounding_box.extent);
::Encode(PlayerState.GetAcceleration() * TO_METERS, Player.acceleration);
Player.forward_speed = PlayerState.GetForwardSpeed() * TO_METERS;
Player.collision_vehicles = PlayerState.GetCollisionIntensityCars() * TO_METERS;
@ -205,17 +206,18 @@ void FCarlaEncoder::Visit(const UTrafficSignAgentComponent &Agent)
void FCarlaEncoder::Visit(const UVehicleAgentComponent &Agent)
{
auto &Vehicle = Agent.GetVehicle();
::Encode(Vehicle.GetVehicleTransform(), Data.transform);
::Encode(Agent.GetTransform(), Data.transform);
Data.type = CARLA_SERVER_AGENT_VEHICLE;
Data.forward_speed = Vehicle.GetVehicleForwardSpeed() * TO_METERS;
::Encode(Vehicle.GetVehicleBoundsExtent() * TO_METERS, Data.box_extent);
Data.forward_speed = Agent.GetForwardSpeed() * TO_METERS;
::Encode(Agent.GetBoundingBoxTransform(), Data.bounding_box.transform);
::Encode(Agent.GetBoundingBoxExtent() * TO_METERS, Data.bounding_box.extent);
}
void FCarlaEncoder::Visit(const UWalkerAgentComponent &Agent)
{
::Encode(Agent.GetComponentTransform(), Data.transform);
::Encode(Agent.GetTransform(), Data.transform);
Data.type = CARLA_SERVER_AGENT_PEDESTRIAN;
Data.forward_speed = Agent.GetForwardSpeed() * TO_METERS;
::Encode(Agent.GetBoundingBoxExtent() * TO_METERS, Data.box_extent);
::Encode(Agent.GetBoundingBoxTransform(), Data.bounding_box.transform);
::Encode(Agent.GetBoundingBoxExtent() * TO_METERS, Data.bounding_box.extent);
}

View File

@ -42,8 +42,9 @@ void ACarlaVehicleController::Possess(APawn *aPawn)
// Get custom player state.
CarlaPlayerState = Cast<ACarlaPlayerState>(PlayerState);
check(CarlaPlayerState != nullptr);
// We can set bounds extent already as it's not going to change.
CarlaPlayerState->BoundsExtent = GetPossessedVehicle()->GetVehicleBoundsExtent();
// We can set the bounding box already as it's not going to change.
CarlaPlayerState->BoundingBoxTransform = GetPossessedVehicle()->GetVehicleBoundingBoxTransform();
CarlaPlayerState->BoundingBoxExtent = GetPossessedVehicle()->GetVehicleBoundingBoxExtent();
// Set HUD input.
CarlaHUD = Cast<ACarlaHUD>(GetHUD());
if (CarlaHUD != nullptr) {
@ -114,9 +115,11 @@ void ACarlaVehicleController::IntersectPlayerWithRoadMap()
check(IsPossessingAVehicle());
auto Vehicle = GetPossessedVehicle();
constexpr float ChecksPerCentimeter = 0.1f;
const auto *BoundingBox = Vehicle->GetVehicleBoundingBox();
check(BoundingBox != nullptr);
auto Result = RoadMap->Intersect(
Vehicle->GetVehicleTransform(),
Vehicle->GetVehicleBoundsExtent(),
BoundingBox->GetComponentTransform(),
Vehicle->GetVehicleBoundingBoxExtent(), // Get scaled bounding box extent.
ChecksPerCentimeter);
CarlaPlayerState->OffRoadIntersectionFactor = Result.OffRoad;

View File

@ -8,7 +8,6 @@
#include "CarlaWheeledVehicle.h"
#include "Agent/VehicleAgentComponent.h"
#include "Vehicle/VehicleControl.h"
#include "Components/BoxComponent.h"
#include "Engine/CollisionProfile.h"
@ -37,13 +36,6 @@ ACarlaWheeledVehicle::~ACarlaWheeledVehicle() {}
// -- Get functions ------------------------------------------------------------
// =============================================================================
FTransform ACarlaWheeledVehicle::GetVehicleTransform() const
{
FTransform Transform = VehicleBounds->GetComponentTransform();
Transform.SetScale3D(GetActorTransform().GetScale3D());
return Transform;
}
float ACarlaWheeledVehicle::GetVehicleForwardSpeed() const
{
return GetVehicleMovementComponent()->GetForwardSpeed();
@ -59,7 +51,12 @@ int32 ACarlaWheeledVehicle::GetVehicleCurrentGear() const
return GetVehicleMovementComponent()->GetCurrentGear();
}
FVector ACarlaWheeledVehicle::GetVehicleBoundsExtent() const
FTransform ACarlaWheeledVehicle::GetVehicleBoundingBoxTransform() const
{
return VehicleBounds->GetRelativeTransform();
}
FVector ACarlaWheeledVehicle::GetVehicleBoundingBoxExtent() const
{
return VehicleBounds->GetScaledBoxExtent();
}

View File

@ -9,6 +9,7 @@
#include "WheeledVehicle.h"
#include "Vehicle/CarlaWheeledVehicleState.h"
#include "Vehicle/VehicleControl.h"
#include "CoreMinimal.h"
@ -16,7 +17,6 @@
class UBoxComponent;
class UVehicleAgentComponent;
struct FVehicleControl;
/// Base class for CARLA wheeled vehicles.
UCLASS()
@ -44,7 +44,10 @@ public:
/// Transform of the vehicle. Location is shifted so it matches center of the
/// vehicle bounds rather than the actor's location.
UFUNCTION(Category = "CARLA Wheeled Vehicle", BlueprintCallable)
FTransform GetVehicleTransform() const;
FTransform GetVehicleTransform() const
{
return GetActorTransform();
}
/// Forward speed in cm/s. Might be negative if goes backwards.
UFUNCTION(Category = "CARLA Wheeled Vehicle", BlueprintCallable)
@ -58,9 +61,20 @@ public:
UFUNCTION(Category = "CARLA Wheeled Vehicle", BlueprintCallable)
int32 GetVehicleCurrentGear() const;
/// Extent of the vehicle's bounds.
/// Transform of the vehicle's bounding box relative to the vehicle.
UFUNCTION(Category = "CARLA Wheeled Vehicle", BlueprintCallable)
FVector GetVehicleBoundsExtent() const;
FTransform GetVehicleBoundingBoxTransform() const;
/// Extent of the vehicle's bounding box.
UFUNCTION(Category = "CARLA Wheeled Vehicle", BlueprintCallable)
FVector GetVehicleBoundingBoxExtent() const;
/// Get vehicle's bounding box component.
UFUNCTION(Category = "CARLA Wheeled Vehicle", BlueprintCallable)
UBoxComponent *GetVehicleBoundingBox() const
{
return VehicleBounds;
}
/// Get the maximum angle at which the front wheel can steer.
UFUNCTION(Category = "CARLA Wheeled Vehicle", BlueprintCallable)

View File

@ -40,7 +40,7 @@ static bool IsThereAnObstacleAhead(
const FVector &Direction)
{
const auto ForwardVector = Vehicle.GetVehicleOrientation();
const auto VehicleBounds = Vehicle.GetVehicleBoundsExtent();
const auto VehicleBounds = Vehicle.GetVehicleBoundingBoxExtent();
const float Distance = std::max(50.0f, Speed * Speed); // why?
@ -250,7 +250,7 @@ float AWheeledVehicleAIController::GoToNextTargetLocation(FVector &Direction)
float AWheeledVehicleAIController::CalcStreeringValue(FVector &direction)
{
float steering = 0;
FVector BoxExtent = Vehicle->GetVehicleBoundsExtent();
FVector BoxExtent = Vehicle->GetVehicleBoundingBoxExtent();
FVector forward = Vehicle->GetActorForwardVector();
FVector rightSensorPosition(BoxExtent.X / 2.0f, (BoxExtent.Y / 2.0f) + 100.0f, 0.0f);

View File

@ -43,6 +43,11 @@ extern "C" {
struct carla_rotation3d rotation;
};
struct carla_bounding_box {
struct carla_transform transform;
struct carla_vector3d extent;
};
/* ======================================================================== */
/* -- agents -------------------------------------------------------------- */
/* ======================================================================== */
@ -66,7 +71,7 @@ extern "C" {
uint32_t id;
uint32_t type;
struct carla_transform transform;
struct carla_vector3d box_extent;
struct carla_bounding_box bounding_box;
float forward_speed;
};
@ -159,8 +164,8 @@ extern "C" {
struct carla_player_measurements {
/** World transform of the player. */
struct carla_transform transform;
/** Extent of the bounding box of the player. */
struct carla_vector3d box_extent;
/** Bounding box of the player. */
struct carla_bounding_box bounding_box;
/** Current acceleration of the player. */
struct carla_vector3d acceleration;
/** Forward speed in m/s. */

View File

@ -54,6 +54,12 @@ namespace server {
Set(lhs->mutable_rotation(), rhs.rotation);
}
static void Set(cs::BoundingBox *lhs, const carla_bounding_box &rhs) {
DEBUG_ASSERT(lhs != nullptr);
Set(lhs->mutable_transform(), rhs.transform);
Set(lhs->mutable_extent(), rhs.extent);
}
static void Set(cs::Sensor *lhs, const carla_sensor_definition &rhs) {
DEBUG_ASSERT(lhs != nullptr);
lhs->set_id(rhs.id);
@ -79,14 +85,14 @@ namespace server {
static void SetVehicle(cs::Vehicle *lhs, const carla_agent &rhs) {
DEBUG_ASSERT(lhs != nullptr);
Set(lhs->mutable_transform(), rhs.transform);
Set(lhs->mutable_box_extent(), rhs.box_extent);
Set(lhs->mutable_bounding_box(), rhs.bounding_box);
lhs->set_forward_speed(rhs.forward_speed);
}
static void SetPedestrian(cs::Pedestrian *lhs, const carla_agent &rhs) {
DEBUG_ASSERT(lhs != nullptr);
Set(lhs->mutable_transform(), rhs.transform);
Set(lhs->mutable_box_extent(), rhs.box_extent);
Set(lhs->mutable_bounding_box(), rhs.bounding_box);
lhs->set_forward_speed(rhs.forward_speed);
}
@ -156,7 +162,7 @@ namespace server {
auto *player = message->mutable_player_measurements();
DEBUG_ASSERT(player != nullptr);
Set(player->mutable_transform(), values.player_measurements.transform);
Set(player->mutable_box_extent(), values.player_measurements.box_extent);
Set(player->mutable_bounding_box(), values.player_measurements.bounding_box);
Set(player->mutable_acceleration(), values.player_measurements.acceleration);
player->set_forward_speed(values.player_measurements.forward_speed);
player->set_collision_vehicles(values.player_measurements.collision_vehicles);

View File

@ -106,7 +106,7 @@ TEST(CarlaServerAPI, SimBlocking) {
agents_data[i].id = i;
agents_data[i].type = CARLA_SERVER_AGENT_VEHICLE;
agents_data[i].transform = start_locations[0u];
agents_data[i].box_extent = {100.0f, 100.0f, 100.0f};
agents_data[i].bounding_box = {start_locations[0u], {100.0f, 100.0f, 100.0f}};
agents_data[i].forward_speed = 50.0f;
}

View File

@ -32,6 +32,11 @@ message Transform {
Rotation3D rotation = 3;
}
message BoundingBox {
Transform transform = 1;
Vector3D extent = 2;
}
// =============================================================================
// -- Sensors ------------------------------------------------------------------
// =============================================================================
@ -54,13 +59,13 @@ message Sensor {
message Vehicle {
Transform transform = 1;
Vector3D box_extent = 2;
BoundingBox bounding_box = 4;
float forward_speed = 3;
}
message Pedestrian {
Transform transform = 1;
Vector3D box_extent = 2;
BoundingBox bounding_box = 4;
float forward_speed = 3;
}
@ -126,7 +131,7 @@ message Measurements {
message PlayerMeasurements {
Transform transform = 1;
Vector3D box_extent = 11;
BoundingBox bounding_box = 12;
Vector3D acceleration = 3;
float forward_speed = 4;