Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Merged
merged 1 commit into from
Jul 23, 2020

Conversation

LSBOSS
Copy link
Contributor

@LSBOSS LSBOSS commented Jul 15, 2020

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
Contributor

/azp run microsoft.AirSim

@azure-pipelines
Copy link

Azure Pipelines successfully started running 1 pipeline(s).

@madratman
Copy link
Contributor

madratman commented Jul 23, 2020

@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
Copy link

lucafei commented Oct 31, 2020

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