From 25c43af8853bb2799e68a0f91a0719853f815387 Mon Sep 17 00:00:00 2001 From: Rajat Singhal Date: Sun, 16 Aug 2020 15:54:49 +0530 Subject: [PATCH 1/3] [Unity] Fix some warnings --- .../AirsimWrapper/Source/UnityImageCapture.cpp | 18 +++++++++--------- .../Source/Vehicles/Multirotor/FlyingPawn.cpp | 4 ++-- .../Multirotor/MultirotorPawnSimApi.cpp | 6 +++--- .../AirsimWrapper/Source/WorldSimApi.h | 6 +++--- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/Unity/AirLibWrapper/AirsimWrapper/Source/UnityImageCapture.cpp b/Unity/AirLibWrapper/AirsimWrapper/Source/UnityImageCapture.cpp index c950de2546..7d4fb2a39b 100644 --- a/Unity/AirLibWrapper/AirsimWrapper/Source/UnityImageCapture.cpp +++ b/Unity/AirLibWrapper/AirsimWrapper/Source/UnityImageCapture.cpp @@ -4,6 +4,7 @@ namespace AirSimUnity { + UnityImageCapture::UnityImageCapture(std::string vehicle_name) : vehicle_name_(vehicle_name) { @@ -17,14 +18,13 @@ UnityImageCapture::~UnityImageCapture() void UnityImageCapture::getImages(const std::vector& requests, std::vector& responses) const { - if (requests.size() > 0) { - for (int i = 0; i < requests.size(); i++) { - ImageResponse airsim_response; - responses.push_back(airsim_response); - AirSimImageRequest request = UnityUtilities::Convert_to_UnityRequest(requests[i]); - AirSimImageResponse response = GetSimImages(request, vehicle_name_.c_str()); //Into Unity - UnityUtilities::Convert_to_AirsimResponse(response, responses[i], request.camera_name); - } + for (auto i = 0u; i < requests.size(); i++) { + ImageResponse airsim_response; + responses.push_back(airsim_response); + AirSimImageRequest request = UnityUtilities::Convert_to_UnityRequest(requests[i]); + AirSimImageResponse response = GetSimImages(request, vehicle_name_.c_str()); //Into Unity + UnityUtilities::Convert_to_AirsimResponse(response, responses[i], request.camera_name); } } -} \ No newline at end of file + +} diff --git a/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Multirotor/FlyingPawn.cpp b/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Multirotor/FlyingPawn.cpp index 0592926849..01dd1041bf 100644 --- a/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Multirotor/FlyingPawn.cpp +++ b/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Multirotor/FlyingPawn.cpp @@ -10,7 +10,7 @@ FlyingPawn::FlyingPawn(std::string multirotor_name) void FlyingPawn::setRotorSpeed(const std::vector& rotor_infos) { - for (auto rotor_index = 0; rotor_index < rotor_infos.size(); ++rotor_index) { + for (auto rotor_index = 0u; rotor_index < rotor_infos.size(); ++rotor_index) { SetRotorSpeed(rotor_index, UnityUtilities::Convert_to_UnityRotorInfo(rotor_infos[rotor_index]), multirotor_name_.c_str()); } -} \ No newline at end of file +} diff --git a/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Multirotor/MultirotorPawnSimApi.cpp b/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Multirotor/MultirotorPawnSimApi.cpp index 9d99b9ee5a..517fccc2eb 100644 --- a/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Multirotor/MultirotorPawnSimApi.cpp +++ b/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Multirotor/MultirotorPawnSimApi.cpp @@ -102,8 +102,8 @@ void MultirotorPawnSimApi::updateRendering(float dt) PrintLogMessage("Collision Count:", std::to_string(collision_response.collision_count_non_resting).c_str(), getVehicleName().c_str(), ErrorLogSeverity::Information); - for (auto i = 0; i < vehicle_api_messages_.size(); ++i) { - PrintLogMessage(vehicle_api_messages_[i].c_str(), "30", getVehicleName().c_str(), ErrorLogSeverity::Information); + for (const auto& message : vehicle_api_messages_) { + PrintLogMessage(message.c_str(), "30", getVehicleName().c_str(), ErrorLogSeverity::Information); } try { @@ -113,7 +113,7 @@ void MultirotorPawnSimApi::updateRendering(float dt) PrintLogMessage(e.what(), "LogDebugLevel::Failure, 30", getVehicleName().c_str(), ErrorLogSeverity::Error); } - for (int i = 0; i < rotor_actuator_info_.size(); i++) { + for (auto i = 0u; i < rotor_actuator_info_.size(); i++) { SetRotorSpeed(i, UnityUtilities::Convert_to_UnityRotorInfo(rotor_actuator_info_[i]), getVehicleName().c_str()); } } diff --git a/Unity/AirLibWrapper/AirsimWrapper/Source/WorldSimApi.h b/Unity/AirLibWrapper/AirsimWrapper/Source/WorldSimApi.h index 1020b5e504..95c7310673 100644 --- a/Unity/AirLibWrapper/AirsimWrapper/Source/WorldSimApi.h +++ b/Unity/AirLibWrapper/AirsimWrapper/Source/WorldSimApi.h @@ -15,9 +15,9 @@ class WorldSimApi : public msr::airlib::WorldSimApiBase virtual ~WorldSimApi(); // ------ Level setting apis ----- // - virtual bool loadLevel(const std::string& level_name) { return false; }; - virtual std::string spawnObject(std::string& object_name, const std::string& load_component, const Pose& pose, const Vector3r& scale, bool physics_enabled) { return ""; }; - virtual bool destroyObject(const std::string& object_name) { return false; }; + virtual bool loadLevel(const std::string& level_name) override { return false; }; + virtual std::string spawnObject(std::string& object_name, const std::string& load_component, const Pose& pose, const Vector3r& scale, bool physics_enabled) override { return ""; }; + virtual bool destroyObject(const std::string& object_name) override { return false; }; virtual bool isPaused() const override; virtual void reset() override; From e69cd17030e91b00363da6f5e774ec1bfdb6c1ec Mon Sep 17 00:00:00 2001 From: Rajat Singhal Date: Sun, 16 Aug 2020 15:55:44 +0530 Subject: [PATCH 2/3] [Unity] Fix Car API working Set API enabled so that it uses API controls rather than keyboard --- .../Source/Vehicles/Car/CarPawnApi.cpp | 5 +++++ .../AirsimWrapper/Source/Vehicles/Car/CarPawnApi.h | 1 + .../Source/Vehicles/Car/CarPawnSimApi.cpp | 13 +++++++++---- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Car/CarPawnApi.cpp b/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Car/CarPawnApi.cpp index 4765eb0ace..0fa8833631 100644 --- a/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Car/CarPawnApi.cpp +++ b/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Car/CarPawnApi.cpp @@ -13,6 +13,11 @@ void CarPawnApi::updateMovement(const msr::airlib::CarApiBase::CarControls& cont SetCarApiControls(controls, car_name_.c_str()); } +void CarPawnApi::enableApi(bool enable) +{ + SetEnableApi(enable, car_name_.c_str()); +} + msr::airlib::CarApiBase::CarState CarPawnApi::getCarState() const { AirSimCarState carState = GetCarState(car_name_.c_str()); diff --git a/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Car/CarPawnApi.h b/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Car/CarPawnApi.h index f24ae5753d..5454cb84e2 100644 --- a/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Car/CarPawnApi.h +++ b/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Car/CarPawnApi.h @@ -15,6 +15,7 @@ class CarPawnApi void updateMovement(const msr::airlib::CarApiBase::CarControls& controls); msr::airlib::CarApiBase::CarState getCarState() const; + void enableApi(bool enable); void reset(); void update(); diff --git a/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Car/CarPawnSimApi.cpp b/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Car/CarPawnSimApi.cpp index 1948545534..b0d84284c2 100644 --- a/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Car/CarPawnSimApi.cpp +++ b/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Car/CarPawnSimApi.cpp @@ -140,17 +140,22 @@ void CarPawnSimApi::updateCarControls() current_controls_ = keyboard_controls_; } + bool api_enabled = vehicle_api_->isApiControlEnabled(); + //if API-client control is not active then we route keyboard/joystick control to car - if (!vehicle_api_->isApiControlEnabled()) { - //all car controls from anywhere must be routed through API component + if (!api_enabled) { + // This is so that getCarControls API works correctly vehicle_api_->setCarControls(current_controls_); - pawn_api_->updateMovement(current_controls_); } else { PrintLogMessage("Control Mode: ", "API", getVehicleName().c_str(), ErrorLogSeverity::Information); + // API is enabled, so we use the controls set by API current_controls_ = vehicle_api_->getCarControls(); - pawn_api_->updateMovement(current_controls_); } + + // Update whether to use API controls or keyboard controls + pawn_api_->enableApi(api_enabled); + pawn_api_->updateMovement(current_controls_); } //*** Start: UpdatableState implementation ***// From 99089bfa8d493f66cfe89e5112a8e55cde0a314b Mon Sep 17 00:00:00 2001 From: Rajat Singhal Date: Sun, 16 Aug 2020 16:49:12 +0530 Subject: [PATCH 3/3] [Unity] Remove unused CarPawn references --- .../Source/Vehicles/Car/CarPawnApi.cpp | 4 ++-- .../Source/Vehicles/Car/CarPawnApi.h | 4 +--- .../Source/Vehicles/Car/CarPawnSimApi.cpp | 18 +++++++----------- .../Source/Vehicles/Car/CarPawnSimApi.h | 8 ++------ .../Source/Vehicles/Car/SimModeCar.cpp | 8 ++------ 5 files changed, 14 insertions(+), 28 deletions(-) diff --git a/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Car/CarPawnApi.cpp b/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Car/CarPawnApi.cpp index 0fa8833631..f13bc90c63 100644 --- a/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Car/CarPawnApi.cpp +++ b/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Car/CarPawnApi.cpp @@ -1,9 +1,9 @@ #include "CarPawnApi.h" #include "../../PInvokeWrapper.h" -CarPawnApi::CarPawnApi(CarPawn* pawn, const msr::airlib::Kinematics::State* pawn_kinematics, +CarPawnApi::CarPawnApi(const msr::airlib::Kinematics::State* pawn_kinematics, const std::string car_name, msr::airlib::CarApiBase* vehicle_api) - : pawn_(pawn), pawn_kinematics_(pawn_kinematics), car_name_(car_name), vehicle_api_(vehicle_api) + : pawn_kinematics_(pawn_kinematics), car_name_(car_name), vehicle_api_(vehicle_api) { } diff --git a/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Car/CarPawnApi.h b/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Car/CarPawnApi.h index 5454cb84e2..9cc7b8d38e 100644 --- a/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Car/CarPawnApi.h +++ b/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Car/CarPawnApi.h @@ -2,7 +2,6 @@ #include "vehicles/car/api/CarApiBase.hpp" #include "physics/Kinematics.hpp" -#include "CarPawn.h" class CarPawnApi { @@ -10,7 +9,7 @@ class CarPawnApi typedef msr::airlib::ImageCaptureBase ImageCaptureBase; public: - CarPawnApi(CarPawn* pawn, const msr::airlib::Kinematics::State* pawn_kinematics, + CarPawnApi(const msr::airlib::Kinematics::State* pawn_kinematics, const std::string car_name, msr::airlib::CarApiBase* vehicle_api); void updateMovement(const msr::airlib::CarApiBase::CarControls& controls); @@ -24,7 +23,6 @@ class CarPawnApi private: msr::airlib::CarApiBase::CarControls last_controls_; - CarPawn* pawn_; const msr::airlib::Kinematics::State* pawn_kinematics_; std::string car_name_; msr::airlib::CarApiBase* vehicle_api_; diff --git a/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Car/CarPawnSimApi.cpp b/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Car/CarPawnSimApi.cpp index b0d84284c2..2bdaba78d7 100644 --- a/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Car/CarPawnSimApi.cpp +++ b/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Car/CarPawnSimApi.cpp @@ -6,30 +6,27 @@ #include "../../UnityUtilities.hpp" #include "../../UnitySensors/UnitySensorFactory.h" -CarPawnSimApi::CarPawnSimApi(const Params& params, - const msr::airlib::CarApiBase::CarControls& keyboard_controls, std::string car_name) - : PawnSimApi(params), params_(params), keyboard_controls_(keyboard_controls), car_name_(car_name) +CarPawnSimApi::CarPawnSimApi(const Params& params, std::string car_name) + : PawnSimApi(params), params_(params), car_name_(car_name) { - createVehicleApi(static_cast(params.pawn), params.home_geopoint); - joystick_controls_ = msr::airlib::CarApiBase::CarControls(); } void CarPawnSimApi::initialize() { PawnSimApi::initialize(); - createVehicleApi(static_cast(params_.pawn), params_.home_geopoint); + createVehicleApi(params_.home_geopoint); //TODO: should do reset() here? joystick_controls_ = msr::airlib::CarApiBase::CarControls(); } -void CarPawnSimApi::createVehicleApi(CarPawn* pawn, const msr::airlib::GeoPoint& home_geopoint) +void CarPawnSimApi::createVehicleApi(const msr::airlib::GeoPoint& home_geopoint) { std::shared_ptr sensor_factory = std::make_shared(car_name_, &getNedTransform()); vehicle_api_ = CarApiFactory::createApi(getVehicleSetting(), sensor_factory, (*getGroundTruthKinematics()), (*getGroundTruthEnvironment()), home_geopoint); - pawn_api_ = std::unique_ptr(new CarPawnApi(pawn, getGroundTruthKinematics(), car_name_, vehicle_api_.get())); + pawn_api_ = std::unique_ptr(new CarPawnApi(getGroundTruthKinematics(), car_name_, vehicle_api_.get())); } std::string CarPawnSimApi::getRecordFileLine(bool is_header_line) const @@ -79,8 +76,8 @@ void CarPawnSimApi::updateRendering(float dt) PawnSimApi::updateRendering(dt); updateCarControls(); - for (auto i = 0; i < vehicle_api_messages_.size(); ++i) { - PrintLogMessage(vehicle_api_messages_[i].c_str(), "LogDebugLevel::Success", car_name_.c_str(), ErrorLogSeverity::Information); + for (const auto& message : vehicle_api_messages_) { + PrintLogMessage(message.c_str(), "LogDebugLevel::Success", car_name_.c_str(), ErrorLogSeverity::Information); } try { @@ -137,7 +134,6 @@ void CarPawnSimApi::updateCarControls() } else { PrintLogMessage("Control Mode: ", "Keyboard", getVehicleName().c_str(), ErrorLogSeverity::Information); - current_controls_ = keyboard_controls_; } bool api_enabled = vehicle_api_->isApiControlEnabled(); diff --git a/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Car/CarPawnSimApi.h b/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Car/CarPawnSimApi.h index 232c365aaa..da9b2b948a 100644 --- a/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Car/CarPawnSimApi.h +++ b/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Car/CarPawnSimApi.h @@ -1,6 +1,5 @@ #pragma once -#include "CarPawn.h" #include "CarPawnApi.h" #include "../../PawnSimApi.h" #include "vehicles/car/api/CarApiBase.hpp" @@ -15,12 +14,12 @@ class CarPawnSimApi : public PawnSimApi typedef msr::airlib::Pose Pose; private: - void createVehicleApi(CarPawn* pawn, const msr::airlib::GeoPoint& home_geopoint); + void createVehicleApi(const msr::airlib::GeoPoint& home_geopoint); void updateCarControls(); public: virtual void initialize() override; - CarPawnSimApi(const Params& params, const msr::airlib::CarApiBase::CarControls& keyboard_controls, std::string car_name); + CarPawnSimApi(const Params& params, std::string car_name); virtual ~CarPawnSimApi() = default; virtual void update() override; @@ -46,7 +45,4 @@ class CarPawnSimApi : public PawnSimApi msr::airlib::CarApiBase::CarControls joystick_controls_; msr::airlib::CarApiBase::CarControls current_controls_; std::string car_name_; - - //storing reference from pawn - const msr::airlib::CarApiBase::CarControls& keyboard_controls_; }; diff --git a/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Car/SimModeCar.cpp b/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Car/SimModeCar.cpp index 32470a67c8..1a1a8469be 100644 --- a/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Car/SimModeCar.cpp +++ b/Unity/AirLibWrapper/AirsimWrapper/Source/Vehicles/Car/SimModeCar.cpp @@ -88,11 +88,7 @@ UnityPawn* SimModeCar::GetVehiclePawn() std::unique_ptr SimModeCar::createVehicleSimApi(const PawnSimApi::Params& pawn_sim_api_params) const { - auto vehicle_pawn = static_cast(pawn_sim_api_params.pawn); - - auto vehicle_sim_api = std::unique_ptr(new CarPawnSimApi(pawn_sim_api_params, - vehicle_pawn->getKeyBoardControls(), - vehicle_name_)); + auto vehicle_sim_api = std::unique_ptr(new CarPawnSimApi(pawn_sim_api_params, vehicle_name_)); vehicle_sim_api->initialize(); vehicle_sim_api->reset(); return vehicle_sim_api; @@ -102,4 +98,4 @@ msr::airlib::VehicleApiBase* SimModeCar::getVehicleApi(const PawnSimApi::Params& { const auto car_sim_api = static_cast(sim_api); return car_sim_api->getVehicleApi(); -} \ No newline at end of file +}