You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Again the program ends with an assert.
The code throw the assert in the function SRIFAlgorithm::changeSRIFPara to the line 207 of the file SRIFAlgorithm.cpp when the program attempts to access beyond the size of the variable tempXk_1
198 VectorXd tempXk_1 = m_Xk;
m_Xk.resize(epochLenLB+m_const_param);
m_Xk.setZero();
//Xk.resize(epochLenLB+5);
for (int i = 0;i < m_const_param;i++)
m_Xk(i) = tempXk_1(i);
for (int i = 0;i<epochLenLB;i++)
{
if (oldPrnFlag.at(i)!=-1)//Save the old satellite ambiguity
m_Xk(m_const_param+i) = tempXk_1(oldPrnFlag.at(i)+m_const_param); // <------ the assert is throw here
else
{//New satellite ambiguity calculation
SatlitData oneStalit = epochSatlitData.at(i);
m_Xk(m_const_param+i) = (oneStalit.PP3 - oneStalit.LL3)/M_GetLamta3(oneStalit.Frq[0],oneStalit.Frq[1]);
}
213 }
The local variable tempXk_1 is equal to SRIFAlgorithm::m_Xk variable.
I looked where the size of the variable m_Xk change. m_Xk is resize with an incorrect size in the function SRIFAlgorithm::SRIFforStatic at line 651.
646 if(gross_LC)
{
// restore filter state
m_Rp = temp_Rp; m_Zp = temp_Zp; m_Phi_Inv = temp_Phi_Inv; m_G = temp_G;
m_Phi = temp_Phi; m_Rwk = temp_Rwk; m_Q = temp_Q;
m_Xk = temp_Xk; // <--- Here change the size of m_Xk
memcpy(m_SPP_Pos, temp_SPP_POS, 3*sizeof(double));
X.setZero();
P.setIdentity();
P = P * 1e10;
656 }
The assert happens when in function SRIFAlgorithm::SRIFforStaticgross_LC = true and epochLenLB - del_len > 5 is false and epochLenLB=6 and del_len=1
600 if(epochLenLB - del_len > 5)
{
for(int i = 0; i < del_len;i++)
currEpoch.remove(del_flag[i]);
epochLenLB = currEpoch.length();// update epochLenLB
// restore filter state
m_Rp = temp_Rp; m_Zp = temp_Zp; m_Phi_Inv = temp_Phi_Inv; m_G = temp_G;
m_Phi = temp_Phi; m_Rwk = temp_Rwk; m_Q = temp_Q;
m_Xk = temp_Xk;
memcpy(m_SPP_Pos, temp_SPP_POS, 3*sizeof(double));
filter(preEpoch, currEpoch, X, P);
}
else
{
break; // <----- when the assert is throw the program pass here
616 }
This in my opinion is the cause of the error.
I don't know how to change the code to correct the error.
I think that the line 600 in the file SRIFAlgorithm.cpp can be changed like this: if((epochLenLB - del_len) >= 5)
Even with 5 satellites it is possible to calculate the position.
The text was updated successfully, but these errors were encountered:
Thanks, I tested a lot of data and didn't find this assert out of range. If convenient, you can send your test data to my email (xiaogongwei@asch.whigg.ac.cn). I have chenged epochLenLB - del_len > 5 to epochLenLB - del_len > =5
Again the program ends with an assert.
The code throw the assert in the function
SRIFAlgorithm::changeSRIFPara
to the line 207 of the file SRIFAlgorithm.cpp when the program attempts to access beyond the size of the variabletempXk_1
The local variable
tempXk_1
is equal toSRIFAlgorithm::m_Xk
variable.I looked where the size of the variable
m_Xk
change.m_Xk
is resize with an incorrect size in the functionSRIFAlgorithm::SRIFforStatic
at line 651.The assert happens when in function
SRIFAlgorithm::SRIFforStatic
gross_LC = true
andepochLenLB - del_len > 5
is false andepochLenLB=6
anddel_len=1
This in my opinion is the cause of the error.
I don't know how to change the code to correct the error.
I think that the line 600 in the file SRIFAlgorithm.cpp can be changed like this:
if((epochLenLB - del_len) >= 5)
Even with 5 satellites it is possible to calculate the position.
The text was updated successfully, but these errors were encountered: