Skip to content

Fixes #2854: [UE4] simGetSegmentationObjectID will always return -1#2855

Merged
madratman merged 1 commit into
microsoft:masterfrom
LSBOSS:fix-simGetSegmentationObjectID
Jul 23, 2020
Merged

Fixes #2854: [UE4] simGetSegmentationObjectID will always return -1#2855
madratman merged 1 commit into
microsoft:masterfrom
LSBOSS:fix-simGetSegmentationObjectID

Conversation

@LSBOSS

@LSBOSS LSBOSS commented Jul 15, 2020

Copy link
Copy Markdown
Contributor

This PR fixes #2854 .

Calling simGetSegmentationObjectID from Python and AirSim running in Unreal Engine 4 always fails with -1 because the underlying function UAirBlueprintLib::GetMeshStencilID is comparing the passed parameter not against the actual mesh's or owner's name but the name of the mesh component instead (e.g. StaticMeshComponent0).

This PR fixes that by miming the same calls as the actual initialization of IDs in UAirBlueprintLib::InitializeMeshStencilIDs.

@madratman

Copy link
Copy Markdown
Contributor

/azp run microsoft.AirSim

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@madratman

madratman commented Jul 23, 2020

Copy link
Copy Markdown
Contributor

@LSBOSS this is a really good PR! Thanks a lot for digging in and contributing!

While testing, this revealed simListSceneObjects() suffers from a similar bug due to the reasons you highlighted in #2854. (I'll be sending a PR to fix that shortly).
(simListSceneObjects is iterating over actors, instead of UStaticMeshComponent, USkinnedMeshComponent, ALandscapeProxy)

If one uses the following snippet python:

import airsim

c = airsim.VehicleClient()
object_list = ["cylinder2", "ground", "templatecube_rounded_10", "orangeball"]
object_seg_ids = [c.simGetSegmentationObjectID(object_name) for object_name in object_list]

for object_name, object_seg_id in zip(object_list, object_seg_ids):
    print(f"object_name: {object_name}, object_seg_id: {object_seg_id}")

Pre this PR, the result is:

object_name: cylinder2, object_seg_id: -1
object_name: ground, object_seg_id: -1
object_name: templatecube_rounded_10, object_seg_id: -1
object_name: orangeball, object_seg_id: -1

Post this PR, the result is:

object_name: cylinder2, object_seg_id: 95
object_name: ground, object_seg_id: 148
object_name: templatecube_rounded_10, object_seg_id: 241
object_name: orangeball, object_seg_id: 28

Now, if you use the following snippet to do the above for all the objects returned by simListSceneObjects, instead of using the 4 objects above:

import airsim

c = airsim.VehicleClient()
object_list = sorted(c.simListSceneObjects())
object_seg_ids = [c.simGetSegmentationObjectID(object_name) for object_name in object_list]

for object_name, object_seg_id in zip(object_list, object_seg_ids):
    print(f"object_name: {object_name}, object_seg_id: {object_seg_id}")

the result is same pre and post the PR coz of wrong mesh names of course:

object_name: cylinder2, object_seg_id: 95
object_name: ground, object_seg_id: 148
object_name: templatecube_rounded_10, object_seg_id: 241
object_name: orangeball, object_seg_id: 28
(env) madratman@blade:~/projects/AirSim$ python test_segmentation_id.py 
object_name: AbstractNavData-Default, object_seg_id: -1
object_name: AirSimGameMode_2147482571, object_seg_id: -1
object_name: AtmosphericFog_1, object_seg_id: -1
object_name: BP_PIPCamera_C_2147482481, object_seg_id: -1
object_name: BP_PIPCamera_C_2147482482, object_seg_id: -1
object_name: BP_PIPCamera_C_2147482483, object_seg_id: -1
object_name: BP_PIPCamera_C_2147482484, object_seg_id: -1
object_name: BP_PIPCamera_C_2147482485, object_seg_id: -1
object_name: BP_PIPCamera_C_2147482526, object_seg_id: -1
object_name: BP_PIPCamera_C_2147482527, object_seg_id: -1
object_name: BP_PIPCamera_C_2147482528, object_seg_id: -1
object_name: BP_PIPCamera_C_2147482529, object_seg_id: -1
object_name: BP_PIPCamera_C_2147482530, object_seg_id: -1
object_name: CameraActor_2147482548, object_seg_id: -1
object_name: CameraDirector, object_seg_id: -1
object_name: Cone_5, object_seg_id: -1
object_name: Cylinder2, object_seg_id: -1
object_name: Cylinder3, object_seg_id: -1
object_name: Cylinder4, object_seg_id: -1
object_name: Cylinder5, object_seg_id: -1
object_name: Cylinder6, object_seg_id: -1
object_name: Cylinder7, object_seg_id: -1
object_name: Cylinder8, object_seg_id: -1
object_name: Cylinder_2, object_seg_id: -1
object_name: DefaultPhysicsVolume_2147482574, object_seg_id: -1
object_name: ExternalCamera, object_seg_id: -1
object_name: FlyingExampleMap_C_0, object_seg_id: -1
object_name: GameNetworkManager_2147482563, object_seg_id: -1
object_name: GameSession_2147482567, object_seg_id: -1
object_name: GameStateBase_2147482564, object_seg_id: -1
object_name: GameplayDebuggerCategoryReplicator_2147482542, object_seg_id: -1
object_name: GameplayDebuggerPlayerManager_2147482572, object_seg_id: -1
object_name: Ground, object_seg_id: -1
object_name: Ground_2, object_seg_id: -1
object_name: Ground_3, object_seg_id: -1
object_name: Ground_4, object_seg_id: -1
object_name: Ground_5, object_seg_id: -1
object_name: Ground_6, object_seg_id: -1
object_name: LightSource, object_seg_id: -1
object_name: LightmassImportanceVolume_2, object_seg_id: -1
object_name: OrangeBall, object_seg_id: -1
object_name: ParticleEventManager_2147482566, object_seg_id: -1
object_name: PlayerCameraManager_2147482558, object_seg_id: -1
object_name: PlayerController_2147482560, object_seg_id: -1
object_name: PlayerStart_3, object_seg_id: -1
object_name: PlayerState_2147482559, object_seg_id: -1
object_name: PostProcessVolume_2, object_seg_id: -1
object_name: SimHUD_2147482543, object_seg_id: -1
object_name: SimModeWorldMultiRotor_2147482541, object_seg_id: -1
object_name: SimpleFlight, object_seg_id: -1
object_name: SimpleFlightTest, object_seg_id: -1
object_name: SkyLight_1, object_seg_id: -1
object_name: SkyShereBlueprint, object_seg_id: -1
object_name: SphereReflectionCaptureCentre, object_seg_id: -1
object_name: SphereReflectionCaptureLeft, object_seg_id: -1
object_name: SphereReflectionCaptureRight, object_seg_id: -1
object_name: TemplateCube_48, object_seg_id: -1
object_name: TemplateCube_Rounded_10, object_seg_id: -1
object_name: TemplateCube_Rounded_100, object_seg_id: -1
object_name: TemplateCube_Rounded_101, object_seg_id: -1
object_name: TemplateCube_Rounded_102, object_seg_id: -1
object_name: TemplateCube_Rounded_103, object_seg_id: -1
object_name: TemplateCube_Rounded_104, object_seg_id: -1
object_name: TemplateCube_Rounded_105, object_seg_id: -1
object_name: TemplateCube_Rounded_106, object_seg_id: -1
object_name: TemplateCube_Rounded_108, object_seg_id: -1
object_name: TemplateCube_Rounded_109, object_seg_id: -1
object_name: TemplateCube_Rounded_110, object_seg_id: -1
object_name: TemplateCube_Rounded_111, object_seg_id: -1
object_name: TemplateCube_Rounded_112, object_seg_id: -1
object_name: TemplateCube_Rounded_113, object_seg_id: -1
object_name: TemplateCube_Rounded_114, object_seg_id: -1
object_name: TemplateCube_Rounded_115, object_seg_id: -1
object_name: TemplateCube_Rounded_116, object_seg_id: -1
object_name: TemplateCube_Rounded_117, object_seg_id: -1
object_name: TemplateCube_Rounded_119, object_seg_id: -1
object_name: TemplateCube_Rounded_120, object_seg_id: -1
object_name: TemplateCube_Rounded_121, object_seg_id: -1
object_name: TemplateCube_Rounded_122, object_seg_id: -1
object_name: TemplateCube_Rounded_123, object_seg_id: -1
object_name: TemplateCube_Rounded_124, object_seg_id: -1
object_name: TemplateCube_Rounded_125, object_seg_id: -1
object_name: TemplateCube_Rounded_126, object_seg_id: -1
object_name: TemplateCube_Rounded_128, object_seg_id: -1
object_name: TemplateCube_Rounded_129, object_seg_id: -1
object_name: TemplateCube_Rounded_13, object_seg_id: -1
object_name: TemplateCube_Rounded_130, object_seg_id: -1
object_name: TemplateCube_Rounded_131, object_seg_id: -1
object_name: TemplateCube_Rounded_132, object_seg_id: -1
object_name: TemplateCube_Rounded_133, object_seg_id: -1
object_name: TemplateCube_Rounded_134, object_seg_id: -1
object_name: TemplateCube_Rounded_135, object_seg_id: -1
object_name: TemplateCube_Rounded_136, object_seg_id: -1
object_name: TemplateCube_Rounded_137, object_seg_id: -1
object_name: TemplateCube_Rounded_138, object_seg_id: -1
object_name: TemplateCube_Rounded_139, object_seg_id: -1
object_name: TemplateCube_Rounded_140, object_seg_id: -1
object_name: TemplateCube_Rounded_141, object_seg_id: -1
object_name: TemplateCube_Rounded_142, object_seg_id: -1
object_name: TemplateCube_Rounded_143, object_seg_id: -1
object_name: TemplateCube_Rounded_144, object_seg_id: -1
object_name: TemplateCube_Rounded_145, object_seg_id: -1
object_name: TemplateCube_Rounded_146, object_seg_id: -1
object_name: TemplateCube_Rounded_147, object_seg_id: -1
object_name: TemplateCube_Rounded_148, object_seg_id: -1
object_name: TemplateCube_Rounded_149, object_seg_id: -1
object_name: TemplateCube_Rounded_150, object_seg_id: -1
object_name: TemplateCube_Rounded_151, object_seg_id: -1
object_name: TemplateCube_Rounded_152, object_seg_id: -1
object_name: TemplateCube_Rounded_153, object_seg_id: -1
object_name: TemplateCube_Rounded_154, object_seg_id: -1
object_name: TemplateCube_Rounded_155, object_seg_id: -1
object_name: TemplateCube_Rounded_156, object_seg_id: -1
object_name: TemplateCube_Rounded_157, object_seg_id: -1
object_name: TemplateCube_Rounded_158, object_seg_id: -1
object_name: TemplateCube_Rounded_159, object_seg_id: -1
object_name: TemplateCube_Rounded_160, object_seg_id: -1
object_name: TemplateCube_Rounded_173, object_seg_id: -1
object_name: TemplateCube_Rounded_174, object_seg_id: -1
object_name: TemplateCube_Rounded_175, object_seg_id: -1
object_name: TemplateCube_Rounded_176, object_seg_id: -1
object_name: TemplateCube_Rounded_185, object_seg_id: -1
object_name: TemplateCube_Rounded_186, object_seg_id: -1
object_name: TemplateCube_Rounded_187, object_seg_id: -1
object_name: TemplateCube_Rounded_196, object_seg_id: -1
object_name: TemplateCube_Rounded_197, object_seg_id: -1
object_name: TemplateCube_Rounded_198, object_seg_id: -1
object_name: TemplateCube_Rounded_199, object_seg_id: -1
object_name: TemplateCube_Rounded_200, object_seg_id: -1
object_name: TemplateCube_Rounded_209, object_seg_id: -1
object_name: TemplateCube_Rounded_210, object_seg_id: -1
object_name: TemplateCube_Rounded_211, object_seg_id: -1
object_name: TemplateCube_Rounded_212, object_seg_id: -1
object_name: TemplateCube_Rounded_217, object_seg_id: -1
object_name: TemplateCube_Rounded_218, object_seg_id: -1
object_name: TemplateCube_Rounded_231, object_seg_id: -1
object_name: TemplateCube_Rounded_232, object_seg_id: -1
object_name: TemplateCube_Rounded_233, object_seg_id: -1
object_name: TemplateCube_Rounded_234, object_seg_id: -1
object_name: TemplateCube_Rounded_243, object_seg_id: -1
object_name: TemplateCube_Rounded_244, object_seg_id: -1
object_name: TemplateCube_Rounded_245, object_seg_id: -1
object_name: TemplateCube_Rounded_246, object_seg_id: -1
object_name: TemplateCube_Rounded_247, object_seg_id: -1
object_name: TemplateCube_Rounded_256, object_seg_id: -1
object_name: TemplateCube_Rounded_257, object_seg_id: -1
object_name: TemplateCube_Rounded_26, object_seg_id: -1
object_name: TemplateCube_Rounded_266, object_seg_id: -1
object_name: TemplateCube_Rounded_267, object_seg_id: -1
object_name: TemplateCube_Rounded_268, object_seg_id: -1
object_name: TemplateCube_Rounded_269, object_seg_id: -1
object_name: TemplateCube_Rounded_282, object_seg_id: -1
object_name: TemplateCube_Rounded_283, object_seg_id: -1
object_name: TemplateCube_Rounded_284, object_seg_id: -1
object_name: TemplateCube_Rounded_31, object_seg_id: -1
object_name: TemplateCube_Rounded_4, object_seg_id: -1
object_name: TemplateCube_Rounded_45, object_seg_id: -1
object_name: TemplateCube_Rounded_47, object_seg_id: -1
object_name: TemplateCube_Rounded_48, object_seg_id: -1
object_name: TemplateCube_Rounded_49, object_seg_id: -1
object_name: TemplateCube_Rounded_50, object_seg_id: -1
object_name: TemplateCube_Rounded_51, object_seg_id: -1
object_name: TemplateCube_Rounded_52, object_seg_id: -1
object_name: TemplateCube_Rounded_53, object_seg_id: -1
object_name: TemplateCube_Rounded_54, object_seg_id: -1
object_name: TemplateCube_Rounded_55, object_seg_id: -1
object_name: TemplateCube_Rounded_56, object_seg_id: -1
object_name: TemplateCube_Rounded_57, object_seg_id: -1
object_name: TemplateCube_Rounded_6, object_seg_id: -1
object_name: TemplateCube_Rounded_60, object_seg_id: -1
object_name: TemplateCube_Rounded_61, object_seg_id: -1
object_name: TemplateCube_Rounded_62, object_seg_id: -1
object_name: TemplateCube_Rounded_63, object_seg_id: -1
object_name: TemplateCube_Rounded_64, object_seg_id: -1
object_name: TemplateCube_Rounded_65, object_seg_id: -1
object_name: TemplateCube_Rounded_66, object_seg_id: -1
object_name: TemplateCube_Rounded_67, object_seg_id: -1
object_name: TemplateCube_Rounded_68, object_seg_id: -1
object_name: TemplateCube_Rounded_69, object_seg_id: -1
object_name: TemplateCube_Rounded_7, object_seg_id: -1
object_name: TemplateCube_Rounded_70, object_seg_id: -1
object_name: TemplateCube_Rounded_71, object_seg_id: -1
object_name: TemplateCube_Rounded_72, object_seg_id: -1
object_name: TemplateCube_Rounded_73, object_seg_id: -1
object_name: TemplateCube_Rounded_74, object_seg_id: -1
object_name: TemplateCube_Rounded_75, object_seg_id: -1
object_name: TemplateCube_Rounded_76, object_seg_id: -1
object_name: TemplateCube_Rounded_77, object_seg_id: -1
object_name: TemplateCube_Rounded_78, object_seg_id: -1
object_name: TemplateCube_Rounded_79, object_seg_id: -1
object_name: TemplateCube_Rounded_8, object_seg_id: -1
object_name: TemplateCube_Rounded_80, object_seg_id: -1
object_name: TemplateCube_Rounded_81, object_seg_id: -1
object_name: TemplateCube_Rounded_82, object_seg_id: -1
object_name: TemplateCube_Rounded_83, object_seg_id: -1
object_name: TemplateCube_Rounded_84, object_seg_id: -1
object_name: TemplateCube_Rounded_85, object_seg_id: -1
object_name: TemplateCube_Rounded_86, object_seg_id: -1
object_name: TemplateCube_Rounded_87, object_seg_id: -1
object_name: TemplateCube_Rounded_88, object_seg_id: -1
object_name: TemplateCube_Rounded_89, object_seg_id: -1
object_name: TemplateCube_Rounded_9, object_seg_id: -1
object_name: TemplateCube_Rounded_90, object_seg_id: -1
object_name: TemplateCube_Rounded_91, object_seg_id: -1
object_name: TemplateCube_Rounded_92, object_seg_id: -1
object_name: TemplateCube_Rounded_93, object_seg_id: -1
object_name: TemplateCube_Rounded_94, object_seg_id: -1
object_name: TemplateCube_Rounded_96, object_seg_id: -1
object_name: TemplateCube_Rounded_97, object_seg_id: -1
object_name: TemplateCube_Rounded_98, object_seg_id: -1
object_name: TemplateCube_Rounded_99, object_seg_id: -1
object_name: WorldInfo_0, object_seg_id: -1

@madratman
madratman merged commit 0dcfa92 into microsoft:master Jul 23, 2020
@lucafei

lucafei commented Oct 31, 2020

Copy link
Copy Markdown

recently i find the actual segmenation color does not correspond to the label specified in seg_rgbs.txt doc , although i can get the correct object id using simGetSegmentationObjectid

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[UE4] simGetSegmentationObjectID will always return -1

3 participants