ubuntu 12月 manhattan buglist

ubuntu 扩容

https://blog.csdn.net/Carina_Cao/article/details/90270389

ubuntu 读取 matlab .mat

安装linux版matlab, 或者把库拷出来也可以

MATFile *pmatFile = NULL;
mxArray *pMxArray_pc = NULL;
mxArray *pMxArray_sn = NULL;
pmatFile = matOpen("/home/lin/slam/slz_manhattan/dotmat/1341841278.842683.png.mat","r");//使用matOpen函数打开mat文件
pMxArray_pc = matGetVariable(pmatFile, "PointCloud");//使用matGetVariable函数读取mat文件中的变量
PointCloud = (double*) mxGetData(pMxArray_pc);//使用mxGetData函数获取数据阵列中的数据
        
pMxArray_sn = matGetVariable(pmatFile, "sn");
sn = (double*) mxGetData(pMxArray_sn);

int pc_m = mxGetM(pMxArray_pc);//使用mxGetM和mxGetN函数获取数据阵列矩阵的维数
int pc_n = mxGetN(pMxArray_pc);
int sn_m = mxGetM(pMxArray_sn);//使用mxGetM和mxGetN函数获取数据阵列矩阵的维数
int sn_n = mxGetN(pMxArray_sn);
//Matrix<double, M, N> pc;
MatrixXd point_cloud_matxd( pc_m, pc_n);
MatrixXd surface_normal_matxd( sn_m, sn_n);

for(int i=0; i< sn_m; i++){
    for(int j=0; j< sn_n; j++){
         surface_normal_matxd(i,j)= *(sn+ sn_m* j+ i);  //注意:读入存储正确的关键: .mat是一列一列存的
          //cout<<"i,j: "<<i<<" "<<j<<"\n"<< surface_normal_matxd(i,j)<<endl;
          //getchar();
     }
}

https://www.cnblogs.com/excellentlhw/p/12009924.html

https://blog.csdn.net/zhuixun_/article/details/89341158?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.control

https://zlearning.netlify.app/communication/matlab/matlabcmexapi

https://blog.csdn.net/qq_41990294/article/details/109160857

官方

https://ww2.mathworks.cn/help/matlab/cc-mx-matrix-library.html;jsessionid=3a8d41f30117c5e39d4f2159cd62

linux远程scp,但是不覆盖已经存在文件的方法

https://blog.csdn.net/yihui8/article/details/79923859

size_t和int区别

https://blog.csdn.net/qq_41598072/article/details/84924997

四元数的两种写法与转换

https://zhuanlan.zhihu.com/p/97936323

四元数使用一个实数和三个虚数组成的

表示形式为 h= w+ xi +yj +zk

其实数部分可能位于第一位,也可能位于第四位,而虚数部分的三个数字顺序保持不变。

一般的,如果四元数表示中采用abcd作为说明,则认为采用的是实数在前的表示方式,如果采用qx,qy,qz,qw作为说明,则认为是实数在后的表示方式

matlab和C语言eigen库将同一个四元数转换为旋转矩阵时,获得的两个旋转矩阵互为逆矩阵!

让C++控制台程序停下来,实现暂停功能

一、针对Microsoft

#include   <stdlib.h> 
(1)第一种方式
system( "PAUSE "); 
-------------------- 
(2)第二种方式
getchar();  // 这招对QT程序也有用
--------------------- 
(3)第三种方式
Sleep();
二、针对Linux
(1)第一种方式

getchar();

Eigen中四元数Quaterniond初始

Eigen::Quaterniond q1(w, x, y, z);// 第一种方式!!实数在前
 
Eigen::Quaterniond q2(Vector4d(x, y, z, w));// 第二种方式 实数在后
 
Eigen::Quaterniond q2(Matrix3d(R));// 第三种方式
如果以第一种方式构造四元数,则实部是w, 虚部是[x,y,z];

对于第二种方式,则实部是w,虚部是[x,y,z];

对于第三种方式,则是用3x3的旋转矩阵初始化四元数。

 

整数除法int/int 得到浮点数:  int. /int 、 int/double(int)

float ConvergeAngle = 1./180* pi;
if(bin[i].size()/ (double)(num_MF_cano) > ratio)

随机数

// 随机数种子 防止每次rand一样
srand( (unsigned)time( NULL ) );
int rand_num= rand() % num_MF 

Eigen 3.2.29 操作记录.

基本初始化
Quaterniond q_gt0(0.2239, -0.4871, 0.7673, -0.3519);
Matrix3d R_gt0= q_gt0.toRotationMatrix();
Vector3d t_gt0(-2.5508, 0.9872, 1.1019);

特殊结构初始化
Matrix3d R_update= Matrix3d::Ones();
Matrix3d M = Matrix3d::Zero();
Vector4d q_vec= Vector4d::Random();  // 0-1 随机数

未知大小定义与初始化
MatrixXd nVp_inlier(3, index_inlier.size());
MatrixXd Paa = MatrixXd::Zero(3, num_MF);

旋转矩阵到角轴
AngleAxisd temp_AA;
temp_AA.fromRotationMatrix( R.transpose()* R);

角轴到旋转矩阵
AngleAxisd R_temp_aa(mean_Paa_temp.norm(), Vector3d(aa(0,0), aa(1,0), aa(2,0)));
MatrixXd R_temp= R_temp_aa.matrix();

四元数到旋转矩阵
Matrix3d R= q_R.toRotationMatrix().inverse();


取行列方法
Ra << R.col((a+3)%3).transpose(), R.col((a+4)%3).transpose(), R.col((a+5)%3).transpose();
nVp_inlier.col(i)= nVps.col(index_inlier[i]); 

按元素除法、取绝对值、乘法
eta_inlier.cwiseQuotient(nVp_inlier.row(2).cwiseAbs());
alfa.cwiseQuotient(tan_alfa).cwiseProduct(nVp_inlier.row(0)).cwiseQuotient(nVp_inlier.row(2))

array 与matrix互相转换、 asin()反三角函数
MatrixXd alfa= eta_inlier.array().asin().matrix(); //array has  asin, matrix don't                 

isnan、isinf
auto select= (1- f.array().isNaN()).matrix();
f.array().isInf()

二范数平方
F.col(i).squaredNorm()

二范数
q_vec /= q_vec.norm();

.finished()方法
MatrixXd M_ = Ra.transpose() * (MatrixXd (3,1) << ma_p, 1).finished();

叉乘
Vector3d v3 = v1.cross(v2);

点乘 dot

svd分解
JacobiSVD<MatrixXd> svd( M, ComputeThinU | ComputeThinV);
auto D= svd.singularValues();
auto U= svd.matrixU();
auto V= svd.matrixV();

迹:
(R.transpose()* R_update).trace()

行列式
R.determinant() > 0

转置
R.transpose()

逆
q_R.toRotationMatrix().inverse()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值