open3d.cpu.pybind.geometry.PointCloud' object has no attribute 'point_size'
时间: 2023-12-14 22:03:34 浏览: 34
这个错误提示说明open3d.cpu.pybind.geometry.PointCloud对象没有point_size属性。这可能是因为您正在访问一个过时的属性名或版本,或者您的代码中有一些逻辑错误导致该属性未正确设置。您可以尝试查看文档或源代码,以确定正确的属性名称和使用方法,并检查您的代码是否正确设置了该属性。如果您无法解决问题,请提供更多上下文或代码以帮助我们更好地理解问题。
相关问题
open3d.cpu.pybind.geometry.PointCloud' object has no attribute 'copy'
如果你遇到了 `"open3d.cpu.pybind.geometry.PointCloud' object has no attribute 'copy'"` 错误,可能是因为你使用的是 Open3D 0.9.0 或更低版本,而在这些版本中,`PointCloud` 对象确实没有 `copy` 方法。
如果你想要进行深拷贝,可以使用 `deepcopy` 函数来实现:
```python
import copy
pcd_copy = copy.deepcopy(pcd)
```
这样,`pcd_copy` 就是 `pcd` 的深拷贝了。需要注意的是,深拷贝会创建一个新的对象,因此对 `pcd_copy` 的修改不会影响到 `pcd`。
AttributeError: 'open3d.open3d_pybind.geometry.PointCloud' object has no attribute 'triangulate
很抱歉,我之前的回答有误。Open3D的PointCloud对象确实没有`triangulate`方法。为了将点云三角化,可以使用以下代码:
```python
import rospy
import moveit_msgs.msg as moveit_msgs
import open3d as o3d
import numpy as np
def point_cloud_to_scene(point_cloud_topic, camera_frame_id, scene_publisher):
# Subscribe to point cloud topic
point_cloud = rospy.wait_for_message(point_cloud_topic, sensor_msgs.msg.PointCloud2)
# Convert point cloud to numpy array
points = np.array(list(pc2.read_points(point_cloud, skip_nans=True)))
# Convert numpy array to Open3D point cloud
pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(points)
# Triangulate point cloud
tri = o3d.geometry.TriangleMesh.create_from_point_cloud_alpha_shape(pcd, alpha=0.03)
# Convert Open3D triangle mesh to MoveIt scene
vertices = np.asarray(tri.vertices)
triangles = np.asarray(tri.triangles)
scene_msg = moveit_msgs.PlanningScene()
scene_msg.is_diff = True
object_msg = moveit_msgs.PlanningSceneWorld()
object_msg.collision_objects.append(moveit_msgs.CollisionObject())
object_msg.collision_objects[0].id = "point_cloud"
object_msg.collision_objects[0].header.frame_id = camera_frame_id
object_msg.collision_objects[0].meshes.append(moveit_msgs.Mesh())
object_msg.collision_objects[0].meshes[0].vertices = [moveit_msgs.Vertex(x=vertices[i][0], y=vertices[i][1], z=vertices[i][2]) for i in range(vertices.shape[0])]
object_msg.collision_objects[0].meshes[0].triangles = [moveit_msgs.Triangle(mesh.vertices[i][0], mesh.vertices[i][1], mesh.vertices[i][2]) for i in range(triangles.shape[0])]
scene_msg.world.collision_objects = object_msg.collision_objects
scene_publisher.publish(scene_msg)
```
这个函数会将点云转换为Open3D的PointCloud对象,然后使用`create_from_point_cloud_alpha_shape`函数进行三角化,生成Open3D的TriangleMesh对象。接下来,将TriangleMesh对象转换为MoveIt环境scene,并发布到MoveIt Planning Scene的话题上。
请注意,这个函数需要安装Open3D库。