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

How can I get the rigid body motion matrix G correctly from dvo #10

Open
Ethan-Zhou opened this issue Jun 2, 2014 · 6 comments
Open

Comments

@Ethan-Zhou
Copy link

Hi Christian

I run the dvo on dataset "rgbd_dataset_freiburg2_desk_with_person". The registration result of successive frames are great, very little residual last.

Then I compare the motion estimation result (transformation) with the ground truth, to my surprice, they do not coincide with each other, even not qualitatively.

I just run the DenseObject::match() functions, and get the motion matrix G from the parameter transformation.matrix()

I do not know whether I use the lib in a wrong way, but the result of registration tells me it should be right. Is there still anything to do with the transformation object? What unit does it use? meter or milimeter?

I am looking forward to your reply sincerely.

Best Regards,

Yi

@christiankerl
Copy link
Member

is the depth scale correct? the values in the RGBD benchmark dataset depth files have to be scaled by (1.0/5000.0) to get the depth in meters. therefore, the scale of the translation vector might be wrong, if you used a different scaling factor.

@Ethan-Zhou
Copy link
Author

Yes, you are right, I used the depth in the wrong way. Now the scale of the answer is right. But the estimated motion is still not coincide with the ground truth. Below are the figures of the them, please have a look.
estimation
groundtruth

I do not know why.

@Ethan-Zhou
Copy link
Author

The first image is the estimation result and the second one is the ground truth. Transition in x,y,z direction are all different... Why

@Ethan-Zhou
Copy link
Author

I think there may be some problems with my input. Because no matter how I change the way to load the input images, the registration result seems always good, but the motion estimation matrix G varies from time to time.
I use OpenCV function imread() to load the images, like below

rgb_ref = imread(rgb_filename,CV_LOAD_IMAGE_UNCHANGED);
intensity_ref = imread(rgb_filename,CV_LOAD_IMAGE_GRAYSCALE);
depth_ref = imread(depth_filename,CV_LOAD_IMAGE_UNCHANGED);

Are they right?

@Ethan-Zhou
Copy link
Author

Hi, another problem is when I run the dvo, strange errors always happen, look below pease,

~/sophus_src/sophus/so3.cpp:45: Sophus::SO3::SO3(const Quaterniond&): Assertion 'unit_quaternion_.squaredNorm()>SAMLL_EPS' failed
Aborted (core dumped)

I don't know why this error just happen randomly when I run your code on a dataset. I have to comment this line off to maintain the code running.

Could you give me some adive on what I came across?

@Yiping-Steven
Copy link

Yiping-Steven commented Jan 26, 2018

What's the aim of scaling by 1.0f/5000.0f?

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

No branches or pull requests

3 participants