Files
hivecore_robot_vision/tools/read_stl.py
liangyuxuan ea1a985b44 add tools
2025-11-26 10:30:55 +08:00

50 lines
1.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import logging
import numpy as np
import open3d as o3d
def read_stl(stl_path: str, save_path: str, view_pointcloud: bool = False) -> None:
mesh = o3d.io.read_triangle_mesh(stl_path)
mesh.scale(0.001, center=[0, 0, 0])
mesh.compute_vertex_normals()
pcd_model = mesh.sample_points_uniformly(number_of_points=50000)
# pcd_model = pcd_model.voxel_down_sample(voxel_size=0.01)
center = pcd_model.get_center().flatten()
R = np.eye(4)
R[0, 3], R[1, 3], R[2, 3] = -center
pcd_model.transform(R)
R = np.array(
[[0, 0, 1, 0],
[0, 1, 0, 0],
[-1, 0, 0, 0],
[0, 0, 0, 1]],
)
pcd_model.transform(R)
if view_pointcloud:
point = [
[0, 0, 0], [1, 0, 0], [0, 1, 0], [0, 0, 1]
] # 画点:原点、第一主成分、第二主成分
lines = [
[0, 1], [0, 2], [0, 3]
] # 画出三点之间两两连线
colors = [
[1, 0, 0], [0, 1, 0], [0, 0, 1]
]
# 构造open3d中的LineSet对象用于主成分显示
line_set = o3d.geometry.LineSet(points=o3d.utility.Vector3dVector(point), lines=o3d.utility.Vector2iVector(lines))
line_set.colors = o3d.utility.Vector3dVector(colors)
o3d.visualization.draw_geometries([pcd_model, line_set])
# success = o3d.io.write_point_cloud(save_path, pcd_model)
# logging.info(f"PCD_0, 写入结果: {success}")
if __name__ == "__main__":
read_stl()