如何在HDevelop及Halcon.NET中创建pose-array?
在HDevelop和Halcon.NET中创建Pose数组的正确方法
HDevelop 实现方式
Pose数组本质是二维元组,每个Pose由6个参数(Tx, Ty, Tz, Rx, Ry, Rz)组成,不能直接用tuple_concat将所有参数扁平化拼接(这会生成单一冗长的一维数组),正确方法如下:
直接构造二维元组:
利用HDevelop的嵌套元组语法,直接定义包含多个Pose的数组:PoseArray := [[0, 0, 0, 0, 0, 0], [10, 20, 30, 0.1, 0.2, 0.3]]动态添加Pose元素:
先初始化空元组,再逐个插入完整的Pose元组:gen_empty_tuple (PoseArray) Pose1 := [0, 0, 0, 0, 0, 0] Pose2 := [10, 20, 30, 0.1, 0.2, 0.3] tuple_insert(PoseArray, -1, Pose1, PoseArray) tuple_insert(PoseArray, -1, Pose2, PoseArray)
验证时可通过tuple_length(PoseArray)查看Pose数量,每个子元组长度应为6,与find_surface_model返回的结构一致。
Halcon.NET 实现方式
在.NET环境中,Halcon的Pose数组对应嵌套的HTuple结构,每个Pose是独立的HTuple元素,而非扁平化的一维序列:
逐个构造再组合:
// 定义单个Pose的HTuple HTuple pose1 = new HTuple(0, 0, 0, 0, 0, 0); HTuple pose2 = new HTuple(10, 20, 30, 0.1, 0.2, 0.3); // 组合成Pose数组 HTuple poseArray = new HTuple(new HTuple[] { pose1, pose2 });直接嵌套构造:
HTuple poseArray = new HTuple( new HTuple(0, 0, 0, 0, 0, 0), new HTuple(10, 20, 30, 0.1, 0.2, 0.3) );
注意:若将所有Pose参数直接传入同一个HTuple构造函数(如new HTuple(0,0,0,0,0,0,10,20,...)),会生成一维数组,这是错误的写法。
内容的提问来源于stack exchange,提问作者Malinko
相关产品推荐
相关产品推荐

