Привет всем, кто использует Eigen, я столкнулся со странным вопросом здесь.
Я реализовал фильтр без запаха Калмана с собственный.
На моем ПК это работает очень хорошо, но тот же фрагмент кода вызовет ошибку сегментации в моей встроенной системе, Odroid XU Архитектура Armv7.
После нескольких часов отладки я обнаружил, что проблема была с этой частью:
qrSolver.compute(OS.transpose());
m_q=qrSolver.householderQ();
m_r = qrSolver.matrixQR().triangularView<Upper>();
S_pre = m_r.block(0,0,n,n).transpose();
if (w_c0 < 0)
internal::llt_inplace<float,Upper>::rankUpdate(S_pre,
sqrt(-w_c0)*(sigmaPoints.col(0) - state_pre),
-1);
else
internal::llt_inplace<float,Upper>::rankUpdate(S_pre,
sqrt(w_c0)*(sigmaPoints.col(0) - state_pre),
1);
где я сначала вычисляю QR-разложение матрицы Операционные системы (измерение n-by-3n), а затем выполнить обновление ранга его компонента R (измерение n-by-n). внутренний :: llt_inplace :: rankUpdate это функция в библиотеке Eigen, которая не документирована Он просто выполняет обновление ранга 1 до первого аргумента. Эту функцию можно найти в ~ / path_to_Eigen / Cholesky / LLT.h
Самое странное в этом фрагменте кода -DCMAKE_BUILD_TYPE = Debug он отлично работает, а если я скомпилирую с -DCMAKE_BUILD_TYPE = Release, этот код не работает.
Я хотел бы спросить, может ли кто-нибудь понять это или у кого-то есть подобные проблемы раньше. Пожалуйста, помогите, большое спасибо.
Задача ещё не решена.
Других решений пока нет …