Code Monkey home page Code Monkey logo

Comments (4)

JadTawil-theonly avatar JadTawil-theonly commented on July 20, 2024 1

I have managed to solve the problem. The optimization was formulated differently. I have created a branch. If you would like, i can certainly make it available to you!

from camlasercalibratool.

JadTawil-theonly avatar JadTawil-theonly commented on July 20, 2024

Its a different problem, because the rotation of the laser scanner on its own axis does not matter at all, so its an optimization over 3 translation parameters, and 2 rotation parameters (not 3).

from camlasercalibratool.

HeYijia avatar HeYijia commented on July 20, 2024

Yes, you are right. In addition, you can use the simulation code I provided to verify your conclusion. You will find a nullspace base that shows the system has an unobservable angle.

from camlasercalibratool.

JadTawil-theonly avatar JadTawil-theonly commented on July 20, 2024

Hey HeY,

I replaced the following code:


    for (size_t j = 0; j < 180; j++)
    {
      double theta = -M_PI_2 + j * M_PI/180;
      Eigen::Vector3d ray(cos(theta), sin(theta), 0);
      double depth = -d/(ray.dot(n));
      
      if( std::isnan(depth) || depth < 0)
        continue;
      
      Eigen::Vector3d p = depth * ray;
      
      // valid laser points
      if( std::fabs(p.x()) < 5 && std::fabs(p.y()) < 5)
      {
          points.push_back(p);
      }
      // std::cout << p.transpose() << std::endl;
    }

With

double theta = 0.0;

   //Eigen::Vector3d ray(cos(theta), sin(theta), 0);
   Eigen::Vector3d ray(cos(theta), sin(theta), 0);
   double depth = -d/(ray.dot(n));
   if( std::isnan(depth) || depth < 0)
     continue;
   
   Eigen::Vector3d p = depth * ray;
   
   // valid laser points
   if( std::fabs(p.x()) < 5 && std::fabs(p.y()) < 5)
   {
       points.push_back(p);
   }

So that for each camera pose, there is 1 ray, at 0 theta (simulating the 1D laser case).

The following is the result:


============= Ground Truth of Rotation and translation =============== 
 0  0  1
-1  0  0
 0 -1  0
0.1
0.2
0.3
   roll(rad): -1.5708 pitch(rad): 0 yaw(rad): -1.5708
or roll(deg): -90 pitch(deg): 0 yaw(deg): -90
       tx(m): 0.1  ty(m): 0.2   tz(m): 0.3
============= End =============== 
obs size: 1329
----- H singular values--------:
1230.97
1121.64
1034.39
15.7625
13.9415
      0
====== null space basis, it's means the unobservable direction for Tcl ======
       please note the unobservable direction is for Tcl, not for Tlc        
0
0
0
1
0
0

recover chi2: 5.39867e-22

----- Transform from Camera to Laser Tlc is: -----

-5.14566e-13 -5.31309e-13            1          0.1
  -0.0596479     0.998219  4.99664e-13    -0.287536
   -0.998219   -0.0596479 -5.45475e-13     0.217538
           0            0           -0            1

----- Transform from Camera to Laser, euler angles and translations are: -----

   roll(rad): -1.5708 pitch(rad): 1.51111 yaw(rad): -1.5708
or roll(deg): -90 pitch(deg): 86.5804 yaw(deg): -90
       tx(m): 0.1  ty(m): -0.287536   tz(m): 0.217538

Notice that while 1 degree is not observable, the estimated parameters are unfortunately not accurate. What do you think?

from camlasercalibratool.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.