dwReconstructor_estimatePoseAsync() of SFM does not refine the pose.

From the document, the funciton dwReconstructor_estimatePoseAsync() should refine the initial estimated pose. However, the refined pose will always be the same as the input pose whatever inputs I give to the function.

What exactly is the function of dwReconstructor_estimatePoseAsync()?

Dear yz176,

Did you check SFM source code in /driveworks-2.0/samples/src/imageprocessing/sfm?
Could you please let me know how you confirmed it? Thanks.

Yes. I tested the function dwReconstructor_estimatePoseAsync() using the source code in /driveworks-2.0/samples/src/imageprocessing/sfm.

From what I read form the document, dwReconstructor_estimatePoseAsync() uses all tracked features from all cameras to estimate the current rig pose, and it takes the following inputs.

[in] previousRig2World: A pointer to the position of the rig in the previous frame.
[in] predictedRig2World: A pointer to the initial estimate of the rig’s pose. The reconstructor refines this initial estimate based on the tracked features.
[in] listCount: The number of feature lists provided in the following parameters. This must match the number of cameras in the rig.
[in] d_statuses: A pointer to the status of the tracked features. Features with an invalid status are ignored. Pointers to GPU memory.
[in] d_featureCounts: A pointer to the number of tracked features. There is one feature count per feature list. Pointers to GPU memory.
[in] d_trackedLocations: A pointer to the 2D position of the tracked features in the images. One list per camera in the rig. List i has listCount[i] elements. Pointer to GPU memory.
[in] d_worldPoints: A pointer to the 3D position of the tracked features in the images. One list per camera in the rig. List i has listCount[i] elements. Pointer to GPU memory.
[in] obj: The reconstructor object handle.

From what I understand, the function takes a predicted rig pose (predictedRig2World), and refines it with the tracked camera image features.

predictedRig2World is a dwTransformation3f variable, which is a float32_t[16] array.

The first test I did is comparing the data values of predictedRig2World before and after calling dwReconstructor_estimatePoseAsync(). The second test is assigning random values to the predictedRig2World before calling the function. The third test is assigning [1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] to the data values of predictedRig2World before calling the function. The values of predictedRig2World is always the same before and after calling the function.

Based on those tests, it seems like that the function dwReconstructor_estimatePoseAsync() does not refine the pose.

I also have checked the other inputs of the function, and they are not empty, and contains plenty tracked features.

Thank you!