利用 Livox-SDK 开发的程序,很早就完成了,今天把它们整理出来分享出来给大家。
解析 lvx 文件
exe 下载地址:lvx 批量转 las。这是一个解析 lvx 文件的轻量级的控制台程序。支持 lvx 批量转 las,从 livox-hub 中取出特定设备的点云,提取指定时间戳范围的点云。
代码下载地址:lvx 批量转 las 代码,vs2019 工程。
免积分,如果觉得有用麻烦给个一键三连,有问题可以留言。
打开 cmd 或者 powershell,输入 lvx_parser.exe
或 lvx_parser.exe -h
,输出提示信息:
----------parameter usages----------
[-c] [--code] Read data from the specified device(s) by broadcast code(s)
[-d] [--dirmode] Directory Mode. Input path is a directory
[-i] [--inpath] Transform *.lvx file(s) in the file/directory path
[-o] [--outpath] Save the result(s) to output path
[-t] [--type] Data transform type(las, txt, pcd, imu, etc.)
[-l] [--log] Level of the output log(0: None; 1: Simple; 2: Verpose; 3: Developer)
[-r] [--timerange] Extract data in specific time range(eg: 2000s-2030s, etc. The unit can be s, ms, us, ns)
[-e] [--extrinsic] Use Extrinsic. Apply the extrinsic parameter in the *.lvx file
[-s] [--split] Split Mode. Split data from multi-devices and save them separately(being developed...)
[-q] [--info] Query information about the *.lvx file(s)
[-h] [--help] Show help
----------default options----------
if -c isn't given: get lidar data from all devices.
if -d isn't given: Single File Mode, input path is a file.
if -o isn't given: if Directory Mode, output path is the same as the input path; if Single File Mode, output path is the same as the input path except the suffix.
if -t isn't given: set Transform Type as LAS.
if -l isn't given: set Log Level as 2(Verpose).
if -r isn't given: get lidar date in all time.
if -e isn't given: don't use extrinsic.
if -s isn't given: don't use split mode.
阅读上述提示信息,就基本可以了解其用法。
除了 -i 参数是必选参数,其他均为可选参数。-i 参数表示输入的 lvx 文件路径(或者包含 lvx 文件的文件夹)。下面根据功能来介绍各个参数用法。
查询文件信息:利用 -q 参数。命令行输入 lvx_parser.exe -i lvx_file.lvx -q
,可以查询采集该 lvx 数据的 livox 设备号(LiDAR SN Code),livox-hub 的设备号、设备型号、外参信息、时间戳信息、采集的数据点个数。
单个 lvx 文件转 las:利用 -i 参数。命令行输入 lvx_parser.exe -i lvx_file.lvx
,可以加上 -o 参数指定其输出路径,不加则默认输出在原文件夹下。
lvx 批量转 las:利用 -d 参数。转换整个文件夹下的 lvx 文件,命令行输入 lvx_parser.exe -i lvx_file_folder -d
,可以加上 -o 参数指定其输出文件夹,不加则默认输出在原文件夹下。
从 livox-hub 中取出特定设备的点云:利用 -c 参数。-c 参数后面需要跟 livox 设备的设备号,若指定了具体的设备,则会从 lvx 数据中提取指定 livox 设备的点云。若不使用该选项,则表示提取全部设备的数据。若提取的设备不止一个,则可以多次使用 -c 参数,例如:lvx_parser.exe -c device_code1 -c device_code2 -i lvx_file.lvx
。
提取指定时间戳范围的点云:利用 -r 参数。命令行输入 lvx_parser.exe -i lvx_file.lvx -r time_start-time_end
。其中 time_start-time_end 表示一个时间范围,以"-"作为分隔符,必须加单位,单位可以是 s, ms, us, ns。时间范围是 utc 时间,输入参数为当天的秒数,与北京时间差 8 小时,请自行换算。可用的时间范围可以用 -q 参数来查询。若不加该参数,则表示提取所以时间的点云。
指定转换类型:利用 -t 参数,后面需要跟一个字符串(las, txt, pcd, imu 等)。除了 las ,也支持转换成 txt,目前 pcd 的没有实现,imu 则是提取 lvx 数据中的 imu 信息(如果有的话)。不加则表示转换为 las 格式。例如: lvx_parser.exe -i lvx_file.lvx -t las
。
指定输出日志信息的等级:利用 -l 参数,后面跟数字 0~3 ,表示输出详细程度不同的日志信息。
将 livox-hub 采集的数据分离到单独的文件:还未开发完,也不太想继续开发。该功能可以被 -c 参数代替,但是略麻烦。
如果有朋友对这个代码比较感兴趣,可以留言一起学习交流,完善未完成的功能,甚至一起来开发一个带图形界面的简易小工具。
在 CloudCompare 中读取 lvx 文件
资源下载地址:利用 CloudCompare 读取大疆 livox 的 lvx 文件。需要下载 CloudCompare Stereo v2.11 版本,并将此 dll 放置到其 plugins 文件夹下,即可读取大疆 livox 的 lvx 文件。
免积分,如果觉得有用麻烦给个一键三连,有问题可以留言。
借助 Livox-SDK 开发 LVX 文件的 IO 插件,集成到 CloudCompare,效果如下图所示:
这个 LVX_IO 插件可以读取原始点云、强度、颜色数据,将 livox-hub 内不同设备的数据分出来,识别其设备号及型号,并根据 lvx 文件内的内参信息将不同设备的点云拼接在一起。但是不读取其时间戳信息,所以动态的 lvx 数据就不要用这个插件了。
注意:经测试,该插件仅适用于 CloudCompare v2.11。其他版本的 CloudCompare 可能无法识别。
开发这个 LVX_IO 插件的初衷也是为了更方便点云数据处理,因为 CloudCompare 的功能非常强大,但是它本身不支持读取 lvx 文件,使用 livox_viewer 转成 las 格式又非常麻烦(livox_viewer 竟然不支持 lvx 批量转 las!),所以根据 CloudCompare 方便的插件机制,开发了一个 IO 插件。
这个 LVX_IO 插件对应的代码我写的比较乱,我也不打算继续维护了。对此有强烈兴趣朋友的可以评论区留言,如果确实很多人需要,我可以抽空整理一下代码,建立一个仓库大家一起维护;并整理一份完整的 CloudCompare 插件开发教程,再讲解我写的 LVX_IO 插件的代码。