【发布时间】:2019-06-10 02:44:08
【问题描述】:
一个很简单的问题,但在网上找不到答案...我想可视化从激光雷达收集的点云。我可以绘制单个帧,但想循环它们以创建“动画”。我知道如何使用 drawow 处理正常的绘图,但无法使用 scatter3。如果我像在注释代码中所做的那样再次调用 scatter3,那么我在散点图中查看的帧会随着每次更新而跳动(非常不舒服)。如何在不更改散点图 UI 的情况下让 scatter3 图更新到新点,即。在它循环通过时,仍然能够在可视化点云周围平移和缩放。
编辑:该文件是 rosbag 文件,我无法附加它,因为它是 170MB。使用 scatter3 在具有普通数组的循环中使用时不会发生问题,这似乎与使用 scatter3 使用 frame = readMessages(rawBag, i) 调用 PointCloud2 类型文件有关。
编辑:问题似乎不在于轴限制,而在于图形窗口中的轴视图。初始化散点图时,正 x 位于右侧,正 y 位于屏幕外,正 z 向上,如视图 1 所示。过了一会儿,它跳转到第二个视图,其中轴有改变了,正 x 现在在屏幕外,正 y 向右,正 z 向上(两个视图都显示在图中)。这使得无法在循环中查看,因为它不断切换。那么基本上如何在不调用 scatter3(pointCloudData) 的情况下更新绘图?
rawBag = rosbag('jackwalking.bag');
frame = readMessages(rawBag, 1);
scatter3(frame{1});
hold on
for i = 1:length(readMessages(rawBag))
disp(i)
frame = readMessages(rawBag, i);
% UPDATE the 3D Scatter %
% drawnow does not work?
% Currently using:
scatter3(frame{1})
pause(.01)
end
【问题讨论】:
-
相关的代码是你删除的
% UPDATE the 3D Scatter %下的东西。请在您的问题中包括这一点。理想情况下,您会提供一个小数据集和完整的代码来显示问题。见minimal reproducible example。 -
不幸的是,我无法共享数据,因为它是一个 170mb 的 .bag 文件。只有在使用 scatter3 绘制这种格式的数据时才会出现问题......如果有一种方法可以在不制作新的情况下更新绘图,那么解决我的问题是什么?
标签: matlab matlab-figure point-clouds scatter3d