fdcl-gwu / decoupled-yaw-controller-comparison

Codes used for generating the results in the paper "Geometric Adaptive Controls of a Quadrotor UAV with Decoupled Attitude Dynamics"
9 stars 4 forks source link

Q. Is it okay to integrate dynamics using ode45, which may cause deviations from the SO(3)? #1

Closed SKYnSPACE closed 3 years ago

SKYnSPACE commented 3 years ago

Q. Is it okay to integrate the dynamics using ode45, which may cause deviations from the SO(3)?

Ref.

https://github.com/fdcl-gwu/decoupled-yaw-controller-comparison/blob/1d067d5339546a3bc106daaefffd72b2090293cd/FDCL/run.m#L80

kanishkegb commented 3 years ago

One can certainly use a geometric numerical integrator on SO(3), such as

T. Lee, M. Leok, N. H. McClamroch, "A Lie group variational integrator for the attitude dynamics of a rigid body with application to the 3D pendulum," Proceedings of the IEEE Conference on Control Application, pp. 962--967, Toronto, Canada, August 2005.

Using ode45 is okay for a short term simulation, especially when the error tolerance is sufficiently small. For example, in the given numerical example, the deviation of rotation matrix from SO(3), measured by || I_{3\times 3} - R^T R || is less than 2.6e-5.

SKYnSPACE commented 3 years ago

Thanks for the marvelous reference paper by Prof. Lee. However, solving the implicit function for every step to derive the next step F seems burdensome to my on-board computer.

How small should the tolerance be in terms of the SO(3) manifold? Would a simple Euler method be also meet the criteria?

Thank you :)

kanishkegb commented 3 years ago

No problem at all. Glad I could be of help.

I personally have never tested the minimum tolerance levels as the default options in Matlab ode45 never gave me any issues. Also, I do not have any idea about the accuracy of using Euler method (though I highly doubt a simple Euler method would work well).

Is there any reason why you need to solve the ODE inside an onboard computer? I assume you are trying to implement this in a real time application, such as a UAV. If so, you don't have to solve the ODE right? I am just curious.

SKYnSPACE commented 3 years ago

Thanks for your opinion.

I'm just trying to test an online parameter estimation method on SO(3) x S^2 configuration space, such as a UAV with a spherical pendulum, by using ideas from

Chen, Ricky TQ, et al. "Neural ordinary differential equations." Advances in neural information processing systems. 2018.

This requires the back-propagation of measurement errors deviated from estimated dynamics, which needs a proper ODESolver().

I was led into this repository by searching actual implementations of geometric approaches in which you guys are specialized. Hope to see your new fancy works soon!

Many thanks :)

kanishkegb commented 3 years ago

Thank you πŸ‘

This seems like a difficult problem. If the calculation speed is your concern, may be you are trying to use C++. In that case, if you have not already came across, maybe boost odeint is worth a try (I haven't used this before, but boost has extremely useful stuff). Also, if you are using C++, we have the geometric controllers as standalone C++ classeshere.

Good luck with your research! ☺️

SKYnSPACE commented 3 years ago

Great! I should try the boost library then. Seems like you guys built a lot of good stuff. Guess I should check the entire repositories 🀣 Thanks again and have a good night πŸŒ™

p.s. Let me close this issue since the ode45 gives sufficient tolerance.