Eigen相关操作

Eigen使用相关问题

1. Diagonal Matrix 的相关操作

当使用vector进行diagonal matrix创建的时候,可以通过

    Vector3 aa{1,2,3};
    cout << Eigen::Matrix3d(aa.array().pow(2).matrix().asDiagonal()) << endl;

进行创建,但是这里Diagonal Matrix并没有 << 方法,需要转换为Matrix3d进行打印。
也可以通过array()返回进行 power 的操作:

aa.array().pow(2).matrix().asDiagonal();

也可以直接进行构建diagonal矩阵:

aa.asDiagonal();

同样的,我们也可以直接进行Diagonal 矩阵的初始化,即:

Eigen::DiagonalMatrix<double,3> bb;

2. Isometry3d的使用

在我们构建isometry的时候,必须先初始化为单位阵;

Eigen::Isometry3d aa = Eigen::Isometry3d::Identity();

另外,isometry的构建可以通过rotate和pretranslate的方法构建,并且可以通过matrix返回matrix4d类型的变量,其中aa代表的是isometry矩阵,bb代表的是旋转向量。

aa.rotate(Eigen::AngleAxisd(bb.head<3>().norm(), bb.head<3>().normalized()).matrix());
base_T_imu.pretranslate(bb.tail<3>());

pretranslate 的含义是在使用translation的时候不会进行rotate。

3. Matrix和vector的相关操作

Matrix访问元素可以之间通过
直接访问aa(x,y)
块访问aa.block<dim1,dim2>(startx,starty);
块访问aa.topLeftCorner<dim1,dim2>();
Vector访问元素可以通过
直接访问bb(x)
块访问bb.segment<n>(start);
快访问bb.tail<n>()

4. Matrix相关的宏定义

// Create handy typedefs and constants for square-size matrices
// MatrixMN, MatrixN = MatrixNN, I_NxN, and Z_NxN, for M,N=1..9
#define GTSAM_MAKE_MATRIX_DEFS(N)   \
typedef Eigen::Matrix<double, N, N> Matrix##N;  \
typedef Eigen::Matrix<double, 1, N> Matrix1##N;  \
typedef Eigen::Matrix<double, 2, N> Matrix2##N;  \
typedef Eigen::Matrix<double, 3, N> Matrix3##N;  \
typedef Eigen::Matrix<double, 4, N> Matrix4##N;  \
typedef Eigen::Matrix<double, 5, N> Matrix5##N;  \
typedef Eigen::Matrix<double, 6, N> Matrix6##N;  \
typedef Eigen::Matrix<double, 7, N> Matrix7##N;  \
typedef Eigen::Matrix<double, 8, N> Matrix8##N;  \
typedef Eigen::Matrix<double, 9, N> Matrix9##N;  \
static const Eigen::MatrixBase<Matrix##N>::IdentityReturnType I_##N##x##N = Matrix##N::Identity(); \
static const Eigen::MatrixBase<Matrix##N>::ConstantReturnType Z_##N##x##N = Matrix##N::Zero();

GTSAM_MAKE_MATRIX_DEFS(1);
GTSAM_MAKE_MATRIX_DEFS(2);
GTSAM_MAKE_MATRIX_DEFS(3);
GTSAM_MAKE_MATRIX_DEFS(4);
GTSAM_MAKE_MATRIX_DEFS(5);
GTSAM_MAKE_MATRIX_DEFS(6);
GTSAM_MAKE_MATRIX_DEFS(7);
GTSAM_MAKE_MATRIX_DEFS(8);
GTSAM_MAKE_MATRIX_DEFS(9);
#define GTSAM_MAKE_VECTOR_DEFS(N)                \
  typedef Eigen::Matrix<double, N, 1> Vector##N; \
  static const Eigen::MatrixBase<Vector##N>::ConstantReturnType Z_##N##x1 = Vector##N::Zero();

GTSAM_MAKE_VECTOR_DEFS(4);
GTSAM_MAKE_VECTOR_DEFS(5);
GTSAM_MAKE_VECTOR_DEFS(6);
GTSAM_MAKE_VECTOR_DEFS(7);
GTSAM_MAKE_VECTOR_DEFS(8);
GTSAM_MAKE_VECTOR_DEFS(9);
GTSAM_MAKE_VECTOR_DEFS(10);
GTSAM_MAKE_VECTOR_DEFS(11);
GTSAM_MAKE_VECTOR_DEFS(12);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值