Eigen使用

1.赋值操作

using Vec3 = Eigen::Matrix<double, 3, 1>;
Vec3 gyro_noise_std;
gyro_noise_std.setConstant(0.000282);
//将vec中的所有值都设为相同数值

2.四元数与矩阵转换

//四元数转旋转矩阵
Eigen::Matrix4d T_W_BC = Eigen::Matrix4d::Identity();
Eigen::Quaterniond q(q_w,q_x,q_y,q_z);
q.normalize();
T_W_BC.block<3,3>(0,0) = q.toRotationMatrix();
T_W_BC.block<3,1>(0,3) << pos_x, pos_y, pos_z;
//旋转矩阵转四元数
Eigen::Matrix3d R_mat = Eigen::Matrix3d::Identity();
Eigen::Quaterniond q(R_mat);

3.Sophus与Eigen转换

SE3d T_w_i;
Eigen::Vec3d p = T_w_i.translation();
Eigen::Quaterniond q(T_w_i.so3().matrix());
savetwb << double(last_state_t_ns) * 1e-9 << " "
            << p.x() << " " << p.y() << " " << p.z() << " "
            << q.x() << " " << q.y() << " " << q.z() << " " << q.w() << " "
            << std::endl;

4.Eigen旋转矩阵与轴角转换

Eigen::Matrix3d axis_to_rot_mat(const Eigen::Vector3d& angle_axis) {
  Eigen::Matrix3d rot_mat;
  const double angle = angle_axis.norm();
  if (angle <= 1e-5) {
      rot_mat = Eigen::Matrix3d::Identity();
  }
  else {
      const Eigen::Vector3d axis = angle_axis / angle;
      rot_mat = Eigen::AngleAxisd(angle, axis).toRotationMatrix();
  }
  return rot_mat;
}

//example
const Eigen::Matrix3d rot_gt = to_rot_mat(10.0 * M_PI / 180 * Eigen::Vector3d{1.0, 0, 0}.normalized());
Eigen::Vector3d mat_to_angle_axis(const Eigen::Matrix3d& rot_mat) {
  const Eigen::AngleAxisd angle_axis(rot_mat);
  return angle_axis.axis() * angle_axis.angle();
}

### 使用CMake配置和构建Eigen项目 #### 准备工作 为了成功使用CMake来配置和构建Eigen项目,首先需要确保已经获取了Eigen库的源码。由于Eigen是一个头文件库,其主要功能由一系列模板类实现,因此理论上可以直接包含这些头文件而无需编译。然而,在某些情况下(如集成测试或特定平台支持),仍然可能希望通过完整的构建过程来进行验证。 #### 配置环境变量 对于Windows用户来说,遇到`Could NOT find Eigen3 (missing: Eigen3_DIR)`错误通常是因为未正确设置路径。可以通过指定`EIGEN3_INCLUDE_DIR`指向Eigen根目录下的`include/eigen3`位置解决此问题[^5]。 #### CMakeLists.txt编写指南 创建一个简单的`CMakeLists.txt`文件用于描述项目的依赖关系以及如何链接到Eigen: ```cmake cmake_minimum_required(VERSION 3.10) project(MyProjectUsingEigen) set(CMAKE_CXX_STANDARD 17) find_package(Eigen3 REQUIRED) add_executable(my_program main.cpp) target_include_directories(my_program PRIVATE ${EIGEN3_INCLUDE_DIRS}) ``` 这段脚本定义了一个名为`MyProjectUsingEigen`的新工程,并指定了最低版本需求为CMake 3.10以上;接着设置了C++标准至C++17;最后尝试寻找系统中存在的Eigen包并将其加入可执行程序的目标属性中[^4]。 #### 执行具体操作命令 完成上述准备工作之后,则可以按照以下流程依次运行相应的CMake指令来完成整个构建过程: - **配置阶段** ```bash mkdir build && cd build cmake .. \ -G "Visual Studio 16 2019" -A x64 \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DEIGEN3_INCLUDE_DIR=/path/to/eigen/include/eigen3/ ``` 这里假设正在使用的是Visual Studio作为生成器(`Generator`),并且选择了64位架构为目标平台。同时设定了调试信息级别较高的发布模式(RelWithDebInfo),并通过显式提供`EIGEN3_INCLUDE_DIR`参数解决了潜在找不到Eigen的问题[^3]。 - **实际构建** ```bash cmake --build . --config RelWithDebInfo ``` 此处利用之前生成好的解决方案/项目文件进行具体的编译任务处理[^2]。 - **安装部署(如有必要)** 如果希望将编译产物复制到其他地方供后续分发或其他用途时,还可以继续追加一条安装命令: ```bash cmake --build . --config RelWithDebInfo --target install ``` 不过需要注意,默认情况下这一步骤可能会覆盖掉原有安装位置的内容,请谨慎选择是否启用该选项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值