【c++】eigen 实现位姿绕指定轴旋转

  • 代码假设位姿和指定旋转轴均在同一坐标系下,不涉及坐标系变换
// 位姿绕指定轴旋转
// - pose: 要旋转的位姿
// - axis_position: 指定旋转轴的位置
// - axis_direction: 指定旋转轴的方向
// - rotate_angle: 旋转角,单位为弧度
void rotate_pose_around_axis(Eigen::Isometry3d& pose, const Eigen::Vector3d& axis_position, const Eigen::Vector3d& axis_direction, double rotate_angle) {
    // 定义指定轴的旋转向量
    Eigen::AngleAxisd rotate_vector = Eigen::AngleAxisd(rotate_angle, axis_direction);

    // 位姿的位置绕指定轴旋转
    Eigen::Vector3d position = pose.translation() - axis_position;
    position                 = rotate_vector * position + axis_position;
    pose.translation()       = position;

    // 位姿的朝向绕指定轴旋转
    pose.linear() = rotate_vector * pose.linear();
    // 等同于 pose.prerotate(rotate_vector);
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值