From 1e1caa281b68d53eecb993ef7100b4c02542a359 Mon Sep 17 00:00:00 2001 From: jmackay2 Date: Wed, 9 Mar 2022 23:04:58 -0500 Subject: [PATCH 01/50] Update some deprecated functionality in UE 4.27 and 5 with backward compatibility --- .../Plugins/AirSim/Source/AirBlueprintLib.cpp | 20 +++++++++++++++---- .../AirSim/Source/DetectionComponent.cpp | 4 ++-- .../AirSim/Source/Recording/RecordingFile.cpp | 6 +++++- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/Unreal/Plugins/AirSim/Source/AirBlueprintLib.cpp b/Unreal/Plugins/AirSim/Source/AirBlueprintLib.cpp index e7289d6998..751e191a00 100644 --- a/Unreal/Plugins/AirSim/Source/AirBlueprintLib.cpp +++ b/Unreal/Plugins/AirSim/Source/AirBlueprintLib.cpp @@ -455,8 +455,12 @@ std::vector UAirBlueprintLib::Ge //Various checks if there is even a valid mesh if (!comp->GetStaticMesh()) continue; - if (!comp->GetStaticMesh()->RenderData) continue; - if (comp->GetStaticMesh()->RenderData->LODResources.Num() == 0) continue; + if (!comp->GetStaticMesh()->HasValidRenderData()) continue; + #if (ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION > 26) + if (comp->GetStaticMesh()->GetRenderData()->LODResources.Num() == 0) continue; + #else + if (comp->GetStaticMesh()->RenderData->LODResources.Num() == 0) continue; + #endif msr::airlib::MeshPositionVertexBuffersResponse mesh; mesh.name = name; @@ -471,7 +475,11 @@ std::vector UAirBlueprintLib::Ge mesh.orientation.y() = att.Y; mesh.orientation.z() = att.Z; - FPositionVertexBuffer* vertex_buffer = &comp->GetStaticMesh()->RenderData->LODResources[0].VertexBuffers.PositionVertexBuffer; + #if (ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION > 26) + FPositionVertexBuffer* vertex_buffer = &comp->GetStaticMesh()->GetRenderData()->LODResources[0].VertexBuffers.PositionVertexBuffer; + #else + FPositionVertexBuffer* vertex_buffer = &comp->GetStaticMesh()->RenderData->LODResources[0].VertexBuffers.PositionVertexBuffer; + #endif if (vertex_buffer) { const int32 vertex_count = vertex_buffer->VertexBufferRHI->GetSize(); TArray vertices; @@ -486,7 +494,11 @@ std::vector UAirBlueprintLib::Ge RHIUnlockVertexBuffer(vertex_buffer->VertexBufferRHI); }); - FStaticMeshLODResources& lod = comp->GetStaticMesh()->RenderData->LODResources[0]; + #if (ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION > 26) + FStaticMeshLODResources& lod = comp->GetStaticMesh()->GetRenderData()->LODResources[0]; + #else + FStaticMeshLODResources& lod = comp->GetStaticMesh()->RenderData->LODResources[0]; + #endif FRawStaticIndexBuffer* IndexBuffer = &lod.IndexBuffer; int num_indices = IndexBuffer->IndexBufferRHI->GetSize() / IndexBuffer->IndexBufferRHI->GetStride(); diff --git a/Unreal/Plugins/AirSim/Source/DetectionComponent.cpp b/Unreal/Plugins/AirSim/Source/DetectionComponent.cpp index a72a9929e5..a1fc1281fa 100644 --- a/Unreal/Plugins/AirSim/Source/DetectionComponent.cpp +++ b/Unreal/Plugins/AirSim/Source/DetectionComponent.cpp @@ -142,7 +142,7 @@ bool UDetectionComponent::calcBoundingFromViewInfo(AActor* actor, FBox2D& box_ou for (FVector& point : points) { is_world_hit = GetWorld()->LineTraceSingleByChannel(result, GetComponentLocation(), point, ECC_WorldStatic); if (is_world_hit) { - if (result.Actor == actor) { + if (result.GetActor() == actor) { is_visible = true; break; } @@ -156,7 +156,7 @@ bool UDetectionComponent::calcBoundingFromViewInfo(AActor* actor, FBox2D& box_ou FVector point = UKismetMathLibrary::RandomPointInBoundingBox(origin, extend); is_world_hit = GetWorld()->LineTraceSingleByChannel(result, GetComponentLocation(), point, ECC_WorldStatic); if (is_world_hit) { - if (result.Actor == actor) { + if (result.GetActor() == actor) { is_visible = true; break; } diff --git a/Unreal/Plugins/AirSim/Source/Recording/RecordingFile.cpp b/Unreal/Plugins/AirSim/Source/Recording/RecordingFile.cpp index 533ffcca32..17e094b046 100644 --- a/Unreal/Plugins/AirSim/Source/Recording/RecordingFile.cpp +++ b/Unreal/Plugins/AirSim/Source/Recording/RecordingFile.cpp @@ -1,5 +1,9 @@ #include "RecordingFile.h" -#include "HAL/PlatformFilemanager.h" +#if ENGINE_MAJOR_VERSION > 4 + #include "HAL/PlatformFileManager.h" +#elif + #include "HAL/PlatformFilemanager.h" +#endif #include "Misc/FileHelper.h" #include #include "ImageUtils.h" From 082683489039de7cd1cd03e4f11dd3aad1a981bb Mon Sep 17 00:00:00 2001 From: HSC-1 Date: Thu, 7 Apr 2022 11:20:32 +0900 Subject: [PATCH 02/50] add material element index --- AirLib/include/api/RpcLibClientBase.hpp | 4 ++-- AirLib/include/api/WorldSimApiBase.hpp | 6 ++++-- AirLib/src/api/RpcLibClientBase.cpp | 9 +++++---- AirLib/src/api/RpcLibServerBase.cpp | 8 ++++---- PythonClient/airsim/client.py | 10 ++++++---- .../AirsimWrapper/Source/WorldSimApi.cpp | 4 ++-- .../AirsimWrapper/Source/WorldSimApi.h | 4 ++-- Unreal/Plugins/AirSim/Source/WorldSimApi.cpp | 17 ++++++++++------- Unreal/Plugins/AirSim/Source/WorldSimApi.h | 6 ++++-- 9 files changed, 39 insertions(+), 29 deletions(-) diff --git a/AirLib/include/api/RpcLibClientBase.hpp b/AirLib/include/api/RpcLibClientBase.hpp index cc3914b6a1..53e27392fc 100644 --- a/AirLib/include/api/RpcLibClientBase.hpp +++ b/AirLib/include/api/RpcLibClientBase.hpp @@ -152,8 +152,8 @@ namespace airlib void simSetKinematics(const Kinematics::State& state, bool ignore_collision, const std::string& vehicle_name = ""); msr::airlib::Environment::State simGetGroundTruthEnvironment(const std::string& vehicle_name = "") const; std::vector simSwapTextures(const std::string& tags, int tex_id = 0, int component_id = 0, int material_id = 0); - bool simSetObjectMaterial(const std::string& object_name, const std::string& material_name); - bool simSetObjectMaterialFromTexture(const std::string& object_name, const std::string& texture_path); + bool simSetObjectMaterial(const std::string& object_name, const std::string& material_name, const int component_id=0); + bool simSetObjectMaterialFromTexture(const std::string& object_name, const std::string& texture_path, const int component_id=0); // Recording APIs void startRecording(); diff --git a/AirLib/include/api/WorldSimApiBase.hpp b/AirLib/include/api/WorldSimApiBase.hpp index e7fc7c3754..c9bf790088 100644 --- a/AirLib/include/api/WorldSimApiBase.hpp +++ b/AirLib/include/api/WorldSimApiBase.hpp @@ -74,8 +74,8 @@ namespace airlib virtual bool setObjectScale(const std::string& object_name, const Vector3r& scale) = 0; virtual std::unique_ptr> swapTextures(const std::string& tag, int tex_id = 0, int component_id = 0, int material_id = 0) = 0; virtual bool setLightIntensity(const std::string& light_name, float intensity) = 0; - virtual bool setObjectMaterial(const std::string& object_name, const std::string& material_name) = 0; - virtual bool setObjectMaterialFromTexture(const std::string& object_name, const std::string& texture_path) = 0; + virtual bool setObjectMaterial(const std::string& object_name, const std::string& material_name, const int component_id=0) = 0; + virtual bool setObjectMaterialFromTexture(const std::string& object_name, const std::string& texture_path, const int component_id=0) = 0; virtual vector getMeshPositionVertexBuffers() const = 0; virtual bool createVoxelGrid(const Vector3r& position, const int& x_size, const int& y_size, const int& z_size, const float& res, const std::string& output_file) = 0; @@ -104,6 +104,8 @@ namespace airlib const std::string& vehicle_name, bool external) const = 0; virtual std::vector getImage(ImageCaptureBase::ImageType image_type, const CameraDetails& camera_details) const = 0; + + //CinemAirSim virtual std::vector getPresetLensSettings(const CameraDetails& camera_details) = 0; virtual std::string getLensSettings(const CameraDetails& camera_details) = 0; diff --git a/AirLib/src/api/RpcLibClientBase.cpp b/AirLib/src/api/RpcLibClientBase.cpp index f9ea4b59ec..0cc4a621fc 100644 --- a/AirLib/src/api/RpcLibClientBase.cpp +++ b/AirLib/src/api/RpcLibClientBase.cpp @@ -272,6 +272,7 @@ __pragma(warning(disable : 4239)) return result; } + //CinemAirSim std::vector RpcLibClientBase::simGetPresetLensSettings(const std::string& camera_name, const std::string& vehicle_name, bool external) { @@ -493,14 +494,14 @@ __pragma(warning(disable : 4239)) return pimpl_->client.call("simSwapTextures", tags, tex_id, component_id, material_id).as>(); } - bool RpcLibClientBase::simSetObjectMaterial(const std::string& object_name, const std::string& material_name) + bool RpcLibClientBase::simSetObjectMaterial(const std::string& object_name, const std::string& material_name, const int component_id) { - return pimpl_->client.call("simSetObjectMaterial", object_name, material_name).as(); + return pimpl_->client.call("simSetObjectMaterial", object_name, material_name, component_id).as(); } - bool RpcLibClientBase::simSetObjectMaterialFromTexture(const std::string& object_name, const std::string& texture_path) + bool RpcLibClientBase::simSetObjectMaterialFromTexture(const std::string& object_name, const std::string& texture_path, const int component_id) { - return pimpl_->client.call("simSetObjectMaterialFromTexture", object_name, texture_path).as(); + return pimpl_->client.call("simSetObjectMaterialFromTexture", object_name, texture_path, component_id).as(); } bool RpcLibClientBase::simLoadLevel(const string& level_name) diff --git a/AirLib/src/api/RpcLibServerBase.cpp b/AirLib/src/api/RpcLibServerBase.cpp index 6d1fc7b50a..0710bd8d5a 100644 --- a/AirLib/src/api/RpcLibServerBase.cpp +++ b/AirLib/src/api/RpcLibServerBase.cpp @@ -477,12 +477,12 @@ namespace airlib return *getWorldSimApi()->swapTextures(tag, tex_id, component_id, material_id); }); - pimpl_->server.bind("simSetObjectMaterial", [&](const std::string& object_name, const std::string& material_name) -> bool { - return getWorldSimApi()->setObjectMaterial(object_name, material_name); + pimpl_->server.bind("simSetObjectMaterial", [&](const std::string& object_name, const std::string& material_name, const int component_id) -> bool { + return getWorldSimApi()->setObjectMaterial(object_name, material_name, component_id); }); - pimpl_->server.bind("simSetObjectMaterialFromTexture", [&](const std::string& object_name, const std::string& texture_path) -> bool { - return getWorldSimApi()->setObjectMaterialFromTexture(object_name, texture_path); + pimpl_->server.bind("simSetObjectMaterialFromTexture", [&](const std::string& object_name, const std::string& texture_path, const int component_id) -> bool { + return getWorldSimApi()->setObjectMaterialFromTexture(object_name, texture_path, component_id); }); pimpl_->server.bind("startRecording", [&]() -> void { diff --git a/PythonClient/airsim/client.py b/PythonClient/airsim/client.py index bcda726478..fb6bccc4fe 100644 --- a/PythonClient/airsim/client.py +++ b/PythonClient/airsim/client.py @@ -190,31 +190,33 @@ def simSwapTextures(self, tags, tex_id = 0, component_id = 0, material_id = 0): """ return self.client.call("simSwapTextures", tags, tex_id, component_id, material_id) - def simSetObjectMaterial(self, object_name, material_name): + def simSetObjectMaterial(self, object_name, material_name, component_id = 0): """ Runtime Swap Texture API See https://microsoft.github.io/AirSim/retexturing/ for details Args: object_name (str): name of object to set material for material_name (str): name of material to set for object + component_id (int, optional) : index of material elements Returns: bool: True if material was set """ - return self.client.call("simSetObjectMaterial", object_name, material_name) + return self.client.call("simSetObjectMaterial", object_name, material_name, component_id) - def simSetObjectMaterialFromTexture(self, object_name, texture_path): + def simSetObjectMaterialFromTexture(self, object_name, texture_path, component_id = 0): """ Runtime Swap Texture API See https://microsoft.github.io/AirSim/retexturing/ for details Args: object_name (str): name of object to set material for texture_path (str): path to texture to set for object + component_id (int, optional) : index of material elements Returns: bool: True if material was set """ - return self.client.call("simSetObjectMaterialFromTexture", object_name, texture_path) + return self.client.call("simSetObjectMaterialFromTexture", object_name, texture_path, component_id) # time-of-day control diff --git a/Unity/AirLibWrapper/AirsimWrapper/Source/WorldSimApi.cpp b/Unity/AirLibWrapper/AirsimWrapper/Source/WorldSimApi.cpp index 6bdbe80c5a..dac9eb939d 100644 --- a/Unity/AirLibWrapper/AirsimWrapper/Source/WorldSimApi.cpp +++ b/Unity/AirLibWrapper/AirsimWrapper/Source/WorldSimApi.cpp @@ -75,7 +75,7 @@ std::unique_ptr> WorldSimApi::swapTextures(const std::s return result; } -bool WorldSimApi::setObjectMaterialFromTexture(const std::string& object_name, const std::string& texture_path) +bool WorldSimApi::setObjectMaterialFromTexture(const std::string& object_name, const std::string& texture_path, const int component_id) { throw std::invalid_argument(common_utils::Utils::stringf( "setObjectMaterialFromTexture is not supported on unity") @@ -83,7 +83,7 @@ bool WorldSimApi::setObjectMaterialFromTexture(const std::string& object_name, c return false; } -bool WorldSimApi::setObjectMaterial(const std::string& object_name, const std::string& material_name) +bool WorldSimApi::setObjectMaterial(const std::string& object_name, const std::string& material_name, const int component_id) { throw std::invalid_argument(common_utils::Utils::stringf( "setObjectMaterial is not supported on unity") diff --git a/Unity/AirLibWrapper/AirsimWrapper/Source/WorldSimApi.h b/Unity/AirLibWrapper/AirsimWrapper/Source/WorldSimApi.h index def2b04ed8..851cb1942c 100644 --- a/Unity/AirLibWrapper/AirsimWrapper/Source/WorldSimApi.h +++ b/Unity/AirLibWrapper/AirsimWrapper/Source/WorldSimApi.h @@ -40,8 +40,8 @@ class WorldSimApi : public msr::airlib::WorldSimApiBase virtual bool setLightIntensity(const std::string& light_name, float intensity) override; virtual std::unique_ptr> swapTextures(const std::string& tag, int tex_id = 0, int component_id = 0, int material_id = 0) override; - virtual bool setObjectMaterial(const std::string& object_name, const std::string& material_name) override; - virtual bool setObjectMaterialFromTexture(const std::string& object_name, const std::string& texture_path) override; + virtual bool setObjectMaterial(const std::string& object_name, const std::string& material_name, const int component_id=0) override; + virtual bool setObjectMaterialFromTexture(const std::string& object_name, const std::string& texture_path, const int component_id=0) override; virtual std::vector listSceneObjects(const std::string& name_regex) const override; virtual Pose getObjectPose(const std::string& object_name) const override; diff --git a/Unreal/Plugins/AirSim/Source/WorldSimApi.cpp b/Unreal/Plugins/AirSim/Source/WorldSimApi.cpp index c832051340..afe88a5e97 100644 --- a/Unreal/Plugins/AirSim/Source/WorldSimApi.cpp +++ b/Unreal/Plugins/AirSim/Source/WorldSimApi.cpp @@ -476,10 +476,10 @@ std::unique_ptr> WorldSimApi::swapTextures(const std::s return swappedObjectNames; } -bool WorldSimApi::setObjectMaterialFromTexture(const std::string& object_name, const std::string& texture_path) +bool WorldSimApi::setObjectMaterialFromTexture(const std::string& object_name, const std::string& texture_path, const int component_id) { bool success = false; - UAirBlueprintLib::RunCommandOnGameThread([this, &object_name, &texture_path, &success]() { + UAirBlueprintLib::RunCommandOnGameThread([this, &object_name, &texture_path, &success, &component_id]() { if (!IsValid(simmode_->domain_rand_material_)) { UAirBlueprintLib::LogMessageString("Cannot find material for domain randomization", "", @@ -495,7 +495,7 @@ bool WorldSimApi::setObjectMaterialFromTexture(const std::string& object_name, c for (UStaticMeshComponent* staticMeshComponent : components) { UMaterialInstanceDynamic* dynamic_material = UMaterialInstanceDynamic::Create(simmode_->domain_rand_material_, staticMeshComponent); dynamic_material->SetTextureParameterValue("TextureParameter", texture_desired); - staticMeshComponent->SetMaterial(0, dynamic_material); + staticMeshComponent->SetMaterial(component_id, dynamic_material); } success = true; } @@ -511,10 +511,10 @@ bool WorldSimApi::setObjectMaterialFromTexture(const std::string& object_name, c return success; } -bool WorldSimApi::setObjectMaterial(const std::string& object_name, const std::string& material_name) +bool WorldSimApi::setObjectMaterial(const std::string& object_name, const std::string& material_name, const int component_id) { bool success = false; - UAirBlueprintLib::RunCommandOnGameThread([this, &object_name, &material_name, &success]() { + UAirBlueprintLib::RunCommandOnGameThread([this, &object_name, &material_name, &success, &component_id]() { AActor* actor = UAirBlueprintLib::FindActor(simmode_, FString(object_name.c_str())); UMaterial* material = static_cast(StaticLoadObject(UMaterial::StaticClass(), nullptr, *FString(material_name.c_str()))); @@ -528,7 +528,7 @@ bool WorldSimApi::setObjectMaterial(const std::string& object_name, const std::s TArray components; actor->GetComponents(components); for (UStaticMeshComponent* staticMeshComponent : components) { - staticMeshComponent->SetMaterial(0, material); + staticMeshComponent->SetMaterial(component_id, material); } success = true; } @@ -748,6 +748,8 @@ std::string WorldSimApi::getSettingsString() const return msr::airlib::AirSimSettings::singleton().settings_text_; } + + bool WorldSimApi::testLineOfSightBetweenPoints(const msr::airlib::GeoPoint& lla1, const msr::airlib::GeoPoint& lla2) const { bool hit; @@ -843,7 +845,6 @@ std::vector WorldSimApi::getWorldExtents() const return result; } - msr::airlib::CameraInfo WorldSimApi::getCameraInfo(const CameraDetails& camera_details) const { msr::airlib::CameraInfo info; @@ -919,6 +920,8 @@ std::vector WorldSimApi::getImage(ImageCaptureBase::ImageType image_typ return std::vector(); } + + //CinemAirSim std::vector WorldSimApi::getPresetLensSettings(const CameraDetails& camera_details) { diff --git a/Unreal/Plugins/AirSim/Source/WorldSimApi.h b/Unreal/Plugins/AirSim/Source/WorldSimApi.h index 7174d89459..90ea6a5069 100644 --- a/Unreal/Plugins/AirSim/Source/WorldSimApi.h +++ b/Unreal/Plugins/AirSim/Source/WorldSimApi.h @@ -50,8 +50,8 @@ class WorldSimApi : public msr::airlib::WorldSimApiBase virtual bool setLightIntensity(const std::string& light_name, float intensity) override; virtual std::unique_ptr> swapTextures(const std::string& tag, int tex_id = 0, int component_id = 0, int material_id = 0) override; - virtual bool setObjectMaterial(const std::string& object_name, const std::string& material_name) override; - virtual bool setObjectMaterialFromTexture(const std::string& object_name, const std::string& texture_path) override; + virtual bool setObjectMaterial(const std::string& object_name, const std::string& material_name, const int component_id=0) override; + virtual bool setObjectMaterialFromTexture(const std::string& object_name, const std::string& texture_path, const int component_id=0) override; virtual std::vector listSceneObjects(const std::string& name_regex) const override; virtual Pose getObjectPose(const std::string& object_name) const override; virtual bool setObjectPose(const std::string& object_name, const Pose& pose, bool teleport) override; @@ -84,6 +84,8 @@ class WorldSimApi : public msr::airlib::WorldSimApiBase virtual bool testLineOfSightBetweenPoints(const msr::airlib::GeoPoint& point1, const msr::airlib::GeoPoint& point2) const override; virtual std::vector getWorldExtents() const override; + + // Camera APIs virtual msr::airlib::CameraInfo getCameraInfo(const CameraDetails& camera_details) const override; virtual void setCameraPose(const msr::airlib::Pose& pose, const CameraDetails& camera_details) override; From 729ebf0a34c30a07ba2b0074cd7e6aa6557d191c Mon Sep 17 00:00:00 2001 From: jmackay2 Date: Mon, 11 Apr 2022 22:00:15 -0400 Subject: [PATCH 03/50] apply style from clang-format --- .../Plugins/AirSim/Source/AirBlueprintLib.cpp | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/Unreal/Plugins/AirSim/Source/AirBlueprintLib.cpp b/Unreal/Plugins/AirSim/Source/AirBlueprintLib.cpp index 751e191a00..90d3e22c81 100644 --- a/Unreal/Plugins/AirSim/Source/AirBlueprintLib.cpp +++ b/Unreal/Plugins/AirSim/Source/AirBlueprintLib.cpp @@ -456,11 +456,11 @@ std::vector UAirBlueprintLib::Ge //Various checks if there is even a valid mesh if (!comp->GetStaticMesh()) continue; if (!comp->GetStaticMesh()->HasValidRenderData()) continue; - #if (ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION > 26) - if (comp->GetStaticMesh()->GetRenderData()->LODResources.Num() == 0) continue; - #else - if (comp->GetStaticMesh()->RenderData->LODResources.Num() == 0) continue; - #endif +#if (ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION > 26) + if (comp->GetStaticMesh()->GetRenderData()->LODResources.Num() == 0) continue; +#else + if (comp->GetStaticMesh()->RenderData->LODResources.Num() == 0) continue; +#endif msr::airlib::MeshPositionVertexBuffersResponse mesh; mesh.name = name; @@ -475,11 +475,11 @@ std::vector UAirBlueprintLib::Ge mesh.orientation.y() = att.Y; mesh.orientation.z() = att.Z; - #if (ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION > 26) - FPositionVertexBuffer* vertex_buffer = &comp->GetStaticMesh()->GetRenderData()->LODResources[0].VertexBuffers.PositionVertexBuffer; - #else - FPositionVertexBuffer* vertex_buffer = &comp->GetStaticMesh()->RenderData->LODResources[0].VertexBuffers.PositionVertexBuffer; - #endif +#if (ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION > 26) + FPositionVertexBuffer* vertex_buffer = &comp->GetStaticMesh()->GetRenderData()->LODResources[0].VertexBuffers.PositionVertexBuffer; +#else + FPositionVertexBuffer* vertex_buffer = &comp->GetStaticMesh()->RenderData->LODResources[0].VertexBuffers.PositionVertexBuffer; +#endif if (vertex_buffer) { const int32 vertex_count = vertex_buffer->VertexBufferRHI->GetSize(); TArray vertices; @@ -494,11 +494,11 @@ std::vector UAirBlueprintLib::Ge RHIUnlockVertexBuffer(vertex_buffer->VertexBufferRHI); }); - #if (ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION > 26) - FStaticMeshLODResources& lod = comp->GetStaticMesh()->GetRenderData()->LODResources[0]; - #else - FStaticMeshLODResources& lod = comp->GetStaticMesh()->RenderData->LODResources[0]; - #endif +#if (ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION > 26) + FStaticMeshLODResources& lod = comp->GetStaticMesh()->GetRenderData()->LODResources[0]; +#else + FStaticMeshLODResources& lod = comp->GetStaticMesh()->RenderData->LODResources[0]; +#endif FRawStaticIndexBuffer* IndexBuffer = &lod.IndexBuffer; int num_indices = IndexBuffer->IndexBufferRHI->GetSize() / IndexBuffer->IndexBufferRHI->GetStride(); From 66c75497cfda2d7461434cbb2038287f78a0c9c6 Mon Sep 17 00:00:00 2001 From: user Date: Wed, 13 Apr 2022 09:19:40 +0800 Subject: [PATCH 04/50] fix4475 --- ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 0f90cb7cd5..71e25bb8f3 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -1187,7 +1187,7 @@ void AirsimROSWrapper::append_static_camera_tf(VehicleROS* vehicle_ros, const st { geometry_msgs::msg::TransformStamped static_cam_tf_body_msg; static_cam_tf_body_msg.header.frame_id = vehicle_ros->vehicle_name_ + "/" + odom_frame_id_; - static_cam_tf_body_msg.child_frame_id = camera_name + "_body/static"; + static_cam_tf_body_msg.child_frame_id = vehicle_ros->vehicle_name_ + "/" + camera_name + "_body/static"; static_cam_tf_body_msg.transform = get_transform_msg_from_airsim(camera_setting.position, camera_setting.rotation); if (isENU_) { @@ -1195,7 +1195,7 @@ void AirsimROSWrapper::append_static_camera_tf(VehicleROS* vehicle_ros, const st } geometry_msgs::msg::TransformStamped static_cam_tf_optical_msg = static_cam_tf_body_msg; - static_cam_tf_optical_msg.child_frame_id = camera_name + "_optical/static"; + static_cam_tf_optical_msg.child_frame_id = vehicle_ros->vehicle_name_ + "/" + camera_name + "_optical/static"; tf2::Quaternion quat_cam_body; tf2::Quaternion quat_cam_optical; @@ -1356,7 +1356,7 @@ void AirsimROSWrapper::publish_camera_tf(const ImageResponse& img_response, cons geometry_msgs::msg::TransformStamped cam_tf_body_msg; cam_tf_body_msg.header.stamp = rclcpp::Time(img_response.time_stamp); cam_tf_body_msg.header.frame_id = frame_id; - cam_tf_body_msg.child_frame_id = child_frame_id + "_body"; + cam_tf_body_msg.child_frame_id = frame_id + "/" + child_frame_id + "_body"; cam_tf_body_msg.transform = get_transform_msg_from_airsim(img_response.camera_position, img_response.camera_orientation); if (isENU_) { @@ -1366,7 +1366,7 @@ void AirsimROSWrapper::publish_camera_tf(const ImageResponse& img_response, cons geometry_msgs::msg::TransformStamped cam_tf_optical_msg; cam_tf_optical_msg.header.stamp = rclcpp::Time(img_response.time_stamp); cam_tf_optical_msg.header.frame_id = frame_id; - cam_tf_optical_msg.child_frame_id = child_frame_id + "_optical"; + cam_tf_optical_msg.child_frame_id = frame_id + "/" + child_frame_id + "_optical"; cam_tf_optical_msg.transform.translation = cam_tf_body_msg.transform.translation; tf2::Quaternion quat_cam_body; From b3913c8ff9405204f7be8aff4e1c3b67f3362f0a Mon Sep 17 00:00:00 2001 From: zimmy87 Date: Wed, 13 Apr 2022 09:44:57 -0700 Subject: [PATCH 05/50] upgrade VS support to VS 2022 --- AirLib/AirLib.vcxproj | 12 +- AirLibUnitTests/AirLibUnitTests.vcxproj | 12 +- DroneServer/DroneServer.vcxproj | 12 +- DroneShell/DroneShell.vcxproj | 12 +- Examples/Examples.vcxproj | 12 +- HelloCar/HelloCar.vcxproj | 558 +++++++++--------- HelloDrone/HelloDrone.vcxproj | 12 +- HelloSpawnedDrones/HelloSpawnedDrones.vcxproj | 510 ++++++++-------- MavLinkCom/MavLinkCom.vcxproj | 2 +- MavLinkCom/MavLinkTest/MavLinkTest.vcxproj | 2 +- SGM/src/sgmstereo/sgmstereo.vcxproj | 398 ++++++------- SGM/src/stereoPipeline/stereoPipeline.vcxproj | 526 ++++++++--------- UnrealPluginFiles.vcxproj | 349 +++++------ build.cmd | 8 +- 14 files changed, 1213 insertions(+), 1212 deletions(-) diff --git a/AirLib/AirLib.vcxproj b/AirLib/AirLib.vcxproj index bb1c4f4a95..0e6d1b948f 100644 --- a/AirLib/AirLib.vcxproj +++ b/AirLib/AirLib.vcxproj @@ -205,40 +205,40 @@ StaticLibrary true - v142 + v143 Unicode StaticLibrary false - v142 + v143 true Unicode StaticLibrary false - v142 + v143 true Unicode StaticLibrary true - v142 + v143 Unicode StaticLibrary false - v142 + v143 true Unicode StaticLibrary false - v142 + v143 true Unicode diff --git a/AirLibUnitTests/AirLibUnitTests.vcxproj b/AirLibUnitTests/AirLibUnitTests.vcxproj index 35c5bcce82..29a618edb6 100644 --- a/AirLibUnitTests/AirLibUnitTests.vcxproj +++ b/AirLibUnitTests/AirLibUnitTests.vcxproj @@ -39,40 +39,40 @@ Application true - v142 + v143 Unicode Application false - v142 + v143 true Unicode Application false - v142 + v143 true Unicode Application true - v142 + v143 Unicode Application false - v142 + v143 true Unicode Application false - v142 + v143 true Unicode diff --git a/DroneServer/DroneServer.vcxproj b/DroneServer/DroneServer.vcxproj index 4c6eba6c89..df280d4804 100644 --- a/DroneServer/DroneServer.vcxproj +++ b/DroneServer/DroneServer.vcxproj @@ -47,40 +47,40 @@ Application true - v142 + v143 Unicode Application false - v142 + v143 true Unicode Application false - v142 + v143 true Unicode Application true - v142 + v143 Unicode Application false - v142 + v143 true Unicode Application false - v142 + v143 true Unicode diff --git a/DroneShell/DroneShell.vcxproj b/DroneShell/DroneShell.vcxproj index 7e5d849d75..ed2b265be3 100644 --- a/DroneShell/DroneShell.vcxproj +++ b/DroneShell/DroneShell.vcxproj @@ -39,40 +39,40 @@ Application true - v142 + v143 Unicode Application false - v142 + v143 true Unicode Application false - v142 + v143 true Unicode Application true - v142 + v143 Unicode Application false - v142 + v143 true Unicode Application false - v142 + v143 true Unicode diff --git a/Examples/Examples.vcxproj b/Examples/Examples.vcxproj index 118dae6193..4088abf9f1 100644 --- a/Examples/Examples.vcxproj +++ b/Examples/Examples.vcxproj @@ -53,40 +53,40 @@ Application true - v142 + v143 Unicode Application false - v142 + v143 true Unicode Application false - v142 + v143 true Unicode Application true - v142 + v143 Unicode Application false - v142 + v143 true Unicode Application false - v142 + v143 true Unicode diff --git a/HelloCar/HelloCar.vcxproj b/HelloCar/HelloCar.vcxproj index 24db5b3e76..f6efb33118 100644 --- a/HelloCar/HelloCar.vcxproj +++ b/HelloCar/HelloCar.vcxproj @@ -1,280 +1,280 @@ - - - - - true - - - - Debug - Win32 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - RelWithDebInfo - Win32 - - - RelWithDebInfo - x64 - - - - - - - - {4bfb7231-077a-4671-bd21-d3ade3ea36e7} - - - {8510c7a4-bf63-41d2-94f6-d8731d137a5a} - - - - {4358ED90-CCA1-47A8-8D68-A260F212931E} - Win32Proj - HelloCar - - - - Application - true - v142 - Unicode - - - Application - false - v142 - true - Unicode - - - Application - false - v142 - true - Unicode - - - Application - true - v142 - Unicode - - - Application - false - v142 - true - Unicode - - - Application - false - v142 - true - Unicode - - - - - - - - - - - - - - - - - - - - - - - - - - - true - $(ProjectDir)build\$(Platform)\$(Configuration)\ - $(ProjectDir)temp\$(ProjectName)\$(Platform)\$(Configuration)\ - - - true - $(ProjectDir)temp\$(ProjectName)\$(Platform)\$(Configuration)\ - $(ProjectDir)build\$(Platform)\$(Configuration)\ - - - false - $(ProjectDir)build\$(Platform)\$(Configuration)\ - $(ProjectDir)temp\$(ProjectName)\$(Platform)\$(Configuration)\ - - - false - $(ProjectDir)build\$(Platform)\$(Configuration)\ - $(ProjectDir)temp\$(ProjectName)\$(Platform)\$(Configuration)\ - - - false - $(ProjectDir)temp\$(ProjectName)\$(Platform)\$(Configuration)\ - $(ProjectDir)build\$(Platform)\$(Configuration)\ - - - false - $(ProjectDir)temp\$(ProjectName)\$(Platform)\$(Configuration)\ - $(ProjectDir)build\$(Platform)\$(Configuration)\ - - - - - - Level3 - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(ProjectDir)..\AirLib\deps\rpclib\include;include;$(ProjectDir)..\AirLib\deps\eigen3;$(ProjectDir)..\AirLib\include - true - /w34263 /w34266 %(AdditionalOptions) - stdcpp17 - - - Console - true - rpc.lib;%(AdditionalDependencies) - $(ProjectDir)\..\AirLib\deps\MavLinkCom\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\deps\rpclib\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\lib\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) - - - - - - - Level4 - Disabled - _SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(ProjectDir)..\AirLib\deps\rpclib\include;include;$(ProjectDir)..\AirLib\deps\eigen3;$(ProjectDir)..\AirLib\include - true - /w34263 /w34266 %(AdditionalOptions) - 4100;4505;4820;4464;4514;4710;4571;%(DisableSpecificWarnings) - stdcpp17 - - - Console - true - $(ProjectDir)\..\AirLib\deps\MavLinkCom\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\deps\rpclib\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\lib\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) - rpc.lib;%(AdditionalDependencies) - - - - - Level3 - - - MaxSpeed - true - true - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(ProjectDir)..\AirLib\deps\rpclib\include;include;$(ProjectDir)..\AirLib\deps\eigen3;$(ProjectDir)..\AirLib\include - true - /w34263 /w34266 %(AdditionalOptions) - stdcpp17 - - - Console - true - true - true - $(ProjectDir)\..\AirLib\deps\MavLinkCom\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\deps\rpclib\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\lib\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) - rpc.lib;%(AdditionalDependencies) - - - - - Level3 - - - Disabled - true - true - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(ProjectDir)..\AirLib\deps\rpclib\include;include;$(ProjectDir)..\AirLib\deps\eigen3;$(ProjectDir)..\AirLib\include - true - /w34263 /w34266 %(AdditionalOptions) - stdcpp17 - false - - - Console - true - true - true - $(ProjectDir)\..\AirLib\deps\MavLinkCom\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\deps\rpclib\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\lib\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) - rpc.lib;%(AdditionalDependencies) - - - - - Level3 - - - MaxSpeed - true - true - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(ProjectDir)..\AirLib\deps\rpclib\include;include;$(ProjectDir)..\AirLib\deps\eigen3;$(ProjectDir)..\AirLib\include - true - /w34263 /w34266 %(AdditionalOptions) - stdcpp17 - - - Console - true - true - true - $(ProjectDir)\..\AirLib\deps\MavLinkCom\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\deps\rpclib\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\lib\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) - rpc.lib;%(AdditionalDependencies) - - - - - Level3 - - - Disabled - true - true - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(ProjectDir)..\AirLib\deps\rpclib\include;include;$(ProjectDir)..\AirLib\deps\eigen3;$(ProjectDir)..\AirLib\include - true - /w34263 /w34266 %(AdditionalOptions) - stdcpp17 - false - - - Console - true - true - true - $(ProjectDir)\..\AirLib\deps\MavLinkCom\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\deps\rpclib\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\lib\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) - rpc.lib;%(AdditionalDependencies) - - - - - + + + + + true + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + RelWithDebInfo + Win32 + + + RelWithDebInfo + x64 + + + + + + + + {4bfb7231-077a-4671-bd21-d3ade3ea36e7} + + + {8510c7a4-bf63-41d2-94f6-d8731d137a5a} + + + + {4358ED90-CCA1-47A8-8D68-A260F212931E} + Win32Proj + HelloCar + + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + Application + false + v143 + true + Unicode + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + Application + false + v143 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + + + true + $(ProjectDir)build\$(Platform)\$(Configuration)\ + $(ProjectDir)temp\$(ProjectName)\$(Platform)\$(Configuration)\ + + + true + $(ProjectDir)temp\$(ProjectName)\$(Platform)\$(Configuration)\ + $(ProjectDir)build\$(Platform)\$(Configuration)\ + + + false + $(ProjectDir)build\$(Platform)\$(Configuration)\ + $(ProjectDir)temp\$(ProjectName)\$(Platform)\$(Configuration)\ + + + false + $(ProjectDir)build\$(Platform)\$(Configuration)\ + $(ProjectDir)temp\$(ProjectName)\$(Platform)\$(Configuration)\ + + + false + $(ProjectDir)temp\$(ProjectName)\$(Platform)\$(Configuration)\ + $(ProjectDir)build\$(Platform)\$(Configuration)\ + + + false + $(ProjectDir)temp\$(ProjectName)\$(Platform)\$(Configuration)\ + $(ProjectDir)build\$(Platform)\$(Configuration)\ + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + $(ProjectDir)..\AirLib\deps\rpclib\include;include;$(ProjectDir)..\AirLib\deps\eigen3;$(ProjectDir)..\AirLib\include + true + /w34263 /w34266 %(AdditionalOptions) + stdcpp17 + + + Console + true + rpc.lib;%(AdditionalDependencies) + $(ProjectDir)\..\AirLib\deps\MavLinkCom\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\deps\rpclib\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\lib\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) + + + + + + + Level4 + Disabled + _SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + $(ProjectDir)..\AirLib\deps\rpclib\include;include;$(ProjectDir)..\AirLib\deps\eigen3;$(ProjectDir)..\AirLib\include + true + /w34263 /w34266 %(AdditionalOptions) + 4100;4505;4820;4464;4514;4710;4571;%(DisableSpecificWarnings) + stdcpp17 + + + Console + true + $(ProjectDir)\..\AirLib\deps\MavLinkCom\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\deps\rpclib\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\lib\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) + rpc.lib;%(AdditionalDependencies) + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + $(ProjectDir)..\AirLib\deps\rpclib\include;include;$(ProjectDir)..\AirLib\deps\eigen3;$(ProjectDir)..\AirLib\include + true + /w34263 /w34266 %(AdditionalOptions) + stdcpp17 + + + Console + true + true + true + $(ProjectDir)\..\AirLib\deps\MavLinkCom\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\deps\rpclib\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\lib\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) + rpc.lib;%(AdditionalDependencies) + + + + + Level3 + + + Disabled + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + $(ProjectDir)..\AirLib\deps\rpclib\include;include;$(ProjectDir)..\AirLib\deps\eigen3;$(ProjectDir)..\AirLib\include + true + /w34263 /w34266 %(AdditionalOptions) + stdcpp17 + false + + + Console + true + true + true + $(ProjectDir)\..\AirLib\deps\MavLinkCom\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\deps\rpclib\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\lib\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) + rpc.lib;%(AdditionalDependencies) + + + + + Level3 + + + MaxSpeed + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + $(ProjectDir)..\AirLib\deps\rpclib\include;include;$(ProjectDir)..\AirLib\deps\eigen3;$(ProjectDir)..\AirLib\include + true + /w34263 /w34266 %(AdditionalOptions) + stdcpp17 + + + Console + true + true + true + $(ProjectDir)\..\AirLib\deps\MavLinkCom\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\deps\rpclib\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\lib\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) + rpc.lib;%(AdditionalDependencies) + + + + + Level3 + + + Disabled + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + $(ProjectDir)..\AirLib\deps\rpclib\include;include;$(ProjectDir)..\AirLib\deps\eigen3;$(ProjectDir)..\AirLib\include + true + /w34263 /w34266 %(AdditionalOptions) + stdcpp17 + false + + + Console + true + true + true + $(ProjectDir)\..\AirLib\deps\MavLinkCom\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\deps\rpclib\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\lib\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) + rpc.lib;%(AdditionalDependencies) + + + + + \ No newline at end of file diff --git a/HelloDrone/HelloDrone.vcxproj b/HelloDrone/HelloDrone.vcxproj index 13da80be32..5be3a8e1b2 100644 --- a/HelloDrone/HelloDrone.vcxproj +++ b/HelloDrone/HelloDrone.vcxproj @@ -50,40 +50,40 @@ Application true - v142 + v143 Unicode Application false - v142 + v143 true Unicode Application false - v142 + v143 true Unicode Application true - v142 + v143 Unicode Application false - v142 + v143 true Unicode Application false - v142 + v143 true Unicode diff --git a/HelloSpawnedDrones/HelloSpawnedDrones.vcxproj b/HelloSpawnedDrones/HelloSpawnedDrones.vcxproj index 94f159a800..16caf34f0d 100644 --- a/HelloSpawnedDrones/HelloSpawnedDrones.vcxproj +++ b/HelloSpawnedDrones/HelloSpawnedDrones.vcxproj @@ -1,256 +1,256 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - RelWithDebInfo - Win32 - - - RelWithDebInfo - x64 - - - - - {4bfb7231-077a-4671-bd21-d3ade3ea36e7} - - - {8510c7a4-bf63-41d2-94f6-d8731d137a5a} - - - - 15.0 - {99CBF376-5EBA-4164-A657-E7D708C9D685} - Win32Proj - HelloSpawnedDrones - 10.0 - - - - Application - true - v142 - Unicode - - - Application - false - v142 - true - Unicode - - - Application - false - v142 - true - Unicode - - - Application - true - v142 - Unicode - - - Application - false - v142 - true - Unicode - - - Application - false - v142 - true - Unicode - - - - - - - - - - - - - - - - - - - - - - - - - - - true - $(ProjectDir)build\$(Platform)\$(Configuration)\ - $(ProjectDir)temp\$(ProjectName)\$(Platform)\$(Configuration)\ - - - true - $(ProjectDir)temp\$(ProjectName)\$(Platform)\$(Configuration)\ - $(ProjectDir)build\$(Platform)\$(Configuration)\ - - - false - $(ProjectDir)build\$(Platform)\$(Configuration)\ - $(ProjectDir)temp\$(ProjectName)\$(Platform)\$(Configuration)\ - - - false - $(ProjectDir)build\$(Platform)\$(Configuration)\ - $(ProjectDir)temp\$(ProjectName)\$(Platform)\$(Configuration)\ - - - false - $(ProjectDir)temp\$(ProjectName)\$(Platform)\$(Configuration)\ - $(ProjectDir)build\$(Platform)\$(Configuration)\ - - - false - $(ProjectDir)temp\$(ProjectName)\$(Platform)\$(Configuration)\ - $(ProjectDir)build\$(Platform)\$(Configuration)\ - - - - NotUsing - Level3 - Disabled - true - _DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - $(ProjectDir)..\AirLib\deps\rpclib\include;include;$(ProjectDir)..\AirLib\deps\eigen3;$(ProjectDir)..\AirLib\include - - - Console - true - $(ProjectDir)\..\AirLib\deps\MavLinkCom\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\deps\rpclib\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\lib\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) - rpc.lib;AirLib.lib;%(AdditionalDependencies) - - - - - NotUsing - Level3 - Disabled - true - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - - - Console - true - - - - - NotUsing - Level3 - MaxSpeed - true - true - true - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - - - Console - true - true - true - - - - - Use - Level3 - Disabled - true - true - true - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - false - - - Console - true - true - true - - - - - NotUsing - Level3 - MaxSpeed - true - true - true - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - $(ProjectDir)..\AirLib\deps\rpclib\include;include;$(ProjectDir)..\AirLib\deps\eigen3;$(ProjectDir)..\AirLib\include - - - Console - true - true - true - $(ProjectDir)\..\AirLib\deps\MavLinkCom\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\deps\rpclib\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\lib\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) - rpc.lib;AirLib.lib;%(AdditionalDependencies) - - - - - NotUsing - Level3 - Disabled - true - true - true - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - $(ProjectDir)..\AirLib\deps\rpclib\include;include;$(ProjectDir)..\AirLib\deps\eigen3;$(ProjectDir)..\AirLib\include - false - - - Console - true - true - true - $(ProjectDir)\..\AirLib\deps\MavLinkCom\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\deps\rpclib\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\lib\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) - rpc.lib;AirLib.lib;%(AdditionalDependencies) - - - - - - - - + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + RelWithDebInfo + Win32 + + + RelWithDebInfo + x64 + + + + + {4bfb7231-077a-4671-bd21-d3ade3ea36e7} + + + {8510c7a4-bf63-41d2-94f6-d8731d137a5a} + + + + 15.0 + {99CBF376-5EBA-4164-A657-E7D708C9D685} + Win32Proj + HelloSpawnedDrones + 10.0 + + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + Application + false + v143 + true + Unicode + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + Application + false + v143 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + + + true + $(ProjectDir)build\$(Platform)\$(Configuration)\ + $(ProjectDir)temp\$(ProjectName)\$(Platform)\$(Configuration)\ + + + true + $(ProjectDir)temp\$(ProjectName)\$(Platform)\$(Configuration)\ + $(ProjectDir)build\$(Platform)\$(Configuration)\ + + + false + $(ProjectDir)build\$(Platform)\$(Configuration)\ + $(ProjectDir)temp\$(ProjectName)\$(Platform)\$(Configuration)\ + + + false + $(ProjectDir)build\$(Platform)\$(Configuration)\ + $(ProjectDir)temp\$(ProjectName)\$(Platform)\$(Configuration)\ + + + false + $(ProjectDir)temp\$(ProjectName)\$(Platform)\$(Configuration)\ + $(ProjectDir)build\$(Platform)\$(Configuration)\ + + + false + $(ProjectDir)temp\$(ProjectName)\$(Platform)\$(Configuration)\ + $(ProjectDir)build\$(Platform)\$(Configuration)\ + + + + NotUsing + Level3 + Disabled + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + $(ProjectDir)..\AirLib\deps\rpclib\include;include;$(ProjectDir)..\AirLib\deps\eigen3;$(ProjectDir)..\AirLib\include + + + Console + true + $(ProjectDir)\..\AirLib\deps\MavLinkCom\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\deps\rpclib\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\lib\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) + rpc.lib;AirLib.lib;%(AdditionalDependencies) + + + + + NotUsing + Level3 + Disabled + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + NotUsing + Level3 + MaxSpeed + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + Use + Level3 + Disabled + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + false + + + Console + true + true + true + + + + + NotUsing + Level3 + MaxSpeed + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + $(ProjectDir)..\AirLib\deps\rpclib\include;include;$(ProjectDir)..\AirLib\deps\eigen3;$(ProjectDir)..\AirLib\include + + + Console + true + true + true + $(ProjectDir)\..\AirLib\deps\MavLinkCom\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\deps\rpclib\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\lib\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) + rpc.lib;AirLib.lib;%(AdditionalDependencies) + + + + + NotUsing + Level3 + Disabled + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + $(ProjectDir)..\AirLib\deps\rpclib\include;include;$(ProjectDir)..\AirLib\deps\eigen3;$(ProjectDir)..\AirLib\include + false + + + Console + true + true + true + $(ProjectDir)\..\AirLib\deps\MavLinkCom\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\deps\rpclib\lib\$(Platform)\$(Configuration);$(ProjectDir)\..\AirLib\lib\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) + rpc.lib;AirLib.lib;%(AdditionalDependencies) + + + + + + + + \ No newline at end of file diff --git a/MavLinkCom/MavLinkCom.vcxproj b/MavLinkCom/MavLinkCom.vcxproj index 58303aa002..c0d02931f6 100644 --- a/MavLinkCom/MavLinkCom.vcxproj +++ b/MavLinkCom/MavLinkCom.vcxproj @@ -3,7 +3,7 @@ true - v142 + v143 diff --git a/MavLinkCom/MavLinkTest/MavLinkTest.vcxproj b/MavLinkCom/MavLinkTest/MavLinkTest.vcxproj index 24c4545ad7..86723de84d 100644 --- a/MavLinkCom/MavLinkTest/MavLinkTest.vcxproj +++ b/MavLinkCom/MavLinkTest/MavLinkTest.vcxproj @@ -40,7 +40,7 @@ - v142 + v143 {25EB67BE-468A-4AA5-910F-07EFD58C5516} diff --git a/SGM/src/sgmstereo/sgmstereo.vcxproj b/SGM/src/sgmstereo/sgmstereo.vcxproj index 898926b6ba..2352230f22 100644 --- a/SGM/src/sgmstereo/sgmstereo.vcxproj +++ b/SGM/src/sgmstereo/sgmstereo.vcxproj @@ -1,200 +1,200 @@ - - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - RelWithDebInfo - Win32 - - - RelWithDebInfo - x64 - - - - - - - - - - - - {A01E543F-EF34-46BB-8F3F-29AB84E7A5D4} - Features - SAK - SAK - SAK - SAK - sgmstereo - - - - StaticLibrary - Unicode - true - v142 - - - StaticLibrary - Unicode - true - v142 - - - StaticLibrary - Unicode - true - v142 - - - StaticLibrary - Unicode - true - v142 - - - StaticLibrary - Unicode - v142 - - - StaticLibrary - Unicode - v142 - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\..\lib\$(PlatformToolset)\$(Platform)\$(Configuration)\ - ..\..\lib\$(PlatformToolset)\$(Platform)\$(Configuration)\ - ..\..\obj\$(PlatformToolset)\$(Platform)\$(Configuration)\$(ProjectName)\ - ..\..\obj\$(PlatformToolset)\$(Platform)\$(Configuration)\$(ProjectName)\ - ..\..\lib\$(PlatformToolset)\$(Platform)\$(Configuration)\ - ..\..\lib\$(PlatformToolset)\$(Platform)\$(Configuration)\ - ..\..\lib\$(PlatformToolset)\$(Platform)\$(Configuration)\ - ..\..\lib\$(PlatformToolset)\$(Platform)\$(Configuration)\ - ..\..\obj\$(PlatformToolset)\$(Platform)\$(Configuration)\$(ProjectName)\ - ..\..\obj\$(PlatformToolset)\$(Platform)\$(Configuration)\$(ProjectName)\ - ..\..\obj\$(PlatformToolset)\$(Platform)\$(Configuration)\$(ProjectName)\ - ..\..\obj\$(PlatformToolset)\$(Platform)\$(Configuration)\$(ProjectName)\ - - - - Disabled - VRLib\inc\VRLibCore;VRLib\inc\VRLibCV;VRLib\inc\VRLibImageIO;LibJpeg\inc;LibTiff\inc;%(AdditionalIncludeDirectories) - true - EnableFastChecks - MultiThreadedDebugDLL - true - Level4 - ProgramDatabase - VRLIB_USES_LIBTIFF;VRLIB_USES_LIBJPEG;NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) - false - - - - - Disabled - %(AdditionalIncludeDirectories) - EnableFastChecks - MultiThreadedDebugDLL - true - Level4 - ProgramDatabase - NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) - - - - - MaxSpeed - false - VRLib\inc\VRLibCore;VRLib\inc\VRLibCV;VRLib\inc\VRLibImageIO;LibJpeg\inc;LibTiff\inc;%(AdditionalIncludeDirectories) - MultiThreadedDLL - true - Level4 - ProgramDatabase - VRLIB_USES_LIBTIFF;VRLIB_USES_LIBJPEG;NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) - false - - - - - Disabled - false - VRLib\inc\VRLibCore;VRLib\inc\VRLibCV;VRLib\inc\VRLibImageIO;LibJpeg\inc;LibTiff\inc;%(AdditionalIncludeDirectories) - MultiThreadedDLL - true - Level4 - ProgramDatabase - VRLIB_USES_LIBTIFF;VRLIB_USES_LIBJPEG;NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) - false - - - - - MaxSpeed - false - %(AdditionalIncludeDirectories) - MultiThreadedDLL - true - Level4 - ProgramDatabase - NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) - true - - - - - Disabled - false - %(AdditionalIncludeDirectories) - MultiThreadedDLL - true - Level4 - ProgramDatabase - NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) - true - - - - - + + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + RelWithDebInfo + Win32 + + + RelWithDebInfo + x64 + + + + + + + + + + + + {A01E543F-EF34-46BB-8F3F-29AB84E7A5D4} + Features + SAK + SAK + SAK + SAK + sgmstereo + + + + StaticLibrary + Unicode + true + v143 + + + StaticLibrary + Unicode + true + v143 + + + StaticLibrary + Unicode + true + v143 + + + StaticLibrary + Unicode + true + v143 + + + StaticLibrary + Unicode + v143 + + + StaticLibrary + Unicode + v143 + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\lib\$(PlatformToolset)\$(Platform)\$(Configuration)\ + ..\..\lib\$(PlatformToolset)\$(Platform)\$(Configuration)\ + ..\..\obj\$(PlatformToolset)\$(Platform)\$(Configuration)\$(ProjectName)\ + ..\..\obj\$(PlatformToolset)\$(Platform)\$(Configuration)\$(ProjectName)\ + ..\..\lib\$(PlatformToolset)\$(Platform)\$(Configuration)\ + ..\..\lib\$(PlatformToolset)\$(Platform)\$(Configuration)\ + ..\..\lib\$(PlatformToolset)\$(Platform)\$(Configuration)\ + ..\..\lib\$(PlatformToolset)\$(Platform)\$(Configuration)\ + ..\..\obj\$(PlatformToolset)\$(Platform)\$(Configuration)\$(ProjectName)\ + ..\..\obj\$(PlatformToolset)\$(Platform)\$(Configuration)\$(ProjectName)\ + ..\..\obj\$(PlatformToolset)\$(Platform)\$(Configuration)\$(ProjectName)\ + ..\..\obj\$(PlatformToolset)\$(Platform)\$(Configuration)\$(ProjectName)\ + + + + Disabled + VRLib\inc\VRLibCore;VRLib\inc\VRLibCV;VRLib\inc\VRLibImageIO;LibJpeg\inc;LibTiff\inc;%(AdditionalIncludeDirectories) + true + EnableFastChecks + MultiThreadedDebugDLL + true + Level4 + ProgramDatabase + VRLIB_USES_LIBTIFF;VRLIB_USES_LIBJPEG;NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) + false + + + + + Disabled + %(AdditionalIncludeDirectories) + EnableFastChecks + MultiThreadedDebugDLL + true + Level4 + ProgramDatabase + NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) + + + + + MaxSpeed + false + VRLib\inc\VRLibCore;VRLib\inc\VRLibCV;VRLib\inc\VRLibImageIO;LibJpeg\inc;LibTiff\inc;%(AdditionalIncludeDirectories) + MultiThreadedDLL + true + Level4 + ProgramDatabase + VRLIB_USES_LIBTIFF;VRLIB_USES_LIBJPEG;NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) + false + + + + + Disabled + false + VRLib\inc\VRLibCore;VRLib\inc\VRLibCV;VRLib\inc\VRLibImageIO;LibJpeg\inc;LibTiff\inc;%(AdditionalIncludeDirectories) + MultiThreadedDLL + true + Level4 + ProgramDatabase + VRLIB_USES_LIBTIFF;VRLIB_USES_LIBJPEG;NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) + false + + + + + MaxSpeed + false + %(AdditionalIncludeDirectories) + MultiThreadedDLL + true + Level4 + ProgramDatabase + NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) + true + + + + + Disabled + false + %(AdditionalIncludeDirectories) + MultiThreadedDLL + true + Level4 + ProgramDatabase + NOMINMAX;_UNICODE;UNICODE;%(PreprocessorDefinitions) + true + + + + + \ No newline at end of file diff --git a/SGM/src/stereoPipeline/stereoPipeline.vcxproj b/SGM/src/stereoPipeline/stereoPipeline.vcxproj index 48f41d4ecd..322c6145a6 100644 --- a/SGM/src/stereoPipeline/stereoPipeline.vcxproj +++ b/SGM/src/stereoPipeline/stereoPipeline.vcxproj @@ -1,264 +1,264 @@ - - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - RelWithDebInfo - Win32 - - - RelWithDebInfo - x64 - - - - - - - - - - - {E512EB59-4EAB-49D1-9174-0CAF1B40CED0} - Win32Proj - epnp - stereoPipeline - - - - StaticLibrary - true - Unicode - v142 - - - StaticLibrary - true - Unicode - v142 - - - StaticLibrary - false - true - Unicode - v142 - - - StaticLibrary - false - true - Unicode - v142 - - - StaticLibrary - false - true - Unicode - v142 - - - StaticLibrary - false - true - Unicode - v142 - - - - - - - - - - - - - - - - - - - - - - - - - true - ..\..\..\..\d\d;..\..\..\..\VisionTools\inc;$(IncludePath) - ..\..\lib\$(PlatformToolset)\$(Platform)\$(Configuration)\ - ..\..\obj\$(PlatformToolset)\$(Platform)\$(Configuration)\$(ProjectName)\ - - - true - ..\..\..\..\d\d;..\..\..\..\VisionTools\inc;$(IncludePath) - ..\..\lib\$(PlatformToolset)\$(Platform)\$(Configuration)\ - ..\..\obj\$(PlatformToolset)\$(Platform)\$(Configuration)\$(ProjectName)\ - - - false - $(SolutionDir)dep\sunflower\inc;$(SolutionDir)dep\VisionTools\inc;$(SolutionDir)dep\d\d;$(IncludePath) - ..\..\lib\$(PlatformToolset)\$(Platform)\$(Configuration)\ - ..\..\obj\$(PlatformToolset)\$(Platform)\$(Configuration)\$(ProjectName)\ - - - false - $(SolutionDir)dep\sunflower\inc;$(SolutionDir)dep\VisionTools\inc;$(SolutionDir)dep\d\d;$(IncludePath) - ..\..\lib\$(PlatformToolset)\$(Platform)\$(Configuration)\ - ..\..\obj\$(PlatformToolset)\$(Platform)\$(Configuration)\$(ProjectName)\ - - - false - $(IncludePath) - ..\..\obj\$(PlatformToolset)\$(Platform)\$(Configuration)\$(ProjectName)\ - ..\..\lib\$(PlatformToolset)\$(Platform)\$(Configuration)\ - - - false - $(IncludePath) - ..\..\obj\$(PlatformToolset)\$(Platform)\$(Configuration)\$(ProjectName)\ - ..\..\lib\$(PlatformToolset)\$(Platform)\$(Configuration)\ - - - - Create - Level4 - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - ..\sgmstereo;%(AdditionalIncludeDirectories) - MultiThreadedDebugDLL - true - - - Console - true - - - - - NotUsing - Level4 - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - ..\sgmstereo;%(AdditionalIncludeDirectories) - MultiThreadedDebugDLL - true - true - - - Console - true - - - - - Level4 - Create - MaxSpeed - true - true - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - ..\sgmstereo;%(AdditionalIncludeDirectories) - MultiThreadedDLL - true - - - Console - true - true - true - C:\OpenCV2.2\lib - opencv_core220.lib; %(AdditionalDependencies) - - - - - Level4 - Create - Disabled - true - true - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - ..\sgmstereo;%(AdditionalIncludeDirectories) - MultiThreadedDLL - true - false - - - Console - true - true - true - C:\OpenCV2.2\lib - opencv_core220.lib; %(AdditionalDependencies) - - - - - Level4 - NotUsing - MaxSpeed - true - true - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - ..\sgmstereo;%(AdditionalIncludeDirectories) - MultiThreadedDLL - true - true - - - Console - true - true - true - C:\OpenCV2.2\lib - opencv_core220.lib; %(AdditionalDependencies) - - - - - Level4 - NotUsing - Disabled - true - true - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - ..\sgmstereo;%(AdditionalIncludeDirectories) - MultiThreadedDLL - true - true - false - - - Console - true - true - true - C:\OpenCV2.2\lib - opencv_core220.lib; %(AdditionalDependencies) - - - - - + + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + RelWithDebInfo + Win32 + + + RelWithDebInfo + x64 + + + + + + + + + + + {E512EB59-4EAB-49D1-9174-0CAF1B40CED0} + Win32Proj + epnp + stereoPipeline + + + + StaticLibrary + true + Unicode + v143 + + + StaticLibrary + true + Unicode + v143 + + + StaticLibrary + false + true + Unicode + v143 + + + StaticLibrary + false + true + Unicode + v143 + + + StaticLibrary + false + true + Unicode + v143 + + + StaticLibrary + false + true + Unicode + v143 + + + + + + + + + + + + + + + + + + + + + + + + + true + ..\..\..\..\d\d;..\..\..\..\VisionTools\inc;$(IncludePath) + ..\..\lib\$(PlatformToolset)\$(Platform)\$(Configuration)\ + ..\..\obj\$(PlatformToolset)\$(Platform)\$(Configuration)\$(ProjectName)\ + + + true + ..\..\..\..\d\d;..\..\..\..\VisionTools\inc;$(IncludePath) + ..\..\lib\$(PlatformToolset)\$(Platform)\$(Configuration)\ + ..\..\obj\$(PlatformToolset)\$(Platform)\$(Configuration)\$(ProjectName)\ + + + false + $(SolutionDir)dep\sunflower\inc;$(SolutionDir)dep\VisionTools\inc;$(SolutionDir)dep\d\d;$(IncludePath) + ..\..\lib\$(PlatformToolset)\$(Platform)\$(Configuration)\ + ..\..\obj\$(PlatformToolset)\$(Platform)\$(Configuration)\$(ProjectName)\ + + + false + $(SolutionDir)dep\sunflower\inc;$(SolutionDir)dep\VisionTools\inc;$(SolutionDir)dep\d\d;$(IncludePath) + ..\..\lib\$(PlatformToolset)\$(Platform)\$(Configuration)\ + ..\..\obj\$(PlatformToolset)\$(Platform)\$(Configuration)\$(ProjectName)\ + + + false + $(IncludePath) + ..\..\obj\$(PlatformToolset)\$(Platform)\$(Configuration)\$(ProjectName)\ + ..\..\lib\$(PlatformToolset)\$(Platform)\$(Configuration)\ + + + false + $(IncludePath) + ..\..\obj\$(PlatformToolset)\$(Platform)\$(Configuration)\$(ProjectName)\ + ..\..\lib\$(PlatformToolset)\$(Platform)\$(Configuration)\ + + + + Create + Level4 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + ..\sgmstereo;%(AdditionalIncludeDirectories) + MultiThreadedDebugDLL + true + + + Console + true + + + + + NotUsing + Level4 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + ..\sgmstereo;%(AdditionalIncludeDirectories) + MultiThreadedDebugDLL + true + true + + + Console + true + + + + + Level4 + Create + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + ..\sgmstereo;%(AdditionalIncludeDirectories) + MultiThreadedDLL + true + + + Console + true + true + true + C:\OpenCV2.2\lib + opencv_core220.lib; %(AdditionalDependencies) + + + + + Level4 + Create + Disabled + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + ..\sgmstereo;%(AdditionalIncludeDirectories) + MultiThreadedDLL + true + false + + + Console + true + true + true + C:\OpenCV2.2\lib + opencv_core220.lib; %(AdditionalDependencies) + + + + + Level4 + NotUsing + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + ..\sgmstereo;%(AdditionalIncludeDirectories) + MultiThreadedDLL + true + true + + + Console + true + true + true + C:\OpenCV2.2\lib + opencv_core220.lib; %(AdditionalDependencies) + + + + + Level4 + NotUsing + Disabled + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + ..\sgmstereo;%(AdditionalIncludeDirectories) + MultiThreadedDLL + true + true + false + + + Console + true + true + true + C:\OpenCV2.2\lib + opencv_core220.lib; %(AdditionalDependencies) + + + + + \ No newline at end of file diff --git a/UnrealPluginFiles.vcxproj b/UnrealPluginFiles.vcxproj index 98c8d9d4cc..d6a2e80f8e 100644 --- a/UnrealPluginFiles.vcxproj +++ b/UnrealPluginFiles.vcxproj @@ -1,175 +1,176 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - RelWithDebInfo - Win32 - - - RelWithDebInfo - x64 - - - - {39683523-C864-4D47-8350-33FC3EC0F00F} - MakeFileProj - - - - Makefile - true - v140 - - - Makefile - false - v140 - - - Makefile - false - v140 - - - Application - true - v141 - - - Application - false - v141 - - - Application - false - v141 - - - - - - - - - - - - - - - - - - - - - - - - - - - WIN32;_DEBUG;$(NMakePreprocessorDefinitions) - - - WIN32;NDEBUG;$(NMakePreprocessorDefinitions) - - - WIN32;NDEBUG;$(NMakePreprocessorDefinitions) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + RelWithDebInfo + Win32 + + + RelWithDebInfo + x64 + + + + {39683523-C864-4D47-8350-33FC3EC0F00F} + MakeFileProj + 10.0 + + + + Makefile + true + v143 + + + Makefile + false + v143 + + + Makefile + false + v143 + + + Application + true + v143 + + + Application + false + v143 + + + Application + false + v143 + + + + + + + + + + + + + + + + + + + + + + + + + + + WIN32;_DEBUG;$(NMakePreprocessorDefinitions) + + + WIN32;NDEBUG;$(NMakePreprocessorDefinitions) + + + WIN32;NDEBUG;$(NMakePreprocessorDefinitions) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/build.cmd b/build.cmd index 9b84378acc..f20ffd8b4c 100644 --- a/build.cmd +++ b/build.cmd @@ -10,12 +10,12 @@ set "buildMode=" REM //check VS version if "%VisualStudioVersion%" == "" ( echo( - echo oh oh... You need to run this command from x64 Native Tools Command Prompt for VS 2019. + echo oh oh... You need to run this command from x64 Native Tools Command Prompt for VS 2022. goto :buildfailed_nomsg ) -if "%VisualStudioVersion%" lss "16.0" ( +if "%VisualStudioVersion%" lss "17.0" ( echo( - echo Hello there! We just upgraded AirSim to Unreal Engine 4.24 and Visual Studio 2019. + echo Hello there! We just upgraded AirSim to Unreal Engine 4.24 and Visual Studio 2022. echo Here are few easy steps for upgrade so everything is new and shiny: echo https://github.com/Microsoft/AirSim/blob/master/docs/unreal_upgrade.md goto :buildfailed_nomsg @@ -99,7 +99,7 @@ REM //---------- Build rpclib ------------ ECHO Starting cmake to build rpclib... IF NOT EXIST external\rpclib\%RPC_VERSION_FOLDER%\build mkdir external\rpclib\%RPC_VERSION_FOLDER%\build cd external\rpclib\%RPC_VERSION_FOLDER%\build -cmake -G"Visual Studio 16 2019" .. +cmake -G"Visual Studio 17 2022" .. if "%buildMode%" == "" ( cmake --build . From 919229b9095dd4d2ca6252568c944559b7875c73 Mon Sep 17 00:00:00 2001 From: zimmy87 Date: Thu, 14 Apr 2022 10:50:13 -0700 Subject: [PATCH 06/50] fix Windows GitHub Action and update docs --- .github/workflows/test_windows.yml | 2 +- docs/build_windows.md | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test_windows.yml b/.github/workflows/test_windows.yml index 473ae70941..659ecf47e9 100644 --- a/.github/workflows/test_windows.yml +++ b/.github/workflows/test_windows.yml @@ -5,7 +5,7 @@ on: [push, pull_request, workflow_dispatch] jobs: build: - runs-on: windows-2019 + runs-on: windows-2022 # Steps represent a sequence of tasks that will be executed as part of the job steps: diff --git a/docs/build_windows.md b/docs/build_windows.md index 6b8e7fbc95..8c7ec22751 100644 --- a/docs/build_windows.md +++ b/docs/build_windows.md @@ -13,9 +13,9 @@ Click on the `Install` button on the top right, which should show the option to ![Unreal Engine Install Location UI Screenshot](images/ue_install_location.png) ## Build AirSim -* Install Visual Studio 2019. -**Make sure** to select **Desktop Development with C++** and **Windows 10 SDK 10.0.18362** (should be selected by default) and select the latest .NET Framework SDK under the 'Individual Components' tab while installing VS 2019. -* Start `Developer Command Prompt for VS 2019`. +* Install Visual Studio 2022. +**Make sure** to select **Desktop Development with C++** and **Windows 10 SDK 10.0.19041** (should be selected by default) and select the latest .NET Framework SDK under the 'Individual Components' tab while installing VS 2022. +* Start `Developer Command Prompt for VS 2022`. * Clone the repo: `git clone https://github.com/Microsoft/AirSim.git`, and go the AirSim directory by `cd AirSim`. **Note:** It's generally not a good idea to install AirSim in C drive. This can cause scripts to fail, and requires running VS in Admin mode. Instead clone in a different drive such as D or E. @@ -37,6 +37,9 @@ Alternatively, you can use [APIs](apis.md) for programmatic control or use the s Once AirSim is set up by following above steps, you can, 1. Double click on .sln file to load the Blocks project in `Unreal\Environments\Blocks` (or .sln file in your own [custom](unreal_custenv.md) Unreal project). If you don't see .sln file then you probably haven't completed steps in Build Unreal Project section above. + + **Note**: If you are using UE 4.26 or below, Unreal will auto-generate the .sln file targetting Visual Studio 2019. Visual Studio 2022 will be able to load and run this .sln, but if you want full Visual Studio 2022 support, you will need to use UE 4.27 and explicitly enable support by going to 'Edit->Editor Preferences->Source Code' and selecting 'Visual Studio 2022' for the 'Source Code Editor' setting. + 2. Select your Unreal project as Start Up project (for example, Blocks project) and make sure Build config is set to "Develop Editor" and x64. 3. After Unreal Editor loads, press Play button. From f7854622d7dc435d8dda3c8b1739e6e1901c3c38 Mon Sep 17 00:00:00 2001 From: zimmy87 Date: Tue, 26 Apr 2022 09:59:35 -0700 Subject: [PATCH 07/50] upgrade Blocks to 4.27 --- Unreal/Environments/Blocks/Blocks.uproject | 58 +++++++++++----------- docs/build_linux.md | 6 +-- docs/build_windows.md | 4 +- 3 files changed, 34 insertions(+), 34 deletions(-) diff --git a/Unreal/Environments/Blocks/Blocks.uproject b/Unreal/Environments/Blocks/Blocks.uproject index cbc4c1d614..589d42e59d 100644 --- a/Unreal/Environments/Blocks/Blocks.uproject +++ b/Unreal/Environments/Blocks/Blocks.uproject @@ -1,30 +1,30 @@ -{ - "FileVersion": 3, - "EngineAssociation": "4.25", - "Category": "", - "Description": "", - "Modules": [ - { - "Name": "Blocks", - "Type": "Runtime", - "LoadingPhase": "Default", - "AdditionalDependencies": [ - "AirSim" - ] - } - ], - "Plugins": [ - { - "Name": "AirSim", - "Enabled": true - }, - { - "Name": "SteamVR", - "Enabled": false - }, - { - "Name": "OculusVR", - "Enabled": false - } - ] +{ + "FileVersion": 3, + "EngineAssociation": "4.27", + "Category": "", + "Description": "", + "Modules": [ + { + "Name": "Blocks", + "Type": "Runtime", + "LoadingPhase": "Default", + "AdditionalDependencies": [ + "AirSim" + ] + } + ], + "Plugins": [ + { + "Name": "AirSim", + "Enabled": true + }, + { + "Name": "SteamVR", + "Enabled": false + }, + { + "Name": "OculusVR", + "Enabled": false + } + ] } \ No newline at end of file diff --git a/docs/build_linux.md b/docs/build_linux.md index 81940f0365..ffb0523f7e 100644 --- a/docs/build_linux.md +++ b/docs/build_linux.md @@ -16,11 +16,11 @@ Please see instructions [here](docker_ubuntu.md) - Make sure you are [registered with Epic Games](https://docs.unrealengine.com/en-US/SharingAndReleasing/Linux/BeginnerLinuxDeveloper/SettingUpAnUnrealWorkflow/index.html). This is required to get source code access for Unreal Engine. -- Clone Unreal in your favorite folder and build it (this may take a while!). **Note**: We only support Unreal >= 4.25 at present. We recommend using 4.25. +- Clone Unreal in your favorite folder and build it (this may take a while!). **Note**: We only support Unreal >= 4.27 at present. We recommend using 4.27. ```bash # go to the folder where you clone GitHub projects -git clone -b 4.25 git@github.com:EpicGames/UnrealEngine.git +git clone -b 4.27 git@github.com:EpicGames/UnrealEngine.git cd UnrealEngine ./Setup.sh ./GenerateProjectFiles.sh @@ -37,7 +37,7 @@ git clone https://github.com/Microsoft/AirSim.git cd AirSim ``` -By default AirSim uses clang 8 to build for compatibility with UE 4.25. The setup script will install the right version of cmake, llvm, and eigen. +By default AirSim uses clang 8 to build for compatibility with UE 4.27. The setup script will install the right version of cmake, llvm, and eigen. ```bash ./setup.sh diff --git a/docs/build_windows.md b/docs/build_windows.md index 8c7ec22751..e675750c67 100644 --- a/docs/build_windows.md +++ b/docs/build_windows.md @@ -4,7 +4,7 @@ 1. [Download](https://www.unrealengine.com/download) the Epic Games Launcher. While the Unreal Engine is open source and free to download, registration is still required. 2. Run the Epic Games Launcher, open the `Unreal Engine` tab on the left pane. -Click on the `Install` button on the top right, which should show the option to download **Unreal Engine >= 4.25**. Chose the install location to suit your needs, as shown in the images below. If you have multiple versions of Unreal installed then **make sure the version you are using is set to `current`** by clicking down arrow next to the Launch button for the version. +Click on the `Install` button on the top right, which should show the option to download **Unreal Engine >= 4.27**. Chose the install location to suit your needs, as shown in the images below. If you have multiple versions of Unreal installed then **make sure the version you are using is set to `current`** by clicking down arrow next to the Launch button for the version. **Note**: If you have UE 4.16 or older projects, please see the [upgrade guide](unreal_upgrade.md) to upgrade your projects. @@ -38,7 +38,7 @@ Once AirSim is set up by following above steps, you can, 1. Double click on .sln file to load the Blocks project in `Unreal\Environments\Blocks` (or .sln file in your own [custom](unreal_custenv.md) Unreal project). If you don't see .sln file then you probably haven't completed steps in Build Unreal Project section above. - **Note**: If you are using UE 4.26 or below, Unreal will auto-generate the .sln file targetting Visual Studio 2019. Visual Studio 2022 will be able to load and run this .sln, but if you want full Visual Studio 2022 support, you will need to use UE 4.27 and explicitly enable support by going to 'Edit->Editor Preferences->Source Code' and selecting 'Visual Studio 2022' for the 'Source Code Editor' setting. + **Note**: Unreal 4.27 will auto-generate the .sln file targetting Visual Studio 2019. Visual Studio 2022 will be able to load and run this .sln, but if you want full Visual Studio 2022 support, you will need to explicitly enable support by going to 'Edit->Editor Preferences->Source Code' and selecting 'Visual Studio 2022' for the 'Source Code Editor' setting. 2. Select your Unreal project as Start Up project (for example, Blocks project) and make sure Build config is set to "Develop Editor" and x64. 3. After Unreal Editor loads, press Play button. From 378d8f9c4b9cfa6dee91b96ba5da13539e4dc942 Mon Sep 17 00:00:00 2001 From: HSC-1 Date: Wed, 27 Apr 2022 10:51:16 +0900 Subject: [PATCH 08/50] apply style from clang-format --- AirLib/include/api/RpcLibClientBase.hpp | 4 +- AirLib/include/api/WorldSimApiBase.hpp | 6 +- AirLib/src/api/RpcLibClientBase.cpp | 1 - PythonClient/airsim/client.py | 95 ++++++++++--------- .../AirsimWrapper/Source/WorldSimApi.h | 4 +- Unreal/Plugins/AirSim/Source/WorldSimApi.cpp | 4 - Unreal/Plugins/AirSim/Source/WorldSimApi.h | 6 +- 7 files changed, 56 insertions(+), 64 deletions(-) diff --git a/AirLib/include/api/RpcLibClientBase.hpp b/AirLib/include/api/RpcLibClientBase.hpp index 53e27392fc..47fdb7fa9b 100644 --- a/AirLib/include/api/RpcLibClientBase.hpp +++ b/AirLib/include/api/RpcLibClientBase.hpp @@ -152,8 +152,8 @@ namespace airlib void simSetKinematics(const Kinematics::State& state, bool ignore_collision, const std::string& vehicle_name = ""); msr::airlib::Environment::State simGetGroundTruthEnvironment(const std::string& vehicle_name = "") const; std::vector simSwapTextures(const std::string& tags, int tex_id = 0, int component_id = 0, int material_id = 0); - bool simSetObjectMaterial(const std::string& object_name, const std::string& material_name, const int component_id=0); - bool simSetObjectMaterialFromTexture(const std::string& object_name, const std::string& texture_path, const int component_id=0); + bool simSetObjectMaterial(const std::string& object_name, const std::string& material_name, const int component_id = 0); + bool simSetObjectMaterialFromTexture(const std::string& object_name, const std::string& texture_path, const int component_id = 0); // Recording APIs void startRecording(); diff --git a/AirLib/include/api/WorldSimApiBase.hpp b/AirLib/include/api/WorldSimApiBase.hpp index c9bf790088..833e590d7d 100644 --- a/AirLib/include/api/WorldSimApiBase.hpp +++ b/AirLib/include/api/WorldSimApiBase.hpp @@ -74,8 +74,8 @@ namespace airlib virtual bool setObjectScale(const std::string& object_name, const Vector3r& scale) = 0; virtual std::unique_ptr> swapTextures(const std::string& tag, int tex_id = 0, int component_id = 0, int material_id = 0) = 0; virtual bool setLightIntensity(const std::string& light_name, float intensity) = 0; - virtual bool setObjectMaterial(const std::string& object_name, const std::string& material_name, const int component_id=0) = 0; - virtual bool setObjectMaterialFromTexture(const std::string& object_name, const std::string& texture_path, const int component_id=0) = 0; + virtual bool setObjectMaterial(const std::string& object_name, const std::string& material_name, const int component_id = 0) = 0; + virtual bool setObjectMaterialFromTexture(const std::string& object_name, const std::string& texture_path, const int component_id = 0) = 0; virtual vector getMeshPositionVertexBuffers() const = 0; virtual bool createVoxelGrid(const Vector3r& position, const int& x_size, const int& y_size, const int& z_size, const float& res, const std::string& output_file) = 0; @@ -104,8 +104,6 @@ namespace airlib const std::string& vehicle_name, bool external) const = 0; virtual std::vector getImage(ImageCaptureBase::ImageType image_type, const CameraDetails& camera_details) const = 0; - - //CinemAirSim virtual std::vector getPresetLensSettings(const CameraDetails& camera_details) = 0; virtual std::string getLensSettings(const CameraDetails& camera_details) = 0; diff --git a/AirLib/src/api/RpcLibClientBase.cpp b/AirLib/src/api/RpcLibClientBase.cpp index 0cc4a621fc..36c0c1cf9b 100644 --- a/AirLib/src/api/RpcLibClientBase.cpp +++ b/AirLib/src/api/RpcLibClientBase.cpp @@ -272,7 +272,6 @@ __pragma(warning(disable : 4239)) return result; } - //CinemAirSim std::vector RpcLibClientBase::simGetPresetLensSettings(const std::string& camera_name, const std::string& vehicle_name, bool external) { diff --git a/PythonClient/airsim/client.py b/PythonClient/airsim/client.py index fb6bccc4fe..bed13c0c91 100644 --- a/PythonClient/airsim/client.py +++ b/PythonClient/airsim/client.py @@ -16,7 +16,7 @@ def __init__(self, ip = "", port = 41451, timeout_value = 3600): ip = "127.0.0.1" self.client = msgpackrpc.Client(msgpackrpc.Address(ip, port), timeout = timeout_value, pack_encoding = 'utf-8', unpack_encoding = 'utf-8') -#----------------------------------- Common vehicle APIs --------------------------------------------- +#-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - Common vehicle APIs -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - def reset(self): """ Reset the vehicle to its original starting state @@ -218,8 +218,7 @@ def simSetObjectMaterialFromTexture(self, object_name, texture_path, component_i """ return self.client.call("simSetObjectMaterialFromTexture", object_name, texture_path, component_id) - - # time-of-day control +#time - of - day control #time - of - day control def simSetTimeOfDay(self, is_enabled, start_datetime = "", is_start_datetime_dst = False, celestial_clock_speed = 1, update_interval_secs = 60, move_sun = True): """ @@ -309,8 +308,6 @@ def simGetImages(self, requests, vehicle_name = '', external = False): responses_raw = self.client.call('simGetImages', requests, vehicle_name, external) return [ImageResponse.from_msgpack(response_raw) for response_raw in responses_raw] - - #CinemAirSim def simGetPresetLensSettings(self, camera_name, vehicle_name = '', external = False): result = self.client.call('simGetPresetLensSettings', camera_name, vehicle_name, external) @@ -836,7 +833,6 @@ def simGetGroundTruthEnvironment(self, vehicle_name = ''): return EnvironmentState.from_msgpack(env_state) simGetGroundTruthEnvironment.__annotations__ = {'return': EnvironmentState} - #sensor APIs def getImuData(self, imu_name = '', vehicle_name = ''): """ @@ -1113,7 +1109,7 @@ def getSettingsString(self): """ return self.client.call('getSettingsString') -#----------------------------------- Multirotor APIs --------------------------------------------- +#-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - Multirotor APIs -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - class MultirotorClient(VehicleClient, object): def __init__(self, ip = "", port = 41451, timeout_value = 3600): super(MultirotorClient, self).__init__(ip, port, timeout_value) @@ -1579,43 +1575,48 @@ def getRotorStates(self, vehicle_name = ''): RotorStates: Containing a timestamp and the speed, thrust and torque of all rotors. """ return RotorStates.from_msgpack(self.client.call('getRotorStates', vehicle_name)) - getRotorStates.__annotations__ = {'return': RotorStates} - -#----------------------------------- Car APIs --------------------------------------------- -class CarClient(VehicleClient, object): - def __init__(self, ip = "", port = 41451, timeout_value = 3600): - super(CarClient, self).__init__(ip, port, timeout_value) - - def setCarControls(self, controls, vehicle_name = ''): - """ - Control the car using throttle, steering, brake, etc. - - Args: - controls (CarControls): Struct containing control values - vehicle_name (str, optional): Name of vehicle to be controlled - """ - self.client.call('setCarControls', controls, vehicle_name) - - def getCarState(self, vehicle_name = ''): - """ - The position inside the returned CarState is in the frame of the vehicle's starting point - - Args: - vehicle_name (str, optional): Name of vehicle - - Returns: - CarState: - """ - state_raw = self.client.call('getCarState', vehicle_name) - return CarState.from_msgpack(state_raw) - - def getCarControls(self, vehicle_name=''): - """ - Args: - vehicle_name (str, optional): Name of vehicle - - Returns: - CarControls: - """ - controls_raw = self.client.call('getCarControls', vehicle_name) - return CarControls.from_msgpack(controls_raw) + getRotorStates.__annotations__ = +{ + 'return' : RotorStates +} + +#-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - Car APIs -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - +class CarClient(VehicleClient, object) + : def __init__(self, ip = "", port = 41451, timeout_value = 3600) + : super(CarClient, self).__init__(ip, port, timeout_value) + + def setCarControls(self, controls, vehicle_name = '') + : "" + " + Control the car using throttle +, steering +, brake +, etc. + + Args : controls(CarControls) + : Struct containing control values vehicle_name(str, optional) + : Name of vehicle to be controlled "" + " + self.client.call('setCarControls', controls, vehicle_name) + + def getCarState(self, vehicle_name = '') + : "" + " + The position inside the returned CarState is in the frame of the vehicle's starting point + + Args : vehicle_name(str, optional) + : Name of vehicle + + Returns : CarState : "" + " + state_raw = self.client.call('getCarState', vehicle_name) return CarState.from_msgpack(state_raw) + + def getCarControls(self, vehicle_name ='') + : "" + " + Args : vehicle_name(str, optional) + : Name of vehicle + + Returns : CarControls : "" + " + controls_raw = self.client.call('getCarControls', vehicle_name) return CarControls.from_msgpack(controls_raw) diff --git a/Unity/AirLibWrapper/AirsimWrapper/Source/WorldSimApi.h b/Unity/AirLibWrapper/AirsimWrapper/Source/WorldSimApi.h index 851cb1942c..e458798c28 100644 --- a/Unity/AirLibWrapper/AirsimWrapper/Source/WorldSimApi.h +++ b/Unity/AirLibWrapper/AirsimWrapper/Source/WorldSimApi.h @@ -40,8 +40,8 @@ class WorldSimApi : public msr::airlib::WorldSimApiBase virtual bool setLightIntensity(const std::string& light_name, float intensity) override; virtual std::unique_ptr> swapTextures(const std::string& tag, int tex_id = 0, int component_id = 0, int material_id = 0) override; - virtual bool setObjectMaterial(const std::string& object_name, const std::string& material_name, const int component_id=0) override; - virtual bool setObjectMaterialFromTexture(const std::string& object_name, const std::string& texture_path, const int component_id=0) override; + virtual bool setObjectMaterial(const std::string& object_name, const std::string& material_name, const int component_id = 0) override; + virtual bool setObjectMaterialFromTexture(const std::string& object_name, const std::string& texture_path, const int component_id = 0) override; virtual std::vector listSceneObjects(const std::string& name_regex) const override; virtual Pose getObjectPose(const std::string& object_name) const override; diff --git a/Unreal/Plugins/AirSim/Source/WorldSimApi.cpp b/Unreal/Plugins/AirSim/Source/WorldSimApi.cpp index afe88a5e97..11e7b6cf97 100644 --- a/Unreal/Plugins/AirSim/Source/WorldSimApi.cpp +++ b/Unreal/Plugins/AirSim/Source/WorldSimApi.cpp @@ -748,8 +748,6 @@ std::string WorldSimApi::getSettingsString() const return msr::airlib::AirSimSettings::singleton().settings_text_; } - - bool WorldSimApi::testLineOfSightBetweenPoints(const msr::airlib::GeoPoint& lla1, const msr::airlib::GeoPoint& lla2) const { bool hit; @@ -920,8 +918,6 @@ std::vector WorldSimApi::getImage(ImageCaptureBase::ImageType image_typ return std::vector(); } - - //CinemAirSim std::vector WorldSimApi::getPresetLensSettings(const CameraDetails& camera_details) { diff --git a/Unreal/Plugins/AirSim/Source/WorldSimApi.h b/Unreal/Plugins/AirSim/Source/WorldSimApi.h index 90ea6a5069..a65a8187ef 100644 --- a/Unreal/Plugins/AirSim/Source/WorldSimApi.h +++ b/Unreal/Plugins/AirSim/Source/WorldSimApi.h @@ -50,8 +50,8 @@ class WorldSimApi : public msr::airlib::WorldSimApiBase virtual bool setLightIntensity(const std::string& light_name, float intensity) override; virtual std::unique_ptr> swapTextures(const std::string& tag, int tex_id = 0, int component_id = 0, int material_id = 0) override; - virtual bool setObjectMaterial(const std::string& object_name, const std::string& material_name, const int component_id=0) override; - virtual bool setObjectMaterialFromTexture(const std::string& object_name, const std::string& texture_path, const int component_id=0) override; + virtual bool setObjectMaterial(const std::string& object_name, const std::string& material_name, const int component_id = 0) override; + virtual bool setObjectMaterialFromTexture(const std::string& object_name, const std::string& texture_path, const int component_id = 0) override; virtual std::vector listSceneObjects(const std::string& name_regex) const override; virtual Pose getObjectPose(const std::string& object_name) const override; virtual bool setObjectPose(const std::string& object_name, const Pose& pose, bool teleport) override; @@ -84,8 +84,6 @@ class WorldSimApi : public msr::airlib::WorldSimApiBase virtual bool testLineOfSightBetweenPoints(const msr::airlib::GeoPoint& point1, const msr::airlib::GeoPoint& point2) const override; virtual std::vector getWorldExtents() const override; - - // Camera APIs virtual msr::airlib::CameraInfo getCameraInfo(const CameraDetails& camera_details) const override; virtual void setCameraPose(const msr::airlib::Pose& pose, const CameraDetails& camera_details) override; From 0946df38bc5f23f7a3d3890bb54c9df5d7b8a2c2 Mon Sep 17 00:00:00 2001 From: HSC-1 Date: Thu, 28 Apr 2022 09:53:50 +0900 Subject: [PATCH 09/50] apply style from clang-format --- PythonClient/airsim/client.py | 283 ++++++---------------------------- 1 file changed, 43 insertions(+), 240 deletions(-) diff --git a/PythonClient/airsim/client.py b/PythonClient/airsim/client.py index bed13c0c91..64ddca87ff 100644 --- a/PythonClient/airsim/client.py +++ b/PythonClient/airsim/client.py @@ -16,11 +16,10 @@ def __init__(self, ip = "", port = 41451, timeout_value = 3600): ip = "127.0.0.1" self.client = msgpackrpc.Client(msgpackrpc.Address(ip, port), timeout = timeout_value, pack_encoding = 'utf-8', unpack_encoding = 'utf-8') -#-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - Common vehicle APIs -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - +#----------------------------------- Common vehicle APIs --------------------------------------------- def reset(self): """ Reset the vehicle to its original starting state - Note that you must call `enableApiControl` and `armDisarm` again after the call to reset """ self.client.call('reset') @@ -28,7 +27,6 @@ def reset(self): def ping(self): """ If connection is established then this call will return true otherwise it will be blocked until timeout - Returns: bool: """ @@ -50,7 +48,6 @@ def getMinRequiredClientVersion(self): def enableApiControl(self, is_enabled, vehicle_name = ''): """ Enables or disables API control for vehicle corresponding to vehicle_name - Args: is_enabled (bool): True to enable, False to disable API control vehicle_name (str, optional): Name of the vehicle to send this command to @@ -60,12 +57,9 @@ def enableApiControl(self, is_enabled, vehicle_name = ''): def isApiControlEnabled(self, vehicle_name = ''): """ Returns true if API control is established. - If false (which is default) then API calls would be ignored. After a successful call to `enableApiControl`, `isApiControlEnabled` should return true. - Args: vehicle_name (str, optional): Name of the vehicle - Returns: bool: If API control is enabled """ @@ -74,11 +68,9 @@ def isApiControlEnabled(self, vehicle_name = ''): def armDisarm(self, arm, vehicle_name = ''): """ Arms or disarms vehicle - Args: arm (bool): True to arm, False to disarm the vehicle vehicle_name (str, optional): Name of the vehicle to send this command to - Returns: bool: Success """ @@ -87,7 +79,6 @@ def armDisarm(self, arm, vehicle_name = ''): def simPause(self, is_paused): """ Pauses simulation - Args: is_paused (bool): True to pause the simulation, False to release """ @@ -96,7 +87,6 @@ def simPause(self, is_paused): def simIsPause(self): """ Returns true if the simulation is paused - Returns: bool: If the simulation is paused """ @@ -105,7 +95,6 @@ def simIsPause(self): def simContinueForTime(self, seconds): """ Continue the simulation for the specified number of seconds - Args: seconds (float): Time to run the simulation for """ @@ -114,7 +103,6 @@ def simContinueForTime(self, seconds): def simContinueForFrames(self, frames): """ Continue (or resume if paused) the simulation for the specified number of frames, after which the simulation will be paused. - Args: frames (int): Frames to run the simulation for """ @@ -123,10 +111,8 @@ def simContinueForFrames(self, frames): def getHomeGeoPoint(self, vehicle_name = ''): """ Get the Home location of the vehicle - Args: vehicle_name (str, optional): Name of vehicle to get home location of - Returns: GeoPoint: Home location of the vehicle """ @@ -161,11 +147,9 @@ def confirmConnection(self): def simSetLightIntensity(self, light_name, intensity): """ Change intensity of named light - Args: light_name (str): Name of light to change intensity (float): New intensity value - Returns: bool: True if successful, otherwise False """ @@ -174,17 +158,13 @@ def simSetLightIntensity(self, light_name, intensity): def simSwapTextures(self, tags, tex_id = 0, component_id = 0, material_id = 0): """ Runtime Swap Texture API - See https://microsoft.github.io/AirSim/retexturing/ for details - Args: tags (str): string of "," or ", " delimited tags to identify on which actors to perform the swap tex_id (int, optional): indexes the array of textures assigned to each actor undergoing a swap - If out-of-bounds for some object's texture set, it will be taken modulo the number of textures that were available component_id (int, optional): material_id (int, optional): - Returns: list[str]: List of objects which matched the provided tags and had the texture swap perfomed """ @@ -198,7 +178,6 @@ def simSetObjectMaterial(self, object_name, material_name, component_id = 0): object_name (str): name of object to set material for material_name (str): name of material to set for object component_id (int, optional) : index of material elements - Returns: bool: True if material was set """ @@ -212,21 +191,19 @@ def simSetObjectMaterialFromTexture(self, object_name, texture_path, component_i object_name (str): name of object to set material for texture_path (str): path to texture to set for object component_id (int, optional) : index of material elements - Returns: bool: True if material was set """ return self.client.call("simSetObjectMaterialFromTexture", object_name, texture_path, component_id) -#time - of - day control + + # time-of-day control #time - of - day control def simSetTimeOfDay(self, is_enabled, start_datetime = "", is_start_datetime_dst = False, celestial_clock_speed = 1, update_interval_secs = 60, move_sun = True): """ Control the position of Sun in the environment - Sun's position is computed using the coordinates specified in `OriginGeopoint` in settings for the date-time specified in the argument, else if the string is empty, current date & time is used - Args: is_enabled (bool): True to enable time-of-day effect, False to reset the position to original start_datetime (str, optional): Date & Time in %Y-%m-%d %H:%M:%S format, e.g. `2018-02-12 15:20:00` @@ -243,7 +220,6 @@ def simSetTimeOfDay(self, is_enabled, start_datetime = "", is_start_datetime_dst def simEnableWeather(self, enable): """ Enable Weather effects. Needs to be called before using `simSetWeatherParameter` API - Args: enable (bool): True to enable, False to disable """ @@ -252,7 +228,6 @@ def simEnableWeather(self, enable): def simSetWeatherParameter(self, param, val): """ Enable various weather effects - Args: param (WeatherParameter): Weather effect to be enabled val (float): Intensity of the effect, Range 0-1 @@ -265,17 +240,14 @@ def simSetWeatherParameter(self, param, val): def simGetImage(self, camera_name, image_type, vehicle_name = '', external = False): """ Get a single image - Returns bytes of png format image which can be dumped into abinary file to create .png image `string_to_uint8_array()` can be used to convert into Numpy unit8 array See https://microsoft.github.io/AirSim/image_apis/ for details - Args: camera_name (str): Name of the camera, for backwards compatibility, ID numbers such as 0,1,etc. can also be used image_type (ImageType): Type of image required vehicle_name (str, optional): Name of the vehicle with the camera external (bool, optional): Whether the camera is an External Camera - Returns: Binary string literal of compressed png image """ @@ -294,20 +266,19 @@ def simGetImage(self, camera_name, image_type, vehicle_name = '', external = Fal def simGetImages(self, requests, vehicle_name = '', external = False): """ Get multiple images - See https://microsoft.github.io/AirSim/image_apis/ for details and examples - Args: requests (list[ImageRequest]): Images required vehicle_name (str, optional): Name of vehicle associated with the camera external (bool, optional): Whether the camera is an External Camera - Returns: list[ImageResponse]: """ responses_raw = self.client.call('simGetImages', requests, vehicle_name, external) return [ImageResponse.from_msgpack(response_raw) for response_raw in responses_raw] + + #CinemAirSim def simGetPresetLensSettings(self, camera_name, vehicle_name = '', external = False): result = self.client.call('simGetPresetLensSettings', camera_name, vehicle_name, external) @@ -373,11 +344,9 @@ def simGetCurrentFieldOfView(self, camera_name, vehicle_name = '', external = Fa def simTestLineOfSightToPoint(self, point, vehicle_name = ''): """ Returns whether the target point is visible from the perspective of the inputted vehicle - Args: point (GeoPoint): target point vehicle_name (str, optional): Name of vehicle - Returns: [bool]: Success """ @@ -386,11 +355,9 @@ def simTestLineOfSightToPoint(self, point, vehicle_name = ''): def simTestLineOfSightBetweenPoints(self, point1, point2): """ Returns whether the target point is visible from the perspective of the source point - Args: point1 (GeoPoint): source point point2 (GeoPoint): target point - Returns: [bool]: Success """ @@ -399,7 +366,6 @@ def simTestLineOfSightBetweenPoints(self, point1, point2): def simGetWorldExtents(self): """ Returns a list of GeoPoints representing the minimum and maximum extents of the world - Returns: list[GeoPoint] """ @@ -411,10 +377,8 @@ def simRunConsoleCommand(self, command): Allows the client to execute a command in Unreal's native console, via an API. Affords access to the countless built-in commands such as "stat unit", "stat fps", "open [map]", adjust any config settings, etc. etc. Allows the user to create bespoke APIs very easily, by adding a custom event to the level blueprint, and then calling the console command "ce MyEventName [args]". No recompilation of AirSim needed! - Args: command ([string]): Desired Unreal Engine Console command to run - Returns: [bool]: Success """ @@ -424,9 +388,7 @@ def simRunConsoleCommand(self, command): def simGetMeshPositionVertexBuffers(self): """ Returns the static meshes that make up the scene - See https://microsoft.github.io/AirSim/meshes/ for details and how to use this - Returns: list[MeshPositionVertexBuffersResponse]: """ @@ -437,7 +399,6 @@ def simGetCollisionInfo(self, vehicle_name = ''): """ Args: vehicle_name (str, optional): Name of the Vehicle to get the info of - Returns: CollisionInfo: """ @@ -446,9 +407,7 @@ def simGetCollisionInfo(self, vehicle_name = ''): def simSetVehiclePose(self, pose, ignore_collision, vehicle_name = ''): """ Set the pose of the vehicle - If you don't want to change position (or orientation) then just set components of position (or orientation) to floating point nan values - Args: pose (Pose): Desired Pose pf the vehicle ignore_collision (bool): Whether to ignore any collision or not @@ -462,7 +421,6 @@ def simGetVehiclePose(self, vehicle_name = ''): Args: vehicle_name (str, optional): Name of the vehicle to get the Pose of - Returns: Pose: """ @@ -472,9 +430,7 @@ def simGetVehiclePose(self, vehicle_name = ''): def simSetTraceLine(self, color_rgba, thickness=1.0, vehicle_name = ''): """ Modify the color and thickness of the line when Tracing is enabled - Tracing can be enabled by pressing T in the Editor or setting `EnableTrace` to `True` in the Vehicle Settings - Args: color_rgba (list): desired RGBA values from 0.0 to 1.0 thickness (float, optional): Thickness of the line @@ -485,10 +441,8 @@ def simSetTraceLine(self, color_rgba, thickness=1.0, vehicle_name = ''): def simGetObjectPose(self, object_name): """ The position inside the returned Pose is in the world frame - Args: object_name (str): Object to get the Pose of - Returns: Pose: """ @@ -498,15 +452,12 @@ def simGetObjectPose(self, object_name): def simSetObjectPose(self, object_name, pose, teleport = True): """ Set the pose of the object(actor) in the environment - The specified actor must have Mobility set to movable, otherwise there will be undefined behaviour. See https://www.unrealengine.com/en-US/blog/moving-physical-objects for details on how to set Mobility and the effect of Teleport parameter - Args: object_name (str): Name of the object(actor) to move pose (Pose): Desired Pose of the object teleport (bool, optional): Whether to move the object immediately without affecting their velocity - Returns: bool: If the move was successful """ @@ -515,10 +466,8 @@ def simSetObjectPose(self, object_name, pose, teleport = True): def simGetObjectScale(self, object_name): """ Gets scale of an object in the world - Args: object_name (str): Object to get the scale of - Returns: airsim.Vector3r: Scale """ @@ -528,11 +477,9 @@ def simGetObjectScale(self, object_name): def simSetObjectScale(self, object_name, scale_vector): """ Sets scale of an object in the world - Args: object_name (str): Object to set the scale of scale_vector (airsim.Vector3r): Desired scale of object - Returns: bool: True if scale change was successful """ @@ -541,12 +488,9 @@ def simSetObjectScale(self, object_name, scale_vector): def simListSceneObjects(self, name_regex = '.*'): """ Lists the objects present in the environment - Default behaviour is to list all objects, regex can be used to return smaller list of matching objects or actors - Args: name_regex (str, optional): String to match actor names against, e.g. "Cylinder.*" - Returns: list[str]: List containing all the names """ @@ -555,10 +499,8 @@ def simListSceneObjects(self, name_regex = '.*'): def simLoadLevel(self, level_name): """ Loads a level specified by its name - Args: level_name (str): Name of the level to load - Returns: bool: True if the level was successfully loaded """ @@ -567,7 +509,6 @@ def simLoadLevel(self, level_name): def simListAssets(self): """ Lists all the assets present in the Asset Registry - Returns: list[str]: Names of all the assets """ @@ -575,7 +516,6 @@ def simListAssets(self): def simSpawnObject(self, object_name, asset_name, pose, scale, physics_enabled=False, is_blueprint=False): """Spawned selected object in the world - Args: object_name (str): Desired name of new object asset_name (str): Name of asset(mesh) in the project database @@ -583,7 +523,6 @@ def simSpawnObject(self, object_name, asset_name, pose, scale, physics_enabled=F scale (airsim.Vector3r): Desired scale of object physics_enabled (bool, optional): Whether to enable physics for the object is_blueprint (bool, optional): Whether to spawn a blueprint or an actor - Returns: str: Name of spawned object, in case it had to be modified """ @@ -591,10 +530,8 @@ def simSpawnObject(self, object_name, asset_name, pose, scale, physics_enabled=F def simDestroyObject(self, object_name): """Removes selected object from the world - Args: object_name (str): Name of object to be removed - Returns: bool: True if object is queued up for removal """ @@ -603,16 +540,12 @@ def simDestroyObject(self, object_name): def simSetSegmentationObjectID(self, mesh_name, object_id, is_name_regex = False): """ Set segmentation ID for specific objects - See https://microsoft.github.io/AirSim/image_apis/#segmentation for details - Args: mesh_name (str): Name of the mesh to set the ID of (supports regex) object_id (int): Object ID to be set, range 0-255 - RBG values for IDs can be seen at https://microsoft.github.io/AirSim/seg_rgbs.txt is_name_regex (bool, optional): Whether the mesh name is a regex - Returns: bool: If the mesh was found """ @@ -621,9 +554,7 @@ def simSetSegmentationObjectID(self, mesh_name, object_id, is_name_regex = False def simGetSegmentationObjectID(self, mesh_name): """ Returns Object ID for the given mesh name - Mapping of Object IDs to RGB values can be seen at https://microsoft.github.io/AirSim/seg_rgbs.txt - Args: mesh_name (str): Name of the mesh to get the ID of """ @@ -632,23 +563,19 @@ def simGetSegmentationObjectID(self, mesh_name): def simAddDetectionFilterMeshName(self, camera_name, image_type, mesh_name, vehicle_name = '', external = False): """ Add mesh name to detect in wild card format - For example: simAddDetectionFilterMeshName("Car_*") will detect all instance named "Car_*" - Args: camera_name (str): Name of the camera, for backwards compatibility, ID numbers such as 0,1,etc. can also be used image_type (ImageType): Type of image required mesh_name (str): mesh name in wild card format vehicle_name (str, optional): Vehicle which the camera is associated with external (bool, optional): Whether the camera is an External Camera - """ self.client.call('simAddDetectionFilterMeshName', camera_name, image_type, mesh_name, vehicle_name, external) def simSetDetectionFilterRadius(self, camera_name, image_type, radius_cm, vehicle_name = '', external = False): """ Set detection radius for all cameras - Args: camera_name (str): Name of the camera, for backwards compatibility, ID numbers such as 0,1,etc. can also be used image_type (ImageType): Type of image required @@ -661,26 +588,22 @@ def simSetDetectionFilterRadius(self, camera_name, image_type, radius_cm, vehicl def simClearDetectionMeshNames(self, camera_name, image_type, vehicle_name = '', external = False): """ Clear all mesh names from detection filter - Args: camera_name (str): Name of the camera, for backwards compatibility, ID numbers such as 0,1,etc. can also be used image_type (ImageType): Type of image required vehicle_name (str, optional): Vehicle which the camera is associated with external (bool, optional): Whether the camera is an External Camera - """ self.client.call('simClearDetectionMeshNames', camera_name, image_type, vehicle_name, external) def simGetDetections(self, camera_name, image_type, vehicle_name = '', external = False): """ Get current detections - Args: camera_name (str): Name of the camera, for backwards compatibility, ID numbers such as 0,1,etc. can also be used image_type (ImageType): Type of image required vehicle_name (str, optional): Vehicle which the camera is associated with external (bool, optional): Whether the camera is an External Camera - Returns: DetectionInfo array """ @@ -690,13 +613,10 @@ def simGetDetections(self, camera_name, image_type, vehicle_name = '', external def simPrintLogMessage(self, message, message_param = "", severity = 0): """ Prints the specified message in the simulator's window. - If message_param is supplied, then it's printed next to the message and in that case if this API is called with same message value but different message_param again then previous line is overwritten with new line (instead of API creating new line on display). - For example, `simPrintLogMessage("Iteration: ", to_string(i))` keeps updating same line on display when API is called with different values of i. The valid values of severity parameter is 0 to 3 inclusive that corresponds to different colors. - Args: message (str): Message to be printed message_param (str, optional): Parameter to be printed next to the message @@ -707,12 +627,10 @@ def simPrintLogMessage(self, message, message_param = "", severity = 0): def simGetCameraInfo(self, camera_name, vehicle_name = '', external=False): """ Get details about the camera - Args: camera_name (str): Name of the camera, for backwards compatibility, ID numbers such as 0,1,etc. can also be used vehicle_name (str, optional): Vehicle which the camera is associated with external (bool, optional): Whether the camera is an External Camera - Returns: CameraInfo: """ @@ -722,12 +640,10 @@ def simGetCameraInfo(self, camera_name, vehicle_name = '', external=False): def simGetDistortionParams(self, camera_name, vehicle_name = '', external = False): """ Get camera distortion parameters - Args: camera_name (str): Name of the camera, for backwards compatibility, ID numbers such as 0,1,etc. can also be used vehicle_name (str, optional): Vehicle which the camera is associated with external (bool, optional): Whether the camera is an External Camera - Returns: List (float): List of distortion parameter values corresponding to K1, K2, K3, P1, P2 respectively. """ @@ -737,7 +653,6 @@ def simGetDistortionParams(self, camera_name, vehicle_name = '', external = Fals def simSetDistortionParams(self, camera_name, distortion_params, vehicle_name = '', external = False): """ Set camera distortion parameters - Args: camera_name (str): Name of the camera, for backwards compatibility, ID numbers such as 0,1,etc. can also be used distortion_params (dict): Dictionary of distortion param names and corresponding values @@ -752,7 +667,6 @@ def simSetDistortionParams(self, camera_name, distortion_params, vehicle_name = def simSetDistortionParam(self, camera_name, param_name, value, vehicle_name = '', external = False): """ Set single camera distortion parameter - Args: camera_name (str): Name of the camera, for backwards compatibility, ID numbers such as 0,1,etc. can also be used param_name (str): Name of distortion parameter @@ -765,7 +679,6 @@ def simSetDistortionParam(self, camera_name, param_name, value, vehicle_name = ' def simSetCameraPose(self, camera_name, pose, vehicle_name = '', external = False): """ - Control the pose of a selected camera - Args: camera_name (str): Name of the camera to be controlled pose (Pose): Pose representing the desired position and orientation of the camera @@ -778,7 +691,6 @@ def simSetCameraPose(self, camera_name, pose, vehicle_name = '', external = Fals def simSetCameraFov(self, camera_name, fov_degrees, vehicle_name = '', external = False): """ - Control the field of view of a selected camera - Args: camera_name (str): Name of the camera to be controlled fov_degrees (float): Value of field of view in degrees @@ -791,12 +703,9 @@ def simSetCameraFov(self, camera_name, fov_degrees, vehicle_name = '', external def simGetGroundTruthKinematics(self, vehicle_name = ''): """ Get Ground truth kinematics of the vehicle - The position inside the returned KinematicsState is in the frame of the vehicle's starting point - Args: vehicle_name (str, optional): Name of the vehicle - Returns: KinematicsState: Ground truth of the vehicle """ @@ -807,9 +716,7 @@ def simGetGroundTruthKinematics(self, vehicle_name = ''): def simSetKinematics(self, state, ignore_collision, vehicle_name = ''): """ Set the kinematics state of the vehicle - If you don't want to change position (or orientation) then just set components of position (or orientation) to floating point nan values - Args: state (KinematicsState): Desired Pose pf the vehicle ignore_collision (bool): Whether to ignore any collision or not @@ -820,12 +727,9 @@ def simSetKinematics(self, state, ignore_collision, vehicle_name = ''): def simGetGroundTruthEnvironment(self, vehicle_name = ''): """ Get ground truth environment state - The position inside the returned EnvironmentState is in the frame of the vehicle's starting point - Args: vehicle_name (str, optional): Name of the vehicle - Returns: EnvironmentState: Ground truth environment state """ @@ -833,13 +737,13 @@ def simGetGroundTruthEnvironment(self, vehicle_name = ''): return EnvironmentState.from_msgpack(env_state) simGetGroundTruthEnvironment.__annotations__ = {'return': EnvironmentState} + #sensor APIs def getImuData(self, imu_name = '', vehicle_name = ''): """ Args: imu_name (str, optional): Name of IMU to get data from, specified in settings.json vehicle_name (str, optional): Name of vehicle to which the sensor corresponds to - Returns: ImuData: """ @@ -850,7 +754,6 @@ def getBarometerData(self, barometer_name = '', vehicle_name = ''): Args: barometer_name (str, optional): Name of Barometer to get data from, specified in settings.json vehicle_name (str, optional): Name of vehicle to which the sensor corresponds to - Returns: BarometerData: """ @@ -861,7 +764,6 @@ def getMagnetometerData(self, magnetometer_name = '', vehicle_name = ''): Args: magnetometer_name (str, optional): Name of Magnetometer to get data from, specified in settings.json vehicle_name (str, optional): Name of vehicle to which the sensor corresponds to - Returns: MagnetometerData: """ @@ -872,7 +774,6 @@ def getGpsData(self, gps_name = '', vehicle_name = ''): Args: gps_name (str, optional): Name of GPS to get data from, specified in settings.json vehicle_name (str, optional): Name of vehicle to which the sensor corresponds to - Returns: GpsData: """ @@ -883,7 +784,6 @@ def getDistanceSensorData(self, distance_sensor_name = '', vehicle_name = ''): Args: distance_sensor_name (str, optional): Name of Distance Sensor to get data from, specified in settings.json vehicle_name (str, optional): Name of vehicle to which the sensor corresponds to - Returns: DistanceSensorData: """ @@ -894,7 +794,6 @@ def getLidarData(self, lidar_name = '', vehicle_name = ''): Args: lidar_name (str, optional): Name of Lidar to get data from, specified in settings.json vehicle_name (str, optional): Name of vehicle to which the sensor corresponds to - Returns: LidarData: """ @@ -904,11 +803,9 @@ def simGetLidarSegmentation(self, lidar_name = '', vehicle_name = ''): """ NOTE: Deprecated API, use `getLidarData()` API instead Returns Segmentation ID of each point's collided object in the last Lidar update - Args: lidar_name (str, optional): Name of Lidar sensor vehicle_name (str, optional): Name of the vehicle wth the sensor - Returns: list[int]: Segmentation IDs of the objects """ @@ -925,7 +822,6 @@ def simFlushPersistentMarkers(self): def simPlotPoints(self, points, color_rgba=[1.0, 0.0, 0.0, 1.0], size = 10.0, duration = -1.0, is_persistent = False): """ Plot a list of 3D points in World NED frame - Args: points (list[Vector3r]): List of Vector3r objects color_rgba (list, optional): desired RGBA values from 0.0 to 1.0 @@ -938,7 +834,6 @@ def simPlotPoints(self, points, color_rgba=[1.0, 0.0, 0.0, 1.0], size = 10.0, du def simPlotLineStrip(self, points, color_rgba=[1.0, 0.0, 0.0, 1.0], thickness = 5.0, duration = -1.0, is_persistent = False): """ Plots a line strip in World NED frame, defined from points[0] to points[1], points[1] to points[2], ... , points[n-2] to points[n-1] - Args: points (list[Vector3r]): List of 3D locations of line start and end points, specified as Vector3r objects color_rgba (list, optional): desired RGBA values from 0.0 to 1.0 @@ -951,7 +846,6 @@ def simPlotLineStrip(self, points, color_rgba=[1.0, 0.0, 0.0, 1.0], thickness = def simPlotLineList(self, points, color_rgba=[1.0, 0.0, 0.0, 1.0], thickness = 5.0, duration = -1.0, is_persistent = False): """ Plots a line strip in World NED frame, defined from points[0] to points[1], points[2] to points[3], ... , points[n-2] to points[n-1] - Args: points (list[Vector3r]): List of 3D locations of line start and end points, specified as Vector3r objects. Must be even color_rgba (list, optional): desired RGBA values from 0.0 to 1.0 @@ -964,7 +858,6 @@ def simPlotLineList(self, points, color_rgba=[1.0, 0.0, 0.0, 1.0], thickness = 5 def simPlotArrows(self, points_start, points_end, color_rgba=[1.0, 0.0, 0.0, 1.0], thickness = 5.0, arrow_size = 2.0, duration = -1.0, is_persistent = False): """ Plots a list of arrows in World NED frame, defined from points_start[0] to points_end[0], points_start[1] to points_end[1], ... , points_start[n-1] to points_end[n-1] - Args: points_start (list[Vector3r]): List of 3D start positions of arrow start positions, specified as Vector3r objects points_end (list[Vector3r]): List of 3D end positions of arrow start positions, specified as Vector3r objects @@ -980,7 +873,6 @@ def simPlotArrows(self, points_start, points_end, color_rgba=[1.0, 0.0, 0.0, 1.0 def simPlotStrings(self, strings, positions, scale = 5, color_rgba=[1.0, 0.0, 0.0, 1.0], duration = -1.0): """ Plots a list of strings at desired positions in World NED frame. - Args: strings (list[String], optional): List of strings to plot positions (list[Vector3r]): List of positions where the strings should be plotted. Should be in one-to-one correspondence with the strings' list @@ -993,7 +885,6 @@ def simPlotStrings(self, strings, positions, scale = 5, color_rgba=[1.0, 0.0, 0. def simPlotTransforms(self, poses, scale = 5.0, thickness = 5.0, duration = -1.0, is_persistent = False): """ Plots a list of transforms in World NED frame. - Args: poses (list[Pose]): List of Pose objects representing the transforms to plot scale (float, optional): Length of transforms' axes @@ -1006,7 +897,6 @@ def simPlotTransforms(self, poses, scale = 5.0, thickness = 5.0, duration = -1.0 def simPlotTransformsWithNames(self, poses, names, tf_scale = 5.0, tf_thickness = 5.0, text_scale = 10.0, text_color_rgba = [1.0, 0.0, 0.0, 1.0], duration = -1.0): """ Plots a list of transforms with their names in World NED frame. - Args: poses (list[Pose]): List of Pose objects representing the transforms to plot names (list[string]): List of strings with one-to-one correspondence to list of poses @@ -1021,7 +911,6 @@ def simPlotTransformsWithNames(self, poses, names, tf_scale = 5.0, tf_thickness def cancelLastTask(self, vehicle_name = ''): """ Cancel previous Async task - Args: vehicle_name (str, optional): Name of the vehicle """ @@ -1031,7 +920,6 @@ def cancelLastTask(self, vehicle_name = ''): def startRecording(self): """ Start Recording - Recording will be done according to the settings """ self.client.call('startRecording') @@ -1045,7 +933,6 @@ def stopRecording(self): def isRecording(self): """ Whether Recording is running or not - Returns: bool: True if Recording, else False """ @@ -1054,7 +941,6 @@ def isRecording(self): def simSetWind(self, wind): """ Set simulated wind, in World frame, NED direction, m/s - Args: wind (Vector3r): Wind, in World frame, NED direction, in m/s """ @@ -1063,13 +949,11 @@ def simSetWind(self, wind): def simCreateVoxelGrid(self, position, x, y, z, res, of): """ Construct and save a binvox-formatted voxel grid of environment - Args: position (Vector3r): Position around which voxel grid is centered in m x, y, z (int): Size of each voxel grid dimension in m res (float): Resolution of voxel grid in m of (str): Name of output file to save voxel grid as - Returns: bool: True if output written to file successfully, else False """ @@ -1079,13 +963,11 @@ def simCreateVoxelGrid(self, position, x, y, z, res, of): def simAddVehicle(self, vehicle_name, vehicle_type, pose, pawn_path = ""): """ Create vehicle at runtime - Args: vehicle_name (str): Name of the vehicle being created vehicle_type (str): Type of vehicle, e.g. "simpleflight" pose (Pose): Initial pose of the vehicle pawn_path (str, optional): Vehicle blueprint path, default empty wbich uses the default blueprint for the vehicle type - Returns: bool: Whether vehicle was created """ @@ -1094,7 +976,6 @@ def simAddVehicle(self, vehicle_name, vehicle_type, pose, pawn_path = ""): def listVehicles(self): """ Lists the names of current vehicles - Returns: list[str]: List containing names of all vehicles """ @@ -1103,13 +984,12 @@ def listVehicles(self): def getSettingsString(self): """ Fetch the settings text being used by AirSim - Returns: str: Settings text in JSON format """ return self.client.call('getSettingsString') -#-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - Multirotor APIs -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - +#----------------------------------- Multirotor APIs --------------------------------------------- class MultirotorClient(VehicleClient, object): def __init__(self, ip = "", port = 41451, timeout_value = 3600): super(MultirotorClient, self).__init__(ip, port, timeout_value) @@ -1117,11 +997,9 @@ def __init__(self, ip = "", port = 41451, timeout_value = 3600): def takeoffAsync(self, timeout_sec = 20, vehicle_name = ''): """ Takeoff vehicle to 3m above ground. Vehicle should not be moving when this API is used - Args: timeout_sec (int, optional): Timeout for the vehicle to reach desired altitude vehicle_name (str, optional): Name of the vehicle to send this command to - Returns: msgpackrpc.future.Future: future. call .join() to wait for method to finish. Example: client.METHOD().join() """ @@ -1130,11 +1008,9 @@ def takeoffAsync(self, timeout_sec = 20, vehicle_name = ''): def landAsync(self, timeout_sec = 60, vehicle_name = ''): """ Land the vehicle - Args: timeout_sec (int, optional): Timeout for the vehicle to land vehicle_name (str, optional): Name of the vehicle to send this command to - Returns: msgpackrpc.future.Future: future. call .join() to wait for method to finish. Example: client.METHOD().join() """ @@ -1143,11 +1019,9 @@ def landAsync(self, timeout_sec = 60, vehicle_name = ''): def goHomeAsync(self, timeout_sec = 3e+38, vehicle_name = ''): """ Return vehicle to Home i.e. Launch location - Args: timeout_sec (int, optional): Timeout for the vehicle to reach desired altitude vehicle_name (str, optional): Name of the vehicle to send this command to - Returns: msgpackrpc.future.Future: future. call .join() to wait for method to finish. Example: client.METHOD().join() """ @@ -1164,7 +1038,6 @@ def moveByVelocityBodyFrameAsync(self, vx, vy, vz, duration, drivetrain = Drivet drivetrain (DrivetrainType, optional): yaw_mode (YawMode, optional): vehicle_name (str, optional): Name of the multirotor to send this command to - Returns: msgpackrpc.future.Future: future. call .join() to wait for method to finish. Example: client.METHOD().join() """ @@ -1180,7 +1053,6 @@ def moveByVelocityZBodyFrameAsync(self, vx, vy, z, duration, drivetrain = Drivet drivetrain (DrivetrainType, optional): yaw_mode (YawMode, optional): vehicle_name (str, optional): Name of the multirotor to send this command to - Returns: msgpackrpc.future.Future: future. call .join() to wait for method to finish. Example: client.METHOD().join() """ @@ -1205,7 +1077,6 @@ def moveByVelocityAsync(self, vx, vy, vz, duration, drivetrain = DrivetrainType. drivetrain (DrivetrainType, optional): yaw_mode (YawMode, optional): vehicle_name (str, optional): Name of the multirotor to send this command to - Returns: msgpackrpc.future.Future: future. call .join() to wait for method to finish. Example: client.METHOD().join() """ @@ -1232,10 +1103,8 @@ def moveToZAsync(self, z, velocity, timeout_sec = 3e+38, yaw_mode = YawMode(), l def moveByManualAsync(self, vx_max, vy_max, z_min, duration, drivetrain = DrivetrainType.MaxDegreeOfFreedom, yaw_mode = YawMode(), vehicle_name = ''): """ - Read current RC state and use it to control the vehicles. - Parameters sets up the constraints on velocity and minimum altitude while flying. If RC state is detected to violate these constraints then that RC state would be ignored. - Args: vx_max (float): max velocity allowed in x direction vy_max (float): max velocity allowed in y direction @@ -1266,7 +1135,6 @@ def moveByRC(self, rcdata = RCData(), vehicle_name = ''): def moveByMotorPWMsAsync(self, front_right_pwm, rear_left_pwm, front_left_pwm, rear_right_pwm, duration, vehicle_name = ''): """ - Directly control the motors using PWM values - Args: front_right_pwm (float): PWM value for the front right motor (between 0.0 to 1.0) rear_left_pwm (float): PWM value for the rear left motor (between 0.0 to 1.0) @@ -1284,23 +1152,16 @@ def moveByRollPitchYawZAsync(self, roll, pitch, yaw, z, duration, vehicle_name = - z is given in local NED frame of the vehicle. - Roll angle, pitch angle, and yaw angle set points are given in **radians**, in the body frame. - The body frame follows the Front Left Up (FLU) convention, and right-handedness. - - Frame Convention: - X axis is along the **Front** direction of the quadrotor. - | Clockwise rotation about this axis defines a positive **roll** angle. | Hence, rolling with a positive angle is equivalent to translating in the **right** direction, w.r.t. our FLU body frame. - - Y axis is along the **Left** direction of the quadrotor. - | Clockwise rotation about this axis defines a positive **pitch** angle. | Hence, pitching with a positive angle is equivalent to translating in the **front** direction, w.r.t. our FLU body frame. - - Z axis is along the **Up** direction. - | Clockwise rotation about this axis defines a positive **yaw** angle. | Hence, yawing with a positive angle is equivalent to rotated towards the **left** direction wrt our FLU body frame. Or in an anticlockwise fashion in the body XY / FL plane. - Args: roll (float): Desired roll angle, in radians. pitch (float): Desired pitch angle, in radians. @@ -1308,7 +1169,6 @@ def moveByRollPitchYawZAsync(self, roll, pitch, yaw, z, duration, vehicle_name = z (float): Desired Z value (in local NED frame of the vehicle) duration (float): Desired amount of time (seconds), to send this command for vehicle_name (str, optional): Name of the multirotor to send this command to - Returns: msgpackrpc.future.Future: future. call .join() to wait for method to finish. Example: client.METHOD().join() """ @@ -1319,23 +1179,16 @@ def moveByRollPitchYawThrottleAsync(self, roll, pitch, yaw, throttle, duration, - Desired throttle is between 0.0 to 1.0 - Roll angle, pitch angle, and yaw angle are given in **degrees** when using PX4 and in **radians** when using SimpleFlight, in the body frame. - The body frame follows the Front Left Up (FLU) convention, and right-handedness. - - Frame Convention: - X axis is along the **Front** direction of the quadrotor. - | Clockwise rotation about this axis defines a positive **roll** angle. | Hence, rolling with a positive angle is equivalent to translating in the **right** direction, w.r.t. our FLU body frame. - - Y axis is along the **Left** direction of the quadrotor. - | Clockwise rotation about this axis defines a positive **pitch** angle. | Hence, pitching with a positive angle is equivalent to translating in the **front** direction, w.r.t. our FLU body frame. - - Z axis is along the **Up** direction. - | Clockwise rotation about this axis defines a positive **yaw** angle. | Hence, yawing with a positive angle is equivalent to rotated towards the **left** direction wrt our FLU body frame. Or in an anticlockwise fashion in the body XY / FL plane. - Args: roll (float): Desired roll angle. pitch (float): Desired pitch angle. @@ -1343,7 +1196,6 @@ def moveByRollPitchYawThrottleAsync(self, roll, pitch, yaw, throttle, duration, throttle (float): Desired throttle (between 0.0 to 1.0) duration (float): Desired amount of time (seconds), to send this command for vehicle_name (str, optional): Name of the multirotor to send this command to - Returns: msgpackrpc.future.Future: future. call .join() to wait for method to finish. Example: client.METHOD().join() """ @@ -1354,23 +1206,16 @@ def moveByRollPitchYawrateThrottleAsync(self, roll, pitch, yaw_rate, throttle, d - Desired throttle is between 0.0 to 1.0 - Roll angle, pitch angle, and yaw rate set points are given in **radians**, in the body frame. - The body frame follows the Front Left Up (FLU) convention, and right-handedness. - - Frame Convention: - X axis is along the **Front** direction of the quadrotor. - | Clockwise rotation about this axis defines a positive **roll** angle. | Hence, rolling with a positive angle is equivalent to translating in the **right** direction, w.r.t. our FLU body frame. - - Y axis is along the **Left** direction of the quadrotor. - | Clockwise rotation about this axis defines a positive **pitch** angle. | Hence, pitching with a positive angle is equivalent to translating in the **front** direction, w.r.t. our FLU body frame. - - Z axis is along the **Up** direction. - | Clockwise rotation about this axis defines a positive **yaw** angle. | Hence, yawing with a positive angle is equivalent to rotated towards the **left** direction wrt our FLU body frame. Or in an anticlockwise fashion in the body XY / FL plane. - Args: roll (float): Desired roll angle, in radians. pitch (float): Desired pitch angle, in radians. @@ -1378,7 +1223,6 @@ def moveByRollPitchYawrateThrottleAsync(self, roll, pitch, yaw_rate, throttle, d throttle (float): Desired throttle (between 0.0 to 1.0) duration (float): Desired amount of time (seconds), to send this command for vehicle_name (str, optional): Name of the multirotor to send this command to - Returns: msgpackrpc.future.Future: future. call .join() to wait for method to finish. Example: client.METHOD().join() """ @@ -1389,23 +1233,16 @@ def moveByRollPitchYawrateZAsync(self, roll, pitch, yaw_rate, z, duration, vehic - z is given in local NED frame of the vehicle. - Roll angle, pitch angle, and yaw rate set points are given in **radians**, in the body frame. - The body frame follows the Front Left Up (FLU) convention, and right-handedness. - - Frame Convention: - X axis is along the **Front** direction of the quadrotor. - | Clockwise rotation about this axis defines a positive **roll** angle. | Hence, rolling with a positive angle is equivalent to translating in the **right** direction, w.r.t. our FLU body frame. - - Y axis is along the **Left** direction of the quadrotor. - | Clockwise rotation about this axis defines a positive **pitch** angle. | Hence, pitching with a positive angle is equivalent to translating in the **front** direction, w.r.t. our FLU body frame. - - Z axis is along the **Up** direction. - | Clockwise rotation about this axis defines a positive **yaw** angle. | Hence, yawing with a positive angle is equivalent to rotated towards the **left** direction wrt our FLU body frame. Or in an anticlockwise fashion in the body XY / FL plane. - Args: roll (float): Desired roll angle, in radians. pitch (float): Desired pitch angle, in radians. @@ -1413,7 +1250,6 @@ def moveByRollPitchYawrateZAsync(self, roll, pitch, yaw_rate, z, duration, vehic z (float): Desired Z value (in local NED frame of the vehicle) duration (float): Desired amount of time (seconds), to send this command for vehicle_name (str, optional): Name of the multirotor to send this command to - Returns: msgpackrpc.future.Future: future. call .join() to wait for method to finish. Example: client.METHOD().join() """ @@ -1424,23 +1260,16 @@ def moveByAngleRatesZAsync(self, roll_rate, pitch_rate, yaw_rate, z, duration, v - z is given in local NED frame of the vehicle. - Roll rate, pitch rate, and yaw rate set points are given in **radians**, in the body frame. - The body frame follows the Front Left Up (FLU) convention, and right-handedness. - - Frame Convention: - X axis is along the **Front** direction of the quadrotor. - | Clockwise rotation about this axis defines a positive **roll** angle. | Hence, rolling with a positive angle is equivalent to translating in the **right** direction, w.r.t. our FLU body frame. - - Y axis is along the **Left** direction of the quadrotor. - | Clockwise rotation about this axis defines a positive **pitch** angle. | Hence, pitching with a positive angle is equivalent to translating in the **front** direction, w.r.t. our FLU body frame. - - Z axis is along the **Up** direction. - | Clockwise rotation about this axis defines a positive **yaw** angle. | Hence, yawing with a positive angle is equivalent to rotated towards the **left** direction wrt our FLU body frame. Or in an anticlockwise fashion in the body XY / FL plane. - Args: roll_rate (float): Desired roll rate, in radians / second pitch_rate (float): Desired pitch rate, in radians / second @@ -1448,7 +1277,6 @@ def moveByAngleRatesZAsync(self, roll_rate, pitch_rate, yaw_rate, z, duration, v z (float): Desired Z value (in local NED frame of the vehicle) duration (float): Desired amount of time (seconds), to send this command for vehicle_name (str, optional): Name of the multirotor to send this command to - Returns: msgpackrpc.future.Future: future. call .join() to wait for method to finish. Example: client.METHOD().join() """ @@ -1459,23 +1287,16 @@ def moveByAngleRatesThrottleAsync(self, roll_rate, pitch_rate, yaw_rate, throttl - Desired throttle is between 0.0 to 1.0 - Roll rate, pitch rate, and yaw rate set points are given in **radians**, in the body frame. - The body frame follows the Front Left Up (FLU) convention, and right-handedness. - - Frame Convention: - X axis is along the **Front** direction of the quadrotor. - | Clockwise rotation about this axis defines a positive **roll** angle. | Hence, rolling with a positive angle is equivalent to translating in the **right** direction, w.r.t. our FLU body frame. - - Y axis is along the **Left** direction of the quadrotor. - | Clockwise rotation about this axis defines a positive **pitch** angle. | Hence, pitching with a positive angle is equivalent to translating in the **front** direction, w.r.t. our FLU body frame. - - Z axis is along the **Up** direction. - | Clockwise rotation about this axis defines a positive **yaw** angle. | Hence, yawing with a positive angle is equivalent to rotated towards the **left** direction wrt our FLU body frame. Or in an anticlockwise fashion in the body XY / FL plane. - Args: roll_rate (float): Desired roll rate, in radians / second pitch_rate (float): Desired pitch rate, in radians / second @@ -1483,7 +1304,6 @@ def moveByAngleRatesThrottleAsync(self, roll_rate, pitch_rate, yaw_rate, throttl throttle (float): Desired throttle (between 0.0 to 1.0) duration (float): Desired amount of time (seconds), to send this command for vehicle_name (str, optional): Name of the multirotor to send this command to - Returns: msgpackrpc.future.Future: future. call .join() to wait for method to finish. Example: client.METHOD().join() """ @@ -1495,7 +1315,6 @@ def setAngleRateControllerGains(self, angle_rate_gains=AngleRateControllerGains( This is because any velocity setpoint is converted to an angle level setpoint which is tracked with an angle level controllers. That angle level setpoint is itself tracked with and angle rate controller. - This function should only be called if the default angle rate control PID gains need to be modified. - Args: angle_rate_gains (AngleRateControllerGains): - Correspond to the roll, pitch, yaw axes, defined in the body frame. @@ -1511,7 +1330,6 @@ def setAngleLevelControllerGains(self, angle_level_gains=AngleLevelControllerGai This is because the AirSim flight controller will track velocity setpoints by converting them to angle set points. - This function should only be called if the default angle level control PID gains need to be modified. - Passing AngleLevelControllerGains() sets gains to default airsim values. - Args: angle_level_gains (AngleLevelControllerGains): - Correspond to the roll, pitch, yaw axes, defined in the body frame. @@ -1525,7 +1343,6 @@ def setVelocityControllerGains(self, velocity_gains=VelocityControllerGains(), v - Sets velocity controller gains for moveByVelocityAsync(). - This function should only be called if the default velocity control PID gains need to be modified. - Passing VelocityControllerGains() sets gains to default airsim values. - Args: velocity_gains (VelocityControllerGains): - Correspond to the world X, Y, Z axes. @@ -1540,7 +1357,6 @@ def setPositionControllerGains(self, position_gains=PositionControllerGains(), v """ Sets position controller gains for moveByPositionAsync. This function should only be called if the default position control PID gains need to be modified. - Args: position_gains (PositionControllerGains): - Correspond to the X, Y, Z axes. @@ -1553,10 +1369,8 @@ def setPositionControllerGains(self, position_gains=PositionControllerGains(), v def getMultirotorState(self, vehicle_name = ''): """ The position inside the returned MultirotorState is in the frame of the vehicle's starting point - Args: vehicle_name (str, optional): Vehicle to get the state of - Returns: MultirotorState: """ @@ -1567,56 +1381,45 @@ def getRotorStates(self, vehicle_name = ''): """ Used to obtain the current state of all a multirotor's rotors. The state includes the speeds, thrusts and torques for all rotors. - Args: vehicle_name (str, optional): Vehicle to get the rotor state of - Returns: RotorStates: Containing a timestamp and the speed, thrust and torque of all rotors. """ return RotorStates.from_msgpack(self.client.call('getRotorStates', vehicle_name)) - getRotorStates.__annotations__ = -{ - 'return' : RotorStates -} - -#-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - Car APIs -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - -class CarClient(VehicleClient, object) - : def __init__(self, ip = "", port = 41451, timeout_value = 3600) - : super(CarClient, self).__init__(ip, port, timeout_value) - - def setCarControls(self, controls, vehicle_name = '') - : "" - " - Control the car using throttle -, steering -, brake -, etc. - - Args : controls(CarControls) - : Struct containing control values vehicle_name(str, optional) - : Name of vehicle to be controlled "" - " - self.client.call('setCarControls', controls, vehicle_name) - - def getCarState(self, vehicle_name = '') - : "" - " - The position inside the returned CarState is in the frame of the vehicle's starting point - - Args : vehicle_name(str, optional) - : Name of vehicle - - Returns : CarState : "" - " - state_raw = self.client.call('getCarState', vehicle_name) return CarState.from_msgpack(state_raw) - - def getCarControls(self, vehicle_name ='') - : "" - " - Args : vehicle_name(str, optional) - : Name of vehicle - - Returns : CarControls : "" - " - controls_raw = self.client.call('getCarControls', vehicle_name) return CarControls.from_msgpack(controls_raw) + getRotorStates.__annotations__ = {'return': RotorStates} + +#----------------------------------- Car APIs --------------------------------------------- +class CarClient(VehicleClient, object): + def __init__(self, ip = "", port = 41451, timeout_value = 3600): + super(CarClient, self).__init__(ip, port, timeout_value) + + def setCarControls(self, controls, vehicle_name = ''): + """ + Control the car using throttle, steering, brake, etc. + Args: + controls (CarControls): Struct containing control values + vehicle_name (str, optional): Name of vehicle to be controlled + """ + self.client.call('setCarControls', controls, vehicle_name) + + def getCarState(self, vehicle_name = ''): + """ + The position inside the returned CarState is in the frame of the vehicle's starting point + Args: + vehicle_name (str, optional): Name of vehicle + Returns: + CarState: + """ + state_raw = self.client.call('getCarState', vehicle_name) + return CarState.from_msgpack(state_raw) + + def getCarControls(self, vehicle_name=''): + """ + Args: + vehicle_name (str, optional): Name of vehicle + Returns: + CarControls: + """ + controls_raw = self.client.call('getCarControls', vehicle_name) + return CarControls.from_msgpack(controls_raw) \ No newline at end of file From cd0a687912f61d4296766631dd03cf27be870426 Mon Sep 17 00:00:00 2001 From: HSC-1 Date: Mon, 2 May 2022 10:17:16 +0900 Subject: [PATCH 10/50] Bringing Back the White Space --- PythonClient/airsim/client.py | 200 +++++++++++++++++++++++++++++++++- 1 file changed, 198 insertions(+), 2 deletions(-) diff --git a/PythonClient/airsim/client.py b/PythonClient/airsim/client.py index 64ddca87ff..4f139ac552 100644 --- a/PythonClient/airsim/client.py +++ b/PythonClient/airsim/client.py @@ -20,6 +20,7 @@ def __init__(self, ip = "", port = 41451, timeout_value = 3600): def reset(self): """ Reset the vehicle to its original starting state + Note that you must call `enableApiControl` and `armDisarm` again after the call to reset """ self.client.call('reset') @@ -27,6 +28,7 @@ def reset(self): def ping(self): """ If connection is established then this call will return true otherwise it will be blocked until timeout + Returns: bool: """ @@ -48,6 +50,7 @@ def getMinRequiredClientVersion(self): def enableApiControl(self, is_enabled, vehicle_name = ''): """ Enables or disables API control for vehicle corresponding to vehicle_name + Args: is_enabled (bool): True to enable, False to disable API control vehicle_name (str, optional): Name of the vehicle to send this command to @@ -57,9 +60,12 @@ def enableApiControl(self, is_enabled, vehicle_name = ''): def isApiControlEnabled(self, vehicle_name = ''): """ Returns true if API control is established. + If false (which is default) then API calls would be ignored. After a successful call to `enableApiControl`, `isApiControlEnabled` should return true. + Args: vehicle_name (str, optional): Name of the vehicle + Returns: bool: If API control is enabled """ @@ -68,9 +74,11 @@ def isApiControlEnabled(self, vehicle_name = ''): def armDisarm(self, arm, vehicle_name = ''): """ Arms or disarms vehicle + Args: arm (bool): True to arm, False to disarm the vehicle vehicle_name (str, optional): Name of the vehicle to send this command to + Returns: bool: Success """ @@ -79,6 +87,7 @@ def armDisarm(self, arm, vehicle_name = ''): def simPause(self, is_paused): """ Pauses simulation + Args: is_paused (bool): True to pause the simulation, False to release """ @@ -87,6 +96,7 @@ def simPause(self, is_paused): def simIsPause(self): """ Returns true if the simulation is paused + Returns: bool: If the simulation is paused """ @@ -95,6 +105,7 @@ def simIsPause(self): def simContinueForTime(self, seconds): """ Continue the simulation for the specified number of seconds + Args: seconds (float): Time to run the simulation for """ @@ -103,6 +114,7 @@ def simContinueForTime(self, seconds): def simContinueForFrames(self, frames): """ Continue (or resume if paused) the simulation for the specified number of frames, after which the simulation will be paused. + Args: frames (int): Frames to run the simulation for """ @@ -111,8 +123,10 @@ def simContinueForFrames(self, frames): def getHomeGeoPoint(self, vehicle_name = ''): """ Get the Home location of the vehicle + Args: vehicle_name (str, optional): Name of vehicle to get home location of + Returns: GeoPoint: Home location of the vehicle """ @@ -147,9 +161,11 @@ def confirmConnection(self): def simSetLightIntensity(self, light_name, intensity): """ Change intensity of named light + Args: light_name (str): Name of light to change intensity (float): New intensity value + Returns: bool: True if successful, otherwise False """ @@ -158,13 +174,17 @@ def simSetLightIntensity(self, light_name, intensity): def simSwapTextures(self, tags, tex_id = 0, component_id = 0, material_id = 0): """ Runtime Swap Texture API + See https://microsoft.github.io/AirSim/retexturing/ for details + Args: tags (str): string of "," or ", " delimited tags to identify on which actors to perform the swap tex_id (int, optional): indexes the array of textures assigned to each actor undergoing a swap + If out-of-bounds for some object's texture set, it will be taken modulo the number of textures that were available component_id (int, optional): material_id (int, optional): + Returns: list[str]: List of objects which matched the provided tags and had the texture swap perfomed """ @@ -177,7 +197,8 @@ def simSetObjectMaterial(self, object_name, material_name, component_id = 0): Args: object_name (str): name of object to set material for material_name (str): name of material to set for object - component_id (int, optional) : index of material elements + component_id (int, optional) : index of material elements + Returns: bool: True if material was set """ @@ -190,7 +211,8 @@ def simSetObjectMaterialFromTexture(self, object_name, texture_path, component_i Args: object_name (str): name of object to set material for texture_path (str): path to texture to set for object - component_id (int, optional) : index of material elements + component_id (int, optional) : index of material elements + Returns: bool: True if material was set """ @@ -202,8 +224,10 @@ def simSetObjectMaterialFromTexture(self, object_name, texture_path, component_i def simSetTimeOfDay(self, is_enabled, start_datetime = "", is_start_datetime_dst = False, celestial_clock_speed = 1, update_interval_secs = 60, move_sun = True): """ Control the position of Sun in the environment + Sun's position is computed using the coordinates specified in `OriginGeopoint` in settings for the date-time specified in the argument, else if the string is empty, current date & time is used + Args: is_enabled (bool): True to enable time-of-day effect, False to reset the position to original start_datetime (str, optional): Date & Time in %Y-%m-%d %H:%M:%S format, e.g. `2018-02-12 15:20:00` @@ -220,6 +244,7 @@ def simSetTimeOfDay(self, is_enabled, start_datetime = "", is_start_datetime_dst def simEnableWeather(self, enable): """ Enable Weather effects. Needs to be called before using `simSetWeatherParameter` API + Args: enable (bool): True to enable, False to disable """ @@ -228,6 +253,7 @@ def simEnableWeather(self, enable): def simSetWeatherParameter(self, param, val): """ Enable various weather effects + Args: param (WeatherParameter): Weather effect to be enabled val (float): Intensity of the effect, Range 0-1 @@ -240,14 +266,17 @@ def simSetWeatherParameter(self, param, val): def simGetImage(self, camera_name, image_type, vehicle_name = '', external = False): """ Get a single image + Returns bytes of png format image which can be dumped into abinary file to create .png image `string_to_uint8_array()` can be used to convert into Numpy unit8 array See https://microsoft.github.io/AirSim/image_apis/ for details + Args: camera_name (str): Name of the camera, for backwards compatibility, ID numbers such as 0,1,etc. can also be used image_type (ImageType): Type of image required vehicle_name (str, optional): Name of the vehicle with the camera external (bool, optional): Whether the camera is an External Camera + Returns: Binary string literal of compressed png image """ @@ -266,11 +295,14 @@ def simGetImage(self, camera_name, image_type, vehicle_name = '', external = Fal def simGetImages(self, requests, vehicle_name = '', external = False): """ Get multiple images + See https://microsoft.github.io/AirSim/image_apis/ for details and examples + Args: requests (list[ImageRequest]): Images required vehicle_name (str, optional): Name of vehicle associated with the camera external (bool, optional): Whether the camera is an External Camera + Returns: list[ImageResponse]: """ @@ -344,9 +376,11 @@ def simGetCurrentFieldOfView(self, camera_name, vehicle_name = '', external = Fa def simTestLineOfSightToPoint(self, point, vehicle_name = ''): """ Returns whether the target point is visible from the perspective of the inputted vehicle + Args: point (GeoPoint): target point vehicle_name (str, optional): Name of vehicle + Returns: [bool]: Success """ @@ -355,9 +389,11 @@ def simTestLineOfSightToPoint(self, point, vehicle_name = ''): def simTestLineOfSightBetweenPoints(self, point1, point2): """ Returns whether the target point is visible from the perspective of the source point + Args: point1 (GeoPoint): source point point2 (GeoPoint): target point + Returns: [bool]: Success """ @@ -366,6 +402,7 @@ def simTestLineOfSightBetweenPoints(self, point1, point2): def simGetWorldExtents(self): """ Returns a list of GeoPoints representing the minimum and maximum extents of the world + Returns: list[GeoPoint] """ @@ -377,8 +414,10 @@ def simRunConsoleCommand(self, command): Allows the client to execute a command in Unreal's native console, via an API. Affords access to the countless built-in commands such as "stat unit", "stat fps", "open [map]", adjust any config settings, etc. etc. Allows the user to create bespoke APIs very easily, by adding a custom event to the level blueprint, and then calling the console command "ce MyEventName [args]". No recompilation of AirSim needed! + Args: command ([string]): Desired Unreal Engine Console command to run + Returns: [bool]: Success """ @@ -388,7 +427,9 @@ def simRunConsoleCommand(self, command): def simGetMeshPositionVertexBuffers(self): """ Returns the static meshes that make up the scene + See https://microsoft.github.io/AirSim/meshes/ for details and how to use this + Returns: list[MeshPositionVertexBuffersResponse]: """ @@ -399,6 +440,7 @@ def simGetCollisionInfo(self, vehicle_name = ''): """ Args: vehicle_name (str, optional): Name of the Vehicle to get the info of + Returns: CollisionInfo: """ @@ -407,7 +449,9 @@ def simGetCollisionInfo(self, vehicle_name = ''): def simSetVehiclePose(self, pose, ignore_collision, vehicle_name = ''): """ Set the pose of the vehicle + If you don't want to change position (or orientation) then just set components of position (or orientation) to floating point nan values + Args: pose (Pose): Desired Pose pf the vehicle ignore_collision (bool): Whether to ignore any collision or not @@ -421,6 +465,7 @@ def simGetVehiclePose(self, vehicle_name = ''): Args: vehicle_name (str, optional): Name of the vehicle to get the Pose of + Returns: Pose: """ @@ -430,7 +475,9 @@ def simGetVehiclePose(self, vehicle_name = ''): def simSetTraceLine(self, color_rgba, thickness=1.0, vehicle_name = ''): """ Modify the color and thickness of the line when Tracing is enabled + Tracing can be enabled by pressing T in the Editor or setting `EnableTrace` to `True` in the Vehicle Settings + Args: color_rgba (list): desired RGBA values from 0.0 to 1.0 thickness (float, optional): Thickness of the line @@ -441,8 +488,10 @@ def simSetTraceLine(self, color_rgba, thickness=1.0, vehicle_name = ''): def simGetObjectPose(self, object_name): """ The position inside the returned Pose is in the world frame + Args: object_name (str): Object to get the Pose of + Returns: Pose: """ @@ -452,12 +501,15 @@ def simGetObjectPose(self, object_name): def simSetObjectPose(self, object_name, pose, teleport = True): """ Set the pose of the object(actor) in the environment + The specified actor must have Mobility set to movable, otherwise there will be undefined behaviour. See https://www.unrealengine.com/en-US/blog/moving-physical-objects for details on how to set Mobility and the effect of Teleport parameter + Args: object_name (str): Name of the object(actor) to move pose (Pose): Desired Pose of the object teleport (bool, optional): Whether to move the object immediately without affecting their velocity + Returns: bool: If the move was successful """ @@ -466,8 +518,10 @@ def simSetObjectPose(self, object_name, pose, teleport = True): def simGetObjectScale(self, object_name): """ Gets scale of an object in the world + Args: object_name (str): Object to get the scale of + Returns: airsim.Vector3r: Scale """ @@ -477,9 +531,11 @@ def simGetObjectScale(self, object_name): def simSetObjectScale(self, object_name, scale_vector): """ Sets scale of an object in the world + Args: object_name (str): Object to set the scale of scale_vector (airsim.Vector3r): Desired scale of object + Returns: bool: True if scale change was successful """ @@ -488,9 +544,12 @@ def simSetObjectScale(self, object_name, scale_vector): def simListSceneObjects(self, name_regex = '.*'): """ Lists the objects present in the environment + Default behaviour is to list all objects, regex can be used to return smaller list of matching objects or actors + Args: name_regex (str, optional): String to match actor names against, e.g. "Cylinder.*" + Returns: list[str]: List containing all the names """ @@ -499,8 +558,10 @@ def simListSceneObjects(self, name_regex = '.*'): def simLoadLevel(self, level_name): """ Loads a level specified by its name + Args: level_name (str): Name of the level to load + Returns: bool: True if the level was successfully loaded """ @@ -509,6 +570,7 @@ def simLoadLevel(self, level_name): def simListAssets(self): """ Lists all the assets present in the Asset Registry + Returns: list[str]: Names of all the assets """ @@ -516,6 +578,7 @@ def simListAssets(self): def simSpawnObject(self, object_name, asset_name, pose, scale, physics_enabled=False, is_blueprint=False): """Spawned selected object in the world + Args: object_name (str): Desired name of new object asset_name (str): Name of asset(mesh) in the project database @@ -523,6 +586,7 @@ def simSpawnObject(self, object_name, asset_name, pose, scale, physics_enabled=F scale (airsim.Vector3r): Desired scale of object physics_enabled (bool, optional): Whether to enable physics for the object is_blueprint (bool, optional): Whether to spawn a blueprint or an actor + Returns: str: Name of spawned object, in case it had to be modified """ @@ -530,8 +594,10 @@ def simSpawnObject(self, object_name, asset_name, pose, scale, physics_enabled=F def simDestroyObject(self, object_name): """Removes selected object from the world + Args: object_name (str): Name of object to be removed + Returns: bool: True if object is queued up for removal """ @@ -540,12 +606,16 @@ def simDestroyObject(self, object_name): def simSetSegmentationObjectID(self, mesh_name, object_id, is_name_regex = False): """ Set segmentation ID for specific objects + See https://microsoft.github.io/AirSim/image_apis/#segmentation for details + Args: mesh_name (str): Name of the mesh to set the ID of (supports regex) object_id (int): Object ID to be set, range 0-255 + RBG values for IDs can be seen at https://microsoft.github.io/AirSim/seg_rgbs.txt is_name_regex (bool, optional): Whether the mesh name is a regex + Returns: bool: If the mesh was found """ @@ -554,7 +624,9 @@ def simSetSegmentationObjectID(self, mesh_name, object_id, is_name_regex = False def simGetSegmentationObjectID(self, mesh_name): """ Returns Object ID for the given mesh name + Mapping of Object IDs to RGB values can be seen at https://microsoft.github.io/AirSim/seg_rgbs.txt + Args: mesh_name (str): Name of the mesh to get the ID of """ @@ -563,19 +635,23 @@ def simGetSegmentationObjectID(self, mesh_name): def simAddDetectionFilterMeshName(self, camera_name, image_type, mesh_name, vehicle_name = '', external = False): """ Add mesh name to detect in wild card format + For example: simAddDetectionFilterMeshName("Car_*") will detect all instance named "Car_*" + Args: camera_name (str): Name of the camera, for backwards compatibility, ID numbers such as 0,1,etc. can also be used image_type (ImageType): Type of image required mesh_name (str): mesh name in wild card format vehicle_name (str, optional): Vehicle which the camera is associated with external (bool, optional): Whether the camera is an External Camera + """ self.client.call('simAddDetectionFilterMeshName', camera_name, image_type, mesh_name, vehicle_name, external) def simSetDetectionFilterRadius(self, camera_name, image_type, radius_cm, vehicle_name = '', external = False): """ Set detection radius for all cameras + Args: camera_name (str): Name of the camera, for backwards compatibility, ID numbers such as 0,1,etc. can also be used image_type (ImageType): Type of image required @@ -588,22 +664,26 @@ def simSetDetectionFilterRadius(self, camera_name, image_type, radius_cm, vehicl def simClearDetectionMeshNames(self, camera_name, image_type, vehicle_name = '', external = False): """ Clear all mesh names from detection filter + Args: camera_name (str): Name of the camera, for backwards compatibility, ID numbers such as 0,1,etc. can also be used image_type (ImageType): Type of image required vehicle_name (str, optional): Vehicle which the camera is associated with external (bool, optional): Whether the camera is an External Camera + """ self.client.call('simClearDetectionMeshNames', camera_name, image_type, vehicle_name, external) def simGetDetections(self, camera_name, image_type, vehicle_name = '', external = False): """ Get current detections + Args: camera_name (str): Name of the camera, for backwards compatibility, ID numbers such as 0,1,etc. can also be used image_type (ImageType): Type of image required vehicle_name (str, optional): Vehicle which the camera is associated with external (bool, optional): Whether the camera is an External Camera + Returns: DetectionInfo array """ @@ -613,10 +693,13 @@ def simGetDetections(self, camera_name, image_type, vehicle_name = '', external def simPrintLogMessage(self, message, message_param = "", severity = 0): """ Prints the specified message in the simulator's window. + If message_param is supplied, then it's printed next to the message and in that case if this API is called with same message value but different message_param again then previous line is overwritten with new line (instead of API creating new line on display). + For example, `simPrintLogMessage("Iteration: ", to_string(i))` keeps updating same line on display when API is called with different values of i. The valid values of severity parameter is 0 to 3 inclusive that corresponds to different colors. + Args: message (str): Message to be printed message_param (str, optional): Parameter to be printed next to the message @@ -627,10 +710,12 @@ def simPrintLogMessage(self, message, message_param = "", severity = 0): def simGetCameraInfo(self, camera_name, vehicle_name = '', external=False): """ Get details about the camera + Args: camera_name (str): Name of the camera, for backwards compatibility, ID numbers such as 0,1,etc. can also be used vehicle_name (str, optional): Vehicle which the camera is associated with external (bool, optional): Whether the camera is an External Camera + Returns: CameraInfo: """ @@ -640,10 +725,12 @@ def simGetCameraInfo(self, camera_name, vehicle_name = '', external=False): def simGetDistortionParams(self, camera_name, vehicle_name = '', external = False): """ Get camera distortion parameters + Args: camera_name (str): Name of the camera, for backwards compatibility, ID numbers such as 0,1,etc. can also be used vehicle_name (str, optional): Vehicle which the camera is associated with external (bool, optional): Whether the camera is an External Camera + Returns: List (float): List of distortion parameter values corresponding to K1, K2, K3, P1, P2 respectively. """ @@ -653,6 +740,7 @@ def simGetDistortionParams(self, camera_name, vehicle_name = '', external = Fals def simSetDistortionParams(self, camera_name, distortion_params, vehicle_name = '', external = False): """ Set camera distortion parameters + Args: camera_name (str): Name of the camera, for backwards compatibility, ID numbers such as 0,1,etc. can also be used distortion_params (dict): Dictionary of distortion param names and corresponding values @@ -667,6 +755,7 @@ def simSetDistortionParams(self, camera_name, distortion_params, vehicle_name = def simSetDistortionParam(self, camera_name, param_name, value, vehicle_name = '', external = False): """ Set single camera distortion parameter + Args: camera_name (str): Name of the camera, for backwards compatibility, ID numbers such as 0,1,etc. can also be used param_name (str): Name of distortion parameter @@ -679,6 +768,7 @@ def simSetDistortionParam(self, camera_name, param_name, value, vehicle_name = ' def simSetCameraPose(self, camera_name, pose, vehicle_name = '', external = False): """ - Control the pose of a selected camera + Args: camera_name (str): Name of the camera to be controlled pose (Pose): Pose representing the desired position and orientation of the camera @@ -691,6 +781,7 @@ def simSetCameraPose(self, camera_name, pose, vehicle_name = '', external = Fals def simSetCameraFov(self, camera_name, fov_degrees, vehicle_name = '', external = False): """ - Control the field of view of a selected camera + Args: camera_name (str): Name of the camera to be controlled fov_degrees (float): Value of field of view in degrees @@ -703,9 +794,12 @@ def simSetCameraFov(self, camera_name, fov_degrees, vehicle_name = '', external def simGetGroundTruthKinematics(self, vehicle_name = ''): """ Get Ground truth kinematics of the vehicle + The position inside the returned KinematicsState is in the frame of the vehicle's starting point + Args: vehicle_name (str, optional): Name of the vehicle + Returns: KinematicsState: Ground truth of the vehicle """ @@ -716,7 +810,9 @@ def simGetGroundTruthKinematics(self, vehicle_name = ''): def simSetKinematics(self, state, ignore_collision, vehicle_name = ''): """ Set the kinematics state of the vehicle + If you don't want to change position (or orientation) then just set components of position (or orientation) to floating point nan values + Args: state (KinematicsState): Desired Pose pf the vehicle ignore_collision (bool): Whether to ignore any collision or not @@ -727,9 +823,12 @@ def simSetKinematics(self, state, ignore_collision, vehicle_name = ''): def simGetGroundTruthEnvironment(self, vehicle_name = ''): """ Get ground truth environment state + The position inside the returned EnvironmentState is in the frame of the vehicle's starting point + Args: vehicle_name (str, optional): Name of the vehicle + Returns: EnvironmentState: Ground truth environment state """ @@ -744,6 +843,7 @@ def getImuData(self, imu_name = '', vehicle_name = ''): Args: imu_name (str, optional): Name of IMU to get data from, specified in settings.json vehicle_name (str, optional): Name of vehicle to which the sensor corresponds to + Returns: ImuData: """ @@ -754,6 +854,7 @@ def getBarometerData(self, barometer_name = '', vehicle_name = ''): Args: barometer_name (str, optional): Name of Barometer to get data from, specified in settings.json vehicle_name (str, optional): Name of vehicle to which the sensor corresponds to + Returns: BarometerData: """ @@ -764,6 +865,7 @@ def getMagnetometerData(self, magnetometer_name = '', vehicle_name = ''): Args: magnetometer_name (str, optional): Name of Magnetometer to get data from, specified in settings.json vehicle_name (str, optional): Name of vehicle to which the sensor corresponds to + Returns: MagnetometerData: """ @@ -774,6 +876,7 @@ def getGpsData(self, gps_name = '', vehicle_name = ''): Args: gps_name (str, optional): Name of GPS to get data from, specified in settings.json vehicle_name (str, optional): Name of vehicle to which the sensor corresponds to + Returns: GpsData: """ @@ -784,6 +887,7 @@ def getDistanceSensorData(self, distance_sensor_name = '', vehicle_name = ''): Args: distance_sensor_name (str, optional): Name of Distance Sensor to get data from, specified in settings.json vehicle_name (str, optional): Name of vehicle to which the sensor corresponds to + Returns: DistanceSensorData: """ @@ -794,6 +898,7 @@ def getLidarData(self, lidar_name = '', vehicle_name = ''): Args: lidar_name (str, optional): Name of Lidar to get data from, specified in settings.json vehicle_name (str, optional): Name of vehicle to which the sensor corresponds to + Returns: LidarData: """ @@ -803,9 +908,11 @@ def simGetLidarSegmentation(self, lidar_name = '', vehicle_name = ''): """ NOTE: Deprecated API, use `getLidarData()` API instead Returns Segmentation ID of each point's collided object in the last Lidar update + Args: lidar_name (str, optional): Name of Lidar sensor vehicle_name (str, optional): Name of the vehicle wth the sensor + Returns: list[int]: Segmentation IDs of the objects """ @@ -822,6 +929,7 @@ def simFlushPersistentMarkers(self): def simPlotPoints(self, points, color_rgba=[1.0, 0.0, 0.0, 1.0], size = 10.0, duration = -1.0, is_persistent = False): """ Plot a list of 3D points in World NED frame + Args: points (list[Vector3r]): List of Vector3r objects color_rgba (list, optional): desired RGBA values from 0.0 to 1.0 @@ -834,6 +942,7 @@ def simPlotPoints(self, points, color_rgba=[1.0, 0.0, 0.0, 1.0], size = 10.0, du def simPlotLineStrip(self, points, color_rgba=[1.0, 0.0, 0.0, 1.0], thickness = 5.0, duration = -1.0, is_persistent = False): """ Plots a line strip in World NED frame, defined from points[0] to points[1], points[1] to points[2], ... , points[n-2] to points[n-1] + Args: points (list[Vector3r]): List of 3D locations of line start and end points, specified as Vector3r objects color_rgba (list, optional): desired RGBA values from 0.0 to 1.0 @@ -846,6 +955,7 @@ def simPlotLineStrip(self, points, color_rgba=[1.0, 0.0, 0.0, 1.0], thickness = def simPlotLineList(self, points, color_rgba=[1.0, 0.0, 0.0, 1.0], thickness = 5.0, duration = -1.0, is_persistent = False): """ Plots a line strip in World NED frame, defined from points[0] to points[1], points[2] to points[3], ... , points[n-2] to points[n-1] + Args: points (list[Vector3r]): List of 3D locations of line start and end points, specified as Vector3r objects. Must be even color_rgba (list, optional): desired RGBA values from 0.0 to 1.0 @@ -858,6 +968,7 @@ def simPlotLineList(self, points, color_rgba=[1.0, 0.0, 0.0, 1.0], thickness = 5 def simPlotArrows(self, points_start, points_end, color_rgba=[1.0, 0.0, 0.0, 1.0], thickness = 5.0, arrow_size = 2.0, duration = -1.0, is_persistent = False): """ Plots a list of arrows in World NED frame, defined from points_start[0] to points_end[0], points_start[1] to points_end[1], ... , points_start[n-1] to points_end[n-1] + Args: points_start (list[Vector3r]): List of 3D start positions of arrow start positions, specified as Vector3r objects points_end (list[Vector3r]): List of 3D end positions of arrow start positions, specified as Vector3r objects @@ -873,6 +984,7 @@ def simPlotArrows(self, points_start, points_end, color_rgba=[1.0, 0.0, 0.0, 1.0 def simPlotStrings(self, strings, positions, scale = 5, color_rgba=[1.0, 0.0, 0.0, 1.0], duration = -1.0): """ Plots a list of strings at desired positions in World NED frame. + Args: strings (list[String], optional): List of strings to plot positions (list[Vector3r]): List of positions where the strings should be plotted. Should be in one-to-one correspondence with the strings' list @@ -885,6 +997,7 @@ def simPlotStrings(self, strings, positions, scale = 5, color_rgba=[1.0, 0.0, 0. def simPlotTransforms(self, poses, scale = 5.0, thickness = 5.0, duration = -1.0, is_persistent = False): """ Plots a list of transforms in World NED frame. + Args: poses (list[Pose]): List of Pose objects representing the transforms to plot scale (float, optional): Length of transforms' axes @@ -897,6 +1010,7 @@ def simPlotTransforms(self, poses, scale = 5.0, thickness = 5.0, duration = -1.0 def simPlotTransformsWithNames(self, poses, names, tf_scale = 5.0, tf_thickness = 5.0, text_scale = 10.0, text_color_rgba = [1.0, 0.0, 0.0, 1.0], duration = -1.0): """ Plots a list of transforms with their names in World NED frame. + Args: poses (list[Pose]): List of Pose objects representing the transforms to plot names (list[string]): List of strings with one-to-one correspondence to list of poses @@ -911,6 +1025,7 @@ def simPlotTransformsWithNames(self, poses, names, tf_scale = 5.0, tf_thickness def cancelLastTask(self, vehicle_name = ''): """ Cancel previous Async task + Args: vehicle_name (str, optional): Name of the vehicle """ @@ -920,6 +1035,7 @@ def cancelLastTask(self, vehicle_name = ''): def startRecording(self): """ Start Recording + Recording will be done according to the settings """ self.client.call('startRecording') @@ -933,6 +1049,7 @@ def stopRecording(self): def isRecording(self): """ Whether Recording is running or not + Returns: bool: True if Recording, else False """ @@ -941,6 +1058,7 @@ def isRecording(self): def simSetWind(self, wind): """ Set simulated wind, in World frame, NED direction, m/s + Args: wind (Vector3r): Wind, in World frame, NED direction, in m/s """ @@ -949,11 +1067,13 @@ def simSetWind(self, wind): def simCreateVoxelGrid(self, position, x, y, z, res, of): """ Construct and save a binvox-formatted voxel grid of environment + Args: position (Vector3r): Position around which voxel grid is centered in m x, y, z (int): Size of each voxel grid dimension in m res (float): Resolution of voxel grid in m of (str): Name of output file to save voxel grid as + Returns: bool: True if output written to file successfully, else False """ @@ -963,11 +1083,13 @@ def simCreateVoxelGrid(self, position, x, y, z, res, of): def simAddVehicle(self, vehicle_name, vehicle_type, pose, pawn_path = ""): """ Create vehicle at runtime + Args: vehicle_name (str): Name of the vehicle being created vehicle_type (str): Type of vehicle, e.g. "simpleflight" pose (Pose): Initial pose of the vehicle pawn_path (str, optional): Vehicle blueprint path, default empty wbich uses the default blueprint for the vehicle type + Returns: bool: Whether vehicle was created """ @@ -976,6 +1098,7 @@ def simAddVehicle(self, vehicle_name, vehicle_type, pose, pawn_path = ""): def listVehicles(self): """ Lists the names of current vehicles + Returns: list[str]: List containing names of all vehicles """ @@ -984,6 +1107,7 @@ def listVehicles(self): def getSettingsString(self): """ Fetch the settings text being used by AirSim + Returns: str: Settings text in JSON format """ @@ -997,9 +1121,11 @@ def __init__(self, ip = "", port = 41451, timeout_value = 3600): def takeoffAsync(self, timeout_sec = 20, vehicle_name = ''): """ Takeoff vehicle to 3m above ground. Vehicle should not be moving when this API is used + Args: timeout_sec (int, optional): Timeout for the vehicle to reach desired altitude vehicle_name (str, optional): Name of the vehicle to send this command to + Returns: msgpackrpc.future.Future: future. call .join() to wait for method to finish. Example: client.METHOD().join() """ @@ -1008,9 +1134,11 @@ def takeoffAsync(self, timeout_sec = 20, vehicle_name = ''): def landAsync(self, timeout_sec = 60, vehicle_name = ''): """ Land the vehicle + Args: timeout_sec (int, optional): Timeout for the vehicle to land vehicle_name (str, optional): Name of the vehicle to send this command to + Returns: msgpackrpc.future.Future: future. call .join() to wait for method to finish. Example: client.METHOD().join() """ @@ -1019,9 +1147,11 @@ def landAsync(self, timeout_sec = 60, vehicle_name = ''): def goHomeAsync(self, timeout_sec = 3e+38, vehicle_name = ''): """ Return vehicle to Home i.e. Launch location + Args: timeout_sec (int, optional): Timeout for the vehicle to reach desired altitude vehicle_name (str, optional): Name of the vehicle to send this command to + Returns: msgpackrpc.future.Future: future. call .join() to wait for method to finish. Example: client.METHOD().join() """ @@ -1038,6 +1168,7 @@ def moveByVelocityBodyFrameAsync(self, vx, vy, vz, duration, drivetrain = Drivet drivetrain (DrivetrainType, optional): yaw_mode (YawMode, optional): vehicle_name (str, optional): Name of the multirotor to send this command to + Returns: msgpackrpc.future.Future: future. call .join() to wait for method to finish. Example: client.METHOD().join() """ @@ -1053,6 +1184,7 @@ def moveByVelocityZBodyFrameAsync(self, vx, vy, z, duration, drivetrain = Drivet drivetrain (DrivetrainType, optional): yaw_mode (YawMode, optional): vehicle_name (str, optional): Name of the multirotor to send this command to + Returns: msgpackrpc.future.Future: future. call .join() to wait for method to finish. Example: client.METHOD().join() """ @@ -1077,6 +1209,7 @@ def moveByVelocityAsync(self, vx, vy, vz, duration, drivetrain = DrivetrainType. drivetrain (DrivetrainType, optional): yaw_mode (YawMode, optional): vehicle_name (str, optional): Name of the multirotor to send this command to + Returns: msgpackrpc.future.Future: future. call .join() to wait for method to finish. Example: client.METHOD().join() """ @@ -1103,8 +1236,10 @@ def moveToZAsync(self, z, velocity, timeout_sec = 3e+38, yaw_mode = YawMode(), l def moveByManualAsync(self, vx_max, vy_max, z_min, duration, drivetrain = DrivetrainType.MaxDegreeOfFreedom, yaw_mode = YawMode(), vehicle_name = ''): """ - Read current RC state and use it to control the vehicles. + Parameters sets up the constraints on velocity and minimum altitude while flying. If RC state is detected to violate these constraints then that RC state would be ignored. + Args: vx_max (float): max velocity allowed in x direction vy_max (float): max velocity allowed in y direction @@ -1135,6 +1270,7 @@ def moveByRC(self, rcdata = RCData(), vehicle_name = ''): def moveByMotorPWMsAsync(self, front_right_pwm, rear_left_pwm, front_left_pwm, rear_right_pwm, duration, vehicle_name = ''): """ - Directly control the motors using PWM values + Args: front_right_pwm (float): PWM value for the front right motor (between 0.0 to 1.0) rear_left_pwm (float): PWM value for the rear left motor (between 0.0 to 1.0) @@ -1152,16 +1288,23 @@ def moveByRollPitchYawZAsync(self, roll, pitch, yaw, z, duration, vehicle_name = - z is given in local NED frame of the vehicle. - Roll angle, pitch angle, and yaw angle set points are given in **radians**, in the body frame. - The body frame follows the Front Left Up (FLU) convention, and right-handedness. + - Frame Convention: - X axis is along the **Front** direction of the quadrotor. + | Clockwise rotation about this axis defines a positive **roll** angle. | Hence, rolling with a positive angle is equivalent to translating in the **right** direction, w.r.t. our FLU body frame. + - Y axis is along the **Left** direction of the quadrotor. + | Clockwise rotation about this axis defines a positive **pitch** angle. | Hence, pitching with a positive angle is equivalent to translating in the **front** direction, w.r.t. our FLU body frame. + - Z axis is along the **Up** direction. + | Clockwise rotation about this axis defines a positive **yaw** angle. | Hence, yawing with a positive angle is equivalent to rotated towards the **left** direction wrt our FLU body frame. Or in an anticlockwise fashion in the body XY / FL plane. + Args: roll (float): Desired roll angle, in radians. pitch (float): Desired pitch angle, in radians. @@ -1169,6 +1312,7 @@ def moveByRollPitchYawZAsync(self, roll, pitch, yaw, z, duration, vehicle_name = z (float): Desired Z value (in local NED frame of the vehicle) duration (float): Desired amount of time (seconds), to send this command for vehicle_name (str, optional): Name of the multirotor to send this command to + Returns: msgpackrpc.future.Future: future. call .join() to wait for method to finish. Example: client.METHOD().join() """ @@ -1179,16 +1323,23 @@ def moveByRollPitchYawThrottleAsync(self, roll, pitch, yaw, throttle, duration, - Desired throttle is between 0.0 to 1.0 - Roll angle, pitch angle, and yaw angle are given in **degrees** when using PX4 and in **radians** when using SimpleFlight, in the body frame. - The body frame follows the Front Left Up (FLU) convention, and right-handedness. + - Frame Convention: - X axis is along the **Front** direction of the quadrotor. + | Clockwise rotation about this axis defines a positive **roll** angle. | Hence, rolling with a positive angle is equivalent to translating in the **right** direction, w.r.t. our FLU body frame. + - Y axis is along the **Left** direction of the quadrotor. + | Clockwise rotation about this axis defines a positive **pitch** angle. | Hence, pitching with a positive angle is equivalent to translating in the **front** direction, w.r.t. our FLU body frame. + - Z axis is along the **Up** direction. + | Clockwise rotation about this axis defines a positive **yaw** angle. | Hence, yawing with a positive angle is equivalent to rotated towards the **left** direction wrt our FLU body frame. Or in an anticlockwise fashion in the body XY / FL plane. + Args: roll (float): Desired roll angle. pitch (float): Desired pitch angle. @@ -1196,6 +1347,7 @@ def moveByRollPitchYawThrottleAsync(self, roll, pitch, yaw, throttle, duration, throttle (float): Desired throttle (between 0.0 to 1.0) duration (float): Desired amount of time (seconds), to send this command for vehicle_name (str, optional): Name of the multirotor to send this command to + Returns: msgpackrpc.future.Future: future. call .join() to wait for method to finish. Example: client.METHOD().join() """ @@ -1206,16 +1358,23 @@ def moveByRollPitchYawrateThrottleAsync(self, roll, pitch, yaw_rate, throttle, d - Desired throttle is between 0.0 to 1.0 - Roll angle, pitch angle, and yaw rate set points are given in **radians**, in the body frame. - The body frame follows the Front Left Up (FLU) convention, and right-handedness. + - Frame Convention: - X axis is along the **Front** direction of the quadrotor. + | Clockwise rotation about this axis defines a positive **roll** angle. | Hence, rolling with a positive angle is equivalent to translating in the **right** direction, w.r.t. our FLU body frame. + - Y axis is along the **Left** direction of the quadrotor. + | Clockwise rotation about this axis defines a positive **pitch** angle. | Hence, pitching with a positive angle is equivalent to translating in the **front** direction, w.r.t. our FLU body frame. + - Z axis is along the **Up** direction. + | Clockwise rotation about this axis defines a positive **yaw** angle. | Hence, yawing with a positive angle is equivalent to rotated towards the **left** direction wrt our FLU body frame. Or in an anticlockwise fashion in the body XY / FL plane. + Args: roll (float): Desired roll angle, in radians. pitch (float): Desired pitch angle, in radians. @@ -1223,6 +1382,7 @@ def moveByRollPitchYawrateThrottleAsync(self, roll, pitch, yaw_rate, throttle, d throttle (float): Desired throttle (between 0.0 to 1.0) duration (float): Desired amount of time (seconds), to send this command for vehicle_name (str, optional): Name of the multirotor to send this command to + Returns: msgpackrpc.future.Future: future. call .join() to wait for method to finish. Example: client.METHOD().join() """ @@ -1233,16 +1393,23 @@ def moveByRollPitchYawrateZAsync(self, roll, pitch, yaw_rate, z, duration, vehic - z is given in local NED frame of the vehicle. - Roll angle, pitch angle, and yaw rate set points are given in **radians**, in the body frame. - The body frame follows the Front Left Up (FLU) convention, and right-handedness. + - Frame Convention: - X axis is along the **Front** direction of the quadrotor. + | Clockwise rotation about this axis defines a positive **roll** angle. | Hence, rolling with a positive angle is equivalent to translating in the **right** direction, w.r.t. our FLU body frame. + - Y axis is along the **Left** direction of the quadrotor. + | Clockwise rotation about this axis defines a positive **pitch** angle. | Hence, pitching with a positive angle is equivalent to translating in the **front** direction, w.r.t. our FLU body frame. + - Z axis is along the **Up** direction. + | Clockwise rotation about this axis defines a positive **yaw** angle. | Hence, yawing with a positive angle is equivalent to rotated towards the **left** direction wrt our FLU body frame. Or in an anticlockwise fashion in the body XY / FL plane. + Args: roll (float): Desired roll angle, in radians. pitch (float): Desired pitch angle, in radians. @@ -1250,6 +1417,7 @@ def moveByRollPitchYawrateZAsync(self, roll, pitch, yaw_rate, z, duration, vehic z (float): Desired Z value (in local NED frame of the vehicle) duration (float): Desired amount of time (seconds), to send this command for vehicle_name (str, optional): Name of the multirotor to send this command to + Returns: msgpackrpc.future.Future: future. call .join() to wait for method to finish. Example: client.METHOD().join() """ @@ -1260,16 +1428,23 @@ def moveByAngleRatesZAsync(self, roll_rate, pitch_rate, yaw_rate, z, duration, v - z is given in local NED frame of the vehicle. - Roll rate, pitch rate, and yaw rate set points are given in **radians**, in the body frame. - The body frame follows the Front Left Up (FLU) convention, and right-handedness. + - Frame Convention: - X axis is along the **Front** direction of the quadrotor. + | Clockwise rotation about this axis defines a positive **roll** angle. | Hence, rolling with a positive angle is equivalent to translating in the **right** direction, w.r.t. our FLU body frame. + - Y axis is along the **Left** direction of the quadrotor. + | Clockwise rotation about this axis defines a positive **pitch** angle. | Hence, pitching with a positive angle is equivalent to translating in the **front** direction, w.r.t. our FLU body frame. + - Z axis is along the **Up** direction. + | Clockwise rotation about this axis defines a positive **yaw** angle. | Hence, yawing with a positive angle is equivalent to rotated towards the **left** direction wrt our FLU body frame. Or in an anticlockwise fashion in the body XY / FL plane. + Args: roll_rate (float): Desired roll rate, in radians / second pitch_rate (float): Desired pitch rate, in radians / second @@ -1277,6 +1452,7 @@ def moveByAngleRatesZAsync(self, roll_rate, pitch_rate, yaw_rate, z, duration, v z (float): Desired Z value (in local NED frame of the vehicle) duration (float): Desired amount of time (seconds), to send this command for vehicle_name (str, optional): Name of the multirotor to send this command to + Returns: msgpackrpc.future.Future: future. call .join() to wait for method to finish. Example: client.METHOD().join() """ @@ -1287,16 +1463,23 @@ def moveByAngleRatesThrottleAsync(self, roll_rate, pitch_rate, yaw_rate, throttl - Desired throttle is between 0.0 to 1.0 - Roll rate, pitch rate, and yaw rate set points are given in **radians**, in the body frame. - The body frame follows the Front Left Up (FLU) convention, and right-handedness. + - Frame Convention: - X axis is along the **Front** direction of the quadrotor. + | Clockwise rotation about this axis defines a positive **roll** angle. | Hence, rolling with a positive angle is equivalent to translating in the **right** direction, w.r.t. our FLU body frame. + - Y axis is along the **Left** direction of the quadrotor. + | Clockwise rotation about this axis defines a positive **pitch** angle. | Hence, pitching with a positive angle is equivalent to translating in the **front** direction, w.r.t. our FLU body frame. + - Z axis is along the **Up** direction. + | Clockwise rotation about this axis defines a positive **yaw** angle. | Hence, yawing with a positive angle is equivalent to rotated towards the **left** direction wrt our FLU body frame. Or in an anticlockwise fashion in the body XY / FL plane. + Args: roll_rate (float): Desired roll rate, in radians / second pitch_rate (float): Desired pitch rate, in radians / second @@ -1304,6 +1487,7 @@ def moveByAngleRatesThrottleAsync(self, roll_rate, pitch_rate, yaw_rate, throttl throttle (float): Desired throttle (between 0.0 to 1.0) duration (float): Desired amount of time (seconds), to send this command for vehicle_name (str, optional): Name of the multirotor to send this command to + Returns: msgpackrpc.future.Future: future. call .join() to wait for method to finish. Example: client.METHOD().join() """ @@ -1315,6 +1499,7 @@ def setAngleRateControllerGains(self, angle_rate_gains=AngleRateControllerGains( This is because any velocity setpoint is converted to an angle level setpoint which is tracked with an angle level controllers. That angle level setpoint is itself tracked with and angle rate controller. - This function should only be called if the default angle rate control PID gains need to be modified. + Args: angle_rate_gains (AngleRateControllerGains): - Correspond to the roll, pitch, yaw axes, defined in the body frame. @@ -1330,6 +1515,7 @@ def setAngleLevelControllerGains(self, angle_level_gains=AngleLevelControllerGai This is because the AirSim flight controller will track velocity setpoints by converting them to angle set points. - This function should only be called if the default angle level control PID gains need to be modified. - Passing AngleLevelControllerGains() sets gains to default airsim values. + Args: angle_level_gains (AngleLevelControllerGains): - Correspond to the roll, pitch, yaw axes, defined in the body frame. @@ -1343,6 +1529,7 @@ def setVelocityControllerGains(self, velocity_gains=VelocityControllerGains(), v - Sets velocity controller gains for moveByVelocityAsync(). - This function should only be called if the default velocity control PID gains need to be modified. - Passing VelocityControllerGains() sets gains to default airsim values. + Args: velocity_gains (VelocityControllerGains): - Correspond to the world X, Y, Z axes. @@ -1357,6 +1544,7 @@ def setPositionControllerGains(self, position_gains=PositionControllerGains(), v """ Sets position controller gains for moveByPositionAsync. This function should only be called if the default position control PID gains need to be modified. + Args: position_gains (PositionControllerGains): - Correspond to the X, Y, Z axes. @@ -1369,8 +1557,10 @@ def setPositionControllerGains(self, position_gains=PositionControllerGains(), v def getMultirotorState(self, vehicle_name = ''): """ The position inside the returned MultirotorState is in the frame of the vehicle's starting point + Args: vehicle_name (str, optional): Vehicle to get the state of + Returns: MultirotorState: """ @@ -1381,8 +1571,10 @@ def getRotorStates(self, vehicle_name = ''): """ Used to obtain the current state of all a multirotor's rotors. The state includes the speeds, thrusts and torques for all rotors. + Args: vehicle_name (str, optional): Vehicle to get the rotor state of + Returns: RotorStates: Containing a timestamp and the speed, thrust and torque of all rotors. """ @@ -1397,6 +1589,7 @@ def __init__(self, ip = "", port = 41451, timeout_value = 3600): def setCarControls(self, controls, vehicle_name = ''): """ Control the car using throttle, steering, brake, etc. + Args: controls (CarControls): Struct containing control values vehicle_name (str, optional): Name of vehicle to be controlled @@ -1406,8 +1599,10 @@ def setCarControls(self, controls, vehicle_name = ''): def getCarState(self, vehicle_name = ''): """ The position inside the returned CarState is in the frame of the vehicle's starting point + Args: vehicle_name (str, optional): Name of vehicle + Returns: CarState: """ @@ -1418,6 +1613,7 @@ def getCarControls(self, vehicle_name=''): """ Args: vehicle_name (str, optional): Name of vehicle + Returns: CarControls: """ From c0ba2bed6bf8f0e178827b3716da01551685d78b Mon Sep 17 00:00:00 2001 From: Wojciech Buchwald <58979190+Giermek222@users.noreply.github.com> Date: Tue, 3 May 2022 13:35:39 +0200 Subject: [PATCH 11/50] Fix typo in channel log Fixed date of a change --- docs/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 7b311c033c..d12870c266 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -3,7 +3,7 @@ Below is summarized list of important changes. This does not include minor/less important changes or bug fixes or documentation update. This list updated every few months. For complete detailed changes, please review [commit history](https://github.com/Microsoft/AirSim/commits/master). -### Jan 2021 +### Jan 2022 * Latest release `v1.7.0` for [Windows](https://github.com/microsoft/AirSim/releases/tag/v1.7.0-windows) and [Linux](https://github.com/microsoft/AirSim/releases/tag/v1.7.0-linux) ### Dec 2021 From 17bc2d7f2883405ab5c6a2357cd559dacb3c3c0b Mon Sep 17 00:00:00 2001 From: zimmy87 Date: Fri, 6 May 2022 11:49:28 -0700 Subject: [PATCH 12/50] fix Unity build and AirSimCI Windows_VS2019 check --- .../AirsimWrapper/AirsimWrapper.vcxproj | 490 +++++++++--------- pipelines/ci.yml | 256 ++++----- 2 files changed, 373 insertions(+), 373 deletions(-) diff --git a/Unity/AirLibWrapper/AirsimWrapper/AirsimWrapper.vcxproj b/Unity/AirLibWrapper/AirsimWrapper/AirsimWrapper.vcxproj index 0eaf5d28d2..185d5b131b 100644 --- a/Unity/AirLibWrapper/AirsimWrapper/AirsimWrapper.vcxproj +++ b/Unity/AirLibWrapper/AirsimWrapper/AirsimWrapper.vcxproj @@ -1,246 +1,246 @@ - - - - - - Debug - Win32 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - $(ProjectDir)..\..\..\..\MSAirSim_2 - {B3142B89-A825-4A07-84D3-45C65CF0D7B0} - - - 15.0 - {B3142B89-A825-4A07-84D3-45C65CF0D7B0} - Win32Proj - AirsimWrapper - - - - DynamicLibrary - true - v142 - Unicode - - - DynamicLibrary - false - v142 - true - Unicode - - - DynamicLibrary - true - v142 - Unicode - - - DynamicLibrary - false - v142 - true - Unicode - - - - - - - - - - - - - - - - - - - - - true - - - $(VC_IncludePath);$(WindowsSDK_IncludePath); - true - - - true - - - true - - - - Level3 - Disabled - WIN32;_DEBUG;AIRSIMWRAPPER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) - true - $(ProjectDir)..\..\..\AirLib\include\vehicles\car;$(ProjectDir)..\..\..\AirLib\include;$(ProjectDir)..\..\..\AirLib\deps\eigen3;$(ProjectDir)..\..\..\external\rpclib\rpclib-2.2.1\include;$(ProjectDir)..\..\..\MavLinkCom\include;$(ProjectDir)include;%(AdditionalIncludeDirectories) - stdcpp17 - - - true - Windows - $(ProjectDir)..\$(Platform)\$(Configuration);$(AirSimDir)\AirLib\deps\MavLinkCom\lib\$(Platform)\$(Configuration);$(AirSimDir)\AirLib\lib\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) - - - false - - - - - - - - - Level3 - Disabled - _DEBUG;AIRSIMWRAPPER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) - true - $(ProjectDir)..\..\..\AirLib\include\vehicles\car;$(ProjectDir)..\..\..\AirLib\include;$(ProjectDir)..\..\..\AirLib\deps\eigen3;$(ProjectDir)..\..\..\external\rpclib\rpclib-2.2.1\include;$(ProjectDir)..\..\..\MavLinkCom\include;$(ProjectDir)include;%(AdditionalIncludeDirectories); - false - stdcpp17 - - - true - Windows - ..\$(Platform)\$(Configuration);..\..\..\AirLib\lib\$(Platform)\$(Configuration);..\..\..\MavLinkCom\lib\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) - MavLinkCom.lib;AirLib.lib;%(AdditionalDependencies) - LinkVerbose - false - false - - - true - - - - - - - - - Level3 - MaxSpeed - true - true - WIN32;NDEBUG;AIRSIMWRAPPER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) - true - $(ProjectDir)..\..\..\AirLib\include\vehicles\car;$(ProjectDir)..\..\..\AirLib\include;$(ProjectDir)..\..\..\AirLib\deps\eigen3;$(ProjectDir)..\..\..\external\rpclib\rpclib-2.2.1\include;$(ProjectDir)..\..\..\MavLinkCom\include;$(ProjectDir)include;%(AdditionalIncludeDirectories) - stdcpp17 - - - true - true - true - Windows - $(ProjectDir)..\$(Platform)\$(Configuration);$(AirSimDir)\AirLib\deps\MavLinkCom\lib\$(Platform)\$(Configuration);$(AirSimDir)\AirLib\lib\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) - - - false - - - - - - - - - Level3 - MaxSpeed - true - true - NDEBUG;AIRSIMWRAPPER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) - true - $(ProjectDir)..\..\..\AirLib\include\vehicles\car;$(ProjectDir)..\..\..\AirLib\include;$(ProjectDir)..\..\..\AirLib\deps\eigen3;$(ProjectDir)..\..\..\external\rpclib\rpclib-2.2.1\include;$(ProjectDir)..\..\..\MavLinkCom\include;$(ProjectDir)include;%(AdditionalIncludeDirectories); - false - stdcpp17 - - - true - true - true - Windows - ..\$(Platform)\$(Configuration);..\..\..\AirLib\lib\$(Platform)\$(Configuration);..\..\..\MavLinkCom\lib\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) - MavLinkCom.lib;AirLib.lib;%(AdditionalDependencies) - false - - - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + $(ProjectDir)..\..\..\..\MSAirSim_2 + {B3142B89-A825-4A07-84D3-45C65CF0D7B0} + + + 15.0 + {B3142B89-A825-4A07-84D3-45C65CF0D7B0} + Win32Proj + AirsimWrapper + + + + DynamicLibrary + true + v143 + Unicode + + + DynamicLibrary + false + v143 + true + Unicode + + + DynamicLibrary + true + v143 + Unicode + + + DynamicLibrary + false + v143 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + $(VC_IncludePath);$(WindowsSDK_IncludePath); + true + + + true + + + true + + + + Level3 + Disabled + WIN32;_DEBUG;AIRSIMWRAPPER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + $(ProjectDir)..\..\..\AirLib\include\vehicles\car;$(ProjectDir)..\..\..\AirLib\include;$(ProjectDir)..\..\..\AirLib\deps\eigen3;$(ProjectDir)..\..\..\external\rpclib\rpclib-2.2.1\include;$(ProjectDir)..\..\..\MavLinkCom\include;$(ProjectDir)include;%(AdditionalIncludeDirectories) + stdcpp17 + + + true + Windows + $(ProjectDir)..\$(Platform)\$(Configuration);$(AirSimDir)\AirLib\deps\MavLinkCom\lib\$(Platform)\$(Configuration);$(AirSimDir)\AirLib\lib\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) + + + false + + + + + + + + + Level3 + Disabled + _DEBUG;AIRSIMWRAPPER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + $(ProjectDir)..\..\..\AirLib\include\vehicles\car;$(ProjectDir)..\..\..\AirLib\include;$(ProjectDir)..\..\..\AirLib\deps\eigen3;$(ProjectDir)..\..\..\external\rpclib\rpclib-2.2.1\include;$(ProjectDir)..\..\..\MavLinkCom\include;$(ProjectDir)include;%(AdditionalIncludeDirectories); + false + stdcpp17 + + + true + Windows + ..\$(Platform)\$(Configuration);..\..\..\AirLib\lib\$(Platform)\$(Configuration);..\..\..\MavLinkCom\lib\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) + MavLinkCom.lib;AirLib.lib;%(AdditionalDependencies) + LinkVerbose + false + false + + + true + + + + + + + + + Level3 + MaxSpeed + true + true + WIN32;NDEBUG;AIRSIMWRAPPER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + $(ProjectDir)..\..\..\AirLib\include\vehicles\car;$(ProjectDir)..\..\..\AirLib\include;$(ProjectDir)..\..\..\AirLib\deps\eigen3;$(ProjectDir)..\..\..\external\rpclib\rpclib-2.2.1\include;$(ProjectDir)..\..\..\MavLinkCom\include;$(ProjectDir)include;%(AdditionalIncludeDirectories) + stdcpp17 + + + true + true + true + Windows + $(ProjectDir)..\$(Platform)\$(Configuration);$(AirSimDir)\AirLib\deps\MavLinkCom\lib\$(Platform)\$(Configuration);$(AirSimDir)\AirLib\lib\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) + + + false + + + + + + + + + Level3 + MaxSpeed + true + true + NDEBUG;AIRSIMWRAPPER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + $(ProjectDir)..\..\..\AirLib\include\vehicles\car;$(ProjectDir)..\..\..\AirLib\include;$(ProjectDir)..\..\..\AirLib\deps\eigen3;$(ProjectDir)..\..\..\external\rpclib\rpclib-2.2.1\include;$(ProjectDir)..\..\..\MavLinkCom\include;$(ProjectDir)include;%(AdditionalIncludeDirectories); + false + stdcpp17 + + + true + true + true + Windows + ..\$(Platform)\$(Configuration);..\..\..\AirLib\lib\$(Platform)\$(Configuration);..\..\..\MavLinkCom\lib\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) + MavLinkCom.lib;AirLib.lib;%(AdditionalDependencies) + false + + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pipelines/ci.yml b/pipelines/ci.yml index 02d9bfa6bc..4e7a775995 100644 --- a/pipelines/ci.yml +++ b/pipelines/ci.yml @@ -1,128 +1,128 @@ -variables: - container_linux: airsimci.azurecr.io/ue4p25p1/ubuntu18:debugeditor_fulldebugoff - ue4_root_linux: /home/ue4/ue-4.25.1-linux-debugeditor - container_win: airsimci.azurecr.io/ue4p25p1/win1809:pipe - ue4_root_win: C:\ue-4.25.1-win - -stages: - - stage: AirSimCI - jobs: - - job: Ubuntu_1804 - pool: - name: 'AirSim' - demands: - - Spec -equals Ubuntu_18.04 - container: - image: $(container_linux) - endpoint: airsimci_acr_connection - variables: - ue4_root: $(ue4_root_linux) - workspace: - clean: all - steps: - # Setup / Prereq - - checkout: self - - script: | - ./setup.sh - displayName: Install system dependencies - - # Build AirLib - - script: | - ./build.sh - displayName: Build AirLib - - # Build UE Blocks project - - script: | - ./update_from_git.sh - workingDirectory: Unreal/Environments/Blocks - displayName: Copy AirLib to Blocks (update_from_git.sh) - - # Build Blocks - - script: | - $(UE4_ROOT)/Engine/Build/BatchFiles/Linux/Build.sh Blocks Linux Development \ - -project=$(pwd)/Unreal/Environments/Blocks/Blocks.uproject - $(UE4_ROOT)/Engine/Build/BatchFiles/Linux/Build.sh BlocksEditor Linux Development \ - -project=$(pwd)/Unreal/Environments/Blocks/Blocks.uproject - displayName: Build Blocks - Development - - # Package Blocks - - script: | - $(UE4_ROOT)/Engine/Build/BatchFiles/RunUAT.sh BuildCookRun \ - -project="$(pwd)/Unreal/Environments/Blocks/Blocks.uproject" \ - -nop4 -nocompile -build -cook -compressed -pak -allmaps -stage \ - -archive -archivedirectory="$(pwd)/Unreal/Environments/Blocks/Packaged/Development" \ - -clientconfig=Development -clean -utf8output - displayName: Package Blocks - Development - - # Publish Artifact for Blocks Linux - - task: PublishPipelineArtifact@1 - inputs: - targetPath: 'Unreal/Environments/Blocks/Packaged' - artifactName: 'Blocks_Linux' - displayName: Artifact for Blocks Linux - condition: succeededOrFailed() - - - task: ArchiveFiles@2 - displayName: Blocks Linux Zip - inputs: - rootFolderOrFile: 'Unreal/Environments/Blocks/Packaged' - includeRootFolder: false - archiveType: 'zip' - archiveFile: 'Unreal/Environments/Blocks/Packaged/Blocks_Linux.zip' - replaceExistingArchive: true - - - job: Windows_VS2019 - pool: - name: 'AirSim' - demands: - - Spec -equals WinServer2019_VS2019_Datacenter - container: - image: $(container_win) - endpoint: airsimci_acr_connection - variables: - ue4_root: $(ue4_root_win) - workspace: - clean: all - - steps: - - checkout: self - - # Build AirLib - - script: | - call "C:\BuildTools\VC\Auxiliary\Build\vcvars64.bat" - call .\build.cmd - displayName: Build AirLib - - - script: | - call "C:\BuildTools\VC\Auxiliary\Build\vcvars64.bat" - call .\update_from_git_ci.bat - workingDirectory: Unreal/Environments/Blocks - displayName: Copy AirLib to Blocks (update_from_git_ci.bat) - - # Build Blocks - - script: | - call "%UE4_ROOT%\Engine\Build\BatchFiles\Build.bat" Blocks Win64 Development -project="%CD%\Unreal\Environments\Blocks\Blocks.uproject" - call "%UE4_ROOT%\Engine\Build\BatchFiles\Build.bat" BlocksEditor Win64 Development -project="%CD%\Unreal\Environments\Blocks\Blocks.uproject" - displayName: Build Blocks - Development - - # Package Blocks - - script: | - call "%UE4_ROOT%\Engine\Build\BatchFiles\RunUAT.bat" BuildCookRun -project="%CD%\Unreal\Environments\Blocks\Blocks.uproject" -nop4 -nocompile -build -cook -compressed -pak -allmaps -stage -archive -archivedirectory="%CD%\Unreal\Environments\Blocks\Packaged\Development" -clientconfig=Development -clean -utf8output - displayName: Package Blocks - Development - - # Publish Artifact for Blocks Windows - - task: PublishPipelineArtifact@1 - inputs: - targetPath: 'Unreal/Environments/Blocks/Packaged' - artifactName: 'Blocks_Windows' - displayName: Artifact for Blocks Windows - condition: succeededOrFailed() - - - task: ArchiveFiles@2 - displayName: Blocks Windows Zip - inputs: - rootFolderOrFile: 'Unreal/Environments/Blocks/Packaged' - includeRootFolder: false - archiveType: 'zip' - archiveFile: 'Unreal/Environments/Blocks/Packaged/Blocks_Windows.zip' - replaceExistingArchive: true +variables: + container_linux: airsimci.azurecr.io/ue4p25p1/ubuntu18:debugeditor_fulldebugoff + ue4_root_linux: /home/ue4/ue-4.25.1-linux-debugeditor + container_win: airsimci.azurecr.io/ue4p27p2/win1809:pipe + ue4_root_win: C:\ue-4.27.2-win + +stages: + - stage: AirSimCI + jobs: + - job: Ubuntu_1804 + pool: + name: 'AirSim' + demands: + - Spec -equals Ubuntu_18.04 + container: + image: $(container_linux) + endpoint: airsimci_acr_connection + variables: + ue4_root: $(ue4_root_linux) + workspace: + clean: all + steps: + # Setup / Prereq + - checkout: self + - script: | + ./setup.sh + displayName: Install system dependencies + + # Build AirLib + - script: | + ./build.sh + displayName: Build AirLib + + # Build UE Blocks project + - script: | + ./update_from_git.sh + workingDirectory: Unreal/Environments/Blocks + displayName: Copy AirLib to Blocks (update_from_git.sh) + + # Build Blocks + - script: | + $(UE4_ROOT)/Engine/Build/BatchFiles/Linux/Build.sh Blocks Linux Development \ + -project=$(pwd)/Unreal/Environments/Blocks/Blocks.uproject + $(UE4_ROOT)/Engine/Build/BatchFiles/Linux/Build.sh BlocksEditor Linux Development \ + -project=$(pwd)/Unreal/Environments/Blocks/Blocks.uproject + displayName: Build Blocks - Development + + # Package Blocks + - script: | + $(UE4_ROOT)/Engine/Build/BatchFiles/RunUAT.sh BuildCookRun \ + -project="$(pwd)/Unreal/Environments/Blocks/Blocks.uproject" \ + -nop4 -nocompile -build -cook -compressed -pak -allmaps -stage \ + -archive -archivedirectory="$(pwd)/Unreal/Environments/Blocks/Packaged/Development" \ + -clientconfig=Development -clean -utf8output + displayName: Package Blocks - Development + + # Publish Artifact for Blocks Linux + - task: PublishPipelineArtifact@1 + inputs: + targetPath: 'Unreal/Environments/Blocks/Packaged' + artifactName: 'Blocks_Linux' + displayName: Artifact for Blocks Linux + condition: succeededOrFailed() + + - task: ArchiveFiles@2 + displayName: Blocks Linux Zip + inputs: + rootFolderOrFile: 'Unreal/Environments/Blocks/Packaged' + includeRootFolder: false + archiveType: 'zip' + archiveFile: 'Unreal/Environments/Blocks/Packaged/Blocks_Linux.zip' + replaceExistingArchive: true + + - job: Windows_VS2019 + pool: + name: 'AirSim' + demands: + - Spec -equals WinServer2019_VS2019_Datacenter + container: + image: $(container_win) + endpoint: airsimci_acr_connection + variables: + ue4_root: $(ue4_root_win) + workspace: + clean: all + + steps: + - checkout: self + + # Build AirLib + - script: | + call "C:\BuildTools\VC\Auxiliary\Build\vcvars64.bat" + call .\build.cmd + displayName: Build AirLib + + - script: | + call "C:\BuildTools\VC\Auxiliary\Build\vcvars64.bat" + call .\update_from_git_ci.bat + workingDirectory: Unreal/Environments/Blocks + displayName: Copy AirLib to Blocks (update_from_git_ci.bat) + + # Build Blocks + - script: | + call "%UE4_ROOT%\Engine\Build\BatchFiles\Build.bat" Blocks Win64 Development -project="%CD%\Unreal\Environments\Blocks\Blocks.uproject" + call "%UE4_ROOT%\Engine\Build\BatchFiles\Build.bat" BlocksEditor Win64 Development -project="%CD%\Unreal\Environments\Blocks\Blocks.uproject" + displayName: Build Blocks - Development + + # Package Blocks + - script: | + call "%UE4_ROOT%\Engine\Build\BatchFiles\RunUAT.bat" BuildCookRun -project="%CD%\Unreal\Environments\Blocks\Blocks.uproject" -nop4 -nocompile -build -cook -compressed -pak -allmaps -stage -archive -archivedirectory="%CD%\Unreal\Environments\Blocks\Packaged\Development" -clientconfig=Development -clean -utf8output + displayName: Package Blocks - Development + + # Publish Artifact for Blocks Windows + - task: PublishPipelineArtifact@1 + inputs: + targetPath: 'Unreal/Environments/Blocks/Packaged' + artifactName: 'Blocks_Windows' + displayName: Artifact for Blocks Windows + condition: succeededOrFailed() + + - task: ArchiveFiles@2 + displayName: Blocks Windows Zip + inputs: + rootFolderOrFile: 'Unreal/Environments/Blocks/Packaged' + includeRootFolder: false + archiveType: 'zip' + archiveFile: 'Unreal/Environments/Blocks/Packaged/Blocks_Windows.zip' + replaceExistingArchive: true From e68054bcbb2daa42d2b58ca95888edc6cb470553 Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Thu, 12 May 2022 17:15:09 +0300 Subject: [PATCH 13/50] add lidar name to PointCloud msg frame id --- ros/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h | 2 +- ros/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 6 +++--- ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h | 2 +- ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 6 +++--- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/ros/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index 6f0e05ce81..1f5ee65dfc 100644 --- a/ros/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -288,7 +288,7 @@ class AirsimROSWrapper sensor_msgs::Imu get_imu_msg_from_airsim(const msr::airlib::ImuBase::Output& imu_data) const; airsim_ros_pkgs::Altimeter get_altimeter_msg_from_airsim(const msr::airlib::BarometerBase::Output& alt_data) const; sensor_msgs::Range get_range_from_airsim(const msr::airlib::DistanceSensorData& dist_data) const; - sensor_msgs::PointCloud2 get_lidar_msg_from_airsim(const msr::airlib::LidarData& lidar_data, const std::string& vehicle_name) const; + sensor_msgs::PointCloud2 get_lidar_msg_from_airsim(const msr::airlib::LidarData& lidar_data, const std::string& vehicle_name, const std::string& sensor_name) const; sensor_msgs::NavSatFix get_gps_msg_from_airsim(const msr::airlib::GpsBase::Output& gps_data) const; sensor_msgs::MagneticField get_mag_msg_from_airsim(const msr::airlib::MagnetometerBase::Output& mag_data) const; airsim_ros_pkgs::Environment get_environment_msg_from_airsim(const msr::airlib::Environment::State& env_data) const; diff --git a/ros/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index a174479aca..e17a0f7381 100644 --- a/ros/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -727,11 +727,11 @@ nav_msgs::Odometry AirsimROSWrapper::get_odom_msg_from_multirotor_state(const ms // https://docs.ros.org/jade/api/sensor_msgs/html/point__cloud__conversion_8h_source.html#l00066 // look at UnrealLidarSensor.cpp UnrealLidarSensor::getPointCloud() for math // read this carefully https://docs.ros.org/kinetic/api/sensor_msgs/html/msg/PointCloud2.html -sensor_msgs::PointCloud2 AirsimROSWrapper::get_lidar_msg_from_airsim(const msr::airlib::LidarData& lidar_data, const std::string& vehicle_name) const +sensor_msgs::PointCloud2 AirsimROSWrapper::get_lidar_msg_from_airsim(const msr::airlib::LidarData& lidar_data, const std::string& vehicle_name, const std::string& sensor_name) const { sensor_msgs::PointCloud2 lidar_msg; lidar_msg.header.stamp = ros::Time::now(); - lidar_msg.header.frame_id = vehicle_name; + lidar_msg.header.frame_id = vehicle_name + "/" + sensor_name; if (lidar_data.point_cloud.size() > 3) { lidar_msg.height = 1; @@ -1326,7 +1326,7 @@ void AirsimROSWrapper::lidar_timer_cb(const ros::TimerEvent& event) if (!vehicle_name_ptr_pair.second->lidar_pubs.empty()) { for (auto& lidar_publisher : vehicle_name_ptr_pair.second->lidar_pubs) { auto lidar_data = airsim_client_lidar_.getLidarData(lidar_publisher.sensor_name, vehicle_name_ptr_pair.first); - sensor_msgs::PointCloud2 lidar_msg = get_lidar_msg_from_airsim(lidar_data, vehicle_name_ptr_pair.first); + sensor_msgs::PointCloud2 lidar_msg = get_lidar_msg_from_airsim(lidar_data, vehicle_name_ptr_pair.first, lidar_publisher.sensor_name); lidar_publisher.publisher.publish(lidar_msg); } } diff --git a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h index a8ac98d476..a5126034b7 100755 --- a/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h +++ b/ros2/src/airsim_ros_pkgs/include/airsim_ros_wrapper.h @@ -264,7 +264,7 @@ class AirsimROSWrapper sensor_msgs::msg::Imu get_imu_msg_from_airsim(const msr::airlib::ImuBase::Output& imu_data) const; airsim_interfaces::msg::Altimeter get_altimeter_msg_from_airsim(const msr::airlib::BarometerBase::Output& alt_data) const; sensor_msgs::msg::Range get_range_from_airsim(const msr::airlib::DistanceSensorData& dist_data) const; - sensor_msgs::msg::PointCloud2 get_lidar_msg_from_airsim(const msr::airlib::LidarData& lidar_data, const std::string& vehicle_name) const; + sensor_msgs::msg::PointCloud2 get_lidar_msg_from_airsim(const msr::airlib::LidarData& lidar_data, const std::string& vehicle_name, const std::string& sensor_name) const; sensor_msgs::msg::NavSatFix get_gps_msg_from_airsim(const msr::airlib::GpsBase::Output& gps_data) const; sensor_msgs::msg::MagneticField get_mag_msg_from_airsim(const msr::airlib::MagnetometerBase::Output& mag_data) const; airsim_interfaces::msg::Environment get_environment_msg_from_airsim(const msr::airlib::Environment::State& env_data) const; diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 5f236dfe7b..706651774d 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -645,11 +645,11 @@ nav_msgs::msg::Odometry AirsimROSWrapper::get_odom_msg_from_multirotor_state(con // https://docs.ros.org/jade/api/sensor_msgs/html/point__cloud__conversion_8h_source.html#l00066 // look at UnrealLidarSensor.cpp UnrealLidarSensor::getPointCloud() for math // read this carefully https://docs.ros.org/kinetic/api/sensor_msgs/html/msg/PointCloud2.html -sensor_msgs::msg::PointCloud2 AirsimROSWrapper::get_lidar_msg_from_airsim(const msr::airlib::LidarData& lidar_data, const std::string& vehicle_name) const +sensor_msgs::msg::PointCloud2 AirsimROSWrapper::get_lidar_msg_from_airsim(const msr::airlib::LidarData& lidar_data, const std::string& vehicle_name, const std::string& sensor_name) const { sensor_msgs::msg::PointCloud2 lidar_msg; lidar_msg.header.stamp = rclcpp::Time(lidar_data.time_stamp); - lidar_msg.header.frame_id = vehicle_name; + lidar_msg.header.frame_id = vehicle_name + "/" + sensor_name; if (lidar_data.point_cloud.size() > 3) { lidar_msg.height = 1; @@ -1245,7 +1245,7 @@ void AirsimROSWrapper::lidar_timer_cb() if (!vehicle_name_ptr_pair.second->lidar_pubs_.empty()) { for (auto& lidar_publisher : vehicle_name_ptr_pair.second->lidar_pubs_) { auto lidar_data = airsim_client_lidar_.getLidarData(lidar_publisher.sensor_name, vehicle_name_ptr_pair.first); - sensor_msgs::msg::PointCloud2 lidar_msg = get_lidar_msg_from_airsim(lidar_data, vehicle_name_ptr_pair.first); + sensor_msgs::msg::PointCloud2 lidar_msg = get_lidar_msg_from_airsim(lidar_data, vehicle_name_ptr_pair.first, lidar_publisher.sensor_name); lidar_publisher.publisher->publish(lidar_msg); } } From 696d09da3e93ed207625f6dc053421cbf68b2123 Mon Sep 17 00:00:00 2001 From: xubeyb Date: Tue, 17 May 2022 12:09:24 +0300 Subject: [PATCH 14/50] Improving environment plugin update by recursively updating all projects under Unreal/Environments folder --- build.sh | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/build.sh b/build.sh index 4a750ac0d4..8b45d64ba1 100755 --- a/build.sh +++ b/build.sh @@ -134,10 +134,13 @@ rsync -a --delete MavLinkCom/include AirLib/deps/MavLinkCom rsync -a --delete AirLib Unreal/Plugins/AirSim/Source rm -rf Unreal/Plugins/AirSim/Source/AirLib/src -# Update Blocks project -Unreal/Environments/Blocks/clean.sh -mkdir -p Unreal/Environments/Blocks/Plugins -rsync -a --delete Unreal/Plugins/AirSim Unreal/Environments/Blocks/Plugins +# Update all environment projects +for d in Unreal/Environments/* ; do + [ -L "${d%/}" ] && continue + $d/clean.sh + mkdir -p $d/Plugins + rsync -a --delete Unreal/Plugins/AirSim $d/Plugins +done set +x @@ -146,11 +149,9 @@ echo "" echo "==================================================================" echo " AirSim plugin is built! Here's how to build Unreal project." echo "==================================================================" -echo "If you are using Blocks environment, its already updated." -echo "If you are using your own environment, update plugin using," -echo "rsync -a --delete Unreal/Plugins path/to/MyUnrealProject" +echo "All environments under Unreal/Environments have been updated." echo "" -echo "For help see:" +echo "For further info see:" echo "https://github.com/Microsoft/AirSim/blob/master/docs/build_linux.md" echo "==================================================================" From bc66bc782ce0192666648355ef83d2f399568128 Mon Sep 17 00:00:00 2001 From: zimmy87 Date: Tue, 17 May 2022 09:44:23 -0700 Subject: [PATCH 15/50] Output log error and exit application when unsupported SimMode is specified --- .../AirSimAssets/Scripts/InitializeAirSim.cs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Unity/UnityDemo/Assets/AirSimAssets/Scripts/InitializeAirSim.cs b/Unity/UnityDemo/Assets/AirSimAssets/Scripts/InitializeAirSim.cs index bc03525eb8..b2691380ee 100644 --- a/Unity/UnityDemo/Assets/AirSimAssets/Scripts/InitializeAirSim.cs +++ b/Unity/UnityDemo/Assets/AirSimAssets/Scripts/InitializeAirSim.cs @@ -25,6 +25,20 @@ void Awake() { LoadSceneAsPerSimMode(AirSimSettings.GetSettings().SimMode); break; + } + case "": + { + break; + } + default: + { + Debug.LogError("'" + AirSimSettings.GetSettings().SimMode + "' is not a supported SimMode."); + #if UNITY_EDITOR + UnityEditor.EditorApplication.isPlaying = false; + #else + Application.Quit(); + #endif + break; } } } From daac9b588714b0c6960f0049dc8026272f496490 Mon Sep 17 00:00:00 2001 From: "microsoft-github-policy-service[bot]" <77245923+microsoft-github-policy-service[bot]@users.noreply.github.com> Date: Tue, 17 May 2022 17:14:12 +0000 Subject: [PATCH 16/50] Microsoft mandatory file --- SECURITY.md | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 SECURITY.md diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000000..766e6f8878 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,41 @@ + + +## Security + +Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/). + +If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://docs.microsoft.com/previous-versions/tn-archive/cc751383(v=technet.10)), please report it to us as described below. + +## Reporting Security Issues + +**Please do not report security vulnerabilities through public GitHub issues.** + +Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report). + +If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://www.microsoft.com/msrc/pgp-key-msrc). + +You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc). + +Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: + + * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) + * Full paths of source file(s) related to the manifestation of the issue + * The location of the affected source code (tag/branch/commit or direct URL) + * Any special configuration required to reproduce the issue + * Step-by-step instructions to reproduce the issue + * Proof-of-concept or exploit code (if possible) + * Impact of the issue, including how an attacker might exploit the issue + +This information will help us triage your report more quickly. + +If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://microsoft.com/msrc/bounty) page for more details about our active programs. + +## Preferred Languages + +We prefer all communications to be in English. + +## Policy + +Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://www.microsoft.com/msrc/cvd). + + From 4676842f2d2d533cb13d8c438b76f049cf3a4c5d Mon Sep 17 00:00:00 2001 From: zimmy87 Date: Wed, 18 May 2022 09:45:21 -0700 Subject: [PATCH 17/50] revert RecordingFile.cpp and make version check more explicit --- Unreal/Plugins/AirSim/Source/AirBlueprintLib.cpp | 6 +++--- Unreal/Plugins/AirSim/Source/Recording/RecordingFile.cpp | 6 +----- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/Unreal/Plugins/AirSim/Source/AirBlueprintLib.cpp b/Unreal/Plugins/AirSim/Source/AirBlueprintLib.cpp index 90d3e22c81..04879cc668 100644 --- a/Unreal/Plugins/AirSim/Source/AirBlueprintLib.cpp +++ b/Unreal/Plugins/AirSim/Source/AirBlueprintLib.cpp @@ -456,7 +456,7 @@ std::vector UAirBlueprintLib::Ge //Various checks if there is even a valid mesh if (!comp->GetStaticMesh()) continue; if (!comp->GetStaticMesh()->HasValidRenderData()) continue; -#if (ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION > 26) +#if ((ENGINE_MAJOR_VERSION > 4) || (ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION >= 27)) if (comp->GetStaticMesh()->GetRenderData()->LODResources.Num() == 0) continue; #else if (comp->GetStaticMesh()->RenderData->LODResources.Num() == 0) continue; @@ -475,7 +475,7 @@ std::vector UAirBlueprintLib::Ge mesh.orientation.y() = att.Y; mesh.orientation.z() = att.Z; -#if (ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION > 26) +#if ((ENGINE_MAJOR_VERSION > 4) || (ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION >= 27)) FPositionVertexBuffer* vertex_buffer = &comp->GetStaticMesh()->GetRenderData()->LODResources[0].VertexBuffers.PositionVertexBuffer; #else FPositionVertexBuffer* vertex_buffer = &comp->GetStaticMesh()->RenderData->LODResources[0].VertexBuffers.PositionVertexBuffer; @@ -494,7 +494,7 @@ std::vector UAirBlueprintLib::Ge RHIUnlockVertexBuffer(vertex_buffer->VertexBufferRHI); }); -#if (ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION > 26) +#if ((ENGINE_MAJOR_VERSION > 4) || (ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION >= 27)) FStaticMeshLODResources& lod = comp->GetStaticMesh()->GetRenderData()->LODResources[0]; #else FStaticMeshLODResources& lod = comp->GetStaticMesh()->RenderData->LODResources[0]; diff --git a/Unreal/Plugins/AirSim/Source/Recording/RecordingFile.cpp b/Unreal/Plugins/AirSim/Source/Recording/RecordingFile.cpp index 17e094b046..533ffcca32 100644 --- a/Unreal/Plugins/AirSim/Source/Recording/RecordingFile.cpp +++ b/Unreal/Plugins/AirSim/Source/Recording/RecordingFile.cpp @@ -1,9 +1,5 @@ #include "RecordingFile.h" -#if ENGINE_MAJOR_VERSION > 4 - #include "HAL/PlatformFileManager.h" -#elif - #include "HAL/PlatformFilemanager.h" -#endif +#include "HAL/PlatformFilemanager.h" #include "Misc/FileHelper.h" #include #include "ImageUtils.h" From 94c6aa1dcc34beca441a3490a4ce7712bfd27ea4 Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Thu, 19 May 2022 11:06:27 +0300 Subject: [PATCH 18/50] fix -Wformat warnings --- ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 5f236dfe7b..3c8a291d2b 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -84,7 +84,7 @@ void AirsimROSWrapper::initialize_airsim() } catch (rpc::rpc_error& e) { std::string msg = e.get_error().as(); - RCLCPP_ERROR(nh_->get_logger(), "Exception raised by the API, something went wrong.\n%s", msg); + RCLCPP_ERROR(nh_->get_logger(), "Exception raised by the API, something went wrong.\n%s", msg.c_str()); rclcpp::shutdown(); } } @@ -925,7 +925,7 @@ void AirsimROSWrapper::drone_state_timer_cb() } catch (rpc::rpc_error& e) { std::string msg = e.get_error().as(); - RCLCPP_ERROR(nh_->get_logger(), "Exception raised by the API:\n%s", msg); + RCLCPP_ERROR(nh_->get_logger(), "Exception raised by the API:\n%s", msg.c_str()); } } @@ -1234,7 +1234,7 @@ void AirsimROSWrapper::img_response_timer_cb() catch (rpc::rpc_error& e) { std::string msg = e.get_error().as(); - RCLCPP_ERROR(nh_->get_logger(), "Exception raised by the API, didn't get image response.\n%s", msg); + RCLCPP_ERROR(nh_->get_logger(), "Exception raised by the API, didn't get image response.\n%s", msg.c_str()); } } @@ -1253,7 +1253,7 @@ void AirsimROSWrapper::lidar_timer_cb() } catch (rpc::rpc_error& e) { std::string msg = e.get_error().as(); - RCLCPP_ERROR(nh_->get_logger(), "Exception raised by the API, didn't get image response.\n%s", msg); + RCLCPP_ERROR(nh_->get_logger(), "Exception raised by the API, didn't get image response.\n%s", msg.c_str()); } } From c8241d17d3adaf9d5f38775216c58030ff9300ea Mon Sep 17 00:00:00 2001 From: Alon Faraj Date: Thu, 19 May 2022 11:14:24 +0300 Subject: [PATCH 19/50] fix deprecated rclcpp:::Duration warning --- ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp index 3c8a291d2b..9f2e83a093 100755 --- a/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp +++ b/ros2/src/airsim_ros_pkgs/src/airsim_ros_wrapper.cpp @@ -682,7 +682,7 @@ sensor_msgs::msg::PointCloud2 AirsimROSWrapper::get_lidar_msg_from_airsim(const if (isENU_) { try { sensor_msgs::msg::PointCloud2 lidar_msg_enu; - auto transformStampedENU = tf_buffer_->lookupTransform(AIRSIM_FRAME_ID, vehicle_name, rclcpp::Time(0), rclcpp::Duration(1)); + auto transformStampedENU = tf_buffer_->lookupTransform(AIRSIM_FRAME_ID, vehicle_name, rclcpp::Time(0), rclcpp::Duration::from_nanoseconds(1)); tf2::doTransform(lidar_msg, lidar_msg_enu, transformStampedENU); lidar_msg_enu.header.stamp = lidar_msg.header.stamp; From 533b1b182a58519e338d6a73377eab2cdad43f83 Mon Sep 17 00:00:00 2001 From: zimmy87 Date: Thu, 19 May 2022 09:09:50 -0700 Subject: [PATCH 20/50] Update mkdocs.yml add link to AirSim+MAVROS+PX4 tutorial --- mkdocs.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/mkdocs.yml b/mkdocs.yml index 09cc62366c..cf25e6817f 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -122,6 +122,7 @@ nav: - "Orbit Trajectory": "orbit.md" - "Importing a custom multirotor mesh": 'https://youtu.be/Bp86WiLUC80' - "Object Detection": "object_detection.md" + - "AirSim with MAVROS and PX4": 'https://youtu.be/ZonkdMcwXH4' - "Misc": - "AirSim on Real Drones": 'custom_drone.md' - "Installing cmake on Linux": 'cmake_linux.md' From b71f55c4928d1f7f8e47a17054d6d9367219ff98 Mon Sep 17 00:00:00 2001 From: zimmy87 Date: Thu, 26 May 2022 09:17:54 -0700 Subject: [PATCH 21/50] update all environments --- build.cmd | 7 +++++ docs/unreal_blocks.md | 73 +++++++++++++++++++++---------------------- 2 files changed, 43 insertions(+), 37 deletions(-) diff --git a/build.cmd b/build.cmd index f20ffd8b4c..700ac90149 100644 --- a/build.cmd +++ b/build.cmd @@ -204,6 +204,13 @@ if NOT exist Unreal\Plugins\AirSim\Source\AirLib mkdir Unreal\Plugins\AirSim\Sou robocopy /MIR AirLib Unreal\Plugins\AirSim\Source\AirLib /XD temp *. /njh /njs /ndl /np copy /y AirSim.props Unreal\Plugins\AirSim\Source\AirLib +REM //---------- update all environments ---------- +FOR /D %%E IN (Unreal\Environments\*) DO ( + cd %%E + call .\update_from_git.bat ..\..\.. + cd ..\..\.. +) + REM //---------- done building ---------- exit /b 0 diff --git a/docs/unreal_blocks.md b/docs/unreal_blocks.md index 4a4f6795be..1713a790c4 100644 --- a/docs/unreal_blocks.md +++ b/docs/unreal_blocks.md @@ -1,37 +1,36 @@ - -# Setup Blocks Environment for AirSim - -Blocks environment is available in repo in folder `Unreal/Environments/Blocks` and is designed to be lightweight in size. That means its very basic but fast. - -Here are quick steps to get Blocks environment up and running: - -## Windows - -1. Make sure you have [installed Unreal and built AirSim](build_windows.md). -2. Navigate to folder `AirSim\Unreal\Environments\Blocks` and run `update_from_git.bat`. -3. Double click on generated .sln file to open in Visual Studio 2019 or newer. -4. Make sure `Blocks` project is the startup project, build configuration is set to `DebugGame_Editor` and `Win64`. Hit F5 to run. -5. Press the Play button in Unreal Editor and you will see something like in below video. Also see [how to use AirSim](https://github.com/Microsoft/AirSim/#how-to-use-it). - -### Changing Code and Rebuilding -For Windows, you can just change the code in Visual Studio, press F5 and re-run. There are few batch files available in folder `AirSim\Unreal\Environments\Blocks` that lets you sync code, clean etc. - -## Linux -1. Make sure you have [built the Unreal Engine and AirSim](build_linux.md). -2. Navigate to your UnrealEngine repo folder and run `Engine/Binaries/Linux/UE4Editor` which will start Unreal Editor. -3. On first start you might not see any projects in UE4 editor. Click on Projects tab, Browse button and then navigate to `AirSim/Unreal/Environments/Blocks/Blocks.uproject`. -4. If you get prompted for incompatible version and conversion, select In-place conversion which is usually under "More" options. If you get prompted for missing modules, make sure to select No so you don't exit. -5. Finally, when prompted with building AirSim, select Yes. Now it might take a while so go get some coffee :). -6. Press the Play button in Unreal Editor and you will see something like in below video. Also see [how to use AirSim](https://github.com/microsoft/AirSim/#how-to-use-it). - -[![Blocks Demo Video](images/blocks_video.png)](https://www.youtube.com/watch?v=-r_QGaxMT4A) - -### Changing Code and Rebuilding -For Linux, make code changes in AirLib or Unreal/Plugins folder and then run `./build.sh` to rebuild. This step also copies the build output to Blocks sample project. You can then follow above steps again to re-run. - -## Chosing Your Vehicle: Car or Multirotor -By default AirSim spawns multirotor. You can easily change this to car and use all of AirSim goodies. Please see [using car](using_car.md) guide. - -## FAQ -#### I see warnings about like "_BuitData" file is missing. -These are intermediate files and you can safely ignore it. + +# Setup Blocks Environment for AirSim + +Blocks environment is available in repo in folder `Unreal/Environments/Blocks` and is designed to be lightweight in size. That means its very basic but fast. + +Here are quick steps to get Blocks environment up and running: + +## Windows + +1. Make sure you have [installed Unreal and built AirSim](build_windows.md). +2. Navigate to folder `AirSim\Unreal\Environments\Blocks`, double click on Blocks.sln file to open in Visual Studio. By default, this project is configured for Visual Studio 2019. However, if you want to generate this project for Visual Studio 2022, go to 'Edit->Editor Preferences->Source Code' inside the Unreal Editor and select 'Visual Studio 2022' for the 'Source Code Editor' setting. +3. Make sure `Blocks` project is the startup project, build configuration is set to `DebugGame_Editor` and `Win64`. Hit F5 to run. +4. Press the Play button in Unreal Editor and you will see something like in below video. Also see [how to use AirSim](https://github.com/Microsoft/AirSim/#how-to-use-it). + +### Changing Code and Rebuilding +For Windows, you can just change the code in Visual Studio, press F5 and re-run. There are few batch files available in folder `AirSim\Unreal\Environments\Blocks` that lets you sync code, clean etc. + +## Linux +1. Make sure you have [built the Unreal Engine and AirSim](build_linux.md). +2. Navigate to your UnrealEngine repo folder and run `Engine/Binaries/Linux/UE4Editor` which will start Unreal Editor. +3. On first start you might not see any projects in UE4 editor. Click on Projects tab, Browse button and then navigate to `AirSim/Unreal/Environments/Blocks/Blocks.uproject`. +4. If you get prompted for incompatible version and conversion, select In-place conversion which is usually under "More" options. If you get prompted for missing modules, make sure to select No so you don't exit. +5. Finally, when prompted with building AirSim, select Yes. Now it might take a while so go get some coffee :). +6. Press the Play button in Unreal Editor and you will see something like in below video. Also see [how to use AirSim](https://github.com/microsoft/AirSim/#how-to-use-it). + +[![Blocks Demo Video](images/blocks_video.png)](https://www.youtube.com/watch?v=-r_QGaxMT4A) + +### Changing Code and Rebuilding +For Linux, make code changes in AirLib or Unreal/Plugins folder and then run `./build.sh` to rebuild. This step also copies the build output to Blocks sample project. You can then follow above steps again to re-run. + +## Chosing Your Vehicle: Car or Multirotor +By default AirSim spawns multirotor. You can easily change this to car and use all of AirSim goodies. Please see [using car](using_car.md) guide. + +## FAQ +#### I see warnings about like "_BuitData" file is missing. +These are intermediate files and you can safely ignore it. From 18a35349b40ee88ec14a604c3d46a9949b82edbf Mon Sep 17 00:00:00 2001 From: zimmy87 Date: Fri, 27 May 2022 08:36:09 -0700 Subject: [PATCH 22/50] update references to old UE and VS versions --- build.cmd | 2 +- docs/unreal_custenv.md | 6 +++--- docs/unreal_upgrade.md | 18 +++++++++--------- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/build.cmd b/build.cmd index 700ac90149..d75ca2b419 100644 --- a/build.cmd +++ b/build.cmd @@ -15,7 +15,7 @@ if "%VisualStudioVersion%" == "" ( ) if "%VisualStudioVersion%" lss "17.0" ( echo( - echo Hello there! We just upgraded AirSim to Unreal Engine 4.24 and Visual Studio 2022. + echo Hello there! We just upgraded AirSim to Unreal Engine 4.27 and Visual Studio 2022. echo Here are few easy steps for upgrade so everything is new and shiny: echo https://github.com/Microsoft/AirSim/blob/master/docs/unreal_upgrade.md goto :buildfailed_nomsg diff --git a/docs/unreal_custenv.md b/docs/unreal_custenv.md index 4fd7f5cc36..d5c07b9c32 100644 --- a/docs/unreal_custenv.md +++ b/docs/unreal_custenv.md @@ -8,7 +8,7 @@ There is no `Epic Games Launcher` for Linux which means that if you need to crea ## Step by Step Instructions -1. Make sure AirSim is built and Unreal 4.25 is installed as described in [build instructions](build_windows.md). +1. Make sure AirSim is built and Unreal 4.27 is installed as described in [build instructions](build_windows.md). 1. In `Epic Games Launcher` click the Learn tab then scroll down and find `Landscape Mountains`. Click the `Create Project` and download this content (~2GB download). ![current version](images/landscape_mountains.png) @@ -19,7 +19,7 @@ There is no `Epic Games Launcher` for Linux which means that if you need to crea !!!note - The Landscape Mountains project is supported up to Unreal Engine version 4.24. If you do not have 4.24 installed, you should see a dialog titled `Select Unreal Engine Version` with a dropdown to select from installed versions. Select 4.25 or greater to migrate the project to a supported engine version. If you have 4.24 installed, you can manually migrate the project by navigating to the corresponding .uproject file in Windows Explorer, right-clicking it, and selecting the `Switch Unreal Engine version...` option. + The Landscape Mountains project is supported up to Unreal Engine version 4.24. If you do not have 4.24 installed, you should see a dialog titled `Select Unreal Engine Version` with a dropdown to select from installed versions. Select 4.27 or greater to migrate the project to a supported engine version. If you have 4.24 installed, you can manually migrate the project by navigating to the corresponding .uproject file in Windows Explorer, right-clicking it, and selecting the `Switch Unreal Engine version...` option. 1. From the `File menu` select `New C++ class`, leave default `None` on the type of class, click `Next`, leave default name `MyClass`, and click `Create Class`. We need to do this because Unreal requires at least one source file in project. It should trigger compile and open up Visual Studio solution `LandscapeMountains.sln`. @@ -34,7 +34,7 @@ There is no `Epic Games Launcher` for Linux which means that if you need to crea ```json { "FileVersion": 3, - "EngineAssociation": "4.24", + "EngineAssociation": "4.27", "Category": "Samples", "Description": "", "Modules": [ diff --git a/docs/unreal_upgrade.md b/docs/unreal_upgrade.md index 7fd44af5d8..0ac54402f8 100644 --- a/docs/unreal_upgrade.md +++ b/docs/unreal_upgrade.md @@ -1,28 +1,28 @@ -# Upgrading to Unreal Engine 4.24 +# Upgrading to Unreal Engine 4.27 -These instructions apply if you are already using AirSim on Unreal Engine 4.16. If you have never installed AirSim, please see [How to get it](https://github.com/microsoft/airsim#how-to-get-it). +These instructions apply if you are already using AirSim on Unreal Engine 4.25. If you have never installed AirSim, please see [How to get it](https://github.com/microsoft/airsim#how-to-get-it). **Caution:** The below steps will delete any of your unsaved work in AirSim or Unreal folder. ## Do this first ### For Windows Users -1. Install Visual Studio 2019 with VC++, Python and C#. -2. Install UE 4.24 through Epic Games Launcher. -3. Start `x64 Native Tools Command Prompt for VS 2019` and navigate to AirSim repo. +1. Install Visual Studio 2022 with VC++, Python and C#. +2. Install UE 4.27 through Epic Games Launcher. +3. Start `x64 Native Tools Command Prompt for VS 2022` and navigate to AirSim repo. 4. Run `clean_rebuild.bat` to remove all unchecked/extra stuff and rebuild everything. 5. See also [Build AirSim on Windows](build_windows.md) for more information. ### For Linux Users 1. From your AirSim repo folder, run 'clean_rebuild.sh`. 2. Rename or delete your existing folder for Unreal Engine. -3. Follow step 1 and 2 to [install Unreal Engine 4.24](build_linux.md). +3. Follow step 1 and 2 to [install Unreal Engine 4.27](build_linux.md). 4. See also [Build AirSim on Linux](build_linux.md) for more information. ## Upgrading Your Custom Unreal Project -If you have your own Unreal project created in an older version of Unreal Engine then you need to upgrade your project to Unreal 4.24. To do this, +If you have your own Unreal project created in an older version of Unreal Engine then you need to upgrade your project to Unreal 4.27. To do this, -1. Open .uproject file and look for the line `"EngineAssociation"` and make sure it reads like `"EngineAssociation": "4.24"`. +1. Open .uproject file and look for the line `"EngineAssociation"` and make sure it reads like `"EngineAssociation": "4.27"`. 2. Delete `Plugins/AirSim` folder in your Unreal project's folder. 3. Go to your AirSim repo folder and copy `Unreal\Plugins` folder to your Unreal project's folder. 4. Copy *.bat (or *.sh for Linux) from `Unreal\Environments\Blocks` to your project's folder. @@ -33,7 +33,7 @@ If you have your own Unreal project created in an older version of Unreal Engine ### I have an Unreal project that is older than 4.16. How do I upgrade it? #### Option 1: Just Recreate Project -If your project doesn't have any code or assets other than environment you downloaded then you can also simply [recreate the project in Unreal 4.24 Editor](unreal_custenv.md) and then copy Plugins folder from `AirSim/Unreal/Plugins`. +If your project doesn't have any code or assets other than environment you downloaded then you can also simply [recreate the project in Unreal 4.27 Editor](unreal_custenv.md) and then copy Plugins folder from `AirSim/Unreal/Plugins`. #### Option 2: Modify Few Files Unreal versions newer than Unreal 4.15 has breaking changes. So you need to modify your *.Build.cs and *.Target.cs which you can find in the `Source` folder of your Unreal project. So what are those changes? Below is the gist of it but you should really refer to [Unreal's official 4.16 transition post](https://forums.unrealengine.com/showthread.php?145757-C-4-16-Transition-Guide). From 6719b9103fb8dd2f6f0bff9556347fb788908ba1 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Mon, 30 May 2022 18:28:51 +0300 Subject: [PATCH 23/50] update OptionMenu BP to support levels in game folder --- .../Content/HUDAssets/OptionsMenu.uasset | Bin 502526 -> 563387 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Unreal/Plugins/AirSim/Content/HUDAssets/OptionsMenu.uasset b/Unreal/Plugins/AirSim/Content/HUDAssets/OptionsMenu.uasset index b4f4eb682cf94f37adfe1ce97ac76e828b945333..3502374888c6e2de124d8d243b1653a84fb933f2 100644 GIT binary patch literal 563387 zcmeEv2YggT_x4>xKoLRdC`y$gy%Ru5r9*&FL^N!YB`j>RVRu6Z!Ga=+3U>5;6;Tnf z0-~Z=vG@L35d{nOuBd#^Gj~q*?#(8-zPb1Jec%80UpSe$Gjr#eIdkUBnKQG=W9M}K z*YAf89hz~NVH{b*P@h`(IryRzN^(LF& zdiu+H-I3Pj&7A9YjXP;mR_)f8zjF3A|H(-EwAVX#*BiI$#2w3C-m+ojU;U0m+NrTW zUtXSZclt+-E?XCE)v{@Oq?oYo+yZooR@Alk~x-+X=N2HB!Thllk;n;9-06|UT zOf>3ppJBAdQ`*4H^wa^V8GZWq>7UkrK
)YPoB0e#Xl`}OUgn$`nF%+ENybViP0 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ª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 literal 91117 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 E1H@=hj{pDw diff --git a/Unreal/Plugins/AirSim/Content/Weather/WeatherFX/Materials/M_SnowFlake_Master.uasset b/Unreal/Plugins/AirSim/Content/Weather/WeatherFX/Materials/M_SnowFlake_Master.uasset index cb14d3215796e496fb6e87bc78257f227da53a0c..3a6bf1b3652bcbe21ed27a47aeee8412dcd7ccb2 100644 GIT binary patch literal 95956 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 literal 90554 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

-IOvy=8KHiZxyBw#jIdZ@mn#c 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

=C2Ro-yj|8>7y}G3vb1Nu5_U?(OMk(^1qZ>jclg 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¨Y1u8FcnM*sMoa~gdq1! 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 literal 617024 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≻T`nMh3&C9i(ykEvMR2p= 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 B^@IQb From 2cc935fe481b011df2b7934d84e58d4e713b2e2d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Jun 2022 20:26:32 +0000 Subject: [PATCH 31/50] Bump Newtonsoft.Json from 9.0.1 to 13.0.1 in /LogViewer/Networking Bumps [Newtonsoft.Json](https://github.com/JamesNK/Newtonsoft.Json) from 9.0.1 to 13.0.1. - [Release notes](https://github.com/JamesNK/Newtonsoft.Json/releases) - [Commits](https://github.com/JamesNK/Newtonsoft.Json/compare/9.0.1...13.0.1) --- updated-dependencies: - dependency-name: Newtonsoft.Json dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- LogViewer/Networking/packages.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LogViewer/Networking/packages.config b/LogViewer/Networking/packages.config index 6576d885b6..6f34a11d94 100644 --- a/LogViewer/Networking/packages.config +++ b/LogViewer/Networking/packages.config @@ -1,4 +1,4 @@  - + \ No newline at end of file From 41892a9e4d9cafcad23522ea102cc5201be17248 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Jun 2022 20:26:34 +0000 Subject: [PATCH 32/50] Bump Newtonsoft.Json from 9.0.1 to 13.0.1 in /LogViewer/LogViewer Bumps [Newtonsoft.Json](https://github.com/JamesNK/Newtonsoft.Json) from 9.0.1 to 13.0.1. - [Release notes](https://github.com/JamesNK/Newtonsoft.Json/releases) - [Commits](https://github.com/JamesNK/Newtonsoft.Json/compare/9.0.1...13.0.1) --- updated-dependencies: - dependency-name: Newtonsoft.Json dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- LogViewer/LogViewer/packages.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LogViewer/LogViewer/packages.config b/LogViewer/LogViewer/packages.config index eb534d49cb..201c7de76d 100644 --- a/LogViewer/LogViewer/packages.config +++ b/LogViewer/LogViewer/packages.config @@ -1,5 +1,5 @@  - + \ No newline at end of file From e269f986afd15c435cec5fa54a75a4ed266009ed Mon Sep 17 00:00:00 2001 From: Jonathan Date: Fri, 1 Jul 2022 15:06:49 -0300 Subject: [PATCH 33/50] Change master to main in docs --- docs/CHANGELOG.md | 6 +++--- docs/CONTRIBUTING.md | 2 +- docs/InfraredCamera.md | 8 ++++---- docs/Unity.md | 2 +- docs/adding_new_apis.md | 10 +++++----- docs/airsim_ros_pkgs.md | 26 +++++++++++++------------- docs/airsim_tutorial_pkgs.md | 10 +++++----- docs/apis.md | 16 ++++++++-------- docs/apis_cpp.md | 12 ++++++------ docs/azure.md | 8 ++++---- docs/code_structure.md | 24 ++++++++++++------------ docs/custom_drone.md | 4 ++-- docs/distance_sensor.md | 2 +- docs/docker_ubuntu.md | 4 ++-- docs/drone_survey.md | 2 +- docs/event_sim.md | 4 ++-- docs/hello_drone.md | 2 +- docs/image_apis.md | 22 +++++++++++----------- docs/lidar.md | 10 +++++----- docs/modify_recording_data.md | 2 +- docs/multi_vehicle.md | 10 +++++----- docs/object_detection.md | 2 +- docs/orbit.md | 2 +- docs/pfm.md | 2 +- docs/point_clouds.md | 2 +- docs/px4_build.md | 2 +- docs/px4_lockstep.md | 4 ++-- docs/px4_multi_vehicle.md | 6 +++--- docs/px4_setup.md | 2 +- docs/px4_sitl.md | 4 ++-- docs/reinforcement_learning.md | 4 ++-- docs/remote_control.md | 4 ++-- docs/sensors.md | 4 ++-- docs/settings.md | 4 ++-- docs/unreal_custenv.md | 2 +- docs/upgrade_apis.md | 2 +- 36 files changed, 116 insertions(+), 116 deletions(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index d12870c266..8fa71d4815 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,6 +1,6 @@ # What's new -Below is summarized list of important changes. This does not include minor/less important changes or bug fixes or documentation update. This list updated every few months. For complete detailed changes, please review [commit history](https://github.com/Microsoft/AirSim/commits/master). +Below is summarized list of important changes. This does not include minor/less important changes or bug fixes or documentation update. This list updated every few months. For complete detailed changes, please review [commit history](https://github.com/Microsoft/AirSim/commits/main). ### Jan 2022 @@ -180,7 +180,7 @@ Below is summarized list of important changes. This does not include minor/less ### November, 2018 * Added Weather Effects and [APIs](apis.md#weather-apis) * Added [Time of Day API](apis.md#time-of-day-api) -* An experimental integration of [AirSim on Unity](https://github.com/Microsoft/AirSim/tree/master/Unity) is now available. Learn more in [Unity blog post](https://blogs.unity3d.com/2018/11/14/airsim-on-unity-experiment-with-autonomous-vehicle-simulation). +* An experimental integration of [AirSim on Unity](https://github.com/Microsoft/AirSim/tree/main/Unity) is now available. Learn more in [Unity blog post](https://blogs.unity3d.com/2018/11/14/airsim-on-unity-experiment-with-autonomous-vehicle-simulation). * [New environments](https://github.com/Microsoft/AirSim/releases/tag/v1.2.1): Forest, Plains (windmill farm), TalkingHeads (human head simulation), TrapCam (animal detection via camera) * Highly efficient [NoDisplay view mode](settings.md#viewmode) to turn off main screen rendering so you can capture images at high rate * [Enable/disable sensors](https://github.com/Microsoft/AirSim/pull/1479) via settings @@ -191,7 +191,7 @@ Below is summarized list of important changes. This does not include minor/less * [Custom speed units](https://github.com/Microsoft/AirSim/pull/1181) * [ROS publisher](https://github.com/Microsoft/AirSim/pull/1135) * [simSetObjectPose API](https://github.com/Microsoft/AirSim/pull/1161) -* [Character Control APIs](https://github.com/Microsoft/AirSim/blob/master/PythonClient/airsim/client.py#L137) (works on TalkingHeads binaries in release) +* [Character Control APIs](https://github.com/Microsoft/AirSim/blob/main/PythonClient/airsim/client.py#L137) (works on TalkingHeads binaries in release) * [Arducopter Solo Support](https://github.com/Microsoft/AirSim/pull/1387) * [Linux install without sudo access](https://github.com/Microsoft/AirSim/pull/1434) * [Kinect like ROS publisher](https://github.com/Microsoft/AirSim/pull/1298) diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 23d4d59669..af4bc73545 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -13,5 +13,5 @@ - Keep your pull request small, ideally under 10 files. - Make sure you don't include large binary files. - When adding new includes, make dependency is absolutely necessary. -- Rebase your branch frequently with master (once every 2-3 days is ideal). +- Rebase your branch frequently with main (once every 2-3 days is ideal). - Make sure your code would compile on Windows, Linux and OSX. diff --git a/docs/InfraredCamera.md b/docs/InfraredCamera.md index 28b1e2838b..99e78e29d7 100644 --- a/docs/InfraredCamera.md +++ b/docs/InfraredCamera.md @@ -3,12 +3,12 @@ This is a tutorial for generating simulated thermal infrared (IR) images using A Pre-compiled Africa Environment can be downloaded from the Releases tab of this Github repo: [Windows Pre-compiled binary](https://github.com/Microsoft/AirSim/releases/tag/v1.2.1) -To generate your own data, you may use two python files: [create_ir_segmentation_map.py](https://github.com/Microsoft/AirSim/tree/master/PythonClient//computer_vision/create_ir_segmentation_map.py) and -[capture_ir_segmentation.py](https://github.com/Microsoft/AirSim/tree/master/PythonClient//computer_vision/capture_ir_segmentation.py). +To generate your own data, you may use two python files: [create_ir_segmentation_map.py](https://github.com/Microsoft/AirSim/tree/main/PythonClient//computer_vision/create_ir_segmentation_map.py) and +[capture_ir_segmentation.py](https://github.com/Microsoft/AirSim/tree/main/PythonClient//computer_vision/capture_ir_segmentation.py). -[create_ir_segmentation_map.py](https://github.com/Microsoft/AirSim/tree/master/PythonClient//computer_vision/create_ir_segmentation_map.py) uses temperature, emissivity, and camera response information to estimate the thermal digital count that could be expected for the objects in the environment, and then reassigns the segmentation IDs in AirSim to match these digital counts. It should be run before starting to capture thermal IR data. Otherwise, digital counts in the IR images will be incorrect. The camera response, temperature, and emissivity data are all included for the Africa environment. +[create_ir_segmentation_map.py](https://github.com/Microsoft/AirSim/tree/main/PythonClient//computer_vision/create_ir_segmentation_map.py) uses temperature, emissivity, and camera response information to estimate the thermal digital count that could be expected for the objects in the environment, and then reassigns the segmentation IDs in AirSim to match these digital counts. It should be run before starting to capture thermal IR data. Otherwise, digital counts in the IR images will be incorrect. The camera response, temperature, and emissivity data are all included for the Africa environment. -[capture_ir_segmentation.py](https://github.com/Microsoft/AirSim/tree/master/PythonClient//computer_vision/capture_ir_segmentation.py) is run after the segmentation IDs have been reassigned. It tracks objects of interest and records the infrared and scene images from the multirotor. It uses Computer Vision mode. +[capture_ir_segmentation.py](https://github.com/Microsoft/AirSim/tree/main/PythonClient//computer_vision/capture_ir_segmentation.py) is run after the segmentation IDs have been reassigned. It tracks objects of interest and records the infrared and scene images from the multirotor. It uses Computer Vision mode. Finally, the details about how temperatures were estimated for plants and animals in the Africa environment, etc. can be found in this paper: diff --git a/docs/Unity.md b/docs/Unity.md index efe5bffee9..bade4e62c1 100644 --- a/docs/Unity.md +++ b/docs/Unity.md @@ -118,7 +118,7 @@ chmod +x "{project_name}.{configuration}" ./{project_name}.{configuration} ``` ### Using Airsim API -* For quickstart with the Python APIs for the car or the drone, simply run the [`hello_car.py`](https://github.com/Microsoft/AirSim/blob/master/PythonClient/car/hello_car.py) or the [`hello_drone.py`](https://github.com/Microsoft/AirSim/blob/master/PythonClient/multirotor/hello_drone.py) script accordingly. +* For quickstart with the Python APIs for the car or the drone, simply run the [`hello_car.py`](https://github.com/Microsoft/AirSim/blob/main/PythonClient/car/hello_car.py) or the [`hello_drone.py`](https://github.com/Microsoft/AirSim/blob/main/PythonClient/multirotor/hello_drone.py) script accordingly. * Details of the AirSim C++ and Python APIs are [here](apis.md). ### Acknowledgements diff --git a/docs/adding_new_apis.md b/docs/adding_new_apis.md index c236c8d918..7f8d10fad8 100644 --- a/docs/adding_new_apis.md +++ b/docs/adding_new_apis.md @@ -32,19 +32,19 @@ The APIs use [msgpack-rpc protocol](https://github.com/msgpack-rpc/msgpack-rpc) To add the RPC code to call the new API, follow the steps below. Follow the implementation of other APIs defined in the files. -1. Add an RPC handler in the server which calls your implemented method in [RpcLibServerBase.cpp](https://github.com/microsoft/AirSim/blob/master/AirLib/src/api/RpcLibServerBase.cpp). Vehicle-specific APIs are in their respective vehicle subfolder. +1. Add an RPC handler in the server which calls your implemented method in [RpcLibServerBase.cpp](https://github.com/microsoft/AirSim/blob/main/AirLib/src/api/RpcLibServerBase.cpp). Vehicle-specific APIs are in their respective vehicle subfolder. -2. Add the C++ client API method in [RpcClientBase.cpp](https://github.com/microsoft/AirSim/blob/master/AirLib/src/api/RpcLibClientBase.cpp) +2. Add the C++ client API method in [RpcClientBase.cpp](https://github.com/microsoft/AirSim/blob/main/AirLib/src/api/RpcLibClientBase.cpp) -3. Add the Python client API method in [client.py](https://github.com/microsoft/AirSim/blob/master/PythonClient/airsim/client.py). If needed, add or modify a structure definition in [types.py](https://github.com/microsoft/AirSim/blob/master/PythonClient/airsim/types.py) +3. Add the Python client API method in [client.py](https://github.com/microsoft/AirSim/blob/main/PythonClient/airsim/client.py). If needed, add or modify a structure definition in [types.py](https://github.com/microsoft/AirSim/blob/main/PythonClient/airsim/types.py) ## Testing Testing is required to ensure that the API is working as expected. For this, as expected, you'll have to use the source-built AirSim and Blocks environment. Apart from this, if using the Python APIs, you'll have to use the `airsim` package from source rather than the PyPI package. Below are 2 ways described to go about using the package from source - -1. Use [setup_path.py](https://github.com/microsoft/AirSim/blob/master/PythonClient/multirotor/setup_path.py). It will setup the path such that the local airsim module is used instead of the pip installed package. This is the method used in many of the scripts since the user doesn't need to do anything other than run the script. +1. Use [setup_path.py](https://github.com/microsoft/AirSim/blob/main/PythonClient/multirotor/setup_path.py). It will setup the path such that the local airsim module is used instead of the pip installed package. This is the method used in many of the scripts since the user doesn't need to do anything other than run the script. Place your example script in one of the folders inside `PythonClient` like `multirotor`, `car`, etc. You can also create one to keep things separate, and copy the `setup_path.py` file from another folder. - Add `import setup_path` before `import airsim` in your files. Now the latest master API (or any branch currently checked out) will be used. + Add `import setup_path` before `import airsim` in your files. Now the latest main API (or any branch currently checked out) will be used. 2. Use a [local project pip install](https://pip.pypa.io/en/stable/cli/pip_install/#local-project-installs). Regular install would create a copy of the current source and use it, whereas Editable install (`pip install -e .` from inside the `PythonClient` folder) would change the package whenever the Python API files are changed. Editable install has the benefit when working on several branches or API is not finalized. diff --git a/docs/airsim_ros_pkgs.md b/docs/airsim_ros_pkgs.md index 98ac1ecba9..76d76d196a 100644 --- a/docs/airsim_ros_pkgs.md +++ b/docs/airsim_ros_pkgs.md @@ -76,7 +76,7 @@ Let's look at the ROS API for both nodes: #### Publishers: -- `/airsim_node/origin_geo_point` [airsim_ros_pkgs/GPSYaw](https://github.com/microsoft/AirSim/tree/master/ros/src/airsim_ros_pkgs/msg/GPSYaw.msg) +- `/airsim_node/origin_geo_point` [airsim_ros_pkgs/GPSYaw](https://github.com/microsoft/AirSim/tree/main/ros/src/airsim_ros_pkgs/msg/GPSYaw.msg) GPS coordinates corresponding to global NED frame. This is set in the airsim's [settings.json](https://microsoft.github.io/AirSim/settings/) file under the `OriginGeopoint` key. - `/airsim_node/VEHICLE_NAME/global_gps` [sensor_msgs/NavSatFix](https://docs.ros.org/api/sensor_msgs/html/msg/NavSatFix.html) @@ -92,7 +92,7 @@ Odometry in NED frame (default name: odom_local_ned, launch name and frame type - `/tf` [tf2_msgs/TFMessage](https://docs.ros.org/api/tf2_msgs/html/msg/TFMessage.html) -- `/airsim_node/VEHICLE_NAME/altimeter/SENSOR_NAME` [airsim_ros_pkgs/Altimeter](https://github.com/microsoft/AirSim/blob/master/ros/src/airsim_ros_pkgs/msg/Altimeter.msg) +- `/airsim_node/VEHICLE_NAME/altimeter/SENSOR_NAME` [airsim_ros_pkgs/Altimeter](https://github.com/microsoft/AirSim/blob/main/ros/src/airsim_ros_pkgs/msg/Altimeter.msg) This the current altimeter reading for altitude, pressure, and [QNH](https://en.wikipedia.org/wiki/QNH) - `/airsim_node/VEHICLE_NAME/imu/SENSOR_NAME` [sensor_msgs::Imu](http://docs.ros.org/api/sensor_msgs/html/msg/Imu.html) @@ -109,20 +109,20 @@ IMU sensor data #### Subscribers: -- `/airsim_node/vel_cmd_body_frame` [airsim_ros_pkgs/VelCmd](https://github.com/microsoft/AirSim/tree/master/ros/src/airsim_ros_pkgs/msg/VelCmd.msg) +- `/airsim_node/vel_cmd_body_frame` [airsim_ros_pkgs/VelCmd](https://github.com/microsoft/AirSim/tree/main/ros/src/airsim_ros_pkgs/msg/VelCmd.msg) Ignore `vehicle_name` field, leave it to blank. We will use `vehicle_name` in future for multiple drones. -- `/airsim_node/vel_cmd_world_frame` [airsim_ros_pkgs/VelCmd](https://github.com/microsoft/AirSim/tree/master/ros/src/airsim_ros_pkgs/msg/VelCmd.msg) +- `/airsim_node/vel_cmd_world_frame` [airsim_ros_pkgs/VelCmd](https://github.com/microsoft/AirSim/tree/main/ros/src/airsim_ros_pkgs/msg/VelCmd.msg) Ignore `vehicle_name` field, leave it to blank. We will use `vehicle_name` in future for multiple drones. -- `/gimbal_angle_euler_cmd` [airsim_ros_pkgs/GimbalAngleEulerCmd](https://github.com/microsoft/AirSim/tree/master/ros/src/airsim_ros_pkgs/msg/GimbalAngleEulerCmd.msg) +- `/gimbal_angle_euler_cmd` [airsim_ros_pkgs/GimbalAngleEulerCmd](https://github.com/microsoft/AirSim/tree/main/ros/src/airsim_ros_pkgs/msg/GimbalAngleEulerCmd.msg) Gimbal set point in euler angles. -- `/gimbal_angle_quat_cmd` [airsim_ros_pkgs/GimbalAngleQuatCmd](https://github.com/microsoft/AirSim/tree/master/ros/src/airsim_ros_pkgs/msg/GimbalAngleQuatCmd.msg) +- `/gimbal_angle_quat_cmd` [airsim_ros_pkgs/GimbalAngleQuatCmd](https://github.com/microsoft/AirSim/tree/main/ros/src/airsim_ros_pkgs/msg/GimbalAngleQuatCmd.msg) Gimbal set point in quaternion. -- `/airsim_node/VEHICLE_NAME/car_cmd` [airsim_ros_pkgs/CarControls](https://github.com/microsoft/AirSim/blob/master/ros/src/airsim_ros_pkgs/msg/CarControls.msg) -Throttle, brake, steering and gear selections for control. Both automatic and manual transmission control possible, see the [`car_joy.py`](https://github.com/microsoft/AirSim/blob/master/ros/src/airsim_ros_pkgs/scripts/car_joy) script for use. +- `/airsim_node/VEHICLE_NAME/car_cmd` [airsim_ros_pkgs/CarControls](https://github.com/microsoft/AirSim/blob/main/ros/src/airsim_ros_pkgs/msg/CarControls.msg) +Throttle, brake, steering and gear selections for control. Both automatic and manual transmission control possible, see the [`car_joy.py`](https://github.com/microsoft/AirSim/blob/main/ros/src/airsim_ros_pkgs/scripts/car_joy) script for use. #### Services: @@ -197,16 +197,16 @@ Throttle, brake, steering and gear selections for control. Both automatic and ma #### Services: -- `/airsim_node/VEHICLE_NAME/gps_goal` [Request: [srv/SetGPSPosition](https://github.com/microsoft/AirSim/blob/master/ros/src/airsim_ros_pkgs/srv/SetGPSPosition.srv)] +- `/airsim_node/VEHICLE_NAME/gps_goal` [Request: [srv/SetGPSPosition](https://github.com/microsoft/AirSim/blob/main/ros/src/airsim_ros_pkgs/srv/SetGPSPosition.srv)] Target gps position + yaw. In **absolute** altitude. -- `/airsim_node/VEHICLE_NAME/local_position_goal` [Request: [srv/SetLocalPosition](https://github.com/microsoft/AirSim/blob/master/ros/src/airsim_ros_pkgs/srv/SetLocalPosition.srv)] +- `/airsim_node/VEHICLE_NAME/local_position_goal` [Request: [srv/SetLocalPosition](https://github.com/microsoft/AirSim/blob/main/ros/src/airsim_ros_pkgs/srv/SetLocalPosition.srv)] Target local position + yaw in global NED frame. #### Subscribers: -- `/airsim_node/origin_geo_point` [airsim_ros_pkgs/GPSYaw](https://github.com/microsoft/AirSim/tree/master/ros/src/airsim_ros_pkgs/msg/GPSYaw.msg) +- `/airsim_node/origin_geo_point` [airsim_ros_pkgs/GPSYaw](https://github.com/microsoft/AirSim/tree/main/ros/src/airsim_ros_pkgs/msg/GPSYaw.msg) Listens to home geo coordinates published by `airsim_node`. - `/airsim_node/VEHICLE_NAME/odom_local_ned` [nav_msgs/Odometry](https://docs.ros.org/api/nav_msgs/html/msg/Odometry.html) @@ -214,7 +214,7 @@ Throttle, brake, steering and gear selections for control. Both automatic and ma #### Publishers: -- `/vel_cmd_world_frame` [airsim_ros_pkgs/VelCmd](https://github.com/microsoft/AirSim/tree/master/ros/src/airsim_ros_pkgs/msg/VelCmd.msg) +- `/vel_cmd_world_frame` [airsim_ros_pkgs/VelCmd](https://github.com/microsoft/AirSim/tree/main/ros/src/airsim_ros_pkgs/msg/VelCmd.msg) Sends velocity command to `airsim_node` #### Global params @@ -298,7 +298,7 @@ roslaunch airsim_ros_pkgs rviz.launch ### Using Docker for ROS -A Dockerfile is present in the [`tools`](https://github.com/microsoft/AirSim/tree/master/tools/Dockerfile-ROS) directory. To build the `airsim-ros` image - +A Dockerfile is present in the [`tools`](https://github.com/microsoft/AirSim/tree/main/tools/Dockerfile-ROS) directory. To build the `airsim-ros` image - ```shell cd tools diff --git a/docs/airsim_tutorial_pkgs.md b/docs/airsim_tutorial_pkgs.md index 6f2719cba2..288640b884 100644 --- a/docs/airsim_tutorial_pkgs.md +++ b/docs/airsim_tutorial_pkgs.md @@ -1,7 +1,7 @@ # AirSim ROS Tutorials This is a set of sample AirSim `settings.json`s, roslaunch and rviz files to give a starting point for using AirSim with ROS. -See [airsim_ros_pkgs](https://github.com/microsoft/AirSim/blob/master/ros/src/airsim_ros_pkgs/README.md) for the ROS API. +See [airsim_ros_pkgs](https://github.com/microsoft/AirSim/blob/main/ros/src/airsim_ros_pkgs/README.md) for the ROS API. ## Setup @@ -26,7 +26,7 @@ catkin build airsim_tutorial_pkgs -DCMAKE_C_COMPILER=gcc-8 -DCMAKE_CXX_COMPILER= ## Examples ### Single drone with monocular and depth cameras, and lidar - - Settings.json - [front_stereo_and_center_mono.json](https://github.com/microsoft/AirSim/blob/master/ros/src/airsim_tutorial_pkgs/settings/front_stereo_and_center_mono.json) + - Settings.json - [front_stereo_and_center_mono.json](https://github.com/microsoft/AirSim/blob/main/ros/src/airsim_tutorial_pkgs/settings/front_stereo_and_center_mono.json) ```shell $ source PATH_TO/AirSim/ros/devel/setup.bash $ roscd airsim_tutorial_pkgs @@ -40,11 +40,11 @@ catkin build airsim_tutorial_pkgs -DCMAKE_C_COMPILER=gcc-8 -DCMAKE_CXX_COMPILER= $ source PATH_TO/AirSim/ros/devel/setup.bash $ roslaunch airsim_tutorial_pkgs front_stereo_and_center_mono.launch ``` - The above would start rviz with tf's, registered RGBD cloud using [depth_image_proc](https://wiki.ros.org/depth_image_proc) using the [`depth_to_pointcloud` launch file](https://github.com/microsoft/AirSim/blob/master/ros/src/airsim_tutorial_pkgs/launch/front_stereo_and_center_mono/depth_to_pointcloud.launch), and the lidar point cloud. + The above would start rviz with tf's, registered RGBD cloud using [depth_image_proc](https://wiki.ros.org/depth_image_proc) using the [`depth_to_pointcloud` launch file](https://github.com/microsoft/AirSim/blob/main/ros/src/airsim_tutorial_pkgs/launch/front_stereo_and_center_mono/depth_to_pointcloud.launch), and the lidar point cloud. ### Two drones, with cameras, lidar, IMU each -- Settings.json - [two_drones_camera_lidar_imu.json](https://github.com/microsoft/AirSim/blob/master/ros/src/airsim_tutorial_pkgs/settings/two_drones_camera_lidar_imu.json) +- Settings.json - [two_drones_camera_lidar_imu.json](https://github.com/microsoft/AirSim/blob/main/ros/src/airsim_tutorial_pkgs/settings/two_drones_camera_lidar_imu.json) ```shell $ source PATH_TO/AirSim/ros/devel/setup.bash @@ -59,7 +59,7 @@ catkin build airsim_tutorial_pkgs -DCMAKE_C_COMPILER=gcc-8 -DCMAKE_CXX_COMPILER= You can view the tfs in rviz. And do a `rostopic list` and `rosservice list` to inspect the services avaiable. ### Twenty-five drones in a square pattern -- Settings.json - [twenty_five_drones.json](https://github.com/microsoft/AirSim/blob/master/ros/src/airsim_tutorial_pkgs/settings/twenty_five_drones.json) +- Settings.json - [twenty_five_drones.json](https://github.com/microsoft/AirSim/blob/main/ros/src/airsim_tutorial_pkgs/settings/twenty_five_drones.json) ```shell $ source PATH_TO/AirSim/ros/devel/setup.bash diff --git a/docs/apis.md b/docs/apis.md index 5030a4b92a..de14e5fe90 100644 --- a/docs/apis.md +++ b/docs/apis.md @@ -125,13 +125,13 @@ for response in responses: * `simGetObjectPose`, `simSetObjectPose`: Gets and sets the pose of specified object in Unreal environment. Here the object means "actor" in Unreal terminology. They are searched by tag as well as name. Please note that the names shown in UE Editor are *auto-generated* in each run and are not permanent. So if you want to refer to actor by name, you must change its auto-generated name in UE Editor. Alternatively you can add a tag to actor which can be done by clicking on that actor in Unreal Editor and then going to [Tags property](https://answers.unrealengine.com/questions/543807/whats-the-difference-between-tag-and-tag.html), click "+" sign and add some string value. If multiple actors have same tag then the first match is returned. If no matches are found then NaN pose is returned. The returned pose is in NED coordinates in SI units in the world frame. For `simSetObjectPose`, the specified actor must have [Mobility](https://docs.unrealengine.com/en-us/Engine/Actors/Mobility) set to Movable or otherwise you will get undefined behavior. The `simSetObjectPose` has parameter `teleport` which means object is [moved through other objects](https://www.unrealengine.com/en-US/blog/moving-physical-objects) in its way and it returns true if move was successful ### Image / Computer Vision APIs -AirSim offers comprehensive images APIs to retrieve synchronized images from multiple cameras along with ground truth including depth, disparity, surface normals and vision. You can set the resolution, FOV, motion blur etc parameters in [settings.json](settings.md). There is also API for detecting collision state. See also [complete code](https://github.com/Microsoft/AirSim/tree/master/Examples/DataCollection/StereoImageGenerator.hpp) that generates specified number of stereo images and ground truth depth with normalization to camera plane, computation of disparity image and saving it to [pfm format](pfm.md). +AirSim offers comprehensive images APIs to retrieve synchronized images from multiple cameras along with ground truth including depth, disparity, surface normals and vision. You can set the resolution, FOV, motion blur etc parameters in [settings.json](settings.md). There is also API for detecting collision state. See also [complete code](https://github.com/Microsoft/AirSim/tree/main/Examples/DataCollection/StereoImageGenerator.hpp) that generates specified number of stereo images and ground truth depth with normalization to camera plane, computation of disparity image and saving it to [pfm format](pfm.md). More on [image APIs and Computer Vision mode](image_apis.md). For vision problems that can benefit from domain randomization, there is also an [object retexturing API](retexturing.md), which can be used in supported scenes. ### Pause and Continue APIs -AirSim allows to pause and continue the simulation through `pause(is_paused)` API. To pause the simulation call `pause(True)` and to continue the simulation call `pause(False)`. You may have scenario, especially while using reinforcement learning, to run the simulation for specified amount of time and then automatically pause. While simulation is paused, you may then do some expensive computation, send a new command and then again run the simulation for specified amount of time. This can be achieved by API `continueForTime(seconds)`. This API runs the simulation for the specified number of seconds and then pauses the simulation. For example usage, please see [pause_continue_car.py](https://github.com/Microsoft/AirSim/tree/master/PythonClient//car/pause_continue_car.py) and [pause_continue_drone.py](https://github.com/Microsoft/AirSim/tree/master/PythonClient//multirotor/pause_continue_drone.py). +AirSim allows to pause and continue the simulation through `pause(is_paused)` API. To pause the simulation call `pause(True)` and to continue the simulation call `pause(False)`. You may have scenario, especially while using reinforcement learning, to run the simulation for specified amount of time and then automatically pause. While simulation is paused, you may then do some expensive computation, send a new command and then again run the simulation for specified amount of time. This can be achieved by API `continueForTime(seconds)`. This API runs the simulation for the specified number of seconds and then pauses the simulation. For example usage, please see [pause_continue_car.py](https://github.com/Microsoft/AirSim/tree/main/PythonClient//car/pause_continue_car.py) and [pause_continue_drone.py](https://github.com/Microsoft/AirSim/tree/main/PythonClient//multirotor/pause_continue_drone.py). ### Collision API @@ -180,9 +180,9 @@ class WeatherParameter: Fog = 7 ``` -Please note that `Roadwetness`, `RoadSnow` and `RoadLeaf` effects requires adding [materials](https://github.com/Microsoft/AirSim/tree/master/Unreal/Plugins/AirSim/Content/Weather/WeatherFX) to your scene. +Please note that `Roadwetness`, `RoadSnow` and `RoadLeaf` effects requires adding [materials](https://github.com/Microsoft/AirSim/tree/main/Unreal/Plugins/AirSim/Content/Weather/WeatherFX) to your scene. -Please see [example code](https://github.com/Microsoft/AirSim/blob/master/PythonClient/environment/weather.py) for more details. +Please see [example code](https://github.com/Microsoft/AirSim/blob/main/PythonClient/environment/weather.py) for more details. ### Recording APIs @@ -210,7 +210,7 @@ wind = airsim.Vector3r(20, 0, 0) client.simSetWind(wind) ``` -Also see example script in [set_wind.py](https://github.com/Microsoft/AirSim/blob/master/PythonClient/multirotor/set_wind.py) +Also see example script in [set_wind.py](https://github.com/Microsoft/AirSim/blob/main/PythonClient/multirotor/set_wind.py) ### Lidar APIs AirSim offers API to retrieve point cloud data from Lidar sensors on vehicles. You can set the number of channels, points per second, horizontal and vertical FOV, etc parameters in [settings.json](settings.md). @@ -294,9 +294,9 @@ See the [Adding New APIs](adding_new_apis.md) page ## References and Examples * [C++ API Examples](apis_cpp.md) -* [Car Examples](https://github.com/Microsoft/AirSim/tree/master/PythonClient//car) -* [Multirotor Examples](https://github.com/Microsoft/AirSim/tree/master/PythonClient//multirotor) -* [Computer Vision Examples](https://github.com/Microsoft/AirSim/tree/master/PythonClient//computer_vision) +* [Car Examples](https://github.com/Microsoft/AirSim/tree/main/PythonClient//car) +* [Multirotor Examples](https://github.com/Microsoft/AirSim/tree/main/PythonClient//multirotor) +* [Computer Vision Examples](https://github.com/Microsoft/AirSim/tree/main/PythonClient//computer_vision) * [Move on Path](https://github.com/Microsoft/AirSim/wiki/moveOnPath-demo) demo showing video of fast multirotor flight through Modular Neighborhood environment * [Building a Hexacopter](https://github.com/Microsoft/AirSim/wiki/hexacopter) * [Building Point Clouds](https://github.com/Microsoft/AirSim/wiki/Point-Clouds) diff --git a/docs/apis_cpp.md b/docs/apis_cpp.md index 8339066e8f..4354806f35 100644 --- a/docs/apis_cpp.md +++ b/docs/apis_cpp.md @@ -4,7 +4,7 @@ Please read [general API doc](apis.md) first if you haven't already. This docume ## Quick Start -Fastest way to get started is to open AirSim.sln in Visual Studio 2019. You will see [Hello Car](https://github.com/Microsoft/AirSim/tree/master/HelloCar/) and [Hello Drone](https://github.com/Microsoft/AirSim/tree/master/HelloDrone/) examples in the solution. These examples will show you the include paths and lib paths you will need to setup in your VC++ projects. If you are using Linux then you will specify these paths either in your [cmake file](https://github.com/Microsoft/AirSim/tree/master/cmake//HelloCar/CMakeLists.txt) or on compiler command line. +Fastest way to get started is to open AirSim.sln in Visual Studio 2019. You will see [Hello Car](https://github.com/Microsoft/AirSim/tree/main/HelloCar/) and [Hello Drone](https://github.com/Microsoft/AirSim/tree/main/HelloDrone/) examples in the solution. These examples will show you the include paths and lib paths you will need to setup in your VC++ projects. If you are using Linux then you will specify these paths either in your [cmake file](https://github.com/Microsoft/AirSim/tree/main/cmake//HelloCar/CMakeLists.txt) or on compiler command line. #### Include and Lib Folders @@ -19,7 +19,7 @@ Here's how to use AirSim APIs using C++ to control simulated car (see also [Pyth ```cpp -// ready to run example: https://github.com/Microsoft/AirSim/blob/master/HelloCar/main.cpp +// ready to run example: https://github.com/Microsoft/AirSim/blob/main/HelloCar/main.cpp #include #include "vehicles/car/api/CarRpcLibClient.hpp" @@ -57,7 +57,7 @@ Here's how to use AirSim APIs using C++ to control simulated quadrotor (see also ```cpp -// ready to run example: https://github.com/Microsoft/AirSim/blob/master/HelloDrone/main.cpp +// ready to run example: https://github.com/Microsoft/AirSim/blob/main/HelloDrone/main.cpp #include #include "vehicles/multirotor/api/MultirotorRpcLibClient.hpp" @@ -88,7 +88,7 @@ int main() ## See Also -* [Examples](https://github.com/microsoft/AirSim/tree/master/Examples) of how to use internal infrastructure in AirSim in your other projects -* [DroneShell](https://github.com/microsoft/AirSim/tree/master/DroneShell) app shows how to make simple interface using C++ APIs to control drones -* [HelloSpawnedDrones](https://github.com/microsoft/AirSim/tree/master/HelloSpawnedDrones) app shows how to make additional vehicles on the fly +* [Examples](https://github.com/microsoft/AirSim/tree/main/Examples) of how to use internal infrastructure in AirSim in your other projects +* [DroneShell](https://github.com/microsoft/AirSim/tree/main/DroneShell) app shows how to make simple interface using C++ APIs to control drones +* [HelloSpawnedDrones](https://github.com/microsoft/AirSim/tree/main/HelloSpawnedDrones) app shows how to make additional vehicles on the fly * [Python APIs](apis.md) diff --git a/docs/azure.md b/docs/azure.md index fc588d318d..5562c22577 100644 --- a/docs/azure.md +++ b/docs/azure.md @@ -72,12 +72,12 @@ docker build -t / -f ./docker/Dockerfile .` To use a different AirSim binary, first check the official documentation on [How to Build AirSim on Windows](build_windows.md) and [How to Build AirSim on Linux](build_linux.md) if you also want to run it with Docker Once you have a zip file with the new AirSim environment (or prefer to use one from the [Official Releases](https://github.com/microsoft/AirSim/releases)), you need to modify some of the scripts in the `azure` directory of the repository to point to the new environment: -- In [`azure/azure-env-creation/configure-vm.ps1`](https://github.com/microsoft/AirSim/blob/master/azure/azure-env-creation/configure-vm.ps1), modify all the parameters starting with `$airSimBinary` with the new values -- In [`azure/start-airsim.ps1`](https://github.com/microsoft/AirSim/blob/master/azure/start-airsim.ps1), modify `$airSimExecutable` and `$airSimProcessName` with the new values +- In [`azure/azure-env-creation/configure-vm.ps1`](https://github.com/microsoft/AirSim/blob/main/azure/azure-env-creation/configure-vm.ps1), modify all the parameters starting with `$airSimBinary` with the new values +- In [`azure/start-airsim.ps1`](https://github.com/microsoft/AirSim/blob/main/azure/start-airsim.ps1), modify `$airSimExecutable` and `$airSimProcessName` with the new values If you are using the docker image, you also need a linux binary zip file and modify the following Docker-related files: -- In [`azure/docker/Dockerfile`](https://github.com/microsoft/AirSim/blob/master/azure/docker/Dockerfile), modify the `AIRSIM_BINARY_ZIP_URL` and `AIRSIM_BINARY_ZIP_FILENAME` ENV declarations with the new values -- In [`azure/docker/docker-entrypoint.sh`](https://github.com/microsoft/AirSim/blob/master/azure/docker/docker-entrypoint.sh), modify `AIRSIM_EXECUTABLE` with the new value +- In [`azure/docker/Dockerfile`](https://github.com/microsoft/AirSim/blob/main/azure/docker/Dockerfile), modify the `AIRSIM_BINARY_ZIP_URL` and `AIRSIM_BINARY_ZIP_FILENAME` ENV declarations with the new values +- In [`azure/docker/docker-entrypoint.sh`](https://github.com/microsoft/AirSim/blob/main/azure/docker/docker-entrypoint.sh), modify `AIRSIM_EXECUTABLE` with the new value ## Maintaining this development environment diff --git a/docs/code_structure.md b/docs/code_structure.md index ac2431c203..f7c3817f7a 100644 --- a/docs/code_structure.md +++ b/docs/code_structure.md @@ -6,27 +6,27 @@ Majority of the code is located in AirLib. This is a self-contained library that AirLib consists of the following components: -1. [*Physics engine:*](https://github.com/microsoft/AirSim/tree/master/AirLib/include/physics) This is header-only physics engine. It is designed to be fast and extensible to implement different vehicles. -2. [*Sensor models:*](https://github.com/microsoft/AirSim/tree/master/AirLib/include/sensors) This is header-only models for Barometer, IMU, GPS and Magnetometer. -3. [*Vehicle models:*](https://github.com/microsoft/AirSim/tree/master/AirLib/include/vehiclesr) This is header-only models for vehicle configurations and models. Currently we have implemented model for a MultiRotor and a configuration for PX4 QuadRotor in the X config. There are several different Multirotor models defined in MultiRotorParams.hpp including a hexacopter as well. -4. [*API-related files:*](https://github.com/microsoft/AirSim/tree/master/AirLib/include/api) This part of AirLib provides abstract base class for our APIs and concrete implementation for specific vehicle platforms such as MavLink. It also has classes for the RPC client and server. +1. [*Physics engine:*](https://github.com/microsoft/AirSim/tree/main/AirLib/include/physics) This is header-only physics engine. It is designed to be fast and extensible to implement different vehicles. +2. [*Sensor models:*](https://github.com/microsoft/AirSim/tree/main/AirLib/include/sensors) This is header-only models for Barometer, IMU, GPS and Magnetometer. +3. [*Vehicle models:*](https://github.com/microsoft/AirSim/tree/main/AirLib/include/vehiclesr) This is header-only models for vehicle configurations and models. Currently we have implemented model for a MultiRotor and a configuration for PX4 QuadRotor in the X config. There are several different Multirotor models defined in MultiRotorParams.hpp including a hexacopter as well. +4. [*API-related files:*](https://github.com/microsoft/AirSim/tree/main/AirLib/include/api) This part of AirLib provides abstract base class for our APIs and concrete implementation for specific vehicle platforms such as MavLink. It also has classes for the RPC client and server. -Apart from these, all common utilities are defined in [`common/`](https://github.com/microsoft/AirSim/tree/master/AirLib/include/common) subfolder. One important file here is [AirSimSettings.hpp](https://github.com/microsoft/AirSim/blob/master/AirLib/include/common/AirSimSettings.hpp) which should be modified if any new fields are to be added in `settings.json`. +Apart from these, all common utilities are defined in [`common/`](https://github.com/microsoft/AirSim/tree/main/AirLib/include/common) subfolder. One important file here is [AirSimSettings.hpp](https://github.com/microsoft/AirSim/blob/main/AirLib/include/common/AirSimSettings.hpp) which should be modified if any new fields are to be added in `settings.json`. -AirSim supports different firmwares for Multirotor such as its own SimpleFlight, PX4 and ArduPilot, files for communicating with each firmware are placed in their respective subfolders in [`multirotor/firmwares`](https://github.com/microsoft/AirSim/tree/master/AirLib/include/vehicles/multirotor/firmwares). +AirSim supports different firmwares for Multirotor such as its own SimpleFlight, PX4 and ArduPilot, files for communicating with each firmware are placed in their respective subfolders in [`multirotor/firmwares`](https://github.com/microsoft/AirSim/tree/main/AirLib/include/vehicles/multirotor/firmwares). -The vehicle-specific APIs are defined in the `api/` subfolder, along-with required structs. The [`AirLib/src/`](https://github.com/microsoft/AirSim/tree/master/AirLib/src) contains .cpp files with implementations of various mehtods defined in the .hpp files. For e.g. [MultirotorApiBase.cpp](https://github.com/microsoft/AirSim/blob/master/AirLib/src/vehicles/multirotor/api/MultirotorApiBase.cpp) contains the base implementation of the multirotor APIs, which can also be overridden in the specific firmware files if required. +The vehicle-specific APIs are defined in the `api/` subfolder, along-with required structs. The [`AirLib/src/`](https://github.com/microsoft/AirSim/tree/main/AirLib/src) contains .cpp files with implementations of various mehtods defined in the .hpp files. For e.g. [MultirotorApiBase.cpp](https://github.com/microsoft/AirSim/blob/main/AirLib/src/vehicles/multirotor/api/MultirotorApiBase.cpp) contains the base implementation of the multirotor APIs, which can also be overridden in the specific firmware files if required. ## Unreal/Plugins/AirSim This is the only portion of project which is dependent on Unreal engine. We have kept it isolated so we can implement simulator for other platforms as well, as has been done for [Unity](https://microsoft.github.io/AirSim/Unity.html). The Unreal code takes advantage of its UObject based classes including Blueprints. The `Source/` folder contains the C++ files, while the `Content/` folder has the blueprints and assets. Some main components are described below: -1. *SimMode_ classes*: The SimMode classes help implement many different modes, such as pure Computer Vision mode, where there is no vehicle or simulation for a specific vehicle (currently car and multirotor). The vehicle classes are located in [`Vehicles/`](https://github.com/microsoft/AirSim/tree/master/Unreal/Plugins/AirSim/Source/Vehicles) -2. *PawnSimApi*: This is the [base class](https://github.com/microsoft/AirSim/blob/master/Unreal/Plugins/AirSim/Source/PawnSimApi.cpp) for all vehicle pawn visualizations. Each vehicle has their own child (Multirotor|Car|ComputerVision)Pawn class. -3. [UnrealSensors](https://github.com/microsoft/AirSim/tree/master/Unreal/Plugins/AirSim/Source/UnrealSensors): Contains implementation of Distance and Lidar sensors. +1. *SimMode_ classes*: The SimMode classes help implement many different modes, such as pure Computer Vision mode, where there is no vehicle or simulation for a specific vehicle (currently car and multirotor). The vehicle classes are located in [`Vehicles/`](https://github.com/microsoft/AirSim/tree/main/Unreal/Plugins/AirSim/Source/Vehicles) +2. *PawnSimApi*: This is the [base class](https://github.com/microsoft/AirSim/blob/main/Unreal/Plugins/AirSim/Source/PawnSimApi.cpp) for all vehicle pawn visualizations. Each vehicle has their own child (Multirotor|Car|ComputerVision)Pawn class. +3. [UnrealSensors](https://github.com/microsoft/AirSim/tree/main/Unreal/Plugins/AirSim/Source/UnrealSensors): Contains implementation of Distance and Lidar sensors. 4. *WorldSimApi*: Implements most of the environment and vehicle-agnostic APIs -Apart from these, [`PIPCamera`](https://github.com/microsoft/AirSim/blob/master/Unreal/Plugins/AirSim/Source/PIPCamera.cpp) contains the camera initialization, and [`UnrealImageCapture`](https://github.com/microsoft/AirSim/blob/master/Unreal/Plugins/AirSim/Source/UnrealImageCapture.cpp) & [`RenderRequest`](https://github.com/microsoft/AirSim/blob/master/Unreal/Plugins/AirSim/Source/RenderRequest.cpp) the image rendering code. [`AirBlueprintLib`](https://github.com/microsoft/AirSim/blob/master/Unreal/Plugins/AirSim/Source/AirBlueprintLib.cpp) has a lot of utility and wrapper methods used to interface with the UE4 engine. +Apart from these, [`PIPCamera`](https://github.com/microsoft/AirSim/blob/main/Unreal/Plugins/AirSim/Source/PIPCamera.cpp) contains the camera initialization, and [`UnrealImageCapture`](https://github.com/microsoft/AirSim/blob/main/Unreal/Plugins/AirSim/Source/UnrealImageCapture.cpp) & [`RenderRequest`](https://github.com/microsoft/AirSim/blob/main/Unreal/Plugins/AirSim/Source/RenderRequest.cpp) the image rendering code. [`AirBlueprintLib`](https://github.com/microsoft/AirSim/blob/main/Unreal/Plugins/AirSim/Source/AirBlueprintLib.cpp) has a lot of utility and wrapper methods used to interface with the UE4 engine. ## MavLinkCom @@ -40,7 +40,7 @@ DroneShell demonstrates how to connect to the simulator using UDP. The simulato ## PythonClient -[PythonClient](https://github.com/microsoft/AirSim/tree/master/PythonClient) contains Python API wrapper files and sample programs demonstrating their uses. +[PythonClient](https://github.com/microsoft/AirSim/tree/main/PythonClient) contains Python API wrapper files and sample programs demonstrating their uses. ## Contributing diff --git a/docs/custom_drone.md b/docs/custom_drone.md index fc3429ea97..332f39aa5a 100644 --- a/docs/custom_drone.md +++ b/docs/custom_drone.md @@ -62,8 +62,8 @@ You can run the MavlinkCom library and MavLinkTest app to test the connection between your companion computer and flight controller. ## How Does This Work? -AirSim uses MavLinkCom component developed by @lovettchris. The MavLinkCom has a proxy architecture where you can open a connection to PX4 either using serial or UDP and then other components share this connection. When PX4 sends MavLink message, all components receive that message. If any component sends a message then it's received by PX4 only. This allows you to connect any number of components to PX4 [This code](https://github.com/microsoft/AirSim/blob/master/AirLib/include/vehicles/multirotor/firmwares/mavlink/MavLinkMultirotorApi.hpp#L600) opens a connection for LogViewer and QGC. You can add something more if you like. +AirSim uses MavLinkCom component developed by @lovettchris. The MavLinkCom has a proxy architecture where you can open a connection to PX4 either using serial or UDP and then other components share this connection. When PX4 sends MavLink message, all components receive that message. If any component sends a message then it's received by PX4 only. This allows you to connect any number of components to PX4 [This code](https://github.com/microsoft/AirSim/blob/main/AirLib/include/vehicles/multirotor/firmwares/mavlink/MavLinkMultirotorApi.hpp#L600) opens a connection for LogViewer and QGC. You can add something more if you like. If you want to use QGC + AirSim together than you will need QGC to let own the serial port. QGC opens up TCP connection that acts as a proxy so any other component can connect to QGC and send MavLinkMessage to QGC and then QGC forwards that message to PX4. So you tell AirSim to connect to QGC and let QGC own serial port. -For companion board, the way we did it earlier was to have Gigabyte Brix on the drone. This x86 full-fledged computer that will connect to PX4 through USB. We had Ubuntu on Brix and ran [DroneServer](https://github.com/Microsoft/AirSim/tree/master/DroneServer). The DroneServer created an API endpoint that we can talk to via C++ client code (or Python code) and it translated API calls to MavLink messages. That way you can write your code against the same API, test it in the simulator and then run the same code on an actual vehicle. So the companion computer has DroneServer running along with client code. +For companion board, the way we did it earlier was to have Gigabyte Brix on the drone. This x86 full-fledged computer that will connect to PX4 through USB. We had Ubuntu on Brix and ran [DroneServer](https://github.com/Microsoft/AirSim/tree/main/DroneServer). The DroneServer created an API endpoint that we can talk to via C++ client code (or Python code) and it translated API calls to MavLink messages. That way you can write your code against the same API, test it in the simulator and then run the same code on an actual vehicle. So the companion computer has DroneServer running along with client code. diff --git a/docs/distance_sensor.md b/docs/distance_sensor.md index f6d5ee4ac7..557745ea8f 100644 --- a/docs/distance_sensor.md +++ b/docs/distance_sensor.md @@ -22,4 +22,4 @@ For example, to make the sensor point towards the ground (for altitude measureme } ``` -**Note:** For Cars, the sensor is placed 1 meter above the vehicle center by default. This is required since otherwise the sensor gives strange data due it being inside the vehicle. This doesn't affect the sensor values say when measuring the distance between 2 cars. See [`PythonClient/car/distance_sensor_multi.py`](https://github.com/Microsoft/AirSim/blob/master/PythonClient/car/distance_sensor_multi.py) for an example usage. \ No newline at end of file +**Note:** For Cars, the sensor is placed 1 meter above the vehicle center by default. This is required since otherwise the sensor gives strange data due it being inside the vehicle. This doesn't affect the sensor values say when measuring the distance between 2 cars. See [`PythonClient/car/distance_sensor_multi.py`](https://github.com/Microsoft/AirSim/blob/main/PythonClient/car/distance_sensor_multi.py) for an example usage. \ No newline at end of file diff --git a/docs/docker_ubuntu.md b/docs/docker_ubuntu.md index 8c5684932f..5cabffe6f7 100644 --- a/docs/docker_ubuntu.md +++ b/docs/docker_ubuntu.md @@ -128,7 +128,7 @@ You can test it by running `/home/ue4/Binaries/Blocks/LinuxNoEditor/Blocks.sh -w ### Specifying settings.json #### `airsim_binary` docker image: - We're mapping the host machine's `PATH/TO/Airsim/docker/settings.json` to the docker container's `/home/airsim_user/Documents/AirSim/settings.json`. - - Hence, we can load any settings file by simply modifying `PATH_TO_YOUR/settings.json` by modifying the following snippets in [`run_airsim_image_binary.sh`](https://github.com/Microsoft/AirSim/blob/master/docker/run_airsim_image_binary.sh) + - Hence, we can load any settings file by simply modifying `PATH_TO_YOUR/settings.json` by modifying the following snippets in [`run_airsim_image_binary.sh`](https://github.com/Microsoft/AirSim/blob/main/docker/run_airsim_image_binary.sh) ```bash nvidia-docker run --runtime=nvidia -it \ @@ -157,7 +157,7 @@ docker run --gpus all -it \ #### `airsim_source` docker image: * We're mapping the host machine's `PATH/TO/Airsim/docker/settings.json` to the docker container's `/home/airsim_user/Documents/AirSim/settings.json`. - * Hence, we can load any settings file by simply modifying `PATH_TO_YOUR/settings.json` by modifying the following snippets in [`run_airsim_image_source.sh`](https://github.com/Microsoft/AirSim/blob/master/docker/run_airsim_image_source.sh): + * Hence, we can load any settings file by simply modifying `PATH_TO_YOUR/settings.json` by modifying the following snippets in [`run_airsim_image_source.sh`](https://github.com/Microsoft/AirSim/blob/main/docker/run_airsim_image_source.sh): ```bash nvidia-docker run --runtime=nvidia -it \ diff --git a/docs/drone_survey.md b/docs/drone_survey.md index 50988da1a7..6d7d186b7e 100644 --- a/docs/drone_survey.md +++ b/docs/drone_survey.md @@ -2,7 +2,7 @@ Moved here from [https://github.com/microsoft/AirSim/wiki/Implementing-a-Drone-Survey-script](https://github.com/microsoft/AirSim/wiki/Implementing-a-Drone-Survey-script) -Ever wanted to capture a bunch of top-down pictures of a certain location? Well, the Python API makes this really simple. See the [code available here](https://github.com/microsoft/AirSim/blob/master/PythonClient/multirotor/survey.py). +Ever wanted to capture a bunch of top-down pictures of a certain location? Well, the Python API makes this really simple. See the [code available here](https://github.com/microsoft/AirSim/blob/main/PythonClient/multirotor/survey.py). ![survey](images/survey.png) diff --git a/docs/event_sim.md b/docs/event_sim.md index f269d98ef6..567e0edc51 100644 --- a/docs/event_sim.md +++ b/docs/event_sim.md @@ -14,14 +14,14 @@ x and y are the pixel locations of the event firing, timestamp is the global tim ![image](images/event_sim.png) #### Usage -An example script to run the event simulator alongside AirSim is located at https://github.com/microsoft/AirSim/blob/master/PythonClient/eventcamera_sim/test_event_sim.py. The following optional command-line arguments can be passed to this script. +An example script to run the event simulator alongside AirSim is located at https://github.com/microsoft/AirSim/blob/main/PythonClient/eventcamera_sim/test_event_sim.py. The following optional command-line arguments can be passed to this script. ``` args.width, args.height (float): Simulated event camera resolution args.save (bool): Whether or not to save the event data to a file, args.debug (bool): Whether or not to display the simulated events as an image ``` -The implementation of the actual event simulation, written in Python and numba, is at https://github.com/microsoft/AirSim/blob/master/PythonClient/eventcamera_sim/event_simulator.py. The event simulator is initialized as follows, with the arguments controlling the resolution of the camera. +The implementation of the actual event simulation, written in Python and numba, is at https://github.com/microsoft/AirSim/blob/main/PythonClient/eventcamera_sim/event_simulator.py. The event simulator is initialized as follows, with the arguments controlling the resolution of the camera. ``` from event_simulator import * diff --git a/docs/hello_drone.md b/docs/hello_drone.md index 49928eab67..1fc7eb90b9 100644 --- a/docs/hello_drone.md +++ b/docs/hello_drone.md @@ -3,4 +3,4 @@ ## How does Hello Drone work? Hello Drone uses the RPC client to connect to the RPC server that is automatically started by the AirSim. -The RPC server routes all the commands to a class that implements [MultirotorApiBase](https://github.com/Microsoft/AirSim/tree/master/AirLib//include/vehicles/multirotor/api/MultirotorApiBase.hpp). In essence, MultirotorApiBase defines our abstract interface for getting data from the quadrotor and sending back commands. We currently have concrete implementation for MultirotorApiBase for MavLink based vehicles. The implementation for DJI drone platforms, specifically Matrice, is in works. +The RPC server routes all the commands to a class that implements [MultirotorApiBase](https://github.com/Microsoft/AirSim/tree/main/AirLib//include/vehicles/multirotor/api/MultirotorApiBase.hpp). In essence, MultirotorApiBase defines our abstract interface for getting data from the quadrotor and sending back commands. We currently have concrete implementation for MultirotorApiBase for MavLink based vehicles. The implementation for DJI drone platforms, specifically Matrice, is in works. diff --git a/docs/image_apis.md b/docs/image_apis.md index 963f24702e..2f8a0fb136 100644 --- a/docs/image_apis.md +++ b/docs/image_apis.md @@ -124,13 +124,13 @@ int getStereoAndDepthImages() ### Python -For a more complete ready to run sample code please see [sample code in AirSimClient project](https://github.com/Microsoft/AirSim/tree/master/PythonClient//multirotor/hello_drone.py) for multirotors or [HelloCar sample](https://github.com/Microsoft/AirSim/tree/master/PythonClient//car/hello_car.py). This code also demonstrates simple activities such as saving images in files or using `numpy` to manipulate images. +For a more complete ready to run sample code please see [sample code in AirSimClient project](https://github.com/Microsoft/AirSim/tree/main/PythonClient//multirotor/hello_drone.py) for multirotors or [HelloCar sample](https://github.com/Microsoft/AirSim/tree/main/PythonClient//car/hello_car.py). This code also demonstrates simple activities such as saving images in files or using `numpy` to manipulate images. ### C++ -For a more complete ready to run sample code please see [sample code in HelloDrone project](https://github.com/Microsoft/AirSim/tree/master/HelloDrone//main.cpp) for multirotors or [HelloCar project](https://github.com/Microsoft/AirSim/tree/master/HelloCar//main.cpp). +For a more complete ready to run sample code please see [sample code in HelloDrone project](https://github.com/Microsoft/AirSim/tree/main/HelloDrone//main.cpp) for multirotors or [HelloCar project](https://github.com/Microsoft/AirSim/tree/main/HelloCar//main.cpp). -See also [other example code](https://github.com/Microsoft/AirSim/tree/master/Examples/DataCollection/StereoImageGenerator.hpp) that generates specified number of stereo images along with ground truth depth and disparity and saving it to [pfm format](pfm.md). +See also [other example code](https://github.com/Microsoft/AirSim/tree/main/Examples/DataCollection/StereoImageGenerator.hpp) that generates specified number of stereo images along with ground truth depth and disparity and saving it to [pfm format](pfm.md). ## Available Cameras @@ -159,7 +159,7 @@ To active this mode, edit [settings.json](settings.md) that you can find in your } ``` -[Here's the Python code example](https://github.com/Microsoft/AirSim/tree/master/PythonClient//computer_vision/cv_mode.py) to move camera around and capture images. +[Here's the Python code example](https://github.com/Microsoft/AirSim/tree/main/PythonClient//computer_vision/cv_mode.py) to move camera around and capture images. This mode was inspired from [UnrealCV project](http://unrealcv.org/). @@ -167,7 +167,7 @@ This mode was inspired from [UnrealCV project](http://unrealcv.org/). To move around the environment using APIs you can use `simSetVehiclePose` API. This API takes position and orientation and sets that on the invisible vehicle where the front-center camera is located. All rest of the cameras move along keeping the relative position. If you don't want to change position (or orientation) then just set components of position (or orientation) to floating point nan values. The `simGetVehiclePose` allows to retrieve the current pose. You can also use `simGetGroundTruthKinematics` to get the quantities kinematics quantities for the movement. Many other non-vehicle specific APIs are also available such as segmentation APIs, collision APIs and camera APIs. ## Camera APIs -The `simGetCameraInfo` returns the pose (in world frame, NED coordinates, SI units) and FOV (in degrees) for the specified camera. Please see [example usage](https://github.com/Microsoft/AirSim/tree/master/PythonClient//computer_vision/cv_mode.py). +The `simGetCameraInfo` returns the pose (in world frame, NED coordinates, SI units) and FOV (in degrees) for the specified camera. Please see [example usage](https://github.com/Microsoft/AirSim/tree/main/PythonClient//computer_vision/cv_mode.py). The `simSetCameraPose` sets the pose for the specified camera while taking an input pose as a combination of relative position and a quaternion in NED frame. The handy `airsim.to_quaternion()` function allows to convert pitch, roll, yaw to quaternion. For example, to set camera-0 to 15-degree pitch while maintaining the same position, you can use: ``` @@ -178,12 +178,12 @@ client.simSetCameraPose(0, camera_pose); - `simSetCameraFov` allows changing the Field-of-View of the camera at runtime. - `simSetDistortionParams`, `simGetDistortionParams` allow setting and fetching the distortion parameters K1, K2, K3, P1, P2 -All Camera APIs take in 3 common parameters apart from the API-specific ones, `camera_name`(str), `vehicle_name`(str) and `external`(bool, to indicate [External Camera](settings.md#external-cameras)). Camera and vehicle name is used to get the specific camera, if `external` is set to `true`, then the vehicle name is ignored. Also see [external_camera.py](https://github.com/microsoft/AirSim/blob/master/PythonClient/computer_vision/external_camera.py) for example usage of these APIs. +All Camera APIs take in 3 common parameters apart from the API-specific ones, `camera_name`(str), `vehicle_name`(str) and `external`(bool, to indicate [External Camera](settings.md#external-cameras)). Camera and vehicle name is used to get the specific camera, if `external` is set to `true`, then the vehicle name is ignored. Also see [external_camera.py](https://github.com/microsoft/AirSim/blob/main/PythonClient/computer_vision/external_camera.py) for example usage of these APIs. ### Gimbal You can set stabilization for pitch, roll or yaw for any camera [using settings](settings.md#gimbal). -Please see [example usage](https://github.com/Microsoft/AirSim/tree/master/PythonClient//computer_vision/cv_mode.py). +Please see [example usage](https://github.com/Microsoft/AirSim/tree/main/PythonClient//computer_vision/cv_mode.py). ## Changing Resolution and Camera Parameters To change resolution, FOV etc, you can use [settings.json](settings.md). For example, below addition in settings.json sets parameters for scene capture and uses "Computer Vision" mode described above. If you omit any setting then below default values will be used. For more information see [settings doc](settings.md). If you are using stereo camera, currently the distance between left and right is fixed at 25 cm. @@ -232,7 +232,7 @@ When you specify `ImageType = DepthVis` in `ImageRequest`, you get an image that You normally want to retrieve disparity image as float (i.e. set `pixels_as_float = true` and specify `ImageType = DisparityNormalized` in `ImageRequest`) in which case each pixel is `(Xl - Xr)/Xmax`, which is thereby normalized to values between 0 to 1. ### Segmentation -When you specify `ImageType = Segmentation` in `ImageRequest`, you get an image that gives you ground truth segmentation of the scene. At the startup, AirSim assigns value 0 to 255 to each mesh available in environment. This value is then mapped to a specific color in [the pallet](https://github.com/microsoft/AirSim/blob/master/Unreal/Plugins/AirSim/Content/HUDAssets/seg_color_palette.png). The RGB values for each object ID can be found in [this file](seg_rgbs.txt). +When you specify `ImageType = Segmentation` in `ImageRequest`, you get an image that gives you ground truth segmentation of the scene. At the startup, AirSim assigns value 0 to 255 to each mesh available in environment. This value is then mapped to a specific color in [the pallet](https://github.com/microsoft/AirSim/blob/main/Unreal/Plugins/AirSim/Content/HUDAssets/seg_color_palette.png). The RGB values for each object ID can be found in [this file](seg_rgbs.txt). You can assign a specific value (limited to the range 0-255) to a specific mesh using APIs. For example, below Python code sets the object ID for the mesh called "Ground" to 20 in Blocks environment and hence changes its color in Segmentation view: @@ -263,7 +263,7 @@ print(np.unique(img_rgb[:,:,1], return_counts=True)) #green print(np.unique(img_rgb[:,:,2], return_counts=True)) #blue ``` -A complete ready-to-run example can be found in [segmentation.py](https://github.com/Microsoft/AirSim/tree/master/PythonClient//computer_vision/segmentation.py). +A complete ready-to-run example can be found in [segmentation.py](https://github.com/Microsoft/AirSim/tree/main/PythonClient//computer_vision/segmentation.py). #### Unsetting object ID An object's ID can be set to -1 to make it not show up on the segmentation image. @@ -278,7 +278,7 @@ If you don't know how to open Unreal Environment in Unreal Editor then try follo Once you decide on the meshes you are interested, note down their names and use above API to set their object IDs. There are [few settings](settings.md#segmentation-settings) available to change object ID generation behavior. #### Changing Colors for Object IDs -At present the color for each object ID is fixed as in [this pallet](https://github.com/microsoft/AirSim/blob/master/Unreal/Plugins/AirSim/Content/HUDAssets/seg_color_palette.png). We will be adding ability to change colors for object IDs to desired values shortly. In the meantime you can open the segmentation image in your favorite image editor and get the RGB values you are interested in. +At present the color for each object ID is fixed as in [this pallet](https://github.com/microsoft/AirSim/blob/main/Unreal/Plugins/AirSim/Content/HUDAssets/seg_color_palette.png). We will be adding ability to change colors for object IDs to desired values shortly. In the meantime you can open the segmentation image in your favorite image editor and get the RGB values you are interested in. #### Startup Object IDs At the start, AirSim assigns object ID to each object found in environment of type `UStaticMeshComponent` or `ALandscapeProxy`. It then either uses mesh name or owner name (depending on settings), lower cases it, removes any chars below ASCII 97 to remove numbers and some punctuations, sums int value of all chars and modulo 255 to generate the object ID. In other words, all object with same alphabet chars would get same object ID. This heuristic is simple and effective for many Unreal environments but may not be what you want. In that case, please use above APIs to change object IDs to your desired values. There are [few settings](settings.md#segmentation-settings) available to change this behavior. @@ -293,4 +293,4 @@ Currently this is just a map from object ID to grey scale 0-255. So any mesh wit These image types return information about motion perceived by the point of view of the camera. OpticalFlow returns a 2-channel image where the channels correspond to vx and vy respectively. OpticalFlowVis is similar to OpticalFlow but converts flow data to RGB for a more 'visual' output. ## Example Code -A complete example of setting vehicle positions at random locations and orientations and then taking images can be found in [GenerateImageGenerator.hpp](https://github.com/Microsoft/AirSim/tree/master/Examples/DataCollection/StereoImageGenerator.hpp). This example generates specified number of stereo images and ground truth disparity image and saving it to [pfm format](pfm.md). +A complete example of setting vehicle positions at random locations and orientations and then taking images can be found in [GenerateImageGenerator.hpp](https://github.com/Microsoft/AirSim/tree/main/Examples/DataCollection/StereoImageGenerator.hpp). This example generates specified number of stereo images and ground truth disparity image and saving it to [pfm format](pfm.md). diff --git a/docs/lidar.md b/docs/lidar.md index bfc39b3de6..a6fb1dc9a6 100644 --- a/docs/lidar.md +++ b/docs/lidar.md @@ -94,7 +94,7 @@ By default, the lidar points are not drawn on the viewport. To enable the drawin }, ``` -**Note:** Enabling `DrawDebugPoints` can cause excessive memory usage and crash in releases `v1.3.1`, `v1.3.0`. This has been fixed in master and should work in later releases +**Note:** Enabling `DrawDebugPoints` can cause excessive memory usage and crash in releases `v1.3.1`, `v1.3.0`. This has been fixed in the main branch and should work in later releases ## Client API @@ -112,10 +112,10 @@ Use `getLidarData()` API to retrieve the Lidar data. * Segmentation: The segmentation of each lidar point's collided object ### Python Examples -- [drone_lidar.py](https://github.com/microsoft/AirSim/blob/master/PythonClient/multirotor/drone_lidar.py) -- [car_lidar.py](https://github.com/microsoft/AirSim/blob/master/PythonClient/car/car_lidar.py) -- [sensorframe_lidar_pointcloud.py](https://github.com/microsoft/AirSim/blob/master/PythonClient/multirotor/sensorframe_lidar_pointcloud.py) -- [vehicleframe_lidar_pointcloud.py](https://github.com/microsoft/AirSim/blob/master/PythonClient/multirotor/vehicleframe_lidar_pointcloud.py) +- [drone_lidar.py](https://github.com/microsoft/AirSim/blob/main/PythonClient/multirotor/drone_lidar.py) +- [car_lidar.py](https://github.com/microsoft/AirSim/blob/main/PythonClient/car/car_lidar.py) +- [sensorframe_lidar_pointcloud.py](https://github.com/microsoft/AirSim/blob/main/PythonClient/multirotor/sensorframe_lidar_pointcloud.py) +- [vehicleframe_lidar_pointcloud.py](https://github.com/microsoft/AirSim/blob/main/PythonClient/multirotor/vehicleframe_lidar_pointcloud.py) ## Coming soon * Visualization of lidar data on client side. diff --git a/docs/modify_recording_data.md b/docs/modify_recording_data.md index 3b5d6ce9a3..07035b30a7 100644 --- a/docs/modify_recording_data.md +++ b/docs/modify_recording_data.md @@ -24,7 +24,7 @@ Note that this requires building and using AirSim from source. You can compile a The primary method which fills the data to be stored is [`PawnSimApi::getRecordFileLine`](https://github.com/microsoft/AirSim/blob/880c5541fd4824ee2cd9bb82ca5f611eb1ab236a/Unreal/Plugins/AirSim/Source/PawnSimApi.cpp#L544), it's the base method for all the vehicles, and Car overrides it to log additional data, as can be seen in [`CarPawnSimApi::getRecordFileLine`](https://github.com/microsoft/AirSim/blob/880c5541fd4824ee2cd9bb82ca5f611eb1ab236a/Unreal/Plugins/AirSim/Source/Vehicles/Car/CarPawnSimApi.cpp#L34). -To record additional data for multirotor, you can add a similar method in [MultirotorPawnSimApi.cpp/h](https://github.com/microsoft/AirSim/tree/master/Unreal/Plugins/AirSim/Source/Vehicles/Multirotor) files which overrides the base class implementation and append other data. The currently logged data can also be modified and removed as needed. +To record additional data for multirotor, you can add a similar method in [MultirotorPawnSimApi.cpp/h](https://github.com/microsoft/AirSim/tree/main/Unreal/Plugins/AirSim/Source/Vehicles/Multirotor) files which overrides the base class implementation and append other data. The currently logged data can also be modified and removed as needed. E.g. recording GPS, IMU and Barometer data also for multirotor - diff --git a/docs/multi_vehicle.md b/docs/multi_vehicle.md index deac7ae5ef..372be78f80 100644 --- a/docs/multi_vehicle.md +++ b/docs/multi_vehicle.md @@ -53,9 +53,9 @@ It's as easy as specifying them in [settings.json](settings.md). The `Vehicles` The new APIs since AirSim 1.2 allows you to specify `vehicle_name`. This name corresponds to keys in json settings (for example, Car1 or Drone2 above). -[Example code for cars](https://github.com/microsoft/AirSim/blob/master/PythonClient/car/multi_agent_car.py) +[Example code for cars](https://github.com/microsoft/AirSim/blob/main/PythonClient/car/multi_agent_car.py) -[Example code for multirotors](https://github.com/microsoft/AirSim/blob/master/PythonClient/multirotor/multi_agent_drone.py) +[Example code for multirotors](https://github.com/microsoft/AirSim/blob/main/PythonClient/multirotor/multi_agent_drone.py) Using APIs for multi-vehicles requires specifying the `vehicle_name`, which needs to be hardcoded in the script or requires parsing of the settings file. There's also a simple API `listVehicles()` which returns a list (vector in C++) of strings containing names of the current vehicles. For example, with the above settings for 2 Cars - @@ -70,7 +70,7 @@ Using APIs for multi-vehicles requires specifying the `vehicle_name`, which need ### Creating vehicles at runtime through API -In the latest master of AirSim, the `simAddVehicle` API can be used to create vehicles at runtime. This is useful to create many such vehicles without needing to specify them in the settings. There are some limitations of this currently, described below - +In the latest main branch of AirSim, the `simAddVehicle` API can be used to create vehicles at runtime. This is useful to create many such vehicles without needing to specify them in the settings. There are some limitations of this currently, described below - `simAddVehicle` takes in the following arguments: @@ -84,10 +84,10 @@ Returns: `bool` Whether vehicle was created The usual APIs can be used to control and interact with the vehicle once created, with the `vehicle_name` parameter. Specifying other settings such as additional cameras, etc. isn't possible currently, a future enhancement could be passing JSON string of settings for the vehicle. It also works with the `listVehicles()` API described above, so the vehicles spawned would be included in the list. -For some examples, check out [HelloSpawnedDrones.cpp](https://github.com/microsoft/AirSim/blob/master/HelloSpawnedDrones/HelloSpawnedDrones.cpp) - +For some examples, check out [HelloSpawnedDrones.cpp](https://github.com/microsoft/AirSim/blob/main/HelloSpawnedDrones/HelloSpawnedDrones.cpp) - ![HelloSpawnedDrones](images/HelloSpawnedDrones.gif) -And [runtime_car.py](https://github.com/microsoft/AirSim/tree/master/PythonClient/car/runtime_car.py) - +And [runtime_car.py](https://github.com/microsoft/AirSim/tree/main/PythonClient/car/runtime_car.py) - ![runtime_car](images/simAddVehicle_Car.gif) diff --git a/docs/object_detection.md b/docs/object_detection.md index 670b1a7138..66b506ce72 100644 --- a/docs/object_detection.md +++ b/docs/object_detection.md @@ -29,7 +29,7 @@ DetectionInfo relative_pose = Pose() ``` ## Usage example -Python script [detection.py](https://github.com/microsoft/AirSim/blob/master/PythonClient/detection/detection.py) shows how to set detection parameters and shows the result in OpenCV capture. +Python script [detection.py](https://github.com/microsoft/AirSim/blob/main/PythonClient/detection/detection.py) shows how to set detection parameters and shows the result in OpenCV capture. A minimal example using API with Blocks environment to detect Cylinder objects: ```python diff --git a/docs/orbit.md b/docs/orbit.md index 78209fe7e7..d2ff8ce9f2 100644 --- a/docs/orbit.md +++ b/docs/orbit.md @@ -4,7 +4,7 @@ Moved here from [https://github.com/microsoft/AirSim/wiki/An-Orbit-Trajectory](h Have you ever wanted to fly a nice smooth circular orbit? This can be handy for capturing 3D objects from all sides especially if you get multiple orbits at different altitudes. -So the `PythonClient/multirotor` folder contains a script named [Orbit](https://github.com/microsoft/AirSim/blob/master/PythonClient/multirotor/orbit.py) that will do precisely that. +So the `PythonClient/multirotor` folder contains a script named [Orbit](https://github.com/microsoft/AirSim/blob/main/PythonClient/multirotor/orbit.py) that will do precisely that. See [demo video](https://youtu.be/RFG5CTQi3Us) diff --git a/docs/pfm.md b/docs/pfm.md index f6cd54af2c..20dc2c3f39 100644 --- a/docs/pfm.md +++ b/docs/pfm.md @@ -4,4 +4,4 @@ Pfm (or Portable FloatMap) image format stores image as floating point pixels an One of the good viewer to view this file format is [PfmPad](https://sourceforge.net/projects/pfmpad/). We don't recommend Maverick photo viewer because it doesn't seem to show depth images properly. -AirSim has code to write pfm file for [C++](https://github.com/Microsoft/AirSim/blob/master/AirLib/include/common/common_utils/Utils.hpp#L637) and read as well as write for [Python](https://github.com/Microsoft/AirSim/tree/master/PythonClient//airsim/utils.py#L122). +AirSim has code to write pfm file for [C++](https://github.com/Microsoft/AirSim/blob/main/AirLib/include/common/common_utils/Utils.hpp#L637) and read as well as write for [Python](https://github.com/Microsoft/AirSim/tree/main/PythonClient//airsim/utils.py#L122). diff --git a/docs/point_clouds.md b/docs/point_clouds.md index eb9e06cc19..0923145858 100644 --- a/docs/point_clouds.md +++ b/docs/point_clouds.md @@ -2,7 +2,7 @@ Moved here from [https://github.com/microsoft/AirSim/wiki/Point-Clouds](https://github.com/microsoft/AirSim/wiki/Point-Clouds) -A Python script [point_cloud.py](https://github.com/Microsoft/AirSim/blob/master/PythonClient/multirotor/point_cloud.py) shows how to convert the depth image returned from AirSim into a point cloud. +A Python script [point_cloud.py](https://github.com/Microsoft/AirSim/blob/main/PythonClient/multirotor/point_cloud.py) shows how to convert the depth image returned from AirSim into a point cloud. The following depth image was captured using the Modular Neighborhood environment: diff --git a/docs/px4_build.md b/docs/px4_build.md index 6ae18c967d..e291bb13b1 100644 --- a/docs/px4_build.md +++ b/docs/px4_build.md @@ -14,7 +14,7 @@ Now to build it you will need the right tools. ## PX4 Build tools -The full instructions are available on the [dev.px4.io](https://docs.px4.io/master/en/dev_setup/building_px4.html) website, +The full instructions are available on the [dev.px4.io](https://docs.px4.io/main/en/dev_setup/building_px4.html) website, but we've copied the relevant subset of those instructions here for your convenience. (Note that [BashOnWindows](https://msdn.microsoft.com/en-us/commandline/wsl/install_guide)) can be used to build diff --git a/docs/px4_lockstep.md b/docs/px4_lockstep.md index 04ebc06bca..6437ae809b 100644 --- a/docs/px4_lockstep.md +++ b/docs/px4_lockstep.md @@ -1,7 +1,7 @@ # LockStep The latest version of PX4 supports a new [lockstep -feature](https://docs.px4.io/master/en/simulation/#lockstep-simulation) when communicating with the +feature](https://docs.px4.io/main/en/simulation/#lockstep-simulation) when communicating with the simulator over TCP. Lockstep is an important feature because it synchronizes PX4 and the simulator so they essentially use the same clock time. This makes PX4 behave normally even during unusually long delays in Simulator performance. @@ -42,7 +42,7 @@ in the simulated flight if you look at the updates on screen in realtime. If you are running PX4 in cygwin, there is an [open issue with lockstep](https://github.com/microsoft/AirSim/issues/3415). PX4 is configured to use lockstep by default. To disable this feature, first [disable it in -PX4](https://docs.px4.io/master/en/simulation/#disable-lockstep-simulation): +PX4](https://docs.px4.io/main/en/simulation/#disable-lockstep-simulation): 1. Navigate to `boards/px4/sitl/` in your local PX4 repository 1. Edit `default.cmake` and find the following line: diff --git a/docs/px4_multi_vehicle.md b/docs/px4_multi_vehicle.md index 9d6c6c71e9..d5e1a6e8f5 100644 --- a/docs/px4_multi_vehicle.md +++ b/docs/px4_multi_vehicle.md @@ -70,7 +70,7 @@ API does not require RC, see [`No Remote Control`](px4_sitl.md#No-Remote-Control ## Starting SITL instances with PX4 console -If you want to start your SITL instances while being able to view the PX4 console, you will need to run the shell scripts found [here](https://github.com/microsoft/AirSim/tree/master/PX4Scripts) rather than `sitl_multiple_run.sh`. +If you want to start your SITL instances while being able to view the PX4 console, you will need to run the shell scripts found [here](https://github.com/microsoft/AirSim/tree/main/PX4Scripts) rather than `sitl_multiple_run.sh`. Here is how you would do so: **Note** This script also assumes PX4 is built with `make px4_sitl_default none_iris` as shown [here](px4_sitl.md#setting-up-px4-software-in-loop) before trying to run multiple PX4 instances. @@ -80,8 +80,8 @@ Here is how you would do so: cd PX4 mkdir -p Scripts cd Scripts - wget https://github.com/microsoft/AirSim/raw/master/PX4Scripts/sitl_kill.sh - wget https://github.com/microsoft/AirSim/raw/master/PX4Scripts/run_airsim_sitl.sh + wget https://github.com/microsoft/AirSim/raw/main/PX4Scripts/sitl_kill.sh + wget https://github.com/microsoft/AirSim/raw/main/PX4Scripts/run_airsim_sitl.sh ``` **Note** the shell scripts expect the `Scripts` and `Firmware` directories to be within the same parent directory. Also, you may need to make the scripts executable by running `chmod +x sitl_kill.sh` and `chmod +x run_airsim_sitl.sh`. 2. Run the `sitl_kill.sh` script to kill all active PX4 SITL instances diff --git a/docs/px4_setup.md b/docs/px4_setup.md index 7826accbe5..20cd5974c3 100644 --- a/docs/px4_setup.md +++ b/docs/px4_setup.md @@ -64,7 +64,7 @@ are also enabling `LockStep`, see [PX4 LockStep](px4_lockstep.md) for more infor `Barometer` setting keeps PX4 happy because the default AirSim barometer has a bit too much noise generation. This setting clamps that down a bit which allows PX4 to achieve GPS lock more quickly. -After above setup you should be able to use a remote control (RC) to fly with AirSim. You can usually arm the vehicle by lowering and bringing two sticks of RC together down and in-wards. You don't need QGroundControl after the initial setup. Typically the Stabilized (instead of Manual) mode gives better experience for beginners. See [PX4 Basic Flying Guide](https://docs.px4.io/master/en/flying/basic_flying.html). +After above setup you should be able to use a remote control (RC) to fly with AirSim. You can usually arm the vehicle by lowering and bringing two sticks of RC together down and in-wards. You don't need QGroundControl after the initial setup. Typically the Stabilized (instead of Manual) mode gives better experience for beginners. See [PX4 Basic Flying Guide](https://docs.px4.io/main/en/flying/basic_flying.html). You can also control the drone from [Python APIs](apis.md). diff --git a/docs/px4_sitl.md b/docs/px4_sitl.md index 59b4b2ef69..362f36d186 100644 --- a/docs/px4_sitl.md +++ b/docs/px4_sitl.md @@ -2,7 +2,7 @@ The [PX4](http://dev.px4.io) software provides a "software-in-loop" simulation (SITL) version of their stack that runs in Linux. If you are on Windows then you can use the [Cygwin -Toolchain](https://dev.px4.io/master/en/setup/dev_env_windows_cygwin.html) or you can use the +Toolchain](https://dev.px4.io/main/en/setup/dev_env_windows_cygwin.html) or you can use the [Windows subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10) and follow the PX4 Linux toolchain setup. @@ -12,7 +12,7 @@ instructions](px4_sitl_wsl2.md). **Note** that every time you stop the unreal app you have to restart the `px4` app. 1. From your bash terminal follow [these steps for - Linux](https://docs.px4.io/master/en/dev_setup/dev_env_linux.html) and follow **all** the + Linux](https://docs.px4.io/main/en/dev_setup/dev_env_linux.html) and follow **all** the instructions under `NuttX based hardware` to install prerequisites. We've also included our own copy of the [PX4 build instructions](px4_build.md) which is a bit more concise about what we need exactly. diff --git a/docs/reinforcement_learning.md b/docs/reinforcement_learning.md index 69d9c24c98..fc4003eaeb 100644 --- a/docs/reinforcement_learning.md +++ b/docs/reinforcement_learning.md @@ -12,7 +12,7 @@ In order to use AirSim as a gym environment, we extend and reimplement the base ## RL with Car -[Source code](https://github.com/Microsoft/AirSim/tree/master/PythonClient/reinforcement_learning) +[Source code](https://github.com/Microsoft/AirSim/tree/main/PythonClient/reinforcement_learning) This example works with AirSimNeighborhood environment available in [releases](https://github.com/Microsoft/AirSim/releases). @@ -127,7 +127,7 @@ Note that the simulation needs to be up and running before you execute `dqn_car. ## RL with Quadrotor -[Source code](https://github.com/Microsoft/AirSim/tree/master/PythonClient/reinforcement_learning) +[Source code](https://github.com/Microsoft/AirSim/tree/main/PythonClient/reinforcement_learning) This example works with AirSimMountainLandscape environment available in [releases](https://github.com/Microsoft/AirSim/releases). diff --git a/docs/remote_control.md b/docs/remote_control.md index 70515b0037..8bc8d9685c 100644 --- a/docs/remote_control.md +++ b/docs/remote_control.md @@ -10,14 +10,14 @@ You can either use XBox controller or [FrSky Taranis X9D Plus](https://hobbyking ### Other Devices -AirSim can detect large variety of devices however devices other than above *might* need extra configuration. In future we will add ability to set this config through settings.json. For now, if things are not working then you might want to try workarounds such as [x360ce](http://www.x360ce.com/) or change code in [SimJoystick.cpp file](https://github.com/microsoft/AirSim/blob/master/Unreal/Plugins/AirSim/Source/SimJoyStick/SimJoyStick.cpp#L50). +AirSim can detect large variety of devices however devices other than above *might* need extra configuration. In future we will add ability to set this config through settings.json. For now, if things are not working then you might want to try workarounds such as [x360ce](http://www.x360ce.com/) or change code in [SimJoystick.cpp file](https://github.com/microsoft/AirSim/blob/main/Unreal/Plugins/AirSim/Source/SimJoyStick/SimJoyStick.cpp#L50). ### Note on FrSky Taranis X9D Plus [FrSky Taranis X9D Plus](https://hobbyking.com/en_us/frsky-2-4ghz-accst-taranis-x9d-plus-and-x8r-combo-digital-telemetry-radio-system-mode-2.html) is real UAV remote control with an advantage that it has USB port so it can be directly connected to PC. You can [download AirSim config file](misc/AirSim_FrSkyTaranis.bin) and [follow this tutorial](https://www.youtube.com/watch?v=qe-13Gyb0sw) to import it in your RC. You should then see "sim" model in RC with all channels configured properly. ### Note on Linux -Currently default config on Linux is for using Xbox controller. This means other devices might not work properly. In future we will add ability to configure RC in settings.json but for now you *might* have to change code in [SimJoystick.cpp file](https://github.com/microsoft/AirSim/blob/master/Unreal/Plugins/AirSim/Source/SimJoyStick/SimJoyStick.cpp#L340) to use other devices. +Currently default config on Linux is for using Xbox controller. This means other devices might not work properly. In future we will add ability to configure RC in settings.json but for now you *might* have to change code in [SimJoystick.cpp file](https://github.com/microsoft/AirSim/blob/main/Unreal/Plugins/AirSim/Source/SimJoyStick/SimJoyStick.cpp#L340) to use other devices. ## RC Setup for PX4 diff --git a/docs/sensors.md b/docs/sensors.md index afef8bf158..838abcf5d6 100644 --- a/docs/sensors.md +++ b/docs/sensors.md @@ -29,7 +29,7 @@ If no sensors are specified in the `settings.json`, then the following sensors a ### ComputerVision * None -Behind the scenes, `createDefaultSensorSettings` method in [AirSimSettings.hpp](https://github.com/Microsoft/AirSim/blob/master/AirLib/include/common/AirSimSettings.hpp) sets up the above sensors with their default parameters, depending on the sim mode specified in the `settings.json` file. +Behind the scenes, `createDefaultSensorSettings` method in [AirSimSettings.hpp](https://github.com/Microsoft/AirSim/blob/main/AirLib/include/common/AirSimSettings.hpp) sets up the above sensors with their default parameters, depending on the sim mode specified in the `settings.json` file. ## Configuring the default sensor list @@ -173,7 +173,7 @@ Be default, the points hit by distance sensor are not drawn on the viewport. To ``` ## Sensor APIs -Jump straight to [`hello_drone.py`](https://github.com/Microsoft/AirSim/blob/master/PythonClient/multirotor/hello_drone.py) or [`hello_drone.cpp`](https://github.com/Microsoft/AirSim/blob/master/HelloDrone/main.cpp) for example usage, or see follow below for the full API. +Jump straight to [`hello_drone.py`](https://github.com/Microsoft/AirSim/blob/main/PythonClient/multirotor/hello_drone.py) or [`hello_drone.cpp`](https://github.com/Microsoft/AirSim/blob/main/HelloDrone/main.cpp) for example usage, or see follow below for the full API. ### Barometer ```cpp diff --git a/docs/settings.md b/docs/settings.md index 85ee537bb5..3e37bc1230 100644 --- a/docs/settings.md +++ b/docs/settings.md @@ -321,7 +321,7 @@ The `CaptureSettings` determines how different image types such as scene, depth, For explanation of other settings, please see [this article](https://docs.unrealengine.com/latest/INT/Engine/Rendering/PostProcessEffects/AutomaticExposure/). ### NoiseSettings -The `NoiseSettings` allows to add noise to the specified image type with a goal of simulating camera sensor noise, interference and other artifacts. By default no noise is added, i.e., `Enabled: false`. If you set `Enabled: true` then following different types of noise and interference artifacts are enabled, each can be further tuned using setting. The noise effects are implemented as shader created as post processing material in Unreal Engine called [CameraSensorNoise](https://github.com/Microsoft/AirSim/blob/master/Unreal/Plugins/AirSim/Content/HUDAssets/CameraSensorNoise.uasset). +The `NoiseSettings` allows to add noise to the specified image type with a goal of simulating camera sensor noise, interference and other artifacts. By default no noise is added, i.e., `Enabled: false`. If you set `Enabled: true` then following different types of noise and interference artifacts are enabled, each can be further tuned using setting. The noise effects are implemented as shader created as post processing material in Unreal Engine called [CameraSensorNoise](https://github.com/Microsoft/AirSim/blob/main/Unreal/Plugins/AirSim/Content/HUDAssets/CameraSensorNoise.uasset). Demo of camera noise and interference simulation: @@ -497,7 +497,7 @@ PX4 connection. See [Setting up PX4 Software-in-Loop](px4_sitl.md) for an exampl ### Using ArduPilot -[ArduPilot](https://ardupilot.org/) Copter & Rover vehicles are supported in latest AirSim master & releases `v1.3.0` and later. For settings and how to use, please see [ArduPilot SITL with AirSim](https://ardupilot.org/dev/docs/sitl-with-airsim.html) +[ArduPilot](https://ardupilot.org/) Copter & Rover vehicles are supported in latest AirSim main branch & releases `v1.3.0` and later. For settings and how to use, please see [ArduPilot SITL with AirSim](https://ardupilot.org/dev/docs/sitl-with-airsim.html) ## Other Settings diff --git a/docs/unreal_custenv.md b/docs/unreal_custenv.md index d5c07b9c32..bba72b1845 100644 --- a/docs/unreal_custenv.md +++ b/docs/unreal_custenv.md @@ -100,7 +100,7 @@ By default AirSim prompts user for which vehicle to use. You can easily change t ## Updating Your Environment to Latest Version of AirSim Once you have your environment using above instructions, you should frequently update your local AirSim code to latest version from GitHub. Below are the instructions to do this: -1. First put [clean.bat](https://github.com/Microsoft/AirSim/blob/master/Unreal/Environments/Blocks/clean.bat) (or [clean.sh](https://github.com/Microsoft/AirSim/blob/master/Unreal/Environments/Blocks/clean.sh) for Linux users) in the root folder of your environment. Run this file to clean up all intermediate files in your Unreal project. +1. First put [clean.bat](https://github.com/Microsoft/AirSim/blob/main/Unreal/Environments/Blocks/clean.bat) (or [clean.sh](https://github.com/Microsoft/AirSim/blob/main/Unreal/Environments/Blocks/clean.sh) for Linux users) in the root folder of your environment. Run this file to clean up all intermediate files in your Unreal project. 2. Do `git pull` in your AirSim repo followed by `build.cmd` (or `./build.sh` for Linux users). 3. Replace [your project]/Plugins folder with AirSim/Unreal/Plugins folder. 4. Right click on your .uproject file and chose "Generate Visual Studio project files" option. This is not required for Linux. diff --git a/docs/upgrade_apis.md b/docs/upgrade_apis.md index adb9da0163..036a1616b4 100644 --- a/docs/upgrade_apis.md +++ b/docs/upgrade_apis.md @@ -2,7 +2,7 @@ There have been several API changes in AirSim v1.2 that we hope removes inconsistency, adds future extensibility and presents cleaner interface. Many of these changes are however *breaking changes* which means you will need to modify your client code that talks to AirSim. ## Quicker Way -While most changes you need to do in your client code are fairly easy, a quicker way is simply to take a look at the example code such as [Hello Drone](https://github.com/Microsoft/AirSim/tree/master/PythonClient//multirotor/hello_drone.py)or [Hello Car](https://github.com/Microsoft/AirSim/tree/master/PythonClient//car/hello_car.py) to get gist of changes. +While most changes you need to do in your client code are fairly easy, a quicker way is simply to take a look at the example code such as [Hello Drone](https://github.com/Microsoft/AirSim/tree/main/PythonClient//multirotor/hello_drone.py)or [Hello Car](https://github.com/Microsoft/AirSim/tree/main/PythonClient//car/hello_car.py) to get gist of changes. ## Importing AirSim Instead of, From 481cd229b81a9300da5a43e62a8da622a53b8df4 Mon Sep 17 00:00:00 2001 From: Jonathan Date: Fri, 1 Jul 2022 15:21:04 -0300 Subject: [PATCH 34/50] Revert errors changing master to main in docs --- docs/px4_build.md | 2 +- docs/px4_lockstep.md | 4 ++-- docs/px4_setup.md | 2 +- docs/px4_sitl.md | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/px4_build.md b/docs/px4_build.md index e291bb13b1..6ae18c967d 100644 --- a/docs/px4_build.md +++ b/docs/px4_build.md @@ -14,7 +14,7 @@ Now to build it you will need the right tools. ## PX4 Build tools -The full instructions are available on the [dev.px4.io](https://docs.px4.io/main/en/dev_setup/building_px4.html) website, +The full instructions are available on the [dev.px4.io](https://docs.px4.io/master/en/dev_setup/building_px4.html) website, but we've copied the relevant subset of those instructions here for your convenience. (Note that [BashOnWindows](https://msdn.microsoft.com/en-us/commandline/wsl/install_guide)) can be used to build diff --git a/docs/px4_lockstep.md b/docs/px4_lockstep.md index 6437ae809b..04ebc06bca 100644 --- a/docs/px4_lockstep.md +++ b/docs/px4_lockstep.md @@ -1,7 +1,7 @@ # LockStep The latest version of PX4 supports a new [lockstep -feature](https://docs.px4.io/main/en/simulation/#lockstep-simulation) when communicating with the +feature](https://docs.px4.io/master/en/simulation/#lockstep-simulation) when communicating with the simulator over TCP. Lockstep is an important feature because it synchronizes PX4 and the simulator so they essentially use the same clock time. This makes PX4 behave normally even during unusually long delays in Simulator performance. @@ -42,7 +42,7 @@ in the simulated flight if you look at the updates on screen in realtime. If you are running PX4 in cygwin, there is an [open issue with lockstep](https://github.com/microsoft/AirSim/issues/3415). PX4 is configured to use lockstep by default. To disable this feature, first [disable it in -PX4](https://docs.px4.io/main/en/simulation/#disable-lockstep-simulation): +PX4](https://docs.px4.io/master/en/simulation/#disable-lockstep-simulation): 1. Navigate to `boards/px4/sitl/` in your local PX4 repository 1. Edit `default.cmake` and find the following line: diff --git a/docs/px4_setup.md b/docs/px4_setup.md index 20cd5974c3..7826accbe5 100644 --- a/docs/px4_setup.md +++ b/docs/px4_setup.md @@ -64,7 +64,7 @@ are also enabling `LockStep`, see [PX4 LockStep](px4_lockstep.md) for more infor `Barometer` setting keeps PX4 happy because the default AirSim barometer has a bit too much noise generation. This setting clamps that down a bit which allows PX4 to achieve GPS lock more quickly. -After above setup you should be able to use a remote control (RC) to fly with AirSim. You can usually arm the vehicle by lowering and bringing two sticks of RC together down and in-wards. You don't need QGroundControl after the initial setup. Typically the Stabilized (instead of Manual) mode gives better experience for beginners. See [PX4 Basic Flying Guide](https://docs.px4.io/main/en/flying/basic_flying.html). +After above setup you should be able to use a remote control (RC) to fly with AirSim. You can usually arm the vehicle by lowering and bringing two sticks of RC together down and in-wards. You don't need QGroundControl after the initial setup. Typically the Stabilized (instead of Manual) mode gives better experience for beginners. See [PX4 Basic Flying Guide](https://docs.px4.io/master/en/flying/basic_flying.html). You can also control the drone from [Python APIs](apis.md). diff --git a/docs/px4_sitl.md b/docs/px4_sitl.md index 362f36d186..59b4b2ef69 100644 --- a/docs/px4_sitl.md +++ b/docs/px4_sitl.md @@ -2,7 +2,7 @@ The [PX4](http://dev.px4.io) software provides a "software-in-loop" simulation (SITL) version of their stack that runs in Linux. If you are on Windows then you can use the [Cygwin -Toolchain](https://dev.px4.io/main/en/setup/dev_env_windows_cygwin.html) or you can use the +Toolchain](https://dev.px4.io/master/en/setup/dev_env_windows_cygwin.html) or you can use the [Windows subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10) and follow the PX4 Linux toolchain setup. @@ -12,7 +12,7 @@ instructions](px4_sitl_wsl2.md). **Note** that every time you stop the unreal app you have to restart the `px4` app. 1. From your bash terminal follow [these steps for - Linux](https://docs.px4.io/main/en/dev_setup/dev_env_linux.html) and follow **all** the + Linux](https://docs.px4.io/master/en/dev_setup/dev_env_linux.html) and follow **all** the instructions under `NuttX based hardware` to install prerequisites. We've also included our own copy of the [PX4 build instructions](px4_build.md) which is a bit more concise about what we need exactly. From 5e0e961903f5913bf516fea58031d7f3830d2348 Mon Sep 17 00:00:00 2001 From: Jonathan Date: Fri, 1 Jul 2022 15:40:03 -0300 Subject: [PATCH 35/50] Change master to main in other docs --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- CHANGELOG.md | 2 +- CONTRIBUTING.md | 2 +- GazeboDrone/README.md | 2 +- MavLinkCom/MavLinkMoCap/Readme.md | 2 +- MavLinkCom/README.md | 2 +- PythonClient/README.md | 4 ++-- SUPPORT.md | 2 +- Unity/README.md | 2 +- Unity/UnityDemo/README.md | 2 +- ros/src/airsim_ros_pkgs/README.md | 2 +- ros/src/airsim_tutorial_pkgs/README.md | 2 +- ros2/src/airsim_ros_pkgs/README.md | 2 +- 13 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 01260d75e9..537422de10 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -6,7 +6,7 @@ about: Create a report to help us improve - + ## Bug report diff --git a/CHANGELOG.md b/CHANGELOG.md index 6545cf2c09..cffbb5d544 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,3 @@ # Changelog -This page has moved [here](https://github.com/microsoft/AirSim/blob/master/docs/CHANGELOG.md). \ No newline at end of file +This page has moved [here](https://github.com/microsoft/AirSim/blob/main/docs/CHANGELOG.md). \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 99687b2855..c681a17f92 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,3 +1,3 @@ # Contributing -This page has moved [here](https://github.com/microsoft/AirSim/blob/master/docs/CONTRIBUTING.md). \ No newline at end of file +This page has moved [here](https://github.com/microsoft/AirSim/blob/main/docs/CONTRIBUTING.md). \ No newline at end of file diff --git a/GazeboDrone/README.md b/GazeboDrone/README.md index 22f89a7d6d..1d607013b6 100644 --- a/GazeboDrone/README.md +++ b/GazeboDrone/README.md @@ -1,3 +1,3 @@ # Welcome to GazeboDrone -This page has moved [here](https://github.com/microsoft/AirSim/blob/master/docs/gazebo_drone.md). \ No newline at end of file +This page has moved [here](https://github.com/microsoft/AirSim/blob/main/docs/gazebo_drone.md). \ No newline at end of file diff --git a/MavLinkCom/MavLinkMoCap/Readme.md b/MavLinkCom/MavLinkMoCap/Readme.md index 073408f79f..32d47cdec6 100644 --- a/MavLinkCom/MavLinkMoCap/Readme.md +++ b/MavLinkCom/MavLinkMoCap/Readme.md @@ -1,3 +1,3 @@ # Welcome to MavLinkMoCap -This page has moved [here](https://github.com/microsoft/AirSim/blob/master/docs/mavlinkcom_mocap.md). \ No newline at end of file +This page has moved [here](https://github.com/microsoft/AirSim/blob/main/docs/mavlinkcom_mocap.md). \ No newline at end of file diff --git a/MavLinkCom/README.md b/MavLinkCom/README.md index 6bd67cea31..23560fceb4 100644 --- a/MavLinkCom/README.md +++ b/MavLinkCom/README.md @@ -1,3 +1,3 @@ # Welcome to MavLinkCom -This page has moved [here](https://github.com/microsoft/AirSim/blob/master/docs/mavlinkcom.md). \ No newline at end of file +This page has moved [here](https://github.com/microsoft/AirSim/blob/main/docs/mavlinkcom.md). \ No newline at end of file diff --git a/PythonClient/README.md b/PythonClient/README.md index a5ec115d93..b9e32423db 100644 --- a/PythonClient/README.md +++ b/PythonClient/README.md @@ -3,7 +3,7 @@ This package contains Python APIs for [AirSim](https://github.com/microsoft/airsim). ## How to Use -See examples at [car/hello_car.py](https://github.com/Microsoft/AirSim/blob/master/PythonClient/car/hello_car.py) or [multirotor/hello_drone.py](https://github.com/microsoft/AirSim/blob/master/PythonClient/multirotor/hello_drone.py). +See examples at [car/hello_car.py](https://github.com/Microsoft/AirSim/blob/main/PythonClient/car/hello_car.py) or [multirotor/hello_drone.py](https://github.com/microsoft/AirSim/blob/main/PythonClient/multirotor/hello_drone.py). ## Dependencies This package depends on `msgpack` and would automatically install `msgpack-rpc-python` (this may need administrator/sudo prompt): @@ -16,5 +16,5 @@ Some examples also requires opencv. ## More Info More information on AirSim Python APIs can be found at: -https://github.com/Microsoft/AirSim/blob/master/docs/python.md +https://github.com/Microsoft/AirSim/blob/main/docs/python.md diff --git a/SUPPORT.md b/SUPPORT.md index 4580e60494..be29ec8b41 100644 --- a/SUPPORT.md +++ b/SUPPORT.md @@ -1,3 +1,3 @@ # Support -This page has moved [here](https://github.com/microsoft/AirSim/blob/master/docs/SUPPORT.md). +This page has moved [here](https://github.com/microsoft/AirSim/blob/main/docs/SUPPORT.md). diff --git a/Unity/README.md b/Unity/README.md index c9d5cd3ae8..0cf28e7395 100644 --- a/Unity/README.md +++ b/Unity/README.md @@ -1,3 +1,3 @@ # AirSim on Unity -This page has moved [here](https://github.com/microsoft/AirSim/blob/master/docs/Unity.md) \ No newline at end of file +This page has moved [here](https://github.com/microsoft/AirSim/blob/main/docs/Unity.md) \ No newline at end of file diff --git a/Unity/UnityDemo/README.md b/Unity/UnityDemo/README.md index efadc9e91f..9eca9dd5b4 100644 --- a/Unity/UnityDemo/README.md +++ b/Unity/UnityDemo/README.md @@ -1,6 +1,6 @@ # Unity AirSim Demo -A Unity project to demonstrate the usage of [AirSimAssets](https://github.com/Microsoft/AirSim/tree/master/Unity/UnityDemo) for *Car* & *Multirotor* simulation. +A Unity project to demonstrate the usage of [AirSimAssets](https://github.com/Microsoft/AirSim/tree/main/Unity/UnityDemo) for *Car* & *Multirotor* simulation. ## Usage diff --git a/ros/src/airsim_ros_pkgs/README.md b/ros/src/airsim_ros_pkgs/README.md index 9edb213962..b8566890a8 100644 --- a/ros/src/airsim_ros_pkgs/README.md +++ b/ros/src/airsim_ros_pkgs/README.md @@ -1,3 +1,3 @@ # airsim_ros_pkgs -This page has moved [here](https://github.com/microsoft/AirSim/blob/master/docs/airsim_ros_pkgs.md). \ No newline at end of file +This page has moved [here](https://github.com/microsoft/AirSim/blob/main/docs/airsim_ros_pkgs.md). \ No newline at end of file diff --git a/ros/src/airsim_tutorial_pkgs/README.md b/ros/src/airsim_tutorial_pkgs/README.md index e7a07ea8d1..195b4d180d 100644 --- a/ros/src/airsim_tutorial_pkgs/README.md +++ b/ros/src/airsim_tutorial_pkgs/README.md @@ -1,3 +1,3 @@ # AirSim ROS Tutorials -This page has moved [here](https://github.com/microsoft/AirSim/blob/master/docs/airsim_tutorial_pkgs.md). \ No newline at end of file +This page has moved [here](https://github.com/microsoft/AirSim/blob/main/docs/airsim_tutorial_pkgs.md). \ No newline at end of file diff --git a/ros2/src/airsim_ros_pkgs/README.md b/ros2/src/airsim_ros_pkgs/README.md index 3f32237f5a..101cf96ab7 100755 --- a/ros2/src/airsim_ros_pkgs/README.md +++ b/ros2/src/airsim_ros_pkgs/README.md @@ -1,3 +1,3 @@ # airsim_ros_pkgs -This page has moved [here](https://github.com/microsoft/AirSim/blob/master/docs/airsim_ros_pkgs.md). \ No newline at end of file +This page has moved [here](https://github.com/microsoft/AirSim/blob/main/docs/airsim_ros_pkgs.md). \ No newline at end of file From c5e4bce181f731a27fd0fb99fb6ba5e41f9a1db7 Mon Sep 17 00:00:00 2001 From: Jonathan Date: Fri, 1 Jul 2022 15:54:46 -0300 Subject: [PATCH 36/50] change master to main in code --- .github/workflows/test_docs.yml | 4 ++-- AirLib/include/common/AirSimSettings.hpp | 2 +- Examples/DataCollection/DataCollectorSGM_settings.json | 2 +- Examples/DepthNav/DepthNav_settings.json | 2 +- PythonClient/computer_vision/cv_capture.py | 2 +- PythonClient/computer_vision/cv_mode.py | 2 +- PythonClient/computer_vision/cv_navigate.py | 2 +- PythonClient/computer_vision/getpos.py | 2 +- PythonClient/computer_vision/ground_truth.py | 2 +- PythonClient/computer_vision/objects.py | 2 +- PythonClient/computer_vision/segmentation.py | 2 +- PythonClient/multirotor/multi_agent_drone.py | 2 +- PythonClient/multirotor/opencv_show.py | 2 +- PythonClient/multirotor/sensorframe_lidar_pointcloud.py | 2 +- PythonClient/multirotor/vehicleframe_lidar_pointcloud.py | 2 +- .../UnityDemo/Assets/AirSimAssets/Scripts/InitializeAirSim.cs | 2 +- azure/app/settings.json | 2 +- azure/azure-env-creation/vm-arm-template.json | 2 +- build.cmd | 2 +- docker/settings.json | 2 +- .../airsim_tutorial_pkgs/scripts/multi_drone_json_creator.py | 2 +- ros/src/airsim_tutorial_pkgs/settings/car.json | 2 +- .../settings/front_stereo_and_center_mono.json | 2 +- ros/src/airsim_tutorial_pkgs/settings/twenty_five_drones.json | 2 +- .../settings/two_drones_camera_lidar_imu.json | 2 +- 25 files changed, 26 insertions(+), 26 deletions(-) diff --git a/.github/workflows/test_docs.yml b/.github/workflows/test_docs.yml index 7e43a4d07a..354315126d 100644 --- a/.github/workflows/test_docs.yml +++ b/.github/workflows/test_docs.yml @@ -37,10 +37,10 @@ jobs: - name: Build AirSim Documentation run: ./build_docs.sh - # Only on commits to 'master' branch + # Only on commits to 'main' branch - name: Deploy uses: peaceiris/actions-gh-pages@v3 - if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }} + if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ./build_docs diff --git a/AirLib/include/common/AirSimSettings.hpp b/AirLib/include/common/AirSimSettings.hpp index 7977813ad4..e5442ff223 100644 --- a/AirLib/include/common/AirSimSettings.hpp +++ b/AirLib/include/common/AirSimSettings.hpp @@ -471,7 +471,7 @@ namespace airlib Settings& settings_json = Settings::singleton(); //write some settings_json in new file otherwise the string "null" is written if all settings_json are empty - settings_json.setString("SeeDocsAt", "https://github.com/Microsoft/AirSim/blob/master/docs/settings.md"); + settings_json.setString("SeeDocsAt", "https://github.com/Microsoft/AirSim/blob/main/docs/settings.md"); settings_json.setDouble("SettingsVersion", 1.2); std::string settings_filename = Settings::getUserDirectoryFullPath("settings.json"); diff --git a/Examples/DataCollection/DataCollectorSGM_settings.json b/Examples/DataCollection/DataCollectorSGM_settings.json index 47002ea8a9..8f074a4b18 100644 --- a/Examples/DataCollection/DataCollectorSGM_settings.json +++ b/Examples/DataCollection/DataCollectorSGM_settings.json @@ -1,5 +1,5 @@ { - "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/master/docs/settings.md", + "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/main/docs/settings.md", "SettingsVersion": 1.2, "SimMode": "ComputerVision", "CameraDefaults": { diff --git a/Examples/DepthNav/DepthNav_settings.json b/Examples/DepthNav/DepthNav_settings.json index 686f697349..f8f79d5bbd 100644 --- a/Examples/DepthNav/DepthNav_settings.json +++ b/Examples/DepthNav/DepthNav_settings.json @@ -1,5 +1,5 @@ { - "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/master/docs/settings.md", + "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/main/docs/settings.md", "SettingsVersion": 1.2, "SimMode": "ComputerVision", "CameraDefaults": { diff --git a/PythonClient/computer_vision/cv_capture.py b/PythonClient/computer_vision/cv_capture.py index 1ee625f82b..2701ce3009 100644 --- a/PythonClient/computer_vision/cv_capture.py +++ b/PythonClient/computer_vision/cv_capture.py @@ -1,5 +1,5 @@ # In settings.json first activate computer vision mode: -# https://github.com/Microsoft/AirSim/blob/master/docs/image_apis.md#computer-vision-mode +# https://github.com/Microsoft/AirSim/blob/main/docs/image_apis.md#computer-vision-mode import setup_path import airsim diff --git a/PythonClient/computer_vision/cv_mode.py b/PythonClient/computer_vision/cv_mode.py index 66bca0c97a..3c05e08709 100644 --- a/PythonClient/computer_vision/cv_mode.py +++ b/PythonClient/computer_vision/cv_mode.py @@ -1,5 +1,5 @@ # In settings.json first activate computer vision mode: -# https://github.com/Microsoft/AirSim/blob/master/docs/image_apis.md#computer-vision-mode +# https://github.com/Microsoft/AirSim/blob/main/docs/image_apis.md#computer-vision-mode import setup_path import airsim diff --git a/PythonClient/computer_vision/cv_navigate.py b/PythonClient/computer_vision/cv_navigate.py index 2a9bd5c113..592190f1a6 100644 --- a/PythonClient/computer_vision/cv_navigate.py +++ b/PythonClient/computer_vision/cv_navigate.py @@ -1,6 +1,6 @@ # In settings.json first activate computer vision mode: -# https://github.com/Microsoft/AirSim/blob/master/docs/image_apis.md#computer-vision-mode +# https://github.com/Microsoft/AirSim/blob/main/docs/image_apis.md#computer-vision-mode import setup_path import airsim diff --git a/PythonClient/computer_vision/getpos.py b/PythonClient/computer_vision/getpos.py index 8304d429ee..52783e744e 100644 --- a/PythonClient/computer_vision/getpos.py +++ b/PythonClient/computer_vision/getpos.py @@ -1,5 +1,5 @@ # In settings.json first activate computer vision mode: -# https://github.com/Microsoft/AirSim/blob/master/docs/image_apis.md#computer-vision-mode +# https://github.com/Microsoft/AirSim/blob/main/docs/image_apis.md#computer-vision-mode import setup_path import airsim diff --git a/PythonClient/computer_vision/ground_truth.py b/PythonClient/computer_vision/ground_truth.py index 5e04f12622..32c63796c6 100644 --- a/PythonClient/computer_vision/ground_truth.py +++ b/PythonClient/computer_vision/ground_truth.py @@ -1,5 +1,5 @@ # In settings.json first activate computer vision mode: -# https://github.com/Microsoft/AirSim/blob/master/docs/image_apis.md#computer-vision-mode +# https://github.com/Microsoft/AirSim/blob/main/docs/image_apis.md#computer-vision-mode import setup_path import airsim diff --git a/PythonClient/computer_vision/objects.py b/PythonClient/computer_vision/objects.py index 09f61831cb..f5356c31cf 100644 --- a/PythonClient/computer_vision/objects.py +++ b/PythonClient/computer_vision/objects.py @@ -1,5 +1,5 @@ # In settings.json first activate computer vision mode: -# https://github.com/Microsoft/AirSim/blob/master/docs/image_apis.md#computer-vision-mode +# https://github.com/Microsoft/AirSim/blob/main/docs/image_apis.md#computer-vision-mode import setup_path import airsim diff --git a/PythonClient/computer_vision/segmentation.py b/PythonClient/computer_vision/segmentation.py index 520dfa0270..8a6a550fb5 100644 --- a/PythonClient/computer_vision/segmentation.py +++ b/PythonClient/computer_vision/segmentation.py @@ -1,5 +1,5 @@ # In settings.json first activate computer vision mode: -# https://github.com/Microsoft/AirSim/blob/master/docs/image_apis.md#computer-vision-mode +# https://github.com/Microsoft/AirSim/blob/main/docs/image_apis.md#computer-vision-mode import airsim import cv2 diff --git a/PythonClient/multirotor/multi_agent_drone.py b/PythonClient/multirotor/multi_agent_drone.py index bfd044c3f2..2338b14962 100644 --- a/PythonClient/multirotor/multi_agent_drone.py +++ b/PythonClient/multirotor/multi_agent_drone.py @@ -9,7 +9,7 @@ # Use below in settings.json with Blocks environment """ { - "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/master/docs/settings.md", + "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/main/docs/settings.md", "SettingsVersion": 1.2, "SimMode": "Multirotor", "ClockSpeed": 1, diff --git a/PythonClient/multirotor/opencv_show.py b/PythonClient/multirotor/opencv_show.py index e8efd1279b..75a5e48627 100644 --- a/PythonClient/multirotor/opencv_show.py +++ b/PythonClient/multirotor/opencv_show.py @@ -1,5 +1,5 @@ # In settings.json first activate computer vision mode: -# https://github.com/Microsoft/AirSim/blob/master/docs/image_apis.md#computer-vision-mode +# https://github.com/Microsoft/AirSim/blob/main/docs/image_apis.md#computer-vision-mode import setup_path import airsim diff --git a/PythonClient/multirotor/sensorframe_lidar_pointcloud.py b/PythonClient/multirotor/sensorframe_lidar_pointcloud.py index 12af0be383..10e11d41a7 100644 --- a/PythonClient/multirotor/sensorframe_lidar_pointcloud.py +++ b/PythonClient/multirotor/sensorframe_lidar_pointcloud.py @@ -3,7 +3,7 @@ # Sample settings.json used for this script: ''' { - "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/master/docs/settings_json.md", + "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/main/docs/settings_json.md", "SettingsVersion": 1.2, "SimMode": "Multirotor", diff --git a/PythonClient/multirotor/vehicleframe_lidar_pointcloud.py b/PythonClient/multirotor/vehicleframe_lidar_pointcloud.py index 3aa92b9508..e4f50bf7e4 100644 --- a/PythonClient/multirotor/vehicleframe_lidar_pointcloud.py +++ b/PythonClient/multirotor/vehicleframe_lidar_pointcloud.py @@ -3,7 +3,7 @@ # Sample settings.json used for this script: ''' { - "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/master/docs/settings_json.md", + "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/main/docs/settings_json.md", "SettingsVersion": 1.2, "SimMode": "Multirotor", diff --git a/Unity/UnityDemo/Assets/AirSimAssets/Scripts/InitializeAirSim.cs b/Unity/UnityDemo/Assets/AirSimAssets/Scripts/InitializeAirSim.cs index b2691380ee..4bde3dfa28 100644 --- a/Unity/UnityDemo/Assets/AirSimAssets/Scripts/InitializeAirSim.cs +++ b/Unity/UnityDemo/Assets/AirSimAssets/Scripts/InitializeAirSim.cs @@ -90,7 +90,7 @@ private static bool CreateSettingsFileWithDefaultValues(string fileName) else Directory.CreateDirectory(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "AirSim")); - string content = "{\n \"SimMode\" : \"\", \n \"SettingsVersion\" : 1.2, \n \"SeeDocsAt\" : \"https://github.com/Microsoft/AirSim/blob/master/docs/settings.md\"\n}"; + string content = "{\n \"SimMode\" : \"\", \n \"SettingsVersion\" : 1.2, \n \"SeeDocsAt\" : \"https://github.com/Microsoft/AirSim/blob/main/docs/settings.md\"\n}"; //settings file created at Documents\AirSim with name "setting.json". StreamWriter writer = new StreamWriter(File.Open(fileName, FileMode.OpenOrCreate, FileAccess.Write)); writer.WriteLine(content); diff --git a/azure/app/settings.json b/azure/app/settings.json index 44b5a20009..ecd1e995a8 100644 --- a/azure/app/settings.json +++ b/azure/app/settings.json @@ -1,5 +1,5 @@ { - "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/master/docs/settings_json.md", + "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/main/docs/settings_json.md", "SettingsVersion": 1.2, "SimMode": "Multirotor", "ClockSpeed": 1.0, diff --git a/azure/azure-env-creation/vm-arm-template.json b/azure/azure-env-creation/vm-arm-template.json index e87babba6d..7e7ddea9ca 100644 --- a/azure/azure-env-creation/vm-arm-template.json +++ b/azure/azure-env-creation/vm-arm-template.json @@ -39,7 +39,7 @@ "metadata": { "description": "Location of the setup script" }, - "defaultValue": "https://raw.githubusercontent.com/microsoft/airsim/master/azure/azure-env-creation" + "defaultValue": "https://raw.githubusercontent.com/microsoft/airsim/main/azure/azure-env-creation" }, "ScriptFileName": { "type": "string", diff --git a/build.cmd b/build.cmd index d75ca2b419..a3c1f37cf5 100644 --- a/build.cmd +++ b/build.cmd @@ -17,7 +17,7 @@ if "%VisualStudioVersion%" lss "17.0" ( echo( echo Hello there! We just upgraded AirSim to Unreal Engine 4.27 and Visual Studio 2022. echo Here are few easy steps for upgrade so everything is new and shiny: - echo https://github.com/Microsoft/AirSim/blob/master/docs/unreal_upgrade.md + echo https://github.com/Microsoft/AirSim/blob/main/docs/unreal_upgrade.md goto :buildfailed_nomsg ) diff --git a/docker/settings.json b/docker/settings.json index 8d64573241..25e4856dc3 100644 --- a/docker/settings.json +++ b/docker/settings.json @@ -1,5 +1,5 @@ { - "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/master/docs/settings_json.md", + "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/main/docs/settings_json.md", "SettingsVersion": 1.2, "SimMode": "Multirotor", "ClockSpeed": 1.0, diff --git a/ros/src/airsim_tutorial_pkgs/scripts/multi_drone_json_creator.py b/ros/src/airsim_tutorial_pkgs/scripts/multi_drone_json_creator.py index 66ff981937..7a7dca6cb2 100644 --- a/ros/src/airsim_tutorial_pkgs/scripts/multi_drone_json_creator.py +++ b/ros/src/airsim_tutorial_pkgs/scripts/multi_drone_json_creator.py @@ -28,7 +28,7 @@ def __init__(self, sim_mode="Multirotor"): self.data = {} def add_minimal(self): - self.data["SeeDocsAt"] = "https://github.com/Microsoft/AirSim/blob/master/docs/settings.md" + self.data["SeeDocsAt"] = "https://github.com/Microsoft/AirSim/blob/main/docs/settings.md" self.data["SettingsVersion"] = 1.2 self.data["SimMode"] = self.sim_mode #"Multirotor" self.data["ClockSpeed"] = 1 diff --git a/ros/src/airsim_tutorial_pkgs/settings/car.json b/ros/src/airsim_tutorial_pkgs/settings/car.json index 5969b9dc96..c5efb8552b 100644 --- a/ros/src/airsim_tutorial_pkgs/settings/car.json +++ b/ros/src/airsim_tutorial_pkgs/settings/car.json @@ -1,5 +1,5 @@ { - "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/master/docs/settings.md", + "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/main/docs/settings.md", "SettingsVersion": 1.2, "SimMode": "Car", "ViewMode": "SpringArmChase", diff --git a/ros/src/airsim_tutorial_pkgs/settings/front_stereo_and_center_mono.json b/ros/src/airsim_tutorial_pkgs/settings/front_stereo_and_center_mono.json index 5672ffa357..435d951848 100644 --- a/ros/src/airsim_tutorial_pkgs/settings/front_stereo_and_center_mono.json +++ b/ros/src/airsim_tutorial_pkgs/settings/front_stereo_and_center_mono.json @@ -1,5 +1,5 @@ { - "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/master/docs/settings.md", + "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/main/docs/settings.md", "SettingsVersion": 1.2, "SimMode": "Multirotor", "ViewMode": "SpringArmChase", diff --git a/ros/src/airsim_tutorial_pkgs/settings/twenty_five_drones.json b/ros/src/airsim_tutorial_pkgs/settings/twenty_five_drones.json index 998f74a0fd..e4f45882ca 100644 --- a/ros/src/airsim_tutorial_pkgs/settings/twenty_five_drones.json +++ b/ros/src/airsim_tutorial_pkgs/settings/twenty_five_drones.json @@ -1,6 +1,6 @@ { "ClockSpeed": 1, - "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/master/docs/settings.md", + "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/main/docs/settings.md", "SettingsVersion": 1.2, "SimMode": "Multirotor", "Vehicles": { diff --git a/ros/src/airsim_tutorial_pkgs/settings/two_drones_camera_lidar_imu.json b/ros/src/airsim_tutorial_pkgs/settings/two_drones_camera_lidar_imu.json index 8c48ab125c..7cb3fe1d95 100644 --- a/ros/src/airsim_tutorial_pkgs/settings/two_drones_camera_lidar_imu.json +++ b/ros/src/airsim_tutorial_pkgs/settings/two_drones_camera_lidar_imu.json @@ -1,6 +1,6 @@ { "ClockSpeed": 1, - "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/master/docs/settings.md", + "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/main/docs/settings.md", "SettingsVersion": 1.2, "SimMode": "Multirotor", "Vehicles": { From eec7b64ca2dc97a3b48ed1e7a244aafefab43501 Mon Sep 17 00:00:00 2001 From: talha-opteran <87808325+talha-opteran@users.noreply.github.com> Date: Sat, 2 Jul 2022 01:44:20 +0100 Subject: [PATCH 37/50] Fix load level for UE editor Current method to load level may work for a packaged binary but does not work in the UE editor where it will infinitely load the requested level. This PR adds a check to make sure the current level is not reloaded. --- .../Plugins/AirSim/Source/AirBlueprintLib.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/Unreal/Plugins/AirSim/Source/AirBlueprintLib.cpp b/Unreal/Plugins/AirSim/Source/AirBlueprintLib.cpp index 41fab675b5..d67e55bd82 100644 --- a/Unreal/Plugins/AirSim/Source/AirBlueprintLib.cpp +++ b/Unreal/Plugins/AirSim/Source/AirBlueprintLib.cpp @@ -76,11 +76,20 @@ void UAirBlueprintLib::setSimulatePhysics(AActor* actor, bool simulate_physics) bool UAirBlueprintLib::loadLevel(UObject* context, const FString& level_name) { - FString LongPackageName; - const bool success = FPackageName::SearchForPackageOnDisk(level_name, &LongPackageName); - if (success) { - context->GetWorld()->SetNewWorldOrigin(FIntVector(0, 0, 0)); - UGameplayStatics::OpenLevel(context->GetWorld(), FName(*LongPackageName), true); + + bool success{false}; + // Get name of current level + auto currMap = context->GetWorld()->GetMapName(); + currMap.RemoveFromStart(context->GetWorld()->StreamingLevelsPrefix); + // Only load new level if different from current level + if (!currMap.Equals((level_name))) + { + FString LongPackageName; + success = FPackageName::SearchForPackageOnDisk(level_name, &LongPackageName); + if (success) { + context->GetWorld()->SetNewWorldOrigin(FIntVector(0, 0, 0)); + UGameplayStatics::OpenLevel(context->GetWorld(), FName(*LongPackageName), true); + } } return success; } From c57d16be476bf636c7263071fbda5e9a2d6d694b Mon Sep 17 00:00:00 2001 From: Arjun Sharda <77706434+ArjunSharda@users.noreply.github.com> Date: Mon, 4 Jul 2022 09:51:43 -0500 Subject: [PATCH 38/50] Update test_windows.yml --- .github/workflows/test_windows.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_windows.yml b/.github/workflows/test_windows.yml index 659ecf47e9..80acfc2ca4 100644 --- a/.github/workflows/test_windows.yml +++ b/.github/workflows/test_windows.yml @@ -9,7 +9,7 @@ jobs: # Steps represent a sequence of tasks that will be executed as part of the job steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Enable Developer Command Prompt uses: ilammy/msvc-dev-cmd@v1 From fb1b198604733913b0c271b09008de0dd6c51752 Mon Sep 17 00:00:00 2001 From: Arjun Sharda <77706434+ArjunSharda@users.noreply.github.com> Date: Mon, 4 Jul 2022 09:51:53 -0500 Subject: [PATCH 39/50] Update test_macos.yml --- .github/workflows/test_macos.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_macos.yml b/.github/workflows/test_macos.yml index 147247b507..7259ebc9e8 100644 --- a/.github/workflows/test_macos.yml +++ b/.github/workflows/test_macos.yml @@ -12,7 +12,7 @@ jobs: # Steps represent a sequence of tasks that will be executed as part of the job steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Setup run: ./setup.sh From 026a22f286566e541437a3b6feaf31106083447d Mon Sep 17 00:00:00 2001 From: Arjun Sharda <77706434+ArjunSharda@users.noreply.github.com> Date: Mon, 4 Jul 2022 09:52:04 -0500 Subject: [PATCH 40/50] Update clang_format.yml --- .github/workflows/clang_format.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/clang_format.yml b/.github/workflows/clang_format.yml index c2dd6cddd9..c6b7e00211 100644 --- a/.github/workflows/clang_format.yml +++ b/.github/workflows/clang_format.yml @@ -5,7 +5,7 @@ jobs: name: Formatting Check runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Run clang-format style check for C/C++ programs. uses: jidicula/clang-format-action@v4.4.1 with: From a1eae1f8e41d57515cddf0298e2d0a38fcd0eedd Mon Sep 17 00:00:00 2001 From: Arjun Sharda <77706434+ArjunSharda@users.noreply.github.com> Date: Mon, 4 Jul 2022 09:52:19 -0500 Subject: [PATCH 41/50] Update test_ubuntu.yml --- .github/workflows/test_ubuntu.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_ubuntu.yml b/.github/workflows/test_ubuntu.yml index 9a4348ca6b..446a9579f5 100644 --- a/.github/workflows/test_ubuntu.yml +++ b/.github/workflows/test_ubuntu.yml @@ -11,7 +11,7 @@ jobs: os: [ubuntu-18.04, ubuntu-20.04] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Setup run: ./setup.sh From 3b54aaa26195c7f09e8096d0e05cf444065cdc03 Mon Sep 17 00:00:00 2001 From: Arjun Sharda <77706434+ArjunSharda@users.noreply.github.com> Date: Mon, 4 Jul 2022 09:53:32 -0500 Subject: [PATCH 42/50] Update test_docs.yml --- .github/workflows/test_docs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test_docs.yml b/.github/workflows/test_docs.yml index 354315126d..587740bf57 100644 --- a/.github/workflows/test_docs.yml +++ b/.github/workflows/test_docs.yml @@ -8,10 +8,10 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Setup Python - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: '3.7' architecture: 'x64' From f5b33624871af2eda08e2cbe00b0d244449ace21 Mon Sep 17 00:00:00 2001 From: talha-opteran <87808325+talha-opteran@users.noreply.github.com> Date: Mon, 4 Jul 2022 16:34:38 +0100 Subject: [PATCH 43/50] Capture requested environment in settings.json --- Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.cpp b/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.cpp index 54b3c464e9..2b85af5aaf 100644 --- a/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.cpp +++ b/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.cpp @@ -22,9 +22,9 @@ void ASimHUD::BeginPlay() try { UAirBlueprintLib::OnBeginPlay(); + initializeSettings(); loadLevel(); - initializeSettings(); setUnrealEngineSettings(); createSimMode(); createMainWidget(); From 6ed09cdc3c5877ad7953123e50c91794d07a1650 Mon Sep 17 00:00:00 2001 From: talha-opteran <87808325+talha-opteran@users.noreply.github.com> Date: Thu, 7 Jul 2022 11:09:35 +0100 Subject: [PATCH 44/50] Fix clang errors --- Unreal/Plugins/AirSim/Source/AirBlueprintLib.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Unreal/Plugins/AirSim/Source/AirBlueprintLib.cpp b/Unreal/Plugins/AirSim/Source/AirBlueprintLib.cpp index d67e55bd82..62d78e0241 100644 --- a/Unreal/Plugins/AirSim/Source/AirBlueprintLib.cpp +++ b/Unreal/Plugins/AirSim/Source/AirBlueprintLib.cpp @@ -77,12 +77,12 @@ void UAirBlueprintLib::setSimulatePhysics(AActor* actor, bool simulate_physics) bool UAirBlueprintLib::loadLevel(UObject* context, const FString& level_name) { - bool success{false}; + bool success{ false }; // Get name of current level auto currMap = context->GetWorld()->GetMapName(); currMap.RemoveFromStart(context->GetWorld()->StreamingLevelsPrefix); // Only load new level if different from current level - if (!currMap.Equals((level_name))) + if (!currMap.Equals(level_name)) { FString LongPackageName; success = FPackageName::SearchForPackageOnDisk(level_name, &LongPackageName); From ef96be5b551b2b05053430a53a1faada3f247915 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Thu, 7 Jul 2022 14:06:31 +0300 Subject: [PATCH 45/50] Add ShowLosDebugLines to settings.md --- docs/settings.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/settings.md b/docs/settings.md index 85ee537bb5..9071e8813e 100644 --- a/docs/settings.md +++ b/docs/settings.md @@ -51,6 +51,7 @@ Below are complete list of settings available along with their default values. I "ApiServerPort": 41451, "RecordUIVisible": true, "LogMessagesVisible": true, + "ShowLosDebugLines": false, "ViewMode": "", "RpcEnabled": true, "EngineSound": true, From 5fbd6d0d2d3d31a9590de3ebdc36bc272237ebb1 Mon Sep 17 00:00:00 2001 From: talha-opteran <87808325+talha-opteran@users.noreply.github.com> Date: Fri, 8 Jul 2022 10:35:08 +0100 Subject: [PATCH 46/50] Prevent a MavLink connection being made if a non-default map is requested on launch --- Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.cpp | 5 ++++- Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.h | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.cpp b/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.cpp index 2b85af5aaf..147e9ec8ef 100644 --- a/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.cpp +++ b/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.cpp @@ -25,6 +25,9 @@ void ASimHUD::BeginPlay() initializeSettings(); loadLevel(); + // Prevent a MavLink connection being established if changing levels + if (map_changed_) return; + setUnrealEngineSettings(); createSimMode(); createMainWidget(); @@ -253,7 +256,7 @@ std::string ASimHUD::getSimModeFromUser() void ASimHUD::loadLevel() { - UAirBlueprintLib::RunCommandOnGameThread([&]() { UAirBlueprintLib::loadLevel(this->GetWorld(), FString(AirSimSettings::singleton().level_name.c_str())); }, true); + UAirBlueprintLib::RunCommandOnGameThread([&]() { this->map_changed_ = UAirBlueprintLib::loadLevel(this->GetWorld(), FString(AirSimSettings::singleton().level_name.c_str())); }, true); } void ASimHUD::createSimMode() diff --git a/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.h b/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.h index cc4df14f7b..75ef7bc274 100644 --- a/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.h +++ b/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.h @@ -73,4 +73,5 @@ class AIRSIM_API ASimHUD : public AHUD ASimModeBase* simmode_; APIPCamera* subwindow_cameras_[AirSimSettings::kSubwindowCount]; + bool map_changed_; }; From ebe26a689c3f0990546105cab276d2127002c792 Mon Sep 17 00:00:00 2001 From: Jonathan Date: Sun, 17 Jul 2022 10:05:13 -0300 Subject: [PATCH 47/50] Fix clang format --- Unreal/Plugins/AirSim/Source/AirBlueprintLib.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Unreal/Plugins/AirSim/Source/AirBlueprintLib.cpp b/Unreal/Plugins/AirSim/Source/AirBlueprintLib.cpp index 62d78e0241..cc8dcb3112 100644 --- a/Unreal/Plugins/AirSim/Source/AirBlueprintLib.cpp +++ b/Unreal/Plugins/AirSim/Source/AirBlueprintLib.cpp @@ -76,14 +76,13 @@ void UAirBlueprintLib::setSimulatePhysics(AActor* actor, bool simulate_physics) bool UAirBlueprintLib::loadLevel(UObject* context, const FString& level_name) { - + bool success{ false }; // Get name of current level auto currMap = context->GetWorld()->GetMapName(); currMap.RemoveFromStart(context->GetWorld()->StreamingLevelsPrefix); // Only load new level if different from current level - if (!currMap.Equals(level_name)) - { + if (!currMap.Equals(level_name)) { FString LongPackageName; success = FPackageName::SearchForPackageOnDisk(level_name, &LongPackageName); if (success) { From 404c50d1a0adaa307729aa60394959f1cc8f68a9 Mon Sep 17 00:00:00 2001 From: Jonathan Date: Sun, 17 Jul 2022 10:36:20 -0300 Subject: [PATCH 48/50] AirSim v1.8.1 --- PythonClient/airsim/__init__.py | 2 +- Unreal/Plugins/AirSim/AirSim.uplugin | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/PythonClient/airsim/__init__.py b/PythonClient/airsim/__init__.py index a11c8fe3d0..17f3acac11 100644 --- a/PythonClient/airsim/__init__.py +++ b/PythonClient/airsim/__init__.py @@ -2,4 +2,4 @@ from .utils import * from .types import * -__version__ = "1.7.0" +__version__ = "1.8.1" diff --git a/Unreal/Plugins/AirSim/AirSim.uplugin b/Unreal/Plugins/AirSim/AirSim.uplugin index 5505563443..8d0420b2b2 100644 --- a/Unreal/Plugins/AirSim/AirSim.uplugin +++ b/Unreal/Plugins/AirSim/AirSim.uplugin @@ -1,7 +1,7 @@ { "FileVersion" : 3, - "Version" : "1.7.0", - "VersionName": "1.7.0", + "Version" : "1.8.1", + "VersionName": "1.8.1", "FriendlyName": "AirSim", "Description": "AirSim - Autonomous Aerial Vehicles Simulator Plugin", "Category" : "Science", From b1713f4c4bba56b02637438795a3e27da0364108 Mon Sep 17 00:00:00 2001 From: Paul Stubbs Date: Mon, 18 Jul 2022 09:17:14 +0100 Subject: [PATCH 49/50] Update README.md Updated Readme with Microsoft Project AirSim announcement. --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index e6b45b0eda..15f9114a8f 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,9 @@ +## AirSim announcement: This repository will be archived in the coming year + +In 2017 Microsoft Research created AirSim as a simulation platform for AI research and experimentation. Over the span of five years, this research project has served its purpose—and gained a lot of ground—as a common way to share research code and test new ideas around aerial AI development and simulation. Additionally, time has yielded advancements in the way we apply technology to the real world, particularly through aerial mobility and autonomous systems. For example, drone delivery is no longer a sci-fi storyline—it’s a business reality, which means there are new needs to be met. We’ve learned a lot in the process, and we want to thank this community for your engagement along the way. + +In the spirit of forward momentum, we will be releasing a new simulation platform in the coming year and subsequently archiving the original 2017 AirSim. Users will still have access to the original AirSim code beyond that point, but no further updates will be made, effective immediately. Instead, we will focus our efforts on a new product, Microsoft Project AirSim, to meet the growing needs of the aerospace industry. Project AirSim will provide an end-to-end platform for safely developing and testing aerial autonomy through simulation. Users will benefit from the safety, code review, testing, advanced simulation, and AI capabilities that are uniquely available in a commercial product. As we get closer to the release of Project AirSim, there will be learning tools and features available to help you migrate to the new platform and to guide you through the product. To learn more about building aerial autonomy with the new Project AirSim, visit [https://aka.ms/exploreprojectairsim](https://aka.ms/exploreprojectairsim). + # Welcome to AirSim AirSim is a simulator for drones, cars and more, built on [Unreal Engine](https://www.unrealengine.com/) (we now also have an experimental [Unity](https://unity3d.com/) release). It is open-source, cross platform, and supports software-in-the-loop simulation with popular flight controllers such as PX4 & ArduPilot and hardware-in-loop with PX4 for physically and visually realistic simulations. It is developed as an Unreal plugin that can simply be dropped into any Unreal environment. Similarly, we have an experimental release for a Unity plugin. From 6688d27d3712c2a9c824ababec7a2703475b6628 Mon Sep 17 00:00:00 2001 From: Paul Stubbs Date: Thu, 21 Jul 2022 07:16:09 +0100 Subject: [PATCH 50/50] Update README.md Updated link directly to main Project AirSim page. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 15f9114a8f..826a13a7f9 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ In 2017 Microsoft Research created AirSim as a simulation platform for AI research and experimentation. Over the span of five years, this research project has served its purpose—and gained a lot of ground—as a common way to share research code and test new ideas around aerial AI development and simulation. Additionally, time has yielded advancements in the way we apply technology to the real world, particularly through aerial mobility and autonomous systems. For example, drone delivery is no longer a sci-fi storyline—it’s a business reality, which means there are new needs to be met. We’ve learned a lot in the process, and we want to thank this community for your engagement along the way. -In the spirit of forward momentum, we will be releasing a new simulation platform in the coming year and subsequently archiving the original 2017 AirSim. Users will still have access to the original AirSim code beyond that point, but no further updates will be made, effective immediately. Instead, we will focus our efforts on a new product, Microsoft Project AirSim, to meet the growing needs of the aerospace industry. Project AirSim will provide an end-to-end platform for safely developing and testing aerial autonomy through simulation. Users will benefit from the safety, code review, testing, advanced simulation, and AI capabilities that are uniquely available in a commercial product. As we get closer to the release of Project AirSim, there will be learning tools and features available to help you migrate to the new platform and to guide you through the product. To learn more about building aerial autonomy with the new Project AirSim, visit [https://aka.ms/exploreprojectairsim](https://aka.ms/exploreprojectairsim). +In the spirit of forward momentum, we will be releasing a new simulation platform in the coming year and subsequently archiving the original 2017 AirSim. Users will still have access to the original AirSim code beyond that point, but no further updates will be made, effective immediately. Instead, we will focus our efforts on a new product, Microsoft Project AirSim, to meet the growing needs of the aerospace industry. Project AirSim will provide an end-to-end platform for safely developing and testing aerial autonomy through simulation. Users will benefit from the safety, code review, testing, advanced simulation, and AI capabilities that are uniquely available in a commercial product. As we get closer to the release of Project AirSim, there will be learning tools and features available to help you migrate to the new platform and to guide you through the product. To learn more about building aerial autonomy with the new Project AirSim, visit [https://aka.ms/projectairsim](https://aka.ms/projectairsim). # Welcome to AirSim

EFs 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 e;E0C Date: Mon, 30 May 2022 18:29:14 +0300 Subject: [PATCH 24/50] cleanup ASimHUD::loadLevel --- Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.cpp b/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.cpp index 02bee7a5c7..6401c575ff 100644 --- a/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.cpp +++ b/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.cpp @@ -253,10 +253,10 @@ std::string ASimHUD::getSimModeFromUser() void ASimHUD::loadLevel() { - if (AirSimSettings::singleton().level_name != "") + //if (AirSimSettings::singleton().level_name != "") UAirBlueprintLib::RunCommandOnGameThread([&]() { UAirBlueprintLib::loadLevel(this->GetWorld(), FString(AirSimSettings::singleton().level_name.c_str())); }, true); - else - UAirBlueprintLib::RunCommandOnGameThread([&]() { UAirBlueprintLib::loadLevel(this->GetWorld(), FString("Blocks")); }, true); + //else + //UAirBlueprintLib::RunCommandOnGameThread([&]() { UAirBlueprintLib::loadLevel(this->GetWorld(), FString("Blocks")); }, true); } void ASimHUD::createSimMode() { From c2f4c7892a3f7b3e2eba94dd86cd629c5d64bf85 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Mon, 30 May 2022 18:30:01 +0300 Subject: [PATCH 25/50] remove AisimLevelStreaming files --- .../AirSim/Source/AirsimLevelStreaming.cpp | 48 ------------------- .../AirSim/Source/AirsimLevelStreaming.h | 11 ----- 2 files changed, 59 deletions(-) delete mode 100644 Unreal/Plugins/AirSim/Source/AirsimLevelStreaming.cpp delete mode 100644 Unreal/Plugins/AirSim/Source/AirsimLevelStreaming.h diff --git a/Unreal/Plugins/AirSim/Source/AirsimLevelStreaming.cpp b/Unreal/Plugins/AirSim/Source/AirsimLevelStreaming.cpp deleted file mode 100644 index f7871d56f4..0000000000 --- a/Unreal/Plugins/AirSim/Source/AirsimLevelStreaming.cpp +++ /dev/null @@ -1,48 +0,0 @@ -#pragma once - -#include "AirsimLevelStreaming.h" -#include "Engine/World.h" - -int32 UAirsimLevelStreaming::LevelInstanceId = 0; - -UAirsimLevelStreaming* UAirsimLevelStreaming::LoadAirsimLevelInstance(UWorld* WorldContextObject, FString LevelName, FVector Location, FRotator Rotation, bool& bOutSuccess) -{ - if (!WorldContextObject) { - return nullptr; - } - - // Check whether requested map exists, this could be very slow if LevelName is a short package name - FString LongPackageName; - bool success = FPackageName::SearchForPackageOnDisk(LevelName, &LongPackageName); - if (!success) { - bOutSuccess = false; - return nullptr; - } - - // Create Unique Name for sub-level package - const FString ShortPackageName = FPackageName::GetShortName(LongPackageName); - const FString PackagePath = FPackageName::GetLongPackagePath(LongPackageName); - FString UniqueLevelPackageName = PackagePath + TEXT("/") + WorldContextObject->StreamingLevelsPrefix + ShortPackageName; - UniqueLevelPackageName += TEXT("_LevelInstance_") + FString::FromInt(++LevelInstanceId); - - // Setup streaming level object that will load specified map - ULevelStreamingDynamic* level_pointer = NewObject(WorldContextObject, ULevelStreamingDynamic::StaticClass(), NAME_None, RF_Transient, NULL); - level_pointer->SetWorldAssetByPackageName(FName(*UniqueLevelPackageName)); - level_pointer->LevelColor = FColor::MakeRandomColor(); - level_pointer->SetShouldBeLoaded(true); - level_pointer->SetShouldBeVisible(true); - level_pointer->bShouldBlockOnLoad = true; - level_pointer->bInitiallyLoaded = true; - level_pointer->bInitiallyVisible = true; - - // Transform - level_pointer->LevelTransform = FTransform(Rotation, Location); - // Map to Load - level_pointer->PackageNameToLoad = FName(*LongPackageName); - // Add the new level to world. - WorldContextObject->AddStreamingLevel(level_pointer); - - bOutSuccess = true; - - return dynamic_cast(level_pointer); -} \ No newline at end of file diff --git a/Unreal/Plugins/AirSim/Source/AirsimLevelStreaming.h b/Unreal/Plugins/AirSim/Source/AirsimLevelStreaming.h deleted file mode 100644 index 9035875394..0000000000 --- a/Unreal/Plugins/AirSim/Source/AirsimLevelStreaming.h +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once -#include "Runtime/Engine/Classes/Engine/LevelStreamingDynamic.h" - -class UAirsimLevelStreaming : public ULevelStreamingDynamic -{ -public: - static UAirsimLevelStreaming* LoadAirsimLevelInstance(UWorld* WorldContextObject, FString LevelName, FVector Location, FRotator Rotation, bool& bOutSuccess); - -private: - static int32 LevelInstanceId; -}; \ No newline at end of file From 54bdac3ad66bd847dddcd10f104fc8110988ce2a Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Mon, 30 May 2022 18:30:26 +0300 Subject: [PATCH 26/50] fix load level logic --- Unreal/Plugins/AirSim/Source/AirBlueprintLib.h | 7 +------ Unreal/Plugins/AirSim/Source/WorldSimApi.cpp | 12 ++---------- Unreal/Plugins/AirSim/Source/WorldSimApi.h | 2 -- 3 files changed, 3 insertions(+), 18 deletions(-) diff --git a/Unreal/Plugins/AirSim/Source/AirBlueprintLib.h b/Unreal/Plugins/AirSim/Source/AirBlueprintLib.h index 86bc8b21d9..46d2a8a936 100644 --- a/Unreal/Plugins/AirSim/Source/AirBlueprintLib.h +++ b/Unreal/Plugins/AirSim/Source/AirBlueprintLib.h @@ -19,15 +19,12 @@ #include "Engine/World.h" #include "Runtime/Landscape/Classes/LandscapeComponent.h" #include "Runtime/Engine/Classes/Kismet/GameplayStatics.h" -#include "AirsimLevelStreaming.h" #include "Runtime/Core/Public/HAL/FileManager.h" #include "common/AirSimSettings.hpp" #include #include #include "AirBlueprintLib.generated.h" -class ULevelStreamingDynamic; - UENUM(BlueprintType) enum class LogDebugLevel : uint8 { @@ -74,11 +71,9 @@ class UAirBlueprintLib : public UBlueprintFunctionLibrary UGameplayStatics::GetAllActorsOfClass(context, T::StaticClass(), foundActors); } - static ULevelStreamingDynamic* CURRENT_LEVEL; - static std::vector ListMatchingActors(const UObject* context, const std::string& name_regex); UFUNCTION(BlueprintCallable, Category = "AirSim|LevelAPI") - static ULevelStreamingDynamic* loadLevel(UObject* context, const FString& level_name); + static bool loadLevel(UObject* context, const FString& level_name); UFUNCTION(BlueprintCallable, Category = "AirSim|LevelAPI") static bool spawnPlayer(UWorld* context); UFUNCTION(BlueprintPure, Category = "AirSim|LevelAPI") diff --git a/Unreal/Plugins/AirSim/Source/WorldSimApi.cpp b/Unreal/Plugins/AirSim/Source/WorldSimApi.cpp index 11e7b6cf97..6e289a190a 100644 --- a/Unreal/Plugins/AirSim/Source/WorldSimApi.cpp +++ b/Unreal/Plugins/AirSim/Source/WorldSimApi.cpp @@ -24,19 +24,11 @@ bool WorldSimApi::loadLevel(const std::string& level_name) // Add loading screen to viewport simmode_->toggleLoadingScreen(true); std::this_thread::sleep_for(0.1s); - UAirBlueprintLib::RunCommandOnGameThread([this, level_name]() { - this->current_level_ = UAirBlueprintLib::loadLevel(this->simmode_->GetWorld(), FString(level_name.c_str())); + UAirBlueprintLib::RunCommandOnGameThread([this, level_name, &success]() { + success = UAirBlueprintLib::loadLevel(this->simmode_->GetWorld(), FString(level_name.c_str())); }, true); - if (this->current_level_) { - success = true; - std::this_thread::sleep_for(1s); - spawnPlayer(); - } - else - success = false; - //Remove Loading screen from viewport UAirBlueprintLib::RunCommandOnGameThread([this, level_name]() { this->simmode_->OnLevelLoaded.Broadcast(); diff --git a/Unreal/Plugins/AirSim/Source/WorldSimApi.h b/Unreal/Plugins/AirSim/Source/WorldSimApi.h index a65a8187ef..a6883cda22 100644 --- a/Unreal/Plugins/AirSim/Source/WorldSimApi.h +++ b/Unreal/Plugins/AirSim/Source/WorldSimApi.h @@ -7,7 +7,6 @@ #include "SimMode/SimModeBase.h" #include "Components/StaticMeshComponent.h" #include "Runtime/Engine/Classes/Engine/StaticMesh.h" -#include "Engine/LevelStreamingDynamic.h" #include class WorldSimApi : public msr::airlib::WorldSimApiBase @@ -126,6 +125,5 @@ class WorldSimApi : public msr::airlib::WorldSimApiBase private: ASimModeBase* simmode_; - ULevelStreamingDynamic* current_level_; std::vector voxel_grid_; }; From 9d92775cadc66094be9dc7ac6fe105c2985d51ca Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Mon, 30 May 2022 18:34:08 +0300 Subject: [PATCH 27/50] add missing commit file --- .../Plugins/AirSim/Source/AirBlueprintLib.cpp | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/Unreal/Plugins/AirSim/Source/AirBlueprintLib.cpp b/Unreal/Plugins/AirSim/Source/AirBlueprintLib.cpp index e7289d6998..0dc5cf63c1 100644 --- a/Unreal/Plugins/AirSim/Source/AirBlueprintLib.cpp +++ b/Unreal/Plugins/AirSim/Source/AirBlueprintLib.cpp @@ -9,7 +9,6 @@ #include "Components/StaticMeshComponent.h" #include "EngineUtils.h" #include "Runtime/Engine/Classes/Engine/StaticMesh.h" -#include "Runtime/Engine/Classes/Engine/LevelStreamingDynamic.h" #include "UObject/UObjectIterator.h" #include "Camera/CameraComponent.h" #include "Runtime/Engine/Classes/GameFramework/PlayerStart.h" @@ -35,7 +34,6 @@ Methods -> CamelCase parameters -> camel_case */ -ULevelStreamingDynamic* UAirBlueprintLib::CURRENT_LEVEL = nullptr; bool UAirBlueprintLib::log_messages_hidden_ = false; msr::airlib::AirSimSettings::SegmentationSetting::MeshNamingMethodType UAirBlueprintLib::mesh_naming_method_ = msr::airlib::AirSimSettings::SegmentationSetting::MeshNamingMethodType::OwnerName; @@ -76,18 +74,15 @@ void UAirBlueprintLib::setSimulatePhysics(AActor* actor, bool simulate_physics) } } -ULevelStreamingDynamic* UAirBlueprintLib::loadLevel(UObject* context, const FString& level_name) +bool UAirBlueprintLib::loadLevel(UObject* context, const FString& level_name) { - bool success{ false }; - context->GetWorld()->SetNewWorldOrigin(FIntVector(0, 0, 0)); - ULevelStreamingDynamic* new_level = UAirsimLevelStreaming::LoadAirsimLevelInstance( - context->GetWorld(), level_name, FVector(0, 0, 0), FRotator(0, 0, 0), success); + FString LongPackageName; + const bool success = FPackageName::SearchForPackageOnDisk(level_name, &LongPackageName); if (success) { - if (CURRENT_LEVEL != nullptr && CURRENT_LEVEL->IsValidLowLevel()) - CURRENT_LEVEL->SetShouldBeLoaded(false); - CURRENT_LEVEL = new_level; + context->GetWorld()->SetNewWorldOrigin(FIntVector(0, 0, 0)); + UGameplayStatics::OpenLevel(context->GetWorld(), FName(*LongPackageName), true); } - return CURRENT_LEVEL; + return success; } bool UAirBlueprintLib::spawnPlayer(UWorld* context) From 26e874fc912f66751fb62b5a29fb8b8c25cc8483 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Mon, 30 May 2022 18:34:15 +0300 Subject: [PATCH 28/50] clang --- Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.cpp b/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.cpp index 6401c575ff..54b3c464e9 100644 --- a/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.cpp +++ b/Unreal/Plugins/AirSim/Source/SimHUD/SimHUD.cpp @@ -253,11 +253,9 @@ std::string ASimHUD::getSimModeFromUser() void ASimHUD::loadLevel() { - //if (AirSimSettings::singleton().level_name != "") - UAirBlueprintLib::RunCommandOnGameThread([&]() { UAirBlueprintLib::loadLevel(this->GetWorld(), FString(AirSimSettings::singleton().level_name.c_str())); }, true); - //else - //UAirBlueprintLib::RunCommandOnGameThread([&]() { UAirBlueprintLib::loadLevel(this->GetWorld(), FString("Blocks")); }, true); + UAirBlueprintLib::RunCommandOnGameThread([&]() { UAirBlueprintLib::loadLevel(this->GetWorld(), FString(AirSimSettings::singleton().level_name.c_str())); }, true); } + void ASimHUD::createSimMode() { std::string simmode_name = AirSimSettings::singleton().simmode_name; From edce6e5c350925677992b1915246716660bad349 Mon Sep 17 00:00:00 2001 From: alonfaraj Date: Mon, 6 Jun 2022 11:29:56 +0300 Subject: [PATCH 29/50] fix fov override --- Unreal/Plugins/AirSim/Source/PIPCamera.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/Unreal/Plugins/AirSim/Source/PIPCamera.cpp b/Unreal/Plugins/AirSim/Source/PIPCamera.cpp index 946cd9b753..114c08f314 100644 --- a/Unreal/Plugins/AirSim/Source/PIPCamera.cpp +++ b/Unreal/Plugins/AirSim/Source/PIPCamera.cpp @@ -778,7 +778,6 @@ void APIPCamera::copyCameraSettingsToSceneCapture(UCameraComponent* src, USceneC { if (src && dst) { dst->SetWorldLocationAndRotation(src->GetComponentLocation(), src->GetComponentRotation()); - dst->FOVAngle = src->FieldOfView; FMinimalViewInfo camera_view_info; src->GetCameraView(/*DeltaTime =*/0.0f, camera_view_info); From ac66b99b5b8114a8915e6ebe0b42dcd43df84745 Mon Sep 17 00:00:00 2001 From: Jonathan Date: Wed, 8 Jun 2022 17:07:55 -0300 Subject: [PATCH 30/50] Snow and rain visible from capture images --- .../Materials/M_RainDrop_Master.uasset | Bin 91117 -> 96077 bytes .../Materials/M_SnowFlake_Master.uasset | Bin 90554 -> 95956 bytes .../Weather/WeatherFX/WeatherActor.uasset | Bin 617024 -> 626533 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/Unreal/Plugins/AirSim/Content/Weather/WeatherFX/Materials/M_RainDrop_Master.uasset b/Unreal/Plugins/AirSim/Content/Weather/WeatherFX/Materials/M_RainDrop_Master.uasset index 77ae874d59d81b24138aec797f83935a632018c0..9587265f0e36cea41b81f608e421d7cfe82337b4 100644 GIT binary patch literal 96077 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