c++ pcl 法向量 转机器人欧拉角

一个向量是无法计算出机器人的姿态的 ,可以将该法向量作为机器人的z方向向量  ,然后指定x方向向量 ,一般为(0,0,-1)用于焊接姿态,具体需要什么姿态调节x的向量即可,

然后根据右手定则知道y方向向量,最后调用eulerAngles 方法计算出欧拉角,具体代码如下:

1,向量转换矩阵

Eigen::Matrix4f pclfunction::vectorToMatrix(const Eigen::Vector3f AxisX,
                                            const Eigen::Vector3f AxisZ,
                                            pcl::PointXYZ point) {
  Eigen::Matrix4f rotM = Eigen::Matrix4f::Identity();

  Eigen::Vector3f curZ(AxisZ(0), AxisZ(1),
                       AxisZ(2));  // 定义z的指向
  Eigen::Vector3f curX(AxisX(0), AxisX(1),
                       AxisX(2));  // 定义x的指向

  curX /= curX.norm();  // 归一化
  Eigen::Vector3f curY = curZ.cross(curX);
  curY /= curY.norm();
  // 重新算出X方向
  curX = curY.cross(curZ);
  curX /= curX.norm();

  rotM(0, 0) = curX(0);
  rotM(0, 1) = curY(0);
  rotM(0, 2) = curZ(0);
  rotM(1, 0) = curX(1);
  rotM(1, 1) = curY(1);
  rotM(1, 2) = curZ(1);
  rotM(2, 0) = curX(2);
  rotM(2, 1) = curY(2);
  rotM(2, 2) = curZ(2);
  rotM(0, 3) = point.x;
  rotM(1, 3) = point.y;
  rotM(2, 3) = point.z;

  return rotM;
}

2,矩阵转欧拉角

Eigen::Vector3f pclfunction::MatrixtorToEulerAngles(Eigen::Matrix4f Matrix) {
  Eigen::Matrix3f AnglesMat = Matrix.block<3, 3>(0, 0);

  return AnglesMat.eulerAngles(2, 1, 0) * 180 / 3.1415926;
}

end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值