我们的项目是将Lidar系统集成到虚拟现实(统一)中,I可以通过ROS桥实现这种集成。下一步是在将点云数据发送到统一系统之前对其进行处理。
问题没有处理,从传感器到统一可视化只有1秒的延迟。但是在ROS中处理点云数据会导致很大的延迟(大约5秒)。
原始数据->发布pointcloud2消息->subscribe点云2 -> pointXYZRGB -> (处理) -> pointcloud2消息->发布它。
我知道,最好是从传感器接收原始数据,而不将其转换为pointcloud2消息。但在蟒蛇中做这件事对我来说是很有挑战性的。我在c++中找到了一个简单的例子。https://medium.com/@yohei.kajiwara/vlp16-c-quick-example-35b9ceea2059
但我不知道什么是最可靠的方法。请给我一个关于这个问题的建议。
诚挚的问候
圣秀拜恩
发布于 2020-05-28 18:11:36
如果你关心的是速度,那就有几件事。
Velodyne司机具有接收数据包的能力&使用nodelet将其合并成具有零拷贝访问权限的点云。ROS节点集类似于节点,但由于复制较少,对大数据的效率更高。司机和点云.您可以通过启动文件VLP16_points.launch来调用它,该文件演示了如何组合这样的节点集。代码是相当可读的,所以您可以了解它们如何设置代码以供参考。如果您没有尝试过此方法,然后进入Unity,则这是您的最低基线。那么瓶颈就在统一方面。
最快的可能是使用同一个nodelet管理器(在最后一个启动文件中)使用C++编写nodelet。最好是如果你不需要自己写任何东西的话。pcl_ros包有几个转换节点集;如果将这些节点组合在一起可以满足您的需要,那么这将是最有效和最轻松的方法。否则,您仍然可以在您的<pcl_ros/pointcloud.h>节点集中使用c++头,并且pcl::PointCloud<T>将被ros解释为订阅服务器和发布服务器上的sensor_msgs/PointCloud2消息。如果您需要更多的转换,pcl_conversion包有一些方便的转换。
(这有点切线。如果超出这一瓶颈的是websocket-y接口Ros#用于与rosbridge_server通信,rosbridge_server支持UDP协议,如果在同一台机器上,该协议应该非常快,但是Ros#目前不支持该协议,也不将其放在路线图上,因为它们的大部分用例并不是运行在同一台计算机上)。
https://stackoverflow.com/questions/62061544
复制相似问题