采用C++的eigen构造变换矩阵(Eigen::Isometry3d)的使用方式

本文介绍了如何在C++中利用Eigen库中的Eigen::Isometry3d类进行三维空间的旋转变换和平移操作,包括创建单位矩阵、定义旋转矩阵和平移向量,以及应用这些变换到对象上。
摘要由CSDN通过智能技术生成

1、采用Eigen::Isometry3d构造变换矩阵

构造单位矩阵

Eigen::Isometry3d T = Eigen::Isometry3d::Identity()

2、采用Eigen::Isometry3d进行旋转变换

(1)定义旋转矩阵、平移向量

(2)进行旋转或者平移的变换

Eigen::Matrix3d rotation = Eigen::Matrix3d::Identity();   //定义旋转向量
rotation << 1, 0, 0,
            0, 1, 0,
            0, 0, 1;         // 旋转向量赋值
Eigen::Vector3d t1(1,2,3);  // 定义平移向量

T.translate(t1);  // 平移
T.rotate(rotation);  //旋转

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
两个 Eigen::Vector3d 可以表示两个三维空间中的点的位置,但无法直接求出相对位姿。要求出相对位姿,需要知道这两个点在某个参考坐标系下的坐标。 假设这两个点分别为 A 和 B,在某个参考坐标系下的坐标分别为 $P_A$ 和 $P_B$。那么可以通过以下步骤求出它们之间的相对位姿: 1. 将点 A 和点 B 的坐标分别减去参考坐标系的原点坐标,得到它们相对于参考坐标系原点的坐标 $P_A'$ 和 $P_B'$。 2. 计算从点 A 到点 B 的向量 $v = P_B' - P_A'$。 3. 计算向量 $v$ 的旋转角度和旋转轴,可以使用 Eigen 库的 AngleAxisd 类来表示旋转。 4. 根据旋转角度和旋转轴,构造出相对位姿的变换矩阵,可以使用 Eigen 库的 Isometry3d 类来表示变换矩阵。 代码示例: ```c++ #include <Eigen/Core> #include <Eigen/Geometry> Eigen::Vector3d A, B; // 两个点的坐标 Eigen::Vector3d P_A = ...; // 点 A 在参考坐标系下的坐标 Eigen::Vector3d P_B = ...; // 点 B 在参考坐标系下的坐标 // 将点 A 和点 B 的坐标转换为相对于参考坐标系原点的坐标 Eigen::Vector3d P_A_prime = P_A - Eigen::Vector3d::Zero(); Eigen::Vector3d P_B_prime = P_B - Eigen::Vector3d::Zero(); // 计算从点 A 到点 B 的向量 Eigen::Vector3d v = P_B_prime - P_A_prime; // 计算旋转角度和旋转轴 Eigen::AngleAxisd rotation(v.normalized(), v.norm()); // 构造出相对位姿的变换矩阵 Eigen::Isometry3d relative_pose = Eigen::Isometry3d::Identity(); relative_pose.rotate(rotation); relative_pose.translation() = P_A; ``` 这样就可以得到从点 A 到点 B 的相对位姿了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值