You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Halcon如何基于已有数据创建或调整hom_mat3D三维齐次变换矩阵

基于预获取数据创建Halcon三维齐次变换矩阵的方法

Halcon中create_matrix生成的通用Matrix类型,和三维变换专用的HomMat3D是完全独立的两类数据结构,不存在隐式类型转换,直接传入hom_mat3d_*系列算子必然报类型不匹配错误。另外你之前代码里调用的hom_mat2d_compose是二维齐次矩阵合成算子,本身也不支持三维变换计算,属于接口选错。

不需要绕通用Matrix做中转,直接按以下方式创建即可:

  • 如果你已经拿到了4×4齐次变换矩阵的全部16个元素值(3×3旋转矩阵+3个平移分量+固定末行[0,0,0,1]),直接以单位齐次矩阵为基底,逐元素赋值生成目标矩阵:
* 生成三维单位齐次矩阵作为基底
hom_mat3d_identity (HomMat3D)

* 写入3×3旋转矩阵分量,Rxx为你从其他流程拿到的对应位置旋转值
hom_mat3d_set(HomMat3D, 0, 0, R11, HomMat3D)
hom_mat3d_set(HomMat3D, 0, 1, R12, HomMat3D)
hom_mat3d_set(HomMat3D, 0, 2, R13, HomMat3D)
hom_mat3d_set(HomMat3D, 1, 0, R21, HomMat3D)
hom_mat3d_set(HomMat3D, 1, 1, R22, HomMat3D)
hom_mat3d_set(HomMat3D, 1, 2, R23, HomMat3D)
hom_mat3d_set(HomMat3D, 2, 0, R31, HomMat3D)
hom_mat3d_set(HomMat3D, 2, 1, R32, HomMat3D)
hom_mat3d_set(HomMat3D, 2, 2, R33, HomMat3D)

* 写入X/Y/Z三个方向平移分量,Tx/Ty/Tz为外部传入的平移值
hom_mat3d_set(HomMat3D, 0, 3, Tx, HomMat3D)
hom_mat3d_set(HomMat3D, 1, 3, Ty, HomMat3D)
hom_mat3d_set(HomMat3D, 2, 3, Tz, HomMat3D)

* 齐次矩阵末行固定为[0,0,0,1],单位矩阵初始化时已自动赋值,无需修改
  • 如果你之前已经把所有矩阵值存入了通用Matrix对象,不需要重新录入原始数据,先把元素从通用矩阵中读出,再按上述逻辑赋值即可:
* 从4×4通用矩阵中读取对应位置的数值
get_value_matrix(InputMatrix, 0, 0, R11)
get_value_matrix(InputMatrix, 0, 1, R12)
get_value_matrix(InputMatrix, 0, 2, R13)
get_value_matrix(InputMatrix, 0, 3, Tx)
get_value_matrix(InputMatrix, 1, 0, R21)
get_value_matrix(InputMatrix, 1, 1, R22)
get_value_matrix(InputMatrix, 1, 2, R23)
get_value_matrix(InputMatrix, 1, 3, Ty)
get_value_matrix(InputMatrix, 2, 0, R31)
get_value_matrix(InputMatrix, 2, 1, R32)
get_value_matrix(InputMatrix, 2, 2, R33)
get_value_matrix(InputMatrix, 2, 3, Tz)

注意事项:生成的HomMat3D可直接通过hom_mat3d_to_pose转为位姿类型用于刚性变换计算,正式使用前建议校验旋转矩阵的正交性,避免传入非法变换值导致计算结果偏差。如果是多步变换合成,统一使用hom_mat3d_compose算子做矩阵乘法,不要混用2d系列变换接口。

内容的提问来源于stack exchange,提问作者Malinko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 00:57:21