gpt4 book ai didi

python - 如何高效地将ROS PointCloud2转换为pcl点云并在python中可视化

转载 作者:太空狗 更新时间:2023-10-30 00:19:56 33 4
gpt4 key购买 nike

我正在尝试通过 ROS 中的 kinect 点云对点云进行一些分割。到目前为止,我有这个:

import rospy
import pcl
from sensor_msgs.msg import PointCloud2
import sensor_msgs.point_cloud2 as pc2
def on_new_point_cloud(data):
pc = pc2.read_points(data, skip_nans=True, field_names=("x", "y", "z"))
pc_list = []
for p in pc:
pc_list.append( [p[0],p[1],p[2]] )

p = pcl.PointCloud()
p.from_list(pc_list)
seg = p.make_segmenter()
seg.set_model_type(pcl.SACMODEL_PLANE)
seg.set_method_type(pcl.SAC_RANSAC)
indices, model = seg.segment()

rospy.init_node('listener', anonymous=True)
rospy.Subscriber("/kinect2/hd/points", PointCloud2, on_new_point_cloud)
rospy.spin()

这似乎可行,但由于 for 循环,速度非常慢。我的问题是:

1) 如何有效地将 PointCloud2 消息转换为 pcl 点云

2) 我如何想象云。

最佳答案

import rospy
import pcl
from sensor_msgs.msg import PointCloud2
import sensor_msgs.point_cloud2 as pc2
import ros_numpy

def callback(data):
pc = ros_numpy.numpify(data)
points=np.zeros((pc.shape[0],3))
points[:,0]=pc['x']
points[:,1]=pc['y']
points[:,2]=pc['z']
p = pcl.PointCloud(np.array(points, dtype=np.float32))

rospy.init_node('listener', anonymous=True)
rospy.Subscriber("/velodyne_points", PointCloud2, callback)
rospy.spin()

我更喜欢使用 ros_numpy 模块首先转换为 numpy 数组并从该数组初始化点云。

关于python - 如何高效地将ROS PointCloud2转换为pcl点云并在python中可视化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39772424/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com