我正在使用ROS-Kinetic。我有一个PointCloud类型的Pointcloud。我已经在飞机上投影了相同的点云。我想将平面点云转换为类型sensor_msgs / Image的图像。
toROSMsg(cloud, image);
在此处输入代码会引发错误
error: ‘const struct pcl::PointXYZI’ has no member named ‘rgb’
memcpy (pixel, &cloud (x, y).rgb, 3 * sizeof(uint8_t));
请在这方面启发我。如果可能,还附有代码段。
预先感谢
答案 0 :(得分:1)
如果toROSMsg()抱怨您的输入云没有'rgb'成员,请尝试输入pcl :: PointXYZRGB类型的云。这是PCL处理的另一种点云。您可以查看documentation的PCL点类型。
使用以下几行转换为pcl :: PointXYZRGB类型:
if __name__ == '__main__':
fn = sys.argv[1]
sg = SegmentGenerator(fn)
print("Num segments:", len(sg.segments))
i = 0
value = 'x'
while value:
value = sg.next()
i += 1
print(i, value)
print("Num iterations:", i)
然后将函数调用为:
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloudrgb (new pcl::PointCloud<pcl::PointXYZRGB>);
pcl::copyPointCloud(*cloud, *cloudrgb);
答案 1 :(得分:0)
您尝试实现的是2D体素化。我假设您想实现一些Thrun所解释的“逆传感器模型”(ISM),对吗? 通常将这种方法直接实现到映射算法中,以规避简单ISM的详尽计算。 因此,您几乎找不到开箱即用的解决方案。
无论如何,您可以通过多种方式做到这一点:
或