Added batch command SetVehicleLightState
This commit is contained in:
parent
1e98335808
commit
923960751f
|
@ -219,7 +219,7 @@ namespace detail {
|
|||
void Client::SetLightStateToVehicle(
|
||||
rpc::ActorId vehicle,
|
||||
const rpc::VehicleLightState &light_state) {
|
||||
return _pimpl->AsyncCall("apply_vehicle_light_state", vehicle, light_state);
|
||||
return _pimpl->AsyncCall("set_vehicle_light_state", vehicle, light_state);
|
||||
}
|
||||
|
||||
rpc::Actor Client::SpawnActor(
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
#include "carla/rpc/ActorDescription.h"
|
||||
#include "carla/rpc/ActorId.h"
|
||||
#include "carla/rpc/VehicleControl.h"
|
||||
#include "carla/rpc/VehicleLightState.h"
|
||||
#include "carla/rpc/WalkerControl.h"
|
||||
|
||||
#include <boost/variant.hpp>
|
||||
|
@ -152,8 +153,6 @@ namespace rpc {
|
|||
};
|
||||
|
||||
struct SetAutopilot : CommandBase<SetAutopilot> {
|
||||
using TM = traffic_manager::TrafficManager;
|
||||
|
||||
SetAutopilot() = default;
|
||||
SetAutopilot(
|
||||
ActorId id,
|
||||
|
@ -168,6 +167,18 @@ namespace rpc {
|
|||
MSGPACK_DEFINE_ARRAY(actor, enabled);
|
||||
};
|
||||
|
||||
struct SetVehicleLightState : CommandBase<SetVehicleLightState> {
|
||||
SetVehicleLightState() = default;
|
||||
SetVehicleLightState(
|
||||
ActorId id,
|
||||
VehicleLightState::flag_type value)
|
||||
: actor(id),
|
||||
light_state(value) {}
|
||||
ActorId actor;
|
||||
VehicleLightState::flag_type light_state;
|
||||
MSGPACK_DEFINE_ARRAY(actor, light_state);
|
||||
};
|
||||
|
||||
using CommandType = boost::variant<
|
||||
SpawnActor,
|
||||
DestroyActor,
|
||||
|
@ -180,7 +191,8 @@ namespace rpc {
|
|||
ApplyImpulse,
|
||||
ApplyAngularImpulse,
|
||||
SetSimulatePhysics,
|
||||
SetAutopilot>;
|
||||
SetAutopilot,
|
||||
SetVehicleLightState>;
|
||||
|
||||
CommandType command;
|
||||
|
||||
|
|
|
@ -166,6 +166,13 @@ void export_commands() {
|
|||
.def_readwrite("enabled", &cr::Command::SetAutopilot::enabled)
|
||||
;
|
||||
|
||||
class_<cr::Command::SetVehicleLightState>("SetVehicleLightState")
|
||||
.def("__init__", &command_impl::CustomInit<ActorPtr, bool>, (arg("actor"), arg("light_state")))
|
||||
.def(init<cr::ActorId, cr::VehicleLightState::flag_type>((arg("actor_id"), arg("light_state"))))
|
||||
.def_readwrite("actor_id", &cr::Command::SetVehicleLightState::actor)
|
||||
.def_readwrite("light_state", &cr::Command::SetVehicleLightState::light_state)
|
||||
;
|
||||
|
||||
implicitly_convertible<cr::Command::SpawnActor, cr::Command>();
|
||||
implicitly_convertible<cr::Command::DestroyActor, cr::Command>();
|
||||
implicitly_convertible<cr::Command::ApplyVehicleControl, cr::Command>();
|
||||
|
@ -178,4 +185,5 @@ void export_commands() {
|
|||
implicitly_convertible<cr::Command::ApplyAngularImpulse, cr::Command>();
|
||||
implicitly_convertible<cr::Command::SetSimulatePhysics, cr::Command>();
|
||||
implicitly_convertible<cr::Command::SetAutopilot, cr::Command>();
|
||||
implicitly_convertible<cr::Command::SetVehicleLightState, cr::Command>();
|
||||
}
|
||||
|
|
|
@ -420,11 +420,11 @@ class KeyboardControl(object):
|
|||
if self._control.brake:
|
||||
current_lights |= carla.VehicleLightState.Brake
|
||||
else: # Remove the Brake flag
|
||||
current_lights &= carla.VehicleLightState.All ^ carla.VehicleLightState.Brake
|
||||
current_lights &= ~carla.VehicleLightState.Brake
|
||||
if self._control.reverse:
|
||||
current_lights |= carla.VehicleLightState.Reverse
|
||||
else: # Remove the Reverse flag
|
||||
current_lights &= carla.VehicleLightState.All ^ carla.VehicleLightState.Reverse
|
||||
current_lights &= ~carla.VehicleLightState.Reverse
|
||||
if current_lights != self._lights: # Change the light state only if necessary
|
||||
self._lights = current_lights
|
||||
world.player.set_light_state(carla.VehicleLightState(self._lights))
|
||||
|
|
|
@ -23,6 +23,8 @@ except IndexError:
|
|||
|
||||
import carla
|
||||
|
||||
from carla import VehicleLightState as vls
|
||||
|
||||
import argparse
|
||||
import logging
|
||||
import random
|
||||
|
@ -82,6 +84,11 @@ def main():
|
|||
'--hybrid',
|
||||
action='store_true',
|
||||
help='Enanble')
|
||||
argparser.add_argument(
|
||||
'--car-lights-on',
|
||||
action='store_true',
|
||||
default=False,
|
||||
help='Enanble car lights')
|
||||
args = argparser.parse_args()
|
||||
|
||||
logging.basicConfig(format='%(levelname)s: %(message)s', level=logging.INFO)
|
||||
|
@ -135,6 +142,7 @@ def main():
|
|||
# @todo cannot import these directly.
|
||||
SpawnActor = carla.command.SpawnActor
|
||||
SetAutopilot = carla.command.SetAutopilot
|
||||
SetVehicleLightState = carla.command.SetVehicleLightState
|
||||
FutureActor = carla.command.FutureActor
|
||||
|
||||
# --------------
|
||||
|
@ -152,7 +160,16 @@ def main():
|
|||
driver_id = random.choice(blueprint.get_attribute('driver_id').recommended_values)
|
||||
blueprint.set_attribute('driver_id', driver_id)
|
||||
blueprint.set_attribute('role_name', 'autopilot')
|
||||
batch.append(SpawnActor(blueprint, transform).then(SetAutopilot(FutureActor, True, traffic_manager.get_port())))
|
||||
|
||||
# prepare the light state of the cars to spawn
|
||||
light_state = vls.NONE
|
||||
if args.car_lights_on:
|
||||
light_state = vls.Position | vls.LowBeam | vls.LowBeam
|
||||
|
||||
# spawn the cars and set their autopilot and light state all together
|
||||
batch.append(SpawnActor(blueprint, transform)
|
||||
.then(SetAutopilot(FutureActor, True, traffic_manager.get_port()))
|
||||
.then(SetVehicleLightState(FutureActor, light_state)))
|
||||
|
||||
for response in client.apply_batch_sync(batch, synchronous_master):
|
||||
if response.error:
|
||||
|
|
|
@ -665,7 +665,7 @@ void FCarlaServer::FPimpl::BindActions()
|
|||
return R<void>::Success();
|
||||
};
|
||||
|
||||
BIND_SYNC(apply_vehicle_light_state) << [this](
|
||||
BIND_SYNC(set_vehicle_light_state) << [this](
|
||||
cr::ActorId ActorId,
|
||||
cr::VehicleLightState LightState) -> R<void>
|
||||
{
|
||||
|
@ -1057,6 +1057,7 @@ void FCarlaServer::FPimpl::BindActions()
|
|||
[=](auto, const C::SetSimulatePhysics &c) { MAKE_RESULT(set_actor_simulate_physics(c.actor, c.enabled)); },
|
||||
// TODO: SetAutopilot should be removed. This is the old way to control the vehicles
|
||||
[=](auto, const C::SetAutopilot &c) { MAKE_RESULT(set_actor_autopilot(c.actor, c.enabled)); },
|
||||
[=](auto, const C::SetVehicleLightState &c) { MAKE_RESULT(set_vehicle_light_state(c.actor, c.light_state)); },
|
||||
[=](auto, const C::ApplyWalkerState &c) { MAKE_RESULT(set_walker_state(c.actor, c.transform, c.speed)); });
|
||||
|
||||
#undef MAKE_RESULT
|
||||
|
|
Loading…
Reference in New Issue