Python 实时点云处理和延迟

Python 实时点云处理和延迟,python,unity3d,ros,point-cloud-library,lidar,Python,Unity3d,Ros,Point Cloud Library,Lidar,我们的项目是将激光雷达系统集成到虚拟现实(unity)中。 我可以实现与ROS bridge的集成。 下一步是在将点云数据发送到unity系统之前对其进行处理 激光雷达传感器velodyne VLP-16 Ubuntu 18.4 IDE:Pycharm(python) 点云处理:带有ROS的python点云库 具有统一系统的ros桥 问题 如果不进行处理,从传感器到unity可视化只有1秒的延迟。但在ROS(pycharm)中处理点云数据会导致显著的延迟(约5秒) 我使用velodyne驱

我们的项目是将激光雷达系统集成到虚拟现实(unity)中。 我可以实现与ROS bridge的集成。 下一步是在将点云数据发送到unity系统之前对其进行处理

  • 激光雷达传感器velodyne VLP-16
  • Ubuntu 18.4
  • IDE:Pycharm(python)
  • 点云处理:带有ROS的python点云库
  • 具有统一系统的ros桥
问题 如果不进行处理,从传感器到unity可视化只有1秒的延迟。但在ROS(pycharm)中处理点云数据会导致显著的延迟(约5秒)

  • 我使用velodyne驱动器将原始数据转换为pointcloud2格式。在处理代码中,我订阅了这个pointcloud2消息,并将其转换为PointXYZRGB格式以应用pcl库
  • 我首先测试了这个数据类型转换序列,没有应用PCL
原始数据->发布pointcloud2消息->订阅pointcloud2->pointXYZRGB->(处理)-> pointcloud2消息->发布它。

  • 如果不进行处理,我会有超过5秒的延迟
我理解,从传感器接收原始数据而不转换为pointcloud2消息会更好。 但对我来说,用python来做这件事是非常有挑战性的。 我在C++中找到了一个抓取例子。

但我不确定什么是最可靠的方法。 请在这个问题上给我一个建议

致意


如果你关心的是速度,那么有几件事

能够接收数据包并使用Nodelet将其合并为具有zerocopy访问权限的点云。ROS节点与节点类似,但复制更少,对大数据更有效。和您可以通过演示如何像这样组合节点元素的启动文件来调用它。代码可读性很强,因此您可以了解他们如何设置代码以供参考。如果您还没有尝试过这种方法,然后通过管道进入Unity,这是您的最低基线。那么瓶颈就在统一方面

最快的方法可能是用C++编写一个NoDeleT,使用PCL,由同一个NoDelET管理器处理(就像上次的启动文件一样)。最好是你不需要自己写。该包具有多个变换节点;如果这些组合能够满足您的需求,那将是最有效、最轻松的方式。否则,您仍然可以在C++ NoDelET中使用 <代码>标题,而 PCL::PooToxOb/Cuff>将被ROS解释为订阅服务器和发布服务器上的“代码> SyrWorksMS/PosiTyCuld2</Cuth>消息。如果您还需要转换,该软件包有一些方便的转换

(这有点牵强。如果超出这一点的瓶颈是Ros#用于与rosbridge#服务器通信的websocket-y接口,rosbridge#服务器支持UDP协议,如果在同一台机器上,该协议应该非常快,但Ros#目前不支持该协议,或者在他们的路线图上没有该协议,因为他们的大多数用例都不是来自it在同一台机器上运行。)