ApplySettings now check the episode settings
This method now check that the episode settings have effect in the server as expected.
This commit is contained in:
parent
dde86b42bb
commit
78aa7cb1bc
|
@ -50,8 +50,30 @@ namespace client {
|
||||||
return _episode.Lock()->GetEpisodeSettings();
|
return _episode.Lock()->GetEpisodeSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t World::ApplySettings(const rpc::EpisodeSettings &settings) {
|
uint64_t World::ApplySettings(const rpc::EpisodeSettings &settings, time_duration timeout) {
|
||||||
return _episode.Lock()->SetEpisodeSettings(settings);
|
rpc::EpisodeSettings new_settings = settings;
|
||||||
|
uint64_t id = _episode.Lock()->SetEpisodeSettings(settings);
|
||||||
|
if (settings.synchronous_mode) {
|
||||||
|
using namespace std::literals::chrono_literals;
|
||||||
|
|
||||||
|
const auto number_of_attemps = 15u;
|
||||||
|
int tics_correct = 0;
|
||||||
|
for (auto i = 0u; i < number_of_attemps; i++) {
|
||||||
|
const auto curr_snapshot = GetSnapshot();
|
||||||
|
|
||||||
|
const double error = abs(new_settings.fixed_delta_seconds.get() - curr_snapshot.GetTimestamp().delta_seconds);
|
||||||
|
if (error < std::numeric_limits<float>::epsilon())
|
||||||
|
tics_correct++;
|
||||||
|
|
||||||
|
if (tics_correct >= 2)
|
||||||
|
return id;
|
||||||
|
|
||||||
|
Tick(timeout);
|
||||||
|
}
|
||||||
|
|
||||||
|
log_warning("World::ApplySettings: After", number_of_attemps, ", the settings were not correctly setted. Please check that everything is consistent.");
|
||||||
|
}
|
||||||
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
rpc::WeatherParameters World::GetWeather() const {
|
rpc::WeatherParameters World::GetWeather() const {
|
||||||
|
|
|
@ -81,7 +81,7 @@ namespace client {
|
||||||
rpc::EpisodeSettings GetSettings() const;
|
rpc::EpisodeSettings GetSettings() const;
|
||||||
|
|
||||||
/// @return The id of the frame when the settings were applied.
|
/// @return The id of the frame when the settings were applied.
|
||||||
uint64_t ApplySettings(const rpc::EpisodeSettings &settings);
|
uint64_t ApplySettings(const rpc::EpisodeSettings &settings, time_duration timeout);
|
||||||
|
|
||||||
/// Retrieve the weather parameters currently active in the world.
|
/// Retrieve the weather parameters currently active in the world.
|
||||||
rpc::WeatherParameters GetWeather() const;
|
rpc::WeatherParameters GetWeather() const;
|
||||||
|
|
|
@ -69,6 +69,11 @@ static auto Tick(carla::client::World &world, double seconds) {
|
||||||
return world.Tick(TimeDurationFromSeconds(seconds));
|
return world.Tick(TimeDurationFromSeconds(seconds));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static auto ApplySettings(carla::client::World &world, carla::rpc::EpisodeSettings settings, double seconds) {
|
||||||
|
carla::PythonUtil::ReleaseGIL unlock;
|
||||||
|
return world.ApplySettings(settings, TimeDurationFromSeconds(seconds));
|
||||||
|
}
|
||||||
|
|
||||||
static auto GetActorsById(carla::client::World &self, const boost::python::list &actor_ids) {
|
static auto GetActorsById(carla::client::World &self, const boost::python::list &actor_ids) {
|
||||||
std::vector<carla::ActorId> ids{
|
std::vector<carla::ActorId> ids{
|
||||||
boost::python::stl_input_iterator<carla::ActorId>(actor_ids),
|
boost::python::stl_input_iterator<carla::ActorId>(actor_ids),
|
||||||
|
@ -262,7 +267,7 @@ void export_world() {
|
||||||
.def("get_random_location_from_navigation", CALL_RETURNING_OPTIONAL_WITHOUT_GIL(cc::World, GetRandomLocationFromNavigation))
|
.def("get_random_location_from_navigation", CALL_RETURNING_OPTIONAL_WITHOUT_GIL(cc::World, GetRandomLocationFromNavigation))
|
||||||
.def("get_spectator", CONST_CALL_WITHOUT_GIL(cc::World, GetSpectator))
|
.def("get_spectator", CONST_CALL_WITHOUT_GIL(cc::World, GetSpectator))
|
||||||
.def("get_settings", CONST_CALL_WITHOUT_GIL(cc::World, GetSettings))
|
.def("get_settings", CONST_CALL_WITHOUT_GIL(cc::World, GetSettings))
|
||||||
.def("apply_settings", CALL_WITHOUT_GIL_1(cc::World, ApplySettings, cr::EpisodeSettings), arg("settings"))
|
.def("apply_settings", &ApplySettings, (arg("settings"), arg("seconds")=10.0))
|
||||||
.def("get_weather", CONST_CALL_WITHOUT_GIL(cc::World, GetWeather))
|
.def("get_weather", CONST_CALL_WITHOUT_GIL(cc::World, GetWeather))
|
||||||
.def("set_weather", &cc::World::SetWeather)
|
.def("set_weather", &cc::World::SetWeather)
|
||||||
.def("get_snapshot", &cc::World::GetSnapshot)
|
.def("get_snapshot", &cc::World::GetSnapshot)
|
||||||
|
|
Loading…
Reference in New Issue