From 345028a9bffda658914a4f25546a40c5b3c45021 Mon Sep 17 00:00:00 2001 From: madratman Date: Mon, 30 Mar 2020 15:55:13 -0700 Subject: [PATCH] [cleanup] remove all character (simChar*) apis --- AirLib/include/api/RpcLibClientBase.hpp | 18 --- AirLib/include/api/WorldSimApiBase.hpp | 18 --- AirLib/src/api/RpcLibClientBase.cpp | 93 ------------ AirLib/src/api/RpcLibServerBase.cpp | 63 -------- PythonClient/airsim/client.py | 34 ----- .../computer_vision/character_control.py | 77 ---------- .../AirsimWrapper/Source/WorldSimApi.cpp | 74 --------- .../AirsimWrapper/Source/WorldSimApi.h | 18 --- .../Plugins/AirSim/Source/AirSimCharacter.cpp | 94 ------------ .../Plugins/AirSim/Source/AirSimCharacter.h | 33 ---- Unreal/Plugins/AirSim/Source/WorldSimApi.cpp | 143 +----------------- Unreal/Plugins/AirSim/Source/WorldSimApi.h | 26 ---- docs/unity_api_support.md | 16 -- 13 files changed, 2 insertions(+), 705 deletions(-) delete mode 100644 PythonClient/computer_vision/character_control.py delete mode 100644 Unreal/Plugins/AirSim/Source/AirSimCharacter.cpp delete mode 100644 Unreal/Plugins/AirSim/Source/AirSimCharacter.h diff --git a/AirLib/include/api/RpcLibClientBase.hpp b/AirLib/include/api/RpcLibClientBase.hpp index f408839423..0d4352a340 100644 --- a/AirLib/include/api/RpcLibClientBase.hpp +++ b/AirLib/include/api/RpcLibClientBase.hpp @@ -100,24 +100,6 @@ class RpcLibClientBase { msr::airlib::Kinematics::State simGetGroundTruthKinematics(const std::string& vehicle_name = "") const; msr::airlib::Environment::State simGetGroundTruthEnvironment(const std::string& vehicle_name = "") const; - //----------- APIs to control ACharacter in scene ----------/ - void simCharSetFaceExpression(const std::string& expression_name, float value, const std::string& character_name = ""); - float simCharGetFaceExpression(const std::string& expression_name, const std::string& character_name = "") const; - std::vector simCharGetAvailableFaceExpressions(); - void simCharSetSkinDarkness(float value, const std::string& character_name = ""); - float simCharGetSkinDarkness(const std::string& character_name = "") const; - void simCharSetSkinAgeing(float value, const std::string& character_name = ""); - float simCharGetSkinAgeing(const std::string& character_name = "") const; - void simCharSetHeadRotation(const msr::airlib::Quaternionr& q, const std::string& character_name = ""); - msr::airlib::Quaternionr simCharGetHeadRotation(const std::string& character_name = "") const; - void simCharSetBonePose(const std::string& bone_name, const msr::airlib::Pose& pose, const std::string& character_name = ""); - msr::airlib::Pose simCharGetBonePose(const std::string& bone_name, const std::string& character_name = "") const; - void simCharResetBonePose(const std::string& bone_name, const std::string& character_name = ""); - void simCharSetFacePreset(const std::string& preset_name, float value, const std::string& character_name = ""); - void simSetFacePresets(const std::unordered_map& presets, const std::string& character_name = ""); - void simSetBonePoses(const std::unordered_map& poses, const std::string& character_name = ""); - std::unordered_map simGetBonePoses(const std::vector& bone_names, const std::string& character_name = "") const; - std::vector simSwapTextures(const std::string& tags, int tex_id = 0, int component_id = 0, int material_id = 0); protected: diff --git a/AirLib/include/api/WorldSimApiBase.hpp b/AirLib/include/api/WorldSimApiBase.hpp index f77ddbe3c9..442bd4739b 100644 --- a/AirLib/include/api/WorldSimApiBase.hpp +++ b/AirLib/include/api/WorldSimApiBase.hpp @@ -57,24 +57,6 @@ class WorldSimApiBase { virtual bool setObjectPose(const std::string& object_name, const Pose& pose, bool teleport) = 0; virtual std::unique_ptr> swapTextures(const std::string& tag, int tex_id = 0, int component_id = 0, int material_id = 0) = 0; - //----------- APIs to control ACharacter in scene ----------/ - virtual void charSetFaceExpression(const std::string& expression_name, float value, const std::string& character_name) = 0; - virtual float charGetFaceExpression(const std::string& expression_name, const std::string& character_name) const = 0; - virtual std::vector charGetAvailableFaceExpressions() = 0; - virtual void charSetSkinDarkness(float value, const std::string& character_name) = 0; - virtual float charGetSkinDarkness(const std::string& character_name) const = 0; - virtual void charSetSkinAgeing(float value, const std::string& character_name) = 0; - virtual float charGetSkinAgeing(const std::string& character_name) const = 0; - virtual void charSetHeadRotation(const msr::airlib::Quaternionr& q, const std::string& character_name) = 0; - virtual msr::airlib::Quaternionr charGetHeadRotation(const std::string& character_name) const = 0; - virtual void charSetBonePose(const std::string& bone_name, const msr::airlib::Pose& pose, const std::string& character_name) = 0; - virtual msr::airlib::Pose charGetBonePose(const std::string& bone_name, const std::string& character_name) const = 0; - virtual void charResetBonePose(const std::string& bone_name, const std::string& character_name) = 0; - virtual void charSetFacePreset(const std::string& preset_name, float value, const std::string& character_name) = 0; - virtual void charSetFacePresets(const std::unordered_map& presets, const std::string& character_name) = 0; - virtual void charSetBonePoses(const std::unordered_map& poses, const std::string& character_name) = 0; - virtual std::unordered_map charGetBonePoses(const std::vector& bone_names, const std::string& character_name) const = 0; - }; diff --git a/AirLib/src/api/RpcLibClientBase.cpp b/AirLib/src/api/RpcLibClientBase.cpp index 0a757c38f0..6de0adfab5 100644 --- a/AirLib/src/api/RpcLibClientBase.cpp +++ b/AirLib/src/api/RpcLibClientBase.cpp @@ -393,99 +393,6 @@ const void* RpcLibClientBase::getClient() const return &pimpl_->client; } -//----------- APIs to control ACharacter in scene ----------/ -void RpcLibClientBase::simCharSetFaceExpression(const std::string& expression_name, float value, const std::string& character_name) -{ - pimpl_->client.call("simCharSetFaceExpression", expression_name, value, character_name); -} - -float RpcLibClientBase::simCharGetFaceExpression(const std::string& expression_name, const std::string& character_name) const -{ - return pimpl_->client.call("simCharGetFaceExpression", expression_name, character_name).as(); -} - -std::vector RpcLibClientBase::simCharGetAvailableFaceExpressions() -{ - return pimpl_->client.call("simCharGetAvailableFaceExpressions").as>(); -} - -void RpcLibClientBase::simCharSetSkinDarkness(float value, const std::string& character_name) -{ - pimpl_->client.call("simCharSetSkinDarkness", character_name, value); -} - -float RpcLibClientBase::simCharGetSkinDarkness(const std::string& character_name) const -{ - return pimpl_->client.call("simCharGetSkinDarkness", character_name).as(); -} - -void RpcLibClientBase::simCharSetSkinAgeing(float value, const std::string& character_name) -{ - pimpl_->client.call("simCharSetSkinAgeing", character_name, value); -} - -float RpcLibClientBase::simCharGetSkinAgeing(const std::string& character_name) const -{ - return pimpl_->client.call("simCharGetSkinAgeing", character_name).as(); -} - -void RpcLibClientBase::simCharSetHeadRotation(const msr::airlib::Quaternionr& q, const std::string& character_name) -{ - pimpl_->client.call("simCharSetHeadRotation", RpcLibAdapatorsBase::Quaternionr(q), character_name); -} - -msr::airlib::Quaternionr RpcLibClientBase::simCharGetHeadRotation(const std::string& character_name) const -{ - return pimpl_->client.call("simCharGetHeadRotation", character_name) - .as().to(); -} - -void RpcLibClientBase::simCharSetBonePose(const std::string& bone_name, const msr::airlib::Pose& pose, const std::string& character_name) -{ - pimpl_->client.call("simCharSetBonePose", bone_name, RpcLibAdapatorsBase::Pose(pose), character_name); -} - -msr::airlib::Pose RpcLibClientBase::simCharGetBonePose(const std::string& bone_name, const std::string& character_name) const -{ - return pimpl_->client.call("simCharGetBonePose", bone_name, character_name) - .as().to(); -} - -void RpcLibClientBase::simCharResetBonePose(const std::string& bone_name, const std::string& character_name) -{ - pimpl_->client.call("simCharResetBonePose", bone_name, character_name); -} - -void RpcLibClientBase::simCharSetFacePreset(const std::string& preset_name, float value, const std::string& character_name) -{ - pimpl_->client.call("simCharSetFacePreset", preset_name, value, character_name); -} -void RpcLibClientBase::simSetFacePresets(const std::unordered_map& presets, const std::string& character_name) -{ - pimpl_->client.call("simSetFacePresets", presets, character_name); -} -void RpcLibClientBase::simSetBonePoses(const std::unordered_map& poses, const std::string& character_name) -{ - std::unordered_map r; - for (const auto& p : poses) - r[p.first] = RpcLibAdapatorsBase::Pose(p.second); - - pimpl_->client.call("simSetBonePoses", r, character_name); -} -std::unordered_map RpcLibClientBase::simGetBonePoses(const std::vector& bone_names, const std::string& character_name) const -{ - std::unordered_map t = - pimpl_->client.call("simGetBonePoses", bone_names, character_name) - .as>(); - - std::unordered_map r; - for (const auto& p : t) - r[p.first] = p.second.to(); - - return r; -} - - }} //namespace #endif diff --git a/AirLib/src/api/RpcLibServerBase.cpp b/AirLib/src/api/RpcLibServerBase.cpp index a50c08e276..af8907d4ab 100644 --- a/AirLib/src/api/RpcLibServerBase.cpp +++ b/AirLib/src/api/RpcLibServerBase.cpp @@ -296,69 +296,6 @@ RpcLibServerBase::RpcLibServerBase(ApiProvider* api_provider, const std::string& getVehicleApi(vehicle_name)->cancelLastTask(); }); - //----------- APIs to control ACharacter in scene ----------/ - pimpl_->server.bind("simCharSetFaceExpression", [&](const std::string& expression_name, float value, const std::string& character_name) -> void { - getWorldSimApi()->charSetFaceExpression(expression_name, value, character_name); - }); - pimpl_->server.bind("simCharGetFaceExpression", [&](const std::string& expression_name, const std::string& character_name) -> float { - return getWorldSimApi()->charGetFaceExpression(expression_name, character_name); - }); - pimpl_->server.bind("simCharGetAvailableFaceExpressions", [&]() -> std::vector { - return getWorldSimApi()->charGetAvailableFaceExpressions(); - }); - pimpl_->server.bind("simCharSetSkinDarkness", [&](float value, const std::string& character_name) -> void { - getWorldSimApi()->charSetSkinDarkness(value, character_name); - }); - pimpl_->server.bind("simCharGetSkinDarkness", [&](const std::string& character_name) -> float { - return getWorldSimApi()->charGetSkinDarkness(character_name); - }); - pimpl_->server.bind("simCharSetSkinAgeing", [&](float value, const std::string& character_name) -> void { - getWorldSimApi()->charSetSkinAgeing(value, character_name); - }); - pimpl_->server.bind("simCharGetSkinAgeing", [&](const std::string& character_name) -> float { - return getWorldSimApi()->charGetSkinAgeing(character_name); - }); - pimpl_->server.bind("simCharSetHeadRotation", [&](const RpcLibAdapatorsBase::Quaternionr& q, const std::string& character_name) -> void { - getWorldSimApi()->charSetHeadRotation(q.to(), character_name); - }); - pimpl_->server.bind("simCharGetHeadRotation", [&](const std::string& character_name) -> RpcLibAdapatorsBase::Quaternionr { - msr::airlib::Quaternionr q = getWorldSimApi()->charGetHeadRotation(character_name); - return RpcLibAdapatorsBase::Quaternionr(q); - }); - pimpl_->server.bind("simCharSetBonePose", [&](const std::string& bone_name, const RpcLibAdapatorsBase::Pose& pose, const std::string& character_name) -> void { - getWorldSimApi()->charSetBonePose(bone_name, pose.to(), character_name); - }); - pimpl_->server.bind("simCharGetBonePose", [&](const std::string& bone_name, const std::string& character_name) -> RpcLibAdapatorsBase::Pose { - msr::airlib::Pose pose = getWorldSimApi()->charGetBonePose(bone_name, character_name); - return RpcLibAdapatorsBase::Pose(pose); - }); - pimpl_->server.bind("simCharResetBonePose", [&](const std::string& bone_name, const std::string& character_name) -> void { - getWorldSimApi()->charResetBonePose(bone_name, character_name); - }); - pimpl_->server.bind("simCharSetFacePreset", [&](const std::string& preset_name, float value, const std::string& character_name) -> void { - getWorldSimApi()->charSetFacePreset(preset_name, value, character_name); - }); - pimpl_->server.bind("simSetFacePresets", [&](const std::unordered_map& presets, const std::string& character_name) -> void { - getWorldSimApi()->charSetFacePresets(presets, character_name); - }); - pimpl_->server.bind("simSetBonePoses", [&](const std::unordered_map& poses, const std::string& character_name) -> void { - std::unordered_map r; - for (const auto& p : poses) - r[p.first] = p.second.to(); - - getWorldSimApi()->charSetBonePoses(r, character_name); - }); - pimpl_->server.bind("simGetBonePoses", [&](const std::vector& bone_names, const std::string& character_name) - -> std::unordered_map { - - std::unordered_map poses = getWorldSimApi()->charGetBonePoses(bone_names, character_name); - std::unordered_map r; - for (const auto& p : poses) - r[p.first] = RpcLibAdapatorsBase::Pose(p.second); - - return r; - }); - pimpl_->server.bind("simSwapTextures", [&](const std::string tag, int tex_id, int component_id, int material_id) -> std::vector { return *getWorldSimApi()->swapTextures(tag, tex_id, component_id, material_id); }); diff --git a/PythonClient/airsim/client.py b/PythonClient/airsim/client.py index ac68c5cbaf..9f081d2593 100644 --- a/PythonClient/airsim/client.py +++ b/PythonClient/airsim/client.py @@ -271,40 +271,6 @@ def simPlotTransformsWithNames(self, poses, names, tf_scale = 5.0, tf_thickness """ self.client.call('simPlotTransformsWithNames', poses, names, tf_scale, tf_thickness, text_scale, text_color_rgba, duration) - #----------- APIs to control ACharacter in scene ----------/ - def simCharSetFaceExpression(self, expression_name, value, character_name = ""): - self.client.call('simCharSetFaceExpression', expression_name, value, character_name) - def simCharGetFaceExpression(self, expression_name, character_name = ""): - return self.client.call('simCharGetFaceExpression', expression_name, character_name) - def simCharGetAvailableFaceExpressions(self): - return self.client.call('simCharGetAvailableFaceExpressions') - def simCharSetSkinDarkness(self, value, character_name = ""): - self.client.call('simCharSetSkinDarkness', value, character_name) - def simCharGetSkinDarkness(self, character_name = ""): - return self.client.call('simCharGetSkinDarkness', character_name) - def simCharSetSkinAgeing(self, value, character_name = ""): - self.client.call('simCharSetSkinAgeing', value, character_name) - def simCharGetSkinAgeing(self, character_name = ""): - return self.client.call('simCharGetSkinAgeing', character_name) - def simCharSetHeadRotation(self, q, character_name = ""): - self.client.call('simCharSetHeadRotation', q, character_name) - def simCharGetHeadRotation(self, character_name = ""): - return self.client.call('simCharGetHeadRotation', character_name) - def simCharSetBonePose(self, bone_name, pose, character_name = ""): - self.client.call('simCharSetBonePose', bone_name, pose, character_name) - def simCharGetBonePose(self, bone_name, character_name = ""): - return self.client.call('simCharGetBonePose', bone_name, character_name) - def simCharResetBonePose(self, bone_name, character_name = ""): - self.client.call('simCharResetBonePose', bone_name, character_name) - def simCharSetFacePreset(self, preset_name, value, character_name = ""): - self.client.call('simCharSetFacePreset', preset_name, value, character_name) - def simCharSetFacePresets(self, presets, character_name = ""): - self.client.call('simSetFacePresets', presets, character_name) - def simCharSetBonePoses(self, poses, character_name = ""): - self.client.call('simSetBonePoses', poses, character_name) - def simCharGetBonePoses(self, bone_names, character_name = ""): - return self.client.call('simGetBonePoses', bone_names, character_name) - def cancelLastTask(self, vehicle_name = ''): self.client.call('cancelLastTask', vehicle_name) def waitOnLastTask(self, timeout_sec = float('nan')): diff --git a/PythonClient/computer_vision/character_control.py b/PythonClient/computer_vision/character_control.py deleted file mode 100644 index 81cf8c6ede..0000000000 --- a/PythonClient/computer_vision/character_control.py +++ /dev/null @@ -1,77 +0,0 @@ -# This script expects object available in UE environment of type AAirSimCharater -# In settings.json first activate computer vision mode: -# https://github.com/Microsoft/AirSim/blob/master/docs/image_apis.md#computer-vision-mode - -import setup_path -import airsim - - -import pprint -import os -import time - -pp = pprint.PrettyPrinter(indent=4) - -client = airsim.VehicleClient() -client.confirmConnection() -client.reset() - -airsim.wait_key('Press any key to set skin age to 1') -client.simCharSetSkinAgeing(1) - -airsim.wait_key('Press any key to set skin color to 0.9') -client.simCharSetSkinDarkness(0.9) - -#airsim.wait_key('Press any key to set face expression') -#client.simCharSetFaceExpression("BlendShapeNode_Smile", 1); - -airsim.wait_key('Press any key to set bone pose') -client.reset() -jaw_pose = airsim.Pose() -jaw_pose.position = airsim.Vector3r(0.002, 0.001, -0.003) -jaw_pose.orientation = airsim.to_quaternion(0, 0, -.15) -client.simCharSetBonePose( "Jaw", jaw_pose); - -airsim.wait_key('Press any key to set preset') -client.reset() -for x in range(0, 10, 3): - client.simCharSetFacePreset("FACS_0" + str(x), 5); - time.sleep(1) - -airsim.wait_key('Press any key to set multiple presets') -presets = {"Phoneme_l":0.5, "Phoneme_ae": 1, "Phoneme_ooo":0.0} -client.simCharSetFacePresets(presets) - -airsim.wait_key('Press any key to turn head around') -client.reset() -for pitch in range(-5, 5, 5): - for yaw in range(-10, 10, 2): - q = airsim.to_quaternion(pitch/10.0, 0, yaw/10.0) - client.simCharSetHeadRotation(q) - time.sleep(0.1) - -airsim.wait_key('Press any key to get images') -for x in range(3): # do few times - responses = client.simGetImages([ - airsim.ImageRequest("0", airsim.ImageType.DepthVis), - airsim.ImageRequest("0", airsim.ImageType.Segmentation), - airsim.ImageRequest("0", airsim.ImageType.Scene), - airsim.ImageRequest("0", airsim.ImageType.SurfaceNormals)]) - - for i, response in enumerate(responses): - if response.pixels_as_float: - print("Type %d, size %d, pos %s" % (response.image_type, len(response.image_data_float), pprint.pformat(response.camera_position))) - airsim.write_pfm(os.path.normpath('/temp/cv_mode_' + str(x) + "_" + str(i) + '.pfm'), airsim.get_pfm_array(response)) - else: - print("Type %d, size %d, pos %s" % (response.image_type, len(response.image_data_uint8), pprint.pformat(response.camera_position))) - airsim.write_file(os.path.normpath('/temp/cv_mode_' + str(x) + "_" + str(i) + '.png'), response.image_data_uint8) - - pose = client.simGetVehiclePose() - pose.position.x_val = pose.position.x_val + 1 - pose.position.y_val = pose.position.y_val - 0.5 - pose.position.z_val = pose.position.z_val - 0.5 - client.simSetVehiclePose(pose, True) - - time.sleep(3) - -client.reset() \ No newline at end of file diff --git a/Unity/AirLibWrapper/AirsimWrapper/Source/WorldSimApi.cpp b/Unity/AirLibWrapper/AirsimWrapper/Source/WorldSimApi.cpp index 30d44c6916..c02e997a35 100644 --- a/Unity/AirLibWrapper/AirsimWrapper/Source/WorldSimApi.cpp +++ b/Unity/AirLibWrapper/AirsimWrapper/Source/WorldSimApi.cpp @@ -84,78 +84,4 @@ void WorldSimApi::setWeatherParameter(WeatherParameter param, float val) //TODO: implement weather for Unity } -#pragma region Character -// Not implemented, just added for compilation. - -void WorldSimApi::charSetFaceExpression(const std::string& expression_name, float value, const std::string& character_name) -{ -} - -float WorldSimApi::charGetFaceExpression(const std::string& expression_name, const std::string& character_name) const -{ - return 0.0f; -} - -std::vector WorldSimApi::charGetAvailableFaceExpressions() -{ - return std::vector(); -} - -void WorldSimApi::charSetSkinDarkness(float value, const std::string& character_name) -{ -} - -float WorldSimApi::charGetSkinDarkness(const std::string& character_name) const -{ - return 0.0f; -} - -void WorldSimApi::charSetSkinAgeing(float value, const std::string& character_name) -{ -} - -float WorldSimApi::charGetSkinAgeing(const std::string& character_name) const -{ - return 0.0f; -} - -void WorldSimApi::charSetHeadRotation(const msr::airlib::Quaternionr& q, const std::string& character_name) -{ -} - -msr::airlib::Quaternionr WorldSimApi::charGetHeadRotation(const std::string& character_name) const -{ - return msr::airlib::Quaternionr(); -} - -void WorldSimApi::charSetBonePose(const std::string& bone_name, const msr::airlib::Pose& pose, const std::string& character_name) -{ -} - -msr::airlib::Pose WorldSimApi::charGetBonePose(const std::string& bone_name, const std::string& character_name) const -{ - return Pose(); -} - -void WorldSimApi::charResetBonePose(const std::string& bone_name, const std::string& character_name) -{ -} - -void WorldSimApi::charSetFacePreset(const std::string& preset_name, float value, const std::string& character_name) -{ -} - -void WorldSimApi::charSetFacePresets(const std::unordered_map& presets, const std::string& character_name) -{ -} - -void WorldSimApi::charSetBonePoses(const std::unordered_map& poses, const std::string& character_name) -{ -} - -std::unordered_map WorldSimApi::charGetBonePoses(const std::vector& bone_names, const std::string& character_name) const -{ - return std::unordered_map(); -} - #pragma endregion diff --git a/Unity/AirLibWrapper/AirsimWrapper/Source/WorldSimApi.h b/Unity/AirLibWrapper/AirsimWrapper/Source/WorldSimApi.h index 5f9ee041d5..e784089de2 100644 --- a/Unity/AirLibWrapper/AirsimWrapper/Source/WorldSimApi.h +++ b/Unity/AirLibWrapper/AirsimWrapper/Source/WorldSimApi.h @@ -31,24 +31,6 @@ class WorldSimApi : public msr::airlib::WorldSimApiBase virtual Pose getObjectPose(const std::string& object_name) const override; virtual bool setObjectPose(const std::string& object_name, const Pose& pose, bool teleport) override; - //----------- APIs to control ACharacter in scene ----------/ - virtual void charSetFaceExpression(const std::string& expression_name, float value, const std::string& character_name) override; - virtual float charGetFaceExpression(const std::string& expression_name, const std::string& character_name) const override; - virtual std::vector charGetAvailableFaceExpressions() override; - virtual void charSetSkinDarkness(float value, const std::string& character_name) override; - virtual float charGetSkinDarkness(const std::string& character_name) const override; - virtual void charSetSkinAgeing(float value, const std::string& character_name) override; - virtual float charGetSkinAgeing(const std::string& character_name) const override; - virtual void charSetHeadRotation(const msr::airlib::Quaternionr& q, const std::string& character_name) override; - virtual msr::airlib::Quaternionr charGetHeadRotation(const std::string& character_name) const override; - virtual void charSetBonePose(const std::string& bone_name, const msr::airlib::Pose& pose, const std::string& character_name) override; - virtual msr::airlib::Pose charGetBonePose(const std::string& bone_name, const std::string& character_name) const override; - virtual void charResetBonePose(const std::string& bone_name, const std::string& character_name) override; - virtual void charSetFacePreset(const std::string& preset_name, float value, const std::string& character_name) override; - virtual void charSetFacePresets(const std::unordered_map& presets, const std::string& character_name) override; - virtual void charSetBonePoses(const std::unordered_map& poses, const std::string& character_name) override; - virtual std::unordered_map charGetBonePoses(const std::vector& bone_names, const std::string& character_name) const override; - private: SimModeBase * simmode_; std::string vehicle_name_; diff --git a/Unreal/Plugins/AirSim/Source/AirSimCharacter.cpp b/Unreal/Plugins/AirSim/Source/AirSimCharacter.cpp deleted file mode 100644 index 42198e6d2d..0000000000 --- a/Unreal/Plugins/AirSim/Source/AirSimCharacter.cpp +++ /dev/null @@ -1,94 +0,0 @@ -#include "AirSimCharacter.h" - - -void AAirSimCharacter::setFaceExpression(const std::string& expression_name, float value) -{ - unused(expression_name); - unused(value); - //derived class should override this -} -float AAirSimCharacter::getFaceExpression(const std::string& expression_name) const -{ - unused(expression_name); - //derived class should override this - - return common_utils::Utils::nan(); -} -std::vector AAirSimCharacter::getAvailableFaceExpressions() const -{ - //derived class should override this - return std::vector(); -} -void AAirSimCharacter::setSkinDarkness(float value) -{ - unused(value); - //derived class should override this -} -float AAirSimCharacter::getSkinDarkness() const -{ - //derived class should override this - return common_utils::Utils::nan(); -} -void AAirSimCharacter::setSkinAgeing(float value) -{ - unused(value); - //derived class should override this -} -float AAirSimCharacter::getSkinAgeing() const -{ - //derived class should override this - return common_utils::Utils::nan(); -} -void AAirSimCharacter::setHeadRotation(const msr::airlib::Quaternionr& q) -{ - unused(q); - //derived class should override this -} -msr::airlib::Quaternionr AAirSimCharacter::getHeadRotation() const -{ - //derived class should override this - return msr::airlib::Quaternionr::Identity(); -} -void AAirSimCharacter::setBonePose(const std::string& bone_name, const msr::airlib::Pose& pose) -{ - unused(bone_name); - unused(pose); - //derived class should override this -} -void AAirSimCharacter::setBonePoses(const std::unordered_map& poses) -{ - unused(poses); -} -msr::airlib::Pose AAirSimCharacter::getBonePose(const std::string& bone_name) const -{ - unused(bone_name); - //derived class should override this - return msr::airlib::Pose::nanPose(); -} -std::unordered_map AAirSimCharacter::getBonePoses(const std::vector& bone_names) const -{ - unused(bone_names); - - //derived class should override this - return std::unordered_map(); -} -void AAirSimCharacter::resetBonePose(const std::string& bone_name) -{ - unused(bone_name); - //derived class should override this -} -void AAirSimCharacter::setFacePreset(const std::string& preset_name, float value) -{ - unused(preset_name); - unused(value); - //derived class should override this -} -void AAirSimCharacter::setFacePresets(const std::unordered_map& presets) -{ - unused(presets); - //derived class should override this -} -void AAirSimCharacter::reset() -{ - //derived class should override this -} diff --git a/Unreal/Plugins/AirSim/Source/AirSimCharacter.h b/Unreal/Plugins/AirSim/Source/AirSimCharacter.h deleted file mode 100644 index 5e1bc70adb..0000000000 --- a/Unreal/Plugins/AirSim/Source/AirSimCharacter.h +++ /dev/null @@ -1,33 +0,0 @@ -#pragma once - -#include "CoreMinimal.h" -#include "GameFramework/Character.h" -#include "Engine/DataTable.h" - -#include "common/Common.hpp" -#include "AirSimCharacter.generated.h" - -UCLASS() -class AIRSIM_API AAirSimCharacter : public ACharacter -{ - GENERATED_BODY() - -public: - virtual void setFaceExpression(const std::string& expression_name, float value); - virtual float getFaceExpression(const std::string& expression_name) const; - virtual std::vector getAvailableFaceExpressions() const; - virtual void setSkinDarkness(float value); - virtual float getSkinDarkness() const; - virtual void setSkinAgeing(float value); - virtual float getSkinAgeing() const; - virtual void setHeadRotation(const msr::airlib::Quaternionr& q); - virtual msr::airlib::Quaternionr getHeadRotation() const; - virtual void setBonePose(const std::string& bone_name, const msr::airlib::Pose& pose); - virtual void setBonePoses(const std::unordered_map& poses); - virtual std::unordered_map getBonePoses(const std::vector& bone_names) const; - virtual msr::airlib::Pose getBonePose(const std::string& bone_name) const; - virtual void resetBonePose(const std::string& bone_name); - virtual void setFacePreset(const std::string& preset_name, float value); - virtual void setFacePresets(const std::unordered_map& presets); - virtual void reset(); -}; diff --git a/Unreal/Plugins/AirSim/Source/WorldSimApi.cpp b/Unreal/Plugins/AirSim/Source/WorldSimApi.cpp index 1cb4db9956..f06e2dc4e4 100644 --- a/Unreal/Plugins/AirSim/Source/WorldSimApi.cpp +++ b/Unreal/Plugins/AirSim/Source/WorldSimApi.cpp @@ -18,12 +18,8 @@ bool WorldSimApi::isPaused() const void WorldSimApi::reset() { UAirBlueprintLib::RunCommandOnGameThread([this]() { - simmode_->reset(); - - //reset any chars we have - for (auto& c : chars_) - c.second->reset(); - }, true); + simmode_->reset(); + }, true); } void WorldSimApi::pause(bool is_paused) @@ -234,138 +230,3 @@ void WorldSimApi::simPlotTransformsWithNames(const std::vector& poses, con DrawDebugString(simmode_->GetWorld(), simmode_->getGlobalNedTransform().fromGlobalNed(poses[idx]).GetLocation(), FString(names[idx].c_str()), NULL, color.ToFColor(true), duration, false, text_scale); } } - -//------------------------------------------------- Char APIs -----------------------------------------------------------/ - -void WorldSimApi::charSetFaceExpression(const std::string& expression_name, float value, const std::string& character_name) -{ - AAirSimCharacter* character = getAirSimCharacter(character_name); - character->setFaceExpression(expression_name, value); -} - -float WorldSimApi::charGetFaceExpression(const std::string& expression_name, const std::string& character_name) const -{ - const AAirSimCharacter* character = getAirSimCharacter(character_name); - return character->getFaceExpression(expression_name); -} - -std::vector WorldSimApi::charGetAvailableFaceExpressions() -{ - const AAirSimCharacter* character = getAirSimCharacter(""); - return character->getAvailableFaceExpressions(); -} - -void WorldSimApi::charSetSkinDarkness(float value, const std::string& character_name) -{ - AAirSimCharacter* character = getAirSimCharacter(character_name); - character->setSkinDarkness(value); -} - -float WorldSimApi::charGetSkinDarkness(const std::string& character_name) const -{ - const AAirSimCharacter* character = getAirSimCharacter(character_name); - return character->getSkinDarkness(); -} - -void WorldSimApi::charSetSkinAgeing(float value, const std::string& character_name) -{ - AAirSimCharacter* character = getAirSimCharacter(character_name); - character->setSkinAgeing(value); -} - -float WorldSimApi::charGetSkinAgeing(const std::string& character_name) const -{ - const AAirSimCharacter* character = getAirSimCharacter(character_name); - return character->getSkinAgeing(); -} - -void WorldSimApi::charSetHeadRotation(const msr::airlib::Quaternionr& q, const std::string& character_name) -{ - AAirSimCharacter* character = getAirSimCharacter(character_name); - character->setHeadRotation(q); -} - -msr::airlib::Quaternionr WorldSimApi::charGetHeadRotation(const std::string& character_name) const -{ - const AAirSimCharacter* character = getAirSimCharacter(character_name); - return character->getHeadRotation(); -} - -void WorldSimApi::charSetBonePose(const std::string& bone_name, const msr::airlib::Pose& pose, const std::string& character_name) -{ - AAirSimCharacter* character = getAirSimCharacter(character_name); - character->setBonePose(bone_name, pose); -} - -msr::airlib::Pose WorldSimApi::charGetBonePose(const std::string& bone_name, const std::string& character_name) const -{ - const AAirSimCharacter* character = getAirSimCharacter(character_name); - return character->getBonePose(bone_name); -} - -void WorldSimApi::charResetBonePose(const std::string& bone_name, const std::string& character_name) -{ - AAirSimCharacter* character = getAirSimCharacter(character_name); - character->resetBonePose(bone_name); -} - -void WorldSimApi::charSetFacePreset(const std::string& preset_name, float value, const std::string& character_name) -{ - AAirSimCharacter* character = getAirSimCharacter(character_name); - character->setFacePreset(preset_name, value); -} - -void WorldSimApi::charSetFacePresets(const std::unordered_map& presets, const std::string& character_name) -{ - AAirSimCharacter* character = getAirSimCharacter(character_name); - character->setFacePresets(presets); -} -void WorldSimApi::charSetBonePoses(const std::unordered_map& poses, const std::string& character_name) -{ - AAirSimCharacter* character = getAirSimCharacter(character_name); - character->setBonePoses(poses); -} -std::unordered_map WorldSimApi::charGetBonePoses(const std::vector& bone_names, const std::string& character_name) const -{ - const AAirSimCharacter* character = getAirSimCharacter(character_name); - return character->getBonePoses(bone_names); -} - -AAirSimCharacter* WorldSimApi::getAirSimCharacter(const std::string& character_name) -{ - AAirSimCharacter* character = nullptr; - UAirBlueprintLib::RunCommandOnGameThread([this, &character_name, &character]() { - if (chars_.size() == 0) { //not found in the cache - TArray characters; - UAirBlueprintLib::FindAllActor(simmode_, characters); - for (AActor* actor : characters) { - character = static_cast(actor); - chars_[std::string( - TCHAR_TO_UTF8(*character->GetName()))] = character; - } - } - - if (chars_.size() == 0) { - throw std::invalid_argument( - "There were no actors of class ACharactor found in the environment"); - } - - //choose first character if name was blank or find by name - character = character_name == "" ? chars_.begin()->second - : common_utils::Utils::findOrDefault(chars_, character_name); - - if (!character) { - throw std::invalid_argument(common_utils::Utils::stringf( - "Character with name %s was not found in the environment", character_name.c_str()).c_str()); - } - }, true); - - return character; -} - -const AAirSimCharacter* WorldSimApi::getAirSimCharacter(const std::string& character_name) const -{ - return const_cast(this)->getAirSimCharacter(character_name); -} -//------------------------------------------------- Char APIs -----------------------------------------------------------/ - diff --git a/Unreal/Plugins/AirSim/Source/WorldSimApi.h b/Unreal/Plugins/AirSim/Source/WorldSimApi.h index 048133cf7b..0462cc8c13 100644 --- a/Unreal/Plugins/AirSim/Source/WorldSimApi.h +++ b/Unreal/Plugins/AirSim/Source/WorldSimApi.h @@ -4,7 +4,6 @@ #include "common/CommonStructs.hpp" #include "api/WorldSimApiBase.hpp" #include "SimMode/SimModeBase.h" -#include "AirSimCharacter.h" #include class WorldSimApi : public msr::airlib::WorldSimApiBase { @@ -47,31 +46,6 @@ class WorldSimApi : public msr::airlib::WorldSimApiBase { virtual void simPlotTransforms(const std::vector& poses, float scale, float thickness, float duration, bool is_persistent) override; virtual void simPlotTransformsWithNames(const std::vector& poses, const std::vector& names, float tf_scale, float tf_thickness, float text_scale, const std::vector& text_color_rgba, float duration) override; - //----------- APIs to control ACharacter in scene ----------/ - virtual void charSetFaceExpression(const std::string& expression_name, float value, const std::string& character_name) override; - virtual float charGetFaceExpression(const std::string& expression_name, const std::string& character_name) const override; - virtual std::vector charGetAvailableFaceExpressions() override; - virtual void charSetSkinDarkness(float value, const std::string& character_name) override; - virtual float charGetSkinDarkness(const std::string& character_name) const override; - virtual void charSetSkinAgeing(float value, const std::string& character_name) override; - virtual float charGetSkinAgeing(const std::string& character_name) const override; - virtual void charSetHeadRotation(const msr::airlib::Quaternionr& q, const std::string& character_name) override; - virtual msr::airlib::Quaternionr charGetHeadRotation(const std::string& character_name) const override; - virtual void charSetBonePose(const std::string& bone_name, const msr::airlib::Pose& pose, const std::string& character_name) override; - virtual msr::airlib::Pose charGetBonePose(const std::string& bone_name, const std::string& character_name) const override; - virtual void charResetBonePose(const std::string& bone_name, const std::string& character_name) override; - virtual void charSetFacePreset(const std::string& preset_name, float value, const std::string& character_name) override; - virtual void charSetFacePresets(const std::unordered_map& presets, const std::string& character_name) override; - virtual void charSetBonePoses(const std::unordered_map& poses, const std::string& character_name) override; - virtual std::unordered_map charGetBonePoses(const std::vector& bone_names, const std::string& character_name) const override; - -private: - AAirSimCharacter* getAirSimCharacter(const std::string& character_name); - const AAirSimCharacter* getAirSimCharacter(const std::string& character_name) const; - - - private: ASimModeBase* simmode_; - std::map chars_; }; diff --git a/docs/unity_api_support.md b/docs/unity_api_support.md index 56049ef8f1..9e01f25a6d 100644 --- a/docs/unity_api_support.md +++ b/docs/unity_api_support.md @@ -47,22 +47,6 @@ | rotateToYaw | TODO | TODO | | setCameraOrientation | TODO | TODO | | setRCData | TODO | TODO | -| simCharGetAvailableFaceExpressions | Not Supported | Not Supported | -| simCharGetBonePose | Not Supported | Not Supported | -| simCharGetBonePoses | Not Supported | Not Supported | -| simCharGetFaceExpression | Not Supported | Not Supported | -| simCharGetHeadRotation | Not Supported | Not Supported | -| simCharGetSkinAgeing | Not Supported | Not Supported | -| simCharGetSkinDarkness | Not Supported | Not Supported | -| simCharResetBonePose | Not Supported | Not Supported | -| simCharSetBonePose | Not Supported | Not Supported | -| simCharSetBonePoses | Not Supported | Not Supported | -| simCharSetFaceExpression | Not Supported | Not Supported | -| simCharSetFacePreset | Not Supported | Not Supported | -| simCharSetFacePresets | Not Supported | Not Supported | -| simCharSetHeadRotation | Not Supported | Not Supported | -| simCharSetSkinAgeing | Not Supported | Not Supported | -| simCharSetSkinDarkness | Not Supported | Not Supported | | simContinueForTime | Supported | Supported | | simGetCameraInfo | TODO | TODO | | simGetGroundTruthEnvironment | TODO | TODO |