当前位置: 首页 > article >正文

将机器人六轴坐标转为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;
}


http://www.kler.cn/a/376057.html

相关文章:

  • Selective Generation for Language Models 语言模型的选择性生成
  • qt QTextEdit详解
  • 基于CNN-BiLSTM的时间序列数据预测,15个输入1个输出,可以更改数据集,MATLAB代码
  • CSS例子: 横向排列的格子
  • springboot 整合 抖音 移动应用 授权
  • smuge error
  • PHP决策多功能投票小程序系统源码
  • QT for android 问题总结(QT 5.15.2)
  • 【自动化测试】APP UI 自动化(安卓)-本地环境搭建
  • Microsoft Entity Framework Core 8 示例
  • 【眼疾识别】Python+深度学习+人工智能+算法模型训练+TensorFlow+CNN卷积神经网络算法
  • 【C++ 算法进阶】算法提升七
  • mysql 的内连接、左连接、右连接有什么区别?
  • 阿里云服务器 篇九:个人博客类网站
  • Node.js——fs模块-文件流式写入
  • 从头开始学PHP之面向对象
  • 【多模态RAG】多模态RAG ColPali实践
  • Unity WebGL项目中,如果想在网页端配置数字人穿红色上衣,并让桌面端保持同步
  • 3.使用ref定义页面元素,
  • ZooKeeper 客户端API操作
  • 工厂电气及PLC【1章各种元件符号】
  • T-Mobile股票分析:T-Mobile的股价还能继续上涨吗?
  • 动态ip如何自动更换ip
  • Apache Paimon主键表的一些最佳实践
  • 3d点在立方体内(numpy,不使用for循环)
  • 免费送源码:Java+Springboot+MySQL Springboot酒店客房管理系统的设计与实现 计算机毕业设计原创定制