Navigation

  • Categories
  • Recent
  • Tags
  • Popular
  • Search
  • Register
  • Login
  • Register
  • Login
  • Search
  • Categories
  • Recent
  • Tags
  • Popular
  1. Home
  2. paha
paha

paha

@paha

0
Reputation
5
Posts
400
Profile views
0
Followers
0
Following
Joined 23 Feb 2021, 07:02 Last Online 24 Jul 2023, 09:34

  • Profile
  • More
    • Following
    • Followers
    • Topics
    • Posts
    • Best
    • Groups
paha Follow

Posts made by paha

Process Jacobian

Hello
I have question to the process Jacobian in PredictFunctions.c file.
There is #if #else preprocessing macro in _UpdateProcessJacobian() which selects code that updates ∂v∂q submatrix in your explanation here:
https://openimu.readthedocs.io/en/latest/algorithms/Process_Jacobian.html
I don't understand why the #if branch is selected instead of #else branch, because according to the explanation the #else branch should be selected.
Where did

gKalmanFilter.R_BinN[0][0]*q0aXdT -                                      gKalmanFilter.R_BinN[0][1]*q0aYdT -                                                 gKalmanFilter.R_BinN[0][2]*q0aZdT);

come from? Why is not there only

q0aXdT - q3aYdT + q2aZdT

?

Thank you
Best regards
Pavel

posted in The OpenIMU Family • 13 May 2022, 10:30
RE: Wheel angle in EKF

I got it now.
Thank you very much
Regards
Pavel

posted in The OpenIMU Family • 3 Mar 2021, 15:59
RE: Wheel angle in EKF

Thank you very much for the reply.
I'd like to ask one more question about function _GenerateObservationJacobian_AHRS in UpdateFunctions.c.

There is following comment for uTheta

/* Pitch (including modifications for |q| = 1 constraint)
     *   mu = 2*( q(1)*q(3) - q(2)*q(4) );
     *   % 2/sqrt(1-mu*mu) * [q(3); -q(4); q(1); -q(2)]
     *   2/sqrt(1-mu*mu) * [q(3) - mu*q(1);
     *                      -q(4) - mu*q(2);
     *                     q(1)- mu*q(3);
     *                     -q(2)- mu*q(4)]
     */

I know how to get this line

% 2/sqrt(1-mu*mu) * [q(3); -q(4); q(1); -q(2)]

but don't know how you came to this

2/sqrt(1-mu*mu) * [q(3) - mu*q(1);
     *                      -q(4) - mu*q(2);
     *                     q(1)- mu*q(3);
     *                     -q(2)- mu*q(4)]

which is most probably mentioned constraint for |q| = 1.

Could you please shed more light on it? Your code awesome and great practical EKF tutorial.

Thank you
regards
Pavel

posted in The OpenIMU Family • 1 Mar 2021, 20:54
Wheel angle in EKF

Hello

I intend to use IMU300ZI in our omnidirectional robot (can turn all 4 wheels into arbitrary but the same direction). The robot has speed encoder and wheel angle encoder so I want to use this info in EKF. As a base code I use your INS example project.
I studied your code and think that the best place for wheel angle incorporation is in function Update_PseudoMeasurement() in UpdateFunctions.c. Instead of using frontVelMea variable as scalar I would make it vector the values of wich would be set based on current wheel angle, wheel speed and gKalmanFilter.ppsEulerAngles[YAW]. I would also set gAlgorithm.velocityAlwaysAlongBodyX=FALSE.

Odometer data would be received over SPI.
Do you think this is correct solution or is there anything important I forgot about which could cause failure?

Thank you
Regards
Pavel

posted in The OpenIMU Family • 26 Feb 2021, 15:20
BUG in platformGetOrientation()

Hello
It seems to me there is a bug in openIMU300-lib/Platform/Core/src/platform.c in function platformGetOrientation()

instead of:

case 42:   orientation = 0x005A7958; break;         // 0000 000 | 00 0 | 10 1 | 01 0 +Z -X +Y

this:

case 42:   orientation = 0x005A7859; break;         // 0000 000 | 00 0 | 10 1 | 01 0 +Z -X +Y

Regards
Pavel

posted in The OpenIMU Family • 24 Feb 2021, 13:07