将机器人六轴坐标转为4*4矩阵(Opencv/C++)

已知机器人六轴坐标x,y,z,rx,ry,rz,其中xyz表示空间位置坐标,rx,ry,rz是欧拉角;

需要将这六个值转为4*4的矩阵以便后续其它处理运算。

代码如下:

复制代码
#include <opencv2/core.hpp>
#include <iostream>
#include <cmath>

using namespace cv;
using namespace std;

// 将 xyz 和欧拉角转换为 4x4 矩阵
Mat xyzEulerToMatrix(double x, double y, double z, double rx, double ry, double rz) {
  // 转换为弧度
  rx = rx * CV_PI / 180.0;
  ry = ry * CV_PI / 180.0;
  rz = rz * CV_PI / 180.0;

  // 构建旋转矩阵
  Mat rotX = (Mat_<double>(3, 3) <<
    1.0, 0.0, 0.0,
    0.0, cos(rx), -sin(rx),
    0.0, sin(rx), cos(rx)
  );

  Mat rotY = (Mat_<double>(3, 3) <<
    cos(ry), 0.0, sin(ry),
    0.0, 1.0, 0.0,
    -sin(ry), 0.0, cos(ry)
  );

  Mat rotZ = (Mat_<double>(3, 3) <<
    cos(rz), -sin(rz), 0.0,
    sin(rz), cos(rz), 0.0,
    0.0, 0.0, 1.0
  );

  // 构建平移矩阵
  Mat translation = (Mat_<double>(4, 4) <<
    1.0, 0.0, 0.0, x,
    0.0, 1.0, 0.0, y,
    0.0, 0.0, 1.0, z,
    0.0, 0.0, 0.0, 1.0
  );

  // 旋转矩阵相乘
  Mat rotation = rotZ * rotY * rotX;

  // 合并旋转和平移
  Mat matrix = (Mat_<double>(4, 4) <<
    rotation.at<double>(0, 0), rotation.at<double>(0, 1), rotation.at<double>(0, 2), x,
    rotation.at<double>(1, 0), rotation.at<double>(1, 1), rotation.at<double>(1, 2), y,
    rotation.at<double>(2, 0), rotation.at<double>(2, 1), rotation.at<double>(2, 2), z,
    0.0, 0.0, 0.0, 1.0
  );

  return matrix;
}

int main() {
  // 定义参数
  double x = 111.0;
  double y = 222.0;
  double z = 333.0;
  double rx = 60.0;
  double ry = 30.0;
  double rz = -90.0;

  // 计算 4x4 矩阵
  Mat matrix = xyzEulerToMatrix(x, y, z, rx, ry, rz);

  // 打印结果
  cout << "4x4 矩阵:" << endl << matrix << endl;

  return 0;
}
相关推荐
presenttttt8 分钟前
用Python和OpenCV从零搭建一个完整的双目视觉系统(四)
开发语言·python·opencv·计算机视觉
闻缺陷则喜何志丹18 分钟前
【前缀和 BFS 并集查找】P3127 [USACO15OPEN] Trapped in the Haybales G|省选-
数据结构·c++·前缀和·宽度优先·洛谷·并集查找
序属秋秋秋2 小时前
《C++初阶之内存管理》【内存分布 + operator new/delete + 定位new】
开发语言·c++·笔记·学习
杨小扩6 小时前
第4章:实战项目一 打造你的第一个AI知识库问答机器人 (RAG)
人工智能·机器人
十秒耿直拆包选手9 小时前
Qt:主窗体(QMainwindow)初始化注意事项
c++·qt
合力亿捷-小亿9 小时前
从应答工具到服务大脑:智能客服机器人三代技术升级路径及3大行业场景落地全解析
机器人
jndingxin10 小时前
OpenCV 人脸分析----人脸识别的一个经典类cv::face::EigenFaceRecognizer
人工智能·opencv·计算机视觉
】余1853816280011 小时前
矩阵系统源码搭建与定制化开发,支持OEM
线性代数·矩阵
霖0011 小时前
C++学习笔记三
运维·开发语言·c++·笔记·学习·fpga开发
mit6.82411 小时前
[shad-PS4] Vulkan渲染器 | 着色器_重新编译器 | SPIR-V 格式
c++·游戏引擎·ps4