日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

EKF优化:协方差coff公式、意义、SLAM中的Code优化

發(fā)布時間:2023/12/31 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 EKF优化:协方差coff公式、意义、SLAM中的Code优化 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

? 1.代碼:Matlab相關(guān)系數(shù)的意義:

Eigen::MatrixXf correlation_matrix = corrcoef( LocM );

對行向量求相關(guān)系數(shù) , 與列數(shù)無關(guān),返回?cols()*cols()?矩陣...
翻譯成Eigen:
還是自己寫個函數(shù)吧//1.求協(xié)方差

Eigen::MatrixXf CIcSearchM::cov(Eigen::MatrixXf &d1, Eigen::MatrixXf &d2) {Eigen::MatrixXf? CovM(1,1);assert(1 ==d1.cols() && 1 ==d2.cols() &&d1.cols()==d2.cols()? );//求協(xié)方差float Ex =0;float Ey=0;for (int i=0;i< d1.rows();++i){Ex +=d1(i);Ey +=d2(i);}Ex /=d1.rows();Ey /=d2.rows();for (int i=0;i< d1.rows();++i){CovM(0) += (d1(i)-Ex)*(d2(i)-Ey);}CovM(0) /= d1.rows() -1;return CovM; }

//2.寫入方差矩陣

//求矩陣的相關(guān)系數(shù)! //返回矩陣A的列向量的相關(guān)系數(shù)矩陣//對行向量求相關(guān)系數(shù) , 與行數(shù)無關(guān),返回 cols()*cols() 矩陣... Eigen::MatrixXf CIcSearchM::corrcoef(Eigen::MatrixXf &M) {// C(i,j)/SQRT(C(i,i)*C(j,j)).//C is the covariation Matrixint Row= M.rows();int Col= M.cols();int Order= Col;//int Order= (std::max)(Row,Col);Eigen::MatrixXf Coef(Order,Order);for (int i=0;i<Order;++i){for (int j=0;j<Order;++j){Coef(i,j)= cov((Eigen::MatrixXf)M.col(i),(Eigen::MatrixXf)M.col(j))(0);}}return Coef; }

2.優(yōu)化的代碼

使用Eigen計算1000維的方陣大概需要200ms的時間,相對于matlab默認開啟GPU加速,時間上消耗的太多了。

參考:比較OpenBLAS、Matlab、MKL、Eigen的基礎(chǔ)計算性能

優(yōu)化的代碼:

//求矩陣的相關(guān)系數(shù)!一個原始公式的簡化算法/優(yōu)化算法 //返回矩陣A的列向量的相關(guān)系數(shù)矩陣//對行向量求相關(guān)系數(shù) , 與行數(shù)無關(guān),返回 cols()*cols() 矩陣... Eigen::MatrixXf CIcSearchM::CorrcoefOpm(Eigen::MatrixXf &MI) {Eigen::MatrixXf M =MI;// C(i,j)/SQRT(C(i,i)*C(j,j)).//C is the covariation Matrix//公式://temp = mysample - repmat(mean(mysample), 10, 1);//result = temp' * temp ./ (size(mysample, 1) - 1)int Row= M.rows();int Col= M.cols();int Order= Col;//int Order= (std::max)(Row,Col);SYSTEMTIME sysP; GetLocalTime( &sysP ); int MileTsp = sysP.wSecond;int MileTP = sysP.wMilliseconds;Eigen::MatrixXf CovM(Order,Order);//(1,Col);Eigen::MatrixXf E_M(1,Col);//減去每一個維度的均值;確定一列為一個維度。//std::cout<< "Mat Src :"<<std::endl;m_Testor.print_EigenMat( M);for (int i =0;i< Col;++i){//求均值E_M(i) =M.col(i).sum()/M.rows();//std::cout<< "E_M(i)" << E_M(i)<< std::endl;M.col(i) = M.col(i)- E_M(i);//}//SYSTEMTIME sysP2; //GetLocalTime( &sysP ); //int MileTsp2 = sysP.wSecond;//int MileTP2 = sysP.wMilliseconds;//int DetaTp = MileTP2 - MileTP;//int DetaTsp = MileTsp2 -MileTsp;//std::cout<< "The Process time is :"<< DetaTsp<<"S"<< std::endl;//std::cout<< "The Process time is :"<< DetaTp<<"mS"<< std::endl;//std::cout<< "Mat E_M :"<<std::endl;m_Testor.print_EigenMat( M);CovM = M.transpose();//GetLocalTime( &sysP ); //MileTsp2 = sysP.wSecond;//MileTP2 = sysP.wMilliseconds;//DetaTp = MileTP2 - MileTP;//DetaTsp = MileTsp2 -MileTsp;//std::cout<< "The Process time is :"<< DetaTsp<<"S"<< std::endl;//std::cout<< "The Process time is :"<< DetaTp<<"mS"<< std::endl;//std::cout<< "Mat CovM :"<<std::endl;m_Testor.print_EigenMat( CovM);CovM = CovM * M ;//GetLocalTime( &sysP ); //MileTsp2 = sysP.wSecond;//MileTP2 = sysP.wMilliseconds;//DetaTp = MileTP2 - MileTP;//DetaTsp = MileTsp2 -MileTsp;//std::cout<< "The Process time is :"<< DetaTsp<<"S"<< std::endl;//std::cout<< "The Process time is :"<< DetaTp<<"mS"<< std::endl;//實現(xiàn) ./ 函數(shù) 數(shù)值計算沒有區(qū)別CovM = CovM /(Order-1)/(Order-1);//GetLocalTime( &sysP ); //MileTsp2 = sysP.wSecond;//MileTP2 = sysP.wMilliseconds;//DetaTp = MileTP2 - MileTP;//DetaTsp = MileTsp2 -MileTsp;//std::cout<< "The Process time is :"<< DetaTsp<<"S"<< std::endl;//std::cout<< "The Process time is :"<< DetaTp<<"mS"<< std::endl;//std::cout<< "Mat CovM :"<<std::endl;m_Testor.print_EigenMat( CovM);//GetLocalTime( &sysP ); //MileTsp2 = sysP.wSecond;//MileTP2 = sysP.wMilliseconds;//DetaTp = MileTP2 - MileTP;//DetaTsp = MileTsp2 -MileTsp;//std::cout<< "The Process time is :"<< DetaTsp<<"S"<< std::endl;//std::cout<< "The Process time is :"<< DetaTp<<"mS"<< std::endl;//遍歷一次for (int i=0;i< Order;++i){for (int j=0;j<Order;++j){CovM(i,j) = sqrt(CovM(i,i)*CovM(j,j) );}}//GetLocalTime( &sysP ); //MileTsp2 = sysP.wSecond;//MileTP2 = sysP.wMilliseconds;//DetaTp = MileTP2 - MileTP;//DetaTsp = MileTsp2 -MileTsp;//std::cout<< "The Process time is :"<< DetaTsp<<"S"<< std::endl;//std::cout<< "The Process time is :"<< DetaTp<<"mS"<< std::endl;//std::cout<< "Mat CovM :"<<std::endl;m_Testor.print_EigenMat( CovM);return CovM; }

?稀疏矩陣可以加速到3ms,我去!終于可以實用了.....

?使用Fast的前端實驗:https://blog.csdn.net/wishchin/article/details/49404029

參考:

復習!復習!原文鏈接:http://blog.csdn.net/goodshot/article/details/8611178

總結(jié)

以上是生活随笔為你收集整理的EKF优化:协方差coff公式、意义、SLAM中的Code优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。