Add autopilot mode to protocol
This commit is contained in:
parent
41c07f7300
commit
cd1db62a97
|
@ -123,8 +123,7 @@ void CarlaGameController::Tick(float DeltaSeconds)
|
|||
// Read control, block if the settings say so.
|
||||
if (Server != nullptr) {
|
||||
const bool bShouldBlock = CarlaSettings->bSynchronousMode;
|
||||
check(Player->IsPossessingAVehicle());
|
||||
if (Errc::Error == Server->ReadControl(*Player->GetPossessedVehicle(), bShouldBlock)) {
|
||||
if (Errc::Error == Server->ReadControl(*Player, bShouldBlock)) {
|
||||
Server = nullptr;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
#include "GameFramework/PlayerStart.h"
|
||||
|
||||
#include "CarlaPlayerState.h"
|
||||
#include "CarlaVehicleController.h"
|
||||
#include "CarlaWheeledVehicle.h"
|
||||
#include "SceneCaptureCamera.h"
|
||||
#include "Settings/CarlaSettings.h"
|
||||
|
@ -62,17 +63,8 @@ static void Set(carla_image &cImage, const FCapturedImage &uImage)
|
|||
|
||||
#ifdef CARLA_SERVER_EXTRA_LOG
|
||||
{
|
||||
auto GetImageType = [](carla::ImageType Type) {
|
||||
switch (Type) {
|
||||
case carla::IMAGE: return TEXT("IMAGE");
|
||||
case carla::SCENE_FINAL: return TEXT("SCENE_FINAL");
|
||||
case carla::DEPTH: return TEXT("DEPTH");
|
||||
case carla::SEMANTIC_SEG: return TEXT("SEMANTIC_SEG");
|
||||
default: return TEXT("ERROR!");
|
||||
}
|
||||
};
|
||||
const auto Size = uImage.BitMap.Num();
|
||||
UE_LOG(LogCarlaServer, Log, TEXT("Sending image %dx%d (%d) %s"), cImage.width, cImage.height, Size, GetImageType(cImage.type()));
|
||||
UE_LOG(LogCarlaServer, Log, TEXT("Sending image %dx%d (%d) type %d"), cImage.width, cImage.height, Size, cImage.type);
|
||||
}
|
||||
} else {
|
||||
UE_LOG(LogCarlaServer, Warning, TEXT("Sending empty image"));
|
||||
|
@ -154,27 +146,34 @@ CarlaServer::ErrorCode CarlaServer::SendEpisodeReady(const bool bBlocking)
|
|||
return ParseErrorCode(carla_write_episode_ready(Server, values, GetTimeOut(TimeOut, bBlocking)));
|
||||
}
|
||||
|
||||
CarlaServer::ErrorCode CarlaServer::ReadControl(ACarlaWheeledVehicle &Player, const bool bBlocking)
|
||||
CarlaServer::ErrorCode CarlaServer::ReadControl(ACarlaVehicleController &Player, const bool bBlocking)
|
||||
{
|
||||
carla_control values;
|
||||
auto ec = ParseErrorCode(carla_read_control(Server, values, GetTimeOut(TimeOut, bBlocking)));
|
||||
if (Success == ec) {
|
||||
Player.SetSteeringInput(values.steer);
|
||||
Player.SetThrottleInput(values.throttle);
|
||||
Player.SetBrakeInput(values.brake);
|
||||
Player.SetHandbrakeInput(values.hand_brake);
|
||||
Player.SetReverse(values.reverse);
|
||||
Player.SetAutopilot(values.autopilot);
|
||||
if (!values.autopilot) {
|
||||
check(Player.IsPossessingAVehicle());
|
||||
auto Vehicle = Player.GetPossessedVehicle();
|
||||
Vehicle->SetSteeringInput(values.steer);
|
||||
Vehicle->SetThrottleInput(values.throttle);
|
||||
Vehicle->SetBrakeInput(values.brake);
|
||||
Vehicle->SetHandbrakeInput(values.hand_brake);
|
||||
Vehicle->SetReverse(values.reverse);
|
||||
#ifdef CARLA_SERVER_EXTRA_LOG
|
||||
UE_LOG(
|
||||
LogCarlaServer,
|
||||
Log,
|
||||
TEXT("Read control: { Steer = %f, Throttle = %f, Brake = %f, Handbrake = %s, Reverse = %s }"),
|
||||
values.steer,
|
||||
values.throttle,
|
||||
values.brake,
|
||||
(values.hand_brake ? TEXT("True") : TEXT("False")),
|
||||
(values.reverse ? TEXT("True") : TEXT("False")));
|
||||
UE_LOG(
|
||||
LogCarlaServer,
|
||||
Log,
|
||||
TEXT("Read control: { Steer = %f, Throttle = %f, Brake = %f, Handbrake = %s, Reverse = %s }"),
|
||||
values.steer,
|
||||
values.throttle,
|
||||
values.brake,
|
||||
(values.hand_brake ? TEXT("True") : TEXT("False")),
|
||||
(values.reverse ? TEXT("True") : TEXT("False")));
|
||||
} else {
|
||||
UE_LOG(LogCarlaServer, Log, TEXT("Read control: { Autopilot = On }"));
|
||||
#endif // CARLA_SERVER_EXTRA_LOG
|
||||
}
|
||||
} else if ((!bBlocking) && (TryAgain == ec)) {
|
||||
UE_LOG(LogCarlaServer, Warning, TEXT("No control received from the client this frame!"));
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
#pragma once
|
||||
|
||||
class ACarlaGameState;
|
||||
class ACarlaWheeledVehicle;
|
||||
class ACarlaVehicleController;
|
||||
class APlayerStart;
|
||||
class UCarlaSettings;
|
||||
|
||||
|
@ -36,7 +36,7 @@ public:
|
|||
|
||||
ErrorCode SendEpisodeReady(bool bBlocking);
|
||||
|
||||
ErrorCode ReadControl(ACarlaWheeledVehicle &Player, bool bBlocking);
|
||||
ErrorCode ReadControl(ACarlaVehicleController &Player, bool bBlocking);
|
||||
|
||||
ErrorCode SendMeasurements(
|
||||
const ACarlaGameState &GameState,
|
||||
|
|
|
@ -99,6 +99,7 @@ extern "C" {
|
|||
float brake;
|
||||
bool hand_brake;
|
||||
bool reverse;
|
||||
bool autopilot;
|
||||
};
|
||||
|
||||
/* ======================================================================== */
|
||||
|
|
|
@ -134,6 +134,7 @@ namespace server {
|
|||
values.brake = message->brake();
|
||||
values.hand_brake = message->hand_brake();
|
||||
values.reverse = message->reverse();
|
||||
values.autopilot = message->autopilot();
|
||||
return true;
|
||||
} else {
|
||||
log_error("invalid protobuf message: control");
|
||||
|
|
|
@ -66,6 +66,7 @@ message Control {
|
|||
float brake = 3;
|
||||
bool hand_brake = 4;
|
||||
bool reverse = 5;
|
||||
bool autopilot = 6;
|
||||
}
|
||||
|
||||
message Measurements {
|
||||
|
|
|
@ -115,6 +115,7 @@ class CarlaClient(object):
|
|||
pb_message.brake = kwargs.get('brake', 0.0)
|
||||
pb_message.hand_brake = kwargs.get('hand_brake', False)
|
||||
pb_message.reverse = kwargs.get('reverse', False)
|
||||
pb_message.autopilot = kwargs.get('autopilot', False)
|
||||
self._control_client.write(pb_message.SerializeToString())
|
||||
|
||||
|
||||
|
@ -175,8 +176,8 @@ def test_carla_client():
|
|||
data = client.read_scene_description()
|
||||
number_of_start_spots = len(data.player_start_spots)
|
||||
logging.info('received %d player start locations', number_of_start_spots)
|
||||
for spot in data.player_start_spots:
|
||||
logging.info(spot)
|
||||
# for spot in data.player_start_spots:
|
||||
# logging.info(spot)
|
||||
|
||||
logging.info('sending episode start')
|
||||
client.write_episode_start(random.randint(0, max(0, number_of_start_spots - 1)))
|
||||
|
@ -191,6 +192,8 @@ def test_carla_client():
|
|||
logging.info('connecting secondary clients')
|
||||
client.connect_secondary_clients()
|
||||
|
||||
autopilot = random.choice([True, False])
|
||||
|
||||
for x in xrange(0, 1000):
|
||||
logging.info('waiting for measurements')
|
||||
data = client.read_measurements()
|
||||
|
@ -207,12 +210,15 @@ def test_carla_client():
|
|||
data = client.read_images()
|
||||
logging.info('received %d bytes of images', len(data) if data is not None else 0)
|
||||
|
||||
# if (x+1) % 10 == 0:
|
||||
# if (x+1) % 100 == 0:
|
||||
# logging.info('Taking a nap...')
|
||||
# time.sleep(2)
|
||||
|
||||
logging.info('sending control')
|
||||
client.write_control(steer=random.uniform(-1.0, 1.0), throttle=0.5, reverse=False)
|
||||
if autopilot:
|
||||
client.write_control(autopilot=True)
|
||||
else:
|
||||
client.write_control(steer=random.uniform(-1.0, 1.0), throttle=0.3, reverse=False)
|
||||
|
||||
if os.path.isfile(args.ini_file):
|
||||
logging.info('sending file %s', args.ini_file)
|
||||
|
|
Loading…
Reference in New Issue