VeloView 用户手册
这是一份介绍 VeloView 应用程序和库使用的用户文档。via
下载地址:https://www.paraview.org/VeloView
版权声明:Copyright © 2021, Velodyne Lidar. All rights reserved
软件版本:5.0.1
1. 概述
VeloView 是 Velodyne 公司提供的一款开源软件,用于可视化、分析和记录来自 Velodyne-HDL 传感器(和更新的设备)的数据。该软件可对来自 Velodyne 传感器(HDL-64E、HDL-32E、VLP-32、VLP-16 (Puck)、Puck Lite、Puck HiRes、Alpha Prime)的实时捕获的 3D LiDAR 数据进行实时可视化和处理。同时,VeloView 能够播放存储在 .pcap 文件中的预先录制的数据,并且可以将实时流录制为 .pcap 文件。本手册的后续内容,将假设读者已经对 Velodyne 的传感器有一定的了解。

在手册的第一部分,我们将重点介绍如何使用 VeloView 的图形界面获取、可视化和分析 Velodyne 传感器数据。在第二部分中,我们将展示如何使用 Python 脚本和 Python 控制台来处理数据。
如果你的计算机上尚未安装 VeloView,可以通过下方链接获取与你的操作系统相对应的安装程序或源代码。
https://www.paraview.org/Wiki/VeloView
1.1 名词解释
Frame:对于旋转传感器(rotational sensors),在整个扫描期间获取的所有数据点的聚合(例如:完整的 360° 扫描)。对于定向传感器(directional sensors),在全扫描期间获取的所有数据点的聚合。
GUI:图形用户界面,用户可以通过鼠标和键盘交互的软件窗口和按钮等。
Pcap:.pcap 文件是包含从某个端口接收到的原始网络数据包的数据文件。
Python shell:Python 是一种解释器编程语言,这意味着它逐行执行代码。Python shell 是交互式控制台,用于执行用户提供的 Python 命令。
RPM:Rotations Per Minute,旋转传感器的当前旋转速度。
2. 数据可视化与分析
VeloView 提供了两种数据可视化方式:直播/实时流模式(live stream mode)和回放模式(playback mode)。直播模式对应于 Velodyne 传感器直接连接到运行 VeloView 软件的计算机的情况。在这种模式下,传感器输出的数据会进行实时可视化(就像网络摄像头一样)。而回放模式则可以导入 .pcap 格式录制的数据流文件,再进行播放。
2.1 用户界面概览
首先,我们一起来看看 VeloView 的图形用户界面(GUI)。VeloView 软件包含了四个工具栏(将在 2.4 VeloView 工具栏部分介绍)和两个不同的视图(View)—— 主 3D 视图和电子表格(spreadsheet)视图。
2.1.1 主 3D 视图
主视图在交互式查看器中显示 3D 点云(point-cloud),如图 1 所示。
图1:VeloView 软件主视图及其工具栏
工具栏的简单介绍如下:
绿色:基本控制;
蓝色:颜色控制;
红色:自定义视点;
黄色:设置视图控件;
橙色:地理位置控制;
棕色:播放控件;
紫色:视图和相机控件。
你可以使用鼠标(mouse)或触控板(trackpad )来移动、缩放或旋转 3D 视图。另外使用辅助键与单击组合可以提供更多功能,下表总结了主视图的多种控制方式:
| 左键 | 中键 | 右键 | 滚轮(鼠标)或双指(触控板) | |
|---|---|---|---|---|
| 无辅助键 | 围绕中心旋转 | 在正交平面上移动焦点 | 放大/缩小 | 放大/缩小 |
| Ctrl + | 放大/缩小 | 围绕中心旋转 | 放大/缩小(幅度更大) | 放大/缩小,以光标位置为中心 |
| Shift + | 绕正交平面法线旋转 | 围绕中心旋转 | 在正交平面上移动焦点 | 放大/缩小 |
注:orthogonal plane 正交平面
2.1.2 电子表格视图
电子表格视图用于展示点云(point-cloud)传感器数据,以电子表格的形式显示(见图 2)。默认情况下它是隐藏的,但可以通过单击工具栏中的 Spreadsheet 按钮来激活。
图 2:电子表格视图
电子表格视图上方的选项从左到右分别是:要显示的数据、要显示的属性、精度、切换科学表示、仅显示选定点、切换列可见性、切换单元格连接可见性、导出电子表格。
该视图对于检查原始数值数据、在某些数值字段条件上选择点、将此数据导出到 CSV 文件等功能很有用。
提示:点击表格的列标题,可以切换行的排列顺序。
下面是电子表格视图相关控件的简单介绍:
1) Data to display :
此下拉列表允许你选择要在电子表格中显示的数据。可以是 LiDAR 点云,也可以是 GPS 轨迹、LiDAR 标定文件等。
2) Attribute to display :
数据可以与点相关联(例如 3D 坐标、强度或时间戳),或与整个帧(RPM)相关联。此列表允许你选择要显示的属性。
3) Precision :
设置显示非整数值时要使用的小数位数。
4) Toggle scientific representation :
在非整数值的科学或定点表示之间切换。
5) Show only selected points :
如果启用,电子表格仅显示在主 3D 视图中选择的点。
6) Toggle column visibility :
选择要在电子表格中显示的列。例如,你可能想要隐藏 adjustedtime 字段,因为你不需要它。
7) Toggle cell connectivity visibility :
选择 Cell data 属性是否应显示点 ID。你可能可以忽略此设置。
8) Export spreadsheet :
将电子表格导出到 CSV 文件。这对于将选定的数据点保存到磁盘以进行分析、后处理、绘制图形、运行统计检查等很有用。
About LiDAR data columns :
如果你在电子表格中显示 LiDAR 数据,以下是关于每列代表每个点的简要说明:
Point ID:帧内的 ID 编号。
Points_m_XYZ:三维坐标值。
adjustedtime:与 timestamp 相同,只是它不会每小时翻转一次。因为它是一个 64 位的整数,所以在达到 (2^64) -1(代表大约 500 000 年)后会翻转到 0。
azimuth:传感器头的顺时针方位角,以度为单位。在特定传感器头方位角(和时间戳)获取的所有点都没有相同的方位角(因为每个通道都有高达 ±6 度的旋转校正)。因此,在 0 方位角附近,可能会在 0 的两侧从起点(=0 方位角)和终点(=359 方位角)重叠点(参见图 4)
distance_m:测量范围(点到传感器的距离),以米为单位。
intensity:目标物体的反射率,范围 [0; 255]。该测量被校准为与激光功率和距离无关。一些 LiDAR 设备根据物体反射率对子范围使用不同的映射(例如,子范围 [0; 100] 将漫反射器的反射率从 0% 编码到 100%,子范围 [101; 255] 报告逆反射 reflection - 反射器 retro-reflectors)。有关详细信息,请参阅传感器的用户手册(第 6.1 节)。
laser_id:获得该点的激光器的 ID。
timestamp:发射激光脉冲时的 Top of Hour 时间戳(以微秒为单位)。此时间戳将每整整一小时滚动一次(每小时将返回到 0)。如果设置了与 pps 的 GPS 时间同步,则 top hour 将是最后一个完整的 UTC 小时。否则,它从 LiDAR 设备启动时开始。
vertical_angle:获得该点的激光仰角(elevation angle),以度为单位。
高级格式特定阵列(某些阵列可能仅针对某些传感器出现):
LCN (Logical channel number):与 laser_ID 相同,获取该点的激光器 ID。
PSEQ (Packet sequence number):当传感器启动或重置时,从零开始单调递增序列号,并随着流中的每个有效负载递增。
信心标志(Confidence flags):
DROP (Drop Flag) : 1 if the return is recommended to be dropped
INTF (Interference confidence indicator) : 3 = No interference suspected; 0-2 = levels of suspected interference with 0 being most likely to be interference => Any of these values will recommend to Drop
REHI : 1 = indicates return is suspected to be an artifact on trailing edge of retro => Recommend to Drop
RESH (Retro Shadow Flag) : 1= indicates return is suspected to be an artifact on trailing edge of retro => Recommend to Drop
SNR (Accuracy Indicator) : 7 = Highest SNR ; … ; 4 = Degraded SNR: Distance and Reflectivity Accuracy may be impacted ; … ; 0 = Lowest SNR
distance_raw:距离返回的原始数值。
distance_type:确定 Return 中距离值的数量和类型
noise:噪声因子(noise factor)
power:能量等级/功率(power level)
reflectivity:返回的反射率(Reflectivity of the return)
time_offset:返回的实际时间(射击组的时间+获得此特定回报的时间)
HDir (Horizontal direction):0 = 顺时针(Clockwise),1 = 逆时针(Counter-clockwise)
VDir (Vertical direction):0 = 向上(Upward),1 = 向下(Downward)
PSEQF : Payload sequence number within a Frame. When a new frame starts, this value will reset to zero.帧内的有效载荷序列号。 当新帧开始时,该值将重置为零。
要查看有关你所使用的传感器和显示的阵列的更多详细信息,可以参考 Velodyne 传感器文档。
图 4:按时间戳着色的 HDL-64 传感器
2.2 直播模式
2.2.1 打开传感器数据流和配置窗口
一旦兼容的 Velodyne 传感器(HDL-64E、HDL-32E、VLP-32、VLP-16、Puck、Puck Lite、Puck HiRes、Alpha Prime)连接到你的计算机,并且 VeloView 软件正在运行,那么就可以显示传感器实时输出的数据流(参见图 5)。
图 5:Sensor stream 功能
点击 Sensor Stream 按钮,将会弹出一个传感器配置对话框(如图 6 所示)。你可以选择与所连接的传感器相对应的传感器校准文件。如果勾选高级配置(advanced configuration)复选框,你还可以设置 GPS 参数和网络参数等配置。
图 6:Sensor configuration 界面(左:默认选项;右:高级配置)
传感器校准文件
传感器配置文件(calibration file)取决于你连接到计算机的传感器类型。配置文件包含有关激光器数量、垂直角度校正、强度校正、距离校准等信息。如果你想添加特定的传感器校准文件,可以单击 Add 按钮并选择你的校准文件。
备注:如果你选择了错误的校准文件,系统会给出如下一些提示,表明你可能选择了错误的文件。
(1)如果你的传感器和校准文件之间的激光器数量不匹配,那么可能会收到如图 7 所示的错误提示。
图 7:激光器数量不匹配时的错误消息(使用了 VLP-16 而不是 HDL-64)
(2)由于错误的角度校正,输出点云失真,如图 8 所示。
图 8:由于错误的配置文件导致点云失真(选择了 HDL-32 校准而不是 Alpha Prime)
GPS 参数(位置和方向)(position and orientation)
如果你使用与 Velodyne 传感器关联的 GPS,则应注意传感器位置和 GPS 方向。由于 GPS 和 Velodyne 传感器可能不在同一物理点并且完全对齐,因此你必须根据 GPS 参考向 VeloView 指示 Velodyne 传感器的位置和方向。如果未指示方向,那么由于旋转偏移,点云将不会被地理参考(georeferenced )。如果未指示位置,结果可能会出现一些杠杆臂问题( lever arm issues),并导致点云的稳定性模糊(blurred stabilization)。
提示:位置(position)以米为单位,方向(orientation)以度为单位。
网络配置
你可以将激光雷达数据转发到另一个计算机站。假设你现在有一个 VeloView 的实例,它接收传感器的数据并将其转发到地址为 10.33.0.215 的另一台计算机上的另一个 VeloView 实例。为此,VeloView 的第一个实例使用常用端口(2368 和 8308)并将其转发到 IP 地址 10.33.0.215 的端口(例如 10001 和 10002,你可以选择其他端口)。VeloView 的第二个实例将接收 10001 和 10002 端口上的数据(参见图 9)。当然,如果你需要的话,你还可以在第二个 VeloView 实例上设置数据转发。
图 9:左侧为第一个 VeloView 实例,右侧为第二个 VeloView 实例
正确完成配置后,你应该能够在 VeloView 的 3D 视图中看到传感器输出的点云(参见图 10)。
图 10:正确配置的 Alpha Prime 传感器的输出
2.2.2 可视化和交互
在实时流运行时,你可以将流暂停到特定帧或将流录制到 .pcap 文件中(参见图 11)。
图 11:绿框处为数据流暂停按钮,红框处为数据流录制按钮
2.2.3 数据包丢失
有时候,流中的某些数据包可能丢失(packet loss)。出现这种现象的原因有很多,包括硬件、软件或网络问题,都可能造成数据包丢失。下面是一些可能的原因:
计算机的性能不足(underpowered)
与激光雷达(LiDAR )设备的有线连接出现故障
网络带宽受限
网络过载导致冲突和数据传输速度变慢
计算机负荷太高,无法足够快地处理所有接收到的数据
虽然 VeloView 软件无法检测到这些数据包丢失情况,但可能会导致数据显示或处理的异常。图 12 显示了直播期间部分数据包丢失的示例,可以看到缺少了一些方位角范围。
图 12:HDL-32 实时流部分数据包丢失
2.3 回放模式(读取 .pcap 文件)
如果你有一个包含 Velodyne 传感器数据的 .pcap 文件(从 VeloView、Wireshark 等记录),那么可以通过播放模式按钮导入 .pcap 文件,以回放形式在 VeloView 中显示点云数据(参见图 13)。
图13 : 回放模式(Playback mode)操作
单击 Playback Mode 按钮后,导入文件后,将弹出一个名为 Sensor Configuration 的配置对话框。该配置对话框的设置项与直播模式(Sensor Stream 按钮)弹出的对话框类似,请参阅 2.2.1 部分。
在此模式下,你可以轻松地与帧播放交互、返回前一帧、更改播放速度、循环播放数据等。所有这些控件都将在 2.4 节进行介绍。
2.4 VeloView 工具栏
一旦你在 VeloView 中可视化数据后,就可以使用许多工具来分析和提高对数据的理解。
图 14:VeloView 的工具栏
根据功能不同,可以将 VeloView 的工具栏划分为以下 7 大类:
绿色:基本控制(Basic controls)
蓝色:颜色控制(Color controls)
红色:自定义视点(Custom viewpoints)
黄色:设置视图控件(Settings view controls)
橙色:地理位置控制(Geolocation controls)
棕色:播放控件(Playback controls)
紫色:视图和相机控件(View and camera controls)
2.4.1 基本控制
基本控制(basic controls)工具栏位于 VeloView 图形界面的左上角,如图 15 所示。
图 15:基本控制工具栏
从左到右分别是:Open .pcap、Sensor stream、Save Lidar State、Load Lidar State、Choose calibration file、Crop returns、Select all points、Select dual returns、Spreadsheet view、Python console、Error console、Enable/Disable Advanced Arrays。具体说明如下:
Open .pcap :
打开一个包含 Velodyne 传感器录制数据的 .pcap 文件(快捷键:
Ctrl + L)。Sensor stream :
打开一个 UDP socket 端口,实时接收连接的传感器数据(快捷键:
Ctrl + K)。Save Lidar State :
将管道(pipeline )的第一个激光雷达的状态保存到 json 文件中,支持属性的转换保存。
Load Lidar State :
将 json 文件中的激光雷达状态应用到管道的第一个激光雷达。
Change the calibration :
打开校准对话框以更改校准参数(校准文件、GPS 参数和网络参数)。请注意,Open .pcap 和 Sensor stream 按钮将在显示点云之前自动打开校准对话框。但是,如果你在校准中做错了什么,你可以使用此按钮进行调整)。
Crop returns :
过滤点以仅显示定义区域内部或外部的点。该区域可以使用笛卡尔(cartesian,即 x、y 和 z 条件)或球面(spherical,即半径、方位角和垂直角条件)坐标定义(参见图 16)。
Select points :
在定义的区域中选择点,该区域是用鼠标定义的。绘制完成后,就会保存定义的区域和视点,从该视点落入该区域的所有 3D 点都将被选中。即使你移动相机或更改时间步长(快捷方式:’g’),这依然有效。
Select dual returns :
选择所有选定点的双重返回。如果选择的区域不存在,则此操作将返回所有点的双重返回。
Spreadsheet view :
打开电子表格视图(快捷键:
Ctrl + T)。Python console :
打开 python 控制台(详细介绍请参阅第 3 节)。
Error console :
打开错误控制台。
Enable/Disable Advanced Arrays :
开启和关闭解释器的高级数组。
图 16:左:Crop returns 对话框定义裁剪区域(crop region);中:以球形模式定义的区域(半径、方位角和垂直角的条件);右:以笛卡尔模式定义的区域(x、y 和 z 上的条件)。
2.4.2 播放控件
你可以使用播放控制工具栏改变数据在 VeloView 中的播放方式(见图 17)。
图 17:播放控制工具栏
从左到右分别是:转到开始(Go to start)、转到上一帧(Go previous frame)、开始/停止(Start / Stop)、转到下一帧(Go next frame)、转到结束(Go to end)、循环(Loop)、录制(Record)、播放速度(Playback speed)、尾随帧(Trailing frames)、跳过(Skip)和选择帧滑块(Select frame slider)。具体说明如下:
Go to start:
转到 pcap 的第一帧。
Go previous frame:
转到上一帧。
Start / Stop:
开始/停止播放(快捷键:space)。
Go to next frame:
转到下一帧。
Go to end:
转到 pcap 的最后一帧。
Loop:
开启或关闭循环模式,循环模式将在最后一帧结束后重新播放。
Speed:
控制播放速度,数字表示播放的倍速(乘法系数),以原始的实时速度为基准。
Trailing frame:
同时显示最后 X 帧。 当你有稳定的数据(例如 GPS/IMU 或 SLAM 数据)时,它很有用(见图 17)。
Skip:
通过点云的每 X 个点仅保留一个点来对显示的点进行二次采样。 如果你处于具有大量累积点云的拖尾帧模式(trailing frame mode),这个参数很有用。
Select frame slider:
指示当前帧。你可以使用滑块(slider)或旋转框(spinbox)移动到所需的帧。
图 18:使用 GPS 稳定路段超过 588 米,使用聚合拖尾帧(aggregated trailing frames)进行可视化。
2.4.3 颜色控制
颜色控制工具(见图 19)可用于显示附加到每个点的信息。你可以选择要用于颜色编码的信息,并选择颜色图的确切范围或颜色集。
图 19:颜色控制工具
从左到右分别是:Color legend、Edit color map、Fit color range to data、Custom color range、Color-coding data selection。具体说明如下:
Color legend :
在主 3D 视图中显示/隐藏颜色图例(参见图 20)。
图 20:颜色图例(Color legend)
Edit color map :
编辑和更改数据的颜色映射。要修改颜色图(colormap),请单击按钮收藏颜色图(参见图 21)。你现在可以选择其中一种颜色图,或使用高级按钮显示更多颜色图(参见图 23)。
图 21:选择 colormap (in color Map Editor)
Rescale data :
重新缩放颜色图,使颜色范围对应于数据值范围。
Rescale custom :
根据需要重新缩放颜色图。如果你的数据具有较大的范围值,但信息的主要部分位于子范围值上,这将很有用。
Data selection :
更改用于颜色编码的数据信息。默认情况下,会显示每个激光雷达回波的强度(intensity)。但是,你可以选择其他信息,例如 X、Y 或 Z 坐标、时间戳、激光 ID……(参见图 22)。
图 22:Available data information for coloring
图 23:Display more colormaps by using the advance button
图 24:Same frame displayed using different data information. Left : intensity, Right : timestamp.
2.4.4 视图和相机控件
视图控件(参见图 25)包含用于控制相机的工具。
图 25:视图和相机控制工具栏
从左到右分别是:Reset camera、Reset camera to lidar data、Zoom to data、Zoom to box、Set view direction to +X/-X/+Y/-Y/+Z/-Z、视图选择 ±90°、Show orientation axes、Show center、Reset center to Lidar center、Reset center、Pick center。具体说明如下:
Reset Camera :
将相机重置为其初始位置(position)和方向(orientation)。
Reset Camera to Lidar Data :
重置相机以指向激光雷达数据(快捷键:
Ctrl + Alt + v)。Zoom to data :
缩放以适合数据的边界框。
Zoom to box :
缩放到用户绘制的框。
Set view direction to ±X, ±Y, ±Z:
将相机查看方向设置为 X、Y 或 Z 轴。
Rotate view by ±90° :
将视图顺时针旋转 90° 或逆时针旋转 -90°。
Show orientation axes :
显示/隐藏方向轴框架。
Show center :
显示旋转中心。这是使用鼠标/触控板旋转 3D 视图时用作旋转中心的点。
Reset center to Lidar center :
将旋转中心重置为原点(激光雷达位置,快捷键
Ctrl + Alt + l)。Reset center :
将旋转中心重置为数据中心。
Pick center :
设置一个新的旋转中心。
2.4.5 设置视图控件

图 26:设置视图控件
从左到右分别是:Projective/orthogonal view、Measure distance、Plane fit tool。具体说明如下:
Orthogonal view :
从透视图(perspective,较小的远处物体)切换到正交视图(orthogonal,保持所有距离)。
Measure distances :
使用
Ctrl + 鼠标左键绘制一条线并测量其距离。注意:此功能仅在激活正交视图时有效(参见图 27)。Plane fit tool(平面拟合工具) :
计算适合当前选定点的平面,并在主电子表格视图中自动显示一些平面统计信息。
图 27:汽车与行人之间的距离
图 28:选定的点和平面统计数据显示在主电子表格视图上。
提示:此统计信息可以像电子表格中的任何其他数据一样导出(参考 2.1.2 电子表格视图)。
所有这些统计数据都使用专用的“Plane Fitter”过滤器进行处理,从而可以根据两种模式启动此计算:
静态模式(Static mode)
在静态模式下,每次单击“Plane fit”按钮时,都会对当前选择的点应用平面拟合过程。然后统计信息显示在主电子表格视图中(参见图 28)。
动态模式(Dynamic mode)
注意,该功能仅在启用“高级模式”时可用。在动态模式下,你可以计算平面统计数据并实时显示它们。为此,你可以按照以下步骤操作:
启动 VeloView 的 ‘Advanced mode’(在 Tools -> Debugging)。
在 ‘Pipeline browser’ dock(在 ‘Views’ 中)显示并选择您感兴趣的源。
注意:请不要选择尾随帧源(trailing frame source),因为 ‘Plane Fitter’ 过滤器需要一个简单的帧源作为输入。
在渲染视图(render view)中选择一些点。
使用“提取选择”(Extract Selection)过滤器(在 ‘Filters’ -> ‘Data Analysis’ 中,或使用
Ctrl + space并点击过滤器名称)提取选定点。然后点击 ‘Properties’ dock(在 ‘Views’ 中)的 ‘Apply’ 按钮。启动平面拟合(Launch the plane fitting)。
使用 ‘Plane Fitter’ 过滤器(在 ‘Filters’ -> ‘Statistics’ 或通过按
Ctrl + space并点击过滤器的名称)。然后点击 ‘Properties’ dock(在 ‘Views’ 中)的 ‘Apply’ 按钮。
在这些步骤之后,将打开一个专用的电子表格视图(在这种情况下不是主电子表格视图)以显示统计信息。3D 平面模型将显示在渲染视图中。在这种情况下,‘Plane Fitter’ 过滤器链接到数据流,以便在播放或直播期间实时更新统计信息。
2.4.6 地理位置控制
地理定位工具栏(参见图 29)可用于显示与 LiDAR 数据相关的 GPS/IMU 轨迹(如果 GPS 连接到 LiDAR 设备)。如果此工具栏被禁用,你可以在 Views > Toolbars > Geolocation controls 中激活它。
图 29:地理位置控制工具栏
从左到右分别是:Show the GPS track、Frame mapping。具体说明如下:
Show the GPS track :
显示与 LiDAR 数据相关的 GPS 轨迹(trajectory)。
Frame mapping :
管理如何将 LiDAR 帧与 GPS 姿势相匹配,以及如何转换它们的坐标以显示它们。
图 30:带有 GPS 轨迹的聚合帧(Aggregated frames)
2.4.7 自定义视点
图 31:自定义视点工具栏(Custom Viewpoint toolbar)
从左到右分别是:Configure custom viewpoints、Add current viewpoint as custom viewpoint。具体说明如下:
: 在工具栏中添加一个新的按钮
以保存当前的视点。
: 允许管理所有创建的视点(重命名、删除、导入、导出… )
2.4.8 工具菜单
Tools 菜单提供了额外的功能来可视化和分析数据。位于工具菜单中的一些功能也可以在我们前面介绍的控制工具栏中使用。
图 32:工具(Tools)菜单
Spreadsheet
打开电子表格视图。
Measurement Grid
在主视图上显示或隐藏测量网格。
Show RPM
显示当前帧的速率(RPM,每分钟旋转)。如果拖尾帧模式(trailing frame mode)打开,则显示的 RPM 是最后一帧之一。
这个旋转速度是一个近似值,它只是根据点的时间戳计算而来的,并不反映实际的电机 RPM。可以通过如下公式为每一帧计算 RPM 速率: $$ {\rm RPM = {\frac{60}{[Timestamp\ (seconds)\ of\ last\ shown\ point] - [Timestamp\ (seconds)\ of\ first\ shown\ point]}}} $$ Grid Properties
打开一个对话框以更改测量网格的属性:刻度数(number of ticks)、网格尺寸(dimensions of the grid)、刻度大小(size of a tick)……
Choose Calibration File
打开我们已经介绍过的校准文件对话框。
Laser Selection
打开一个对话框以选择并显示激光器的校准信息(参见图 33)。
这对于仅显示激光器的子集,或者了解每个激光器的内部校准值(例如垂直角、水平角……)很有用。
图 33:左:Laser Selection 对话框,右:单个激光器的点云
Crop Returns:
打开 crop return 对话框(参阅 2.4.1 小节)。
Dual return mode:
选择你感兴趣的双重返回模式(dual return mode)。
Processing options:
一些用于将原始传感器数据包解码为 3D 点的选项:
Apply HDL-64 intensity corrections(应用 HDL-64 强度校正)
仅适用于 HDL-64,根据设备规格校正原始强度值(取决于距离和校准)。
Apply VLS-128 Fast Rendering(应用 VLS-128 快速渲染)
使用特殊的映射器(mapper)来加速渲染,但不再使用自定义颜色映射。据报道,它可以改善在笔记本电脑上显示实时 VLS-128 数据的渲染。
Ignore returns with distance equal to 0(忽略距离等于 0 的返回)
不显示也不添加坐标为 (0, 0, 0) 的点。
Hide points marked with drop flag(隐藏标记有丢弃标志的点)
不显示接收到的带有丢弃标志的点。
Adjust intra-firing timings and azimuth(调整内部触发时间和方位角)
使用数据表中指定的实时计算的传感器旋转速度和精确的每个通道触发模式时序,在两次触发之间插入时间和方位角。
Ignore empty frames(忽略空帧)
当读取 .pcap 时,如果帧有 0 个点(仅当 ignore 返回的距离等于 0 启用时才可能),它会被移除并删除它的时间步长(如果这个帧根本不存在)。
2.5 多传感器支持
从 VeloView v5.0.4 开始,你可以在流模式( Stream mode)和阅读器模式(Reader mode)下访问多传感器选项。此选项允许从 VeloView 中的不同传感器打开多个流或多个读取器。该选项不支持已经打开的 stream 和 reader。打开“View”->“Sensors List”可以看到所有传感器的列表。
图 34:在 Sensor Configuration 对话框中勾选 “Enable multi sensors”
2.5.1 在 Live Stream 模式
点击 sensor stream 按钮 ,在 VeloView 中添加新的流(stream)。
要将其添加到已经创建的那些流之外,你必须选中传感器配置对话框中的“Enable multi sensors”选项(参见图 34)。你可以在“Sensors List”(可从“Views”菜单访问)中找到每个打开的流。此小部件允许你启动/停止流(开始和停止接收数据)、校准流(更改激光雷达端口、转换、GPS 数据的解释……),将激光雷达状态保存在 json 文件中(保存转换,裁剪返回,…),从 json 文件加载激光雷达状态并删除流。该小部件还显示有关每个流的一些有用信息,例如校准文件、传感器信息(仅当流已经接收到数据时可用)、激光雷达端口……(参见图 35)。
图 35:Stream 模式下的传感器列表
可以看到,查看有关流的一些信息(棕色)、校准流(橙色)、启动/停止流(紫色)、保存激光雷达状态(粉红色)、加载激光雷达状态(蓝色)和关闭流(灰色)。
2.5.2 在 Reading 模式(打开 pcap 文件)
点击 open pcap 按钮 ,在 VeloView 中添加新的阅读器(reader)。
你需要选中传感器配置对话框中的“Enable multi sensors”选项(参见图 34),才能在已经创建的那些 Reader 之外添加新的 Reader。你可以在“Sensors List”中找到每个打开的阅读器(可从“Views”菜单访问)。此小部件允许你校准阅读器(更改激光雷达端口、转换、GPS 数据的解释……),将激光雷达状态保存在 json 文件中(保存转换、裁剪返回……),加载 json 文件中的激光雷达状态并删除阅读器。该小部件还显示有关每个阅读器的一些有用信息,例如 pcap 文件、校准文件、激光雷达端口……(参见 图 36)。多 Pcap 模式在下列场景中非常有用:
同时显示来自不同传感器记录的多个 pcaps 文件的数据。如果你打开 2 个没有重叠时间戳的 pcaps 文件,你可能会看到 paraview 的错误提示“Cannot meet timestep request”,即“无法满足时间步长请求”。这是因为在两个 pcap 之间没有数据,导致时间步长(timesteps)对不上。
读取唯一 pcap 文件上的多个端口。为此,你可以通过指定激光雷达端口打开 2 个阅读器。如果你使用错误的激光雷达端口打开阅读器,你将看不到任何数据。
图 36:Reader 模式下的传感器列表
可以看到,查看有关阅读器的一些信息(棕色)、校准阅读器(橙色)、保存激光雷达状态(粉红色)、加载激光雷达状态(蓝色)和关闭流(灰色)。
2.5.3 选择小部件(widget)
通过 Sensors List,你可以选择一个小部件(只需在代表它的矩形内单击,参见图 37)。这将允许你专门针对此小部件修改一些参数(例如用于为数据着色的数组)。
图 37:在传感器列表中选择一个小部件
2.6 导出数据
2.6.1 “Save As” 菜单
“Save As”菜单(在“File”中)仅在阅读模式下可用。要从流中以特定文件格式保存数据,你需要先记录一个 pcap。该菜单允许你将激光雷达数据保存为不同的格式(pcd、ply、las、…)。你需要选择要导出的帧(参见图 38),这将为每一帧保存一个文件。对于某些格式,还需要填写特定信息(参见图 39)。
图 38:Select frame(s) to export
图 39:Select Las export parameters
2.6.2 高级导出格式
如果你想以其他格式导出激光雷达数据,或者想要包含多个帧的单个 Las 文件,操作方法如下:
使能 “advanced mode”(依次选择 “Tools” -> “Debugging” -> ”Advanced features”)。
打开 “Pipeline Browser”(在 “Views” 中)。
在 “Pipeline Browser” 中选择你要保存的源(应该是 “Frame”)。
按 “ctrl+S” 或 “Advance” -> “File (Paraview)”->”Save Data” 保存数据。
你会看到 “SaveFile” 对话框,选择所需的文件格式(las, vtk, vtp, obj, …),然后输入文件名。
可能会弹出一个新的配置对话框,具体配置项与你要求的文件格式有关。(关于 LAS specific 对话框,请参见图 40)
图 40:LAS Specific 对话框(单个导出的 las 文件将包含从“First Frame”到“Last Fram”的所有帧)
3. Python 控制台
3.1 概述
VeloView 是 Velodyne 提供的软件,用于可视化、分析和记录来自 Velodyne 传感器的数据。与它所基于的 ParaView 一样,可以使用 VeloView 中的 Python Shell 控制台创建一些自动化管道(automation pipelines)或小型过滤器(small filters)的任务。另一个方便的工具是直接从 ParaView 派生的 VeloView --script 命令。可以使用以下参数 VeloView --script path_to_my_script.py 启动 VeloView,以便在启动 VeloView 时直接运行 python 脚本。然而,自动化受限于需要用户交互的功能,例如选择传感器校准。本手册将介绍如何在 Python 控制台中访问数据和编程,并展示一些使用 VeloView 特定功能的 Python 编程示例。最后,我们还将公开 VeloView-python 功能的非详尽列表。
3.2 Python Shell 介绍
3.2.1 python-VeloView 功能介绍
Python 控制台是 VeloView 中可用的 python 环境,可让你访问一些 python、paraview、Qt 和 VeloView 功能。其中,VeloView 功能可以访问 Velodyne 传感器提供的数据,并提供一些基本的操作和分析功能。Paraview 提供了许多内置的过滤器,用于数据过滤。Qt 负责图形用户界面(GUI),也可以用 python 控制。最后,你可以获得用于任务自动化的所有常用 Python 脚本功能。
3.2.2 打开 python 控制台
一旦 VeloView 运行以后,就可以通过以下 3 种方式打开 Python Console :
在 Basic Controls 工具栏中点击 Python 图标(如图 41)。
在菜单栏中选择 Tools > Python Console,点击 Python 图标(如图 41)。
通过按键盘上的 F8。
图 41:如何进入 Python 控制台
3.2.3 python shell 介绍
使用前面介绍的 3 种方式之一打开 Python 控制台后,应该打开一个 python shell(参见图 42)。Python 控制台/shell 提供了 4 个不同的选项:
Run Script:允许用户加载或运行 Python 脚本。
Clear:清除控制台。控制台的信息被清除,但状态保持不变(所有变量和数据都不会被删除)。
Reset:重置控制台。所有变量和数据都将被删除。尽管如此,控制台不会被清除。如果您想使用全新的控制台重新启动,您可以清除(Clear)并重置(Reset)控制台。
Tab:在 Python Shell 中按 Tab 键会显示可用的自动补全功能。
图 42:Python Shell
3.3 VeloView 和 VTK 术语表和数据模型
在 VeloView 中,数据表示为 VTK vtkPolyData 对象。它是一个包含两件事的数据集:3D 几何(由 velodyne 传感器提供的 3D 点列表)和与这些点相关的额外数据(强度 intensity、时间戳 timestamp、方位角 azimuth、激光编号 laser ID 等)。点及其对应数据的关联称为多数据(polydata)或数据集(dataset)。
VeloView 中可用的 Reader 从网络(streaming reader)或 .pcap 文件(pcap reader)读取数据,并提供与数据对应的 vtkPolyData。因此,当我们在 Python Shell 中获得阅读器的输出时,我们会获得一个 vtkPolyData 对象。vtkPolyData 的结构可以在这里找到:http://www.vtk.org/doc/release/5.4/html/a01260.html。
应该保留的是几何点可以通过 .GetPoints() 方法访问,存储在数组中的额外数据可以通过 .GetPointData() 方法访问。
关于 GetClientSideObject():
Short story:你不需要了解 client/server 范式,只需基于示例和自动完成即可。
Long story:通常 VeloView 函数会提供一个包含你想要的对象的服务器管理器。**这是因为 VeloView 是直接派生自 Paraview Client/Server 架构的。**例如,当你获得具有
lv.getReader()函数的 Reader 时,你将在 Reader 上获得一个 servermanager 实例。如果要获取输出或访问对象的方法,则必须使用GetClientSideObject()函数。例如,如果你想获得 Reader 的 vtkPolyData 输出,你需要编写getReader().GetClientSideObject().GetOutput()。
3.4 示例
3.4.1 获取数据信息
第一个示例,将向你展示如何获取 Velodyne 传感器生成的点云。
第 1 步:打开提供的 .pcap 示例文件 roundabout.pcap。 第 2 步:打开 Python Shell。 第 3 步:输入以下 python 代码:
# Get the .pcap reader
reader = lv.getReader()
# Get the output of the reader stored in a vtkPolyData object
cloudInfo = reader.GetClientSideObject().GetOutput()
# Get the 3D points list
points = cloudInfo.GetPoints()
# Coordinates of the 10th point
points.GetPoint(10)
# Get the time information of the points
times = cloudInfo.GetPointData().GetArray("timestamp")
# Value of the time information for the 10th point
times.GetValue(10)
代码解释:在本例中,我们获取了 roundabout.pcap 数据的第一帧相关联的点云,并打印第一帧的第 10 个点的坐标和时间戳值。
正如你所看到的,在 VeloView-python 中所有可用的函数都存储在名为 “lv” 的模块中。例如,如果你想访问存储在模块 vtk 中的函数,你需要写
lv.vtk.DesiredFunction()。注意:出于兼容性的原因,也可以使用别名 “vv” 代替 “lv”。
getReader()是 VeloView 函数,它返回一个 .pcap 阅读器。.pcap 阅读器是一个 vtk 过滤器,其输出是当前帧的数据集。输出数据集存储在 vtkPolyData 对象中,它包含 3D 点列表和与这些点关联的额外数据。使用
vtkPolyData类的方法GetPointData()可以访问存储在数据集中的数据数组。使用方法GetArray("ArrayName"),可以访问相应数组的数据。点云中可用阵列的确切名称在电子表格视图中可见(参见图 43)。可用阵列取决于数据(Velodyne 传感器类型、GPS 可用性、IMU 可用性、额外数据……)。
图 43:Python shell 和 Spreadsheet 视图
3.4.2 使用数据选择点
在此示例中,我们将选择返回强度(intensity)超过定义阈值(threshold)的点,并将结果保存在 .csv 文件中。
第 1 步:打开提供的 .pcap 示例文件 roundabout.pcap。 第 2 步:打开 Python Shell。 第 3 步:输入以下 python 代码:
reader = lv.smp.GetActiveSource() # Get the .pcap reader
query = 'intensity > 50' # Query selecting points whose intensity is over 50
lv.smp.SelectPoints(query, reader) # Select the points which satisfies the query
lv.smp.Render() # Render the result
lv.saveCSVCurrentFrameSelection("D:\save.csv") # Save the selected points in .csv format
代码解释:
调用
lv.smp.GetActiveSource()得到 .pcap 阅读器,带有GetActiveSource()函数。如你所见,该函数属于 “smp” 模块,它是 “paraview.simple” 模块的别名,存储了所有 paraview 函数。其中GetActiveSource()返回活动源。在本示例中,活动源是 .pcap 阅读器。smp.Render()在数据处理完成后刷新活动源。如果你想刷新另一个视图(电子表格视图或主视图),你需要使用smp.SetActiveSource()设置活动源。lv.saveCSVCurrentFrameSelection("D:\save.csv")将选中的点保存到位于指定路径的 .csv 文件中。
图 44:示例 2 的结果(粉红色的点是选定的点)
3.4.3 在主视图中显示 3D 模型
下面示例中,我们将在主视图中加载并显示 3D 模型。
第 1 步:打开提供的 .pcap 示例文件 roundabout.pcap。 第 2 步:打开 Python Shell。 第 3 步:输入以下 python 代码:
Model = lv.smp.OpenDataFile("D:/PythonManualData/BMWX54.obj")
ModelOriented = lv.smp.Transform(Input = Model)
ModelOriented.Transform = 'Transform'
ModelOriented.Transform.Scale = [1.0/30.0, 1.0/30.0, 1.0/30.0]
ModelOriented.Transform.Rotate = [90, -102, 45]
ModelOriented.Transform.Translate = [-0.69, -0.25, -1.80]
lv.smp.Show(ModelOriented)
lv.smp.Render()
代码解释:
smp.OpenDataFile("D:/PythonManualData/BMWX54.obj")打开一个 .obj 模型文件。缩放(Scale)、旋转(Rotate)、平移(Translate):由于模型是在任意帧中给出的,我们必须重新缩放并设置模型的方向以适合我们的数据。
Show()、Render():我们在主视图中显示结果,然后渲染结果以显示模型。
图 45:模型添加到主视图中
3.4.4 使用 - -script 在主视图中加载 3D 模型启动 VeloView
In this example we load and display a 3D model in the mainview directly when VeloView is launched using the –script command-line option. We use the script LoadModel.py written in the previous example E-3- Display a 3D model in the mainview.
下面示例中,我们在启动 VeloView 时添加 --script 命令行选项,直接在主视图中加载和显示 3D 模型。我们使用前面示例中编写的脚本 LoadModel.py(3.4.3 在主视图中显示 3D 模型)。
第 1 步:在包含 VeloView 可执行文件的文件夹中打开一个终端,在 Windows 上可通过按 “Win + R” 键并输入 cmd 来执行此操作。
Step 2 : 在终端通过命令行启动 VeloView。
./VeloView --script='D:\PythonManualData\LoadModel.py'
当然,你需要将 D:\PythonManualData\LoadModel.py 替换为文件 LoadModel.py 的路径。另外,可能还需要替换文件 LoadModel.py 中包含的模型文件名。
你现在应该看到 VeloView 启动,并显示已在主视图中加载的 3D 模型,如上一个示例所示。
3.4.5 在 python shell 中处理多个 LiDAR 传感器
下面示例展示了如何在 VeloView 中显示多个激光雷达的流(stream)。
第 1 步:打开 Python Shell。
第 2 步:实例化你想要的任意多个流。
lidar = LidarStream()
...
lidar = LidarStream()
第 3 步:为你实例化的所有流填写流所需的所有信息,必填字段如下:
ListeningPort:LiDAR 发送 lidar 数据包所对应的端口号。
CalibrationFile:传感器对应的校准文件。
Interpreter:必须是“Velodyne Meta Interpreter”(选择合适的)。
(1)你可以在用户界面中设置它们(在第 2 步之后):
打开 “Pipeline Browser” -> “Properties” 面板(在 “Views” 菜单)。
在“Pipeline Browser”中选择要设置参数的流。
填写“Listening Port”信息,选择与你的数据对应的校准文件,然后选择“Velodyne Meta Interpreter”。
按 “Apply”,然后按 “Start”。
(2)你可以使用 Python 设置这些参数:
calibrationFile = " " # Path to calibration file of the lidar
lidarPort = 2368 # Port number where the lidar send its lidar packets
N = 3 # Number of lidar stream to instantiate
for i in range(N):
lidar = LidarStream()
lidar.CalibrationFile = calibrationFile
lidar.Interpreter = 'Velodyne Meta Interpreter'
lidar.ListeningPort = lidarPort + i
lidar.UpdatePipeline()
Show(lidar)
lidar.Start()
第 4 步:填写你需要的额外信息(可选参数)。
(1)Throw the UI:使用“Pipeline Browser”和“Properties”面板(在“Views”菜单中)
选择你需要的流
设置你想要的可选参数(“启用高级阵列”(Enable Advanced Array)、“传感器转换”(Sensor Transform)、“正在转发”(Is forwarding)…
(2)使用 Python 应用转换:
calibrationFile = " " # Path to calibration file of the lidar
lidarPort = 2368 # Port number where the lidar send its lidar packets
N = 3 # Number of lidar stream to instantiate
for i in range(N):
lidar = LidarStream()
lidar.CalibrationFile = calibrationFile
lidar.Interpreter = 'Velodyne Meta Interpreter'
lidar.Interpreter.SensorTransform = 'Transform2'
lidar.Interpreter.SensorTransform.Scale = [1.0/2.0, 1.0/2.0, 1.0/2.0]
lidar.Interpreter.SensorTransform.Rotate = [0 , 90 * i, 0]
lidar.Interpreter.SensorTransform.Translate = [i, i, i]
lidar.ListeningPort = lidarPort + i
lidar.UpdatePipeline()
Show(lidar)
lidar.Start()
3.5 功能列表
本节提供了 Python-VeloView 中可用功能的非详尽列表。
3.5.1 Simple Paraview : “lv.smp.”
模块 paraview.simple 提供的所有功能都可以使用 “lv.smp.”,你可以在此处找到功能的描述和文档:
https://kitware.github.io/paraview-docs/latest/python/paraview.simple.html
3.5.2 Qt “lv.QtGui”
模块 QtGui 提供的所有功能都可以使用 “lv.QtGui.”,你可以在此处找到功能的描述和文档:
3.5.3 Vtk Python
模块 vtk 提供的所有功能都可以使用 “lv.vtk.”,你可以在此处找到功能的描述和文档:
3.5.4 VeloView functions “lv.”
以下是模块 “lv.” 中可用的常用功能的非详尽列表。如需更多功能,请毫不犹豫地使用自动补全功能来访问所有可用功能。
getReader() : Return the .pcap reader which contains the point cloud of the current frame.
openSensor() : Instantiate a UDP socket to receive data from velodyne-HDL sensor.
openPCAP(filename) : Create a .pcap reader to read the data contained in the file located at filename.
hideMeasurementGrid() : Hide the measurement grid.
showMeasurementGrid() : Show the measurement grid.
saveCSVCurrentFrame(filename) : Export the current frame into a .csv file.
saveCSVCurrentFrameSelection(filename) : Export the current selection of the current frame into a .csv file.
recordFile(filename) : Record the data received in live stream.
stopRecording() : Stop the recording.
startStream() : Start the listening of the UDP socket.
stopStream() : Stop the listening of the UDP socket.
getSensor() : Get the live streaming reader. The output of this reader is the 100 last received point clouds.
getPosition() : Get the position reader. The output of this reader is the GPS / IMU information contained in the data.
onCropReturns(show = True) : Open the crop dialog box.
resetCamera() : Reset the camera.
saveScreenshot(filename) : Save a screenshot.
showGrid() : Show the grid.hideGrid() : Hide the grid.
getMainWindow() : Get the main view (the view where the point cloud is displayed).
toggleSelectDualReturn() : Select the dual return of the current selection.
setFilterToDual() : Show only the dual return.
setFilterToDistanceNear() : Show nearest returns.
setFilterToDistanceFar() : Show farest returns.
setFilterToIntensityHigh() : Show highest intensity returns.
setFilterToIntensityLow() : Show lowest intensity returns.
setTransformMode(mode) : Change the transform mode : 0) raw, 1) absolute, 2) relative.
lv.app.reader : Get the .pcap reader.lv.app.sensor : Get the streaming reader.
lv.app.distanceResolutionM : Distance resolution of the sensor.
lv.app.trailingFramesSpinBox : GUI spinbox which determines the number of trailing frames.
lv.app.geolocationToolBar : GUI geolocation toolbar.
lv.app.mainView : The main view (the one displaying the point cloud).
lv.app.gridProperties : Properties of the grid.
lv.app.grid : The displayed grid in the main view.
lv.app.scene : Displayed scene in the main view.
4. 常见问题
4.1 Windows 系统:越过防火墙可视化流式传感器数据
单击 File > Open 并选择 Sensor Stream,Windows 防火墙可能会通过显示带有两个或三个复选框的 WindowsSecurityAlert 对话框来中断进程。仅当启用防火墙时才会发生这种情况 —— 并且它只询问一次。特定 VeloView 第一次访问网络端口时,防火墙会请求允许通过该接口在 [ ] 公共网络、[ ] 专用网络以及可能 [ ] 域网络(例如工作场所网络)上进行通信。重要提示:选中所有复选框,然后单击允许访问按钮。
图 46:允许 VeloView 在这些网络上通信
如果你不这样做,防火墙将阻止 VeloView 与传感器的通信。你将不能从传感器获得任何数据。
要解决这种情况,请在控制面板中选择“允许应用程序通过 Windows 防火墙”(参见图 47)。将显示“允许的应用程序”对话框。单击“更改设置”以启用更改。接下来,向下滚动到 veloview 并单击该条目。确保它前面有一个复选标记,以便启用它的规则。现在在 VeloView 右侧的每一列中打上复选标记,然后单击 OK 进行更改,如图 47 所示。
图 47:允许应用程序通过 Windows 防火墙
图 48:启用 VeloView 以通过 Windows 防火墙进行通信
或者,你可以完全禁用防火墙,但不建议这样做。
4.2 Windows系统:如何在 VeloView 上使用特殊字符
在 Windows 上,如果你使用基本 ASCII 表 中未列出的字符、你的账户名、文件名,或 Veloview 的可执行目录都可能会遇到一些问题。请注意,在 VeloView 代码库中,我们使用系统的本地编码来解码每个字符。另外为了确保你使用的特殊字符被正确解码,我们需要使用 “unicode UTF-8” 编码。因此,你的本地系统编码需要是“unicode UTF-8”,而在 Windows 上并非总是如此。
要获取系统本地编码所需的所有信息,你可以打开“Power shell”终端并输入 [System.Text.Encoding]::Default。
如果你想在你的系统上将 “unicode UTF-8” 设置为默认值,请按照以下步骤操作:
首先,进入 Region 设置页面
点击 ‘Additionnal Date, time & regionnal settings’
选择 ‘Change date, time, or number formats’,然后切换到 ‘Administrative’ 选项卡,选择 ‘Change system locale…’
然后启用 “Unicode UTF-8 for Worldwide language support” 选项,单击确定并重新启动系统。
完成此操作后,你应该可以在 VeloView 中使用 UTF-8 table 列出的所有字符。
更多信息,你可在 Velodyne sensor’s user manual 中找到,可在此处获取 https://velodynelidar.com/downloads/#manuals,见附录 E。
如有疑问、问题和反馈,请在此处使用联系技术支持:https://velodynelidar.com/contact-us/。