FAST-LIVO2 icon indicating copy to clipboard operation
FAST-LIVO2 copied to clipboard

Mid-360复现效果展示+复现过程分享

Open pcl5 opened this issue 11 months ago • 44 comments

感谢大佬邀请!我使用Mid-360搭配海康CU050-10UC相机适配FAST-LIVO2,完成了如下重建效果:

Image

Image

以下分享我的复现思路:

硬件搭建

根据LIV_handhold设计了一块电源-时钟同步PCB,提供12V和5V输出供电供应开发板、雷达和相机(16V Input),并提供10Hz同步信号、1Hz伪GPS信号给海康相机-Mid360.详细教程请参考:

https://github.com/xuankuzcr/LIV_handhold https://gitee.com/gwmunan/ros2/wikis/pages?sort_id=10502383&doc_id=4855084 部分搭建设备展示:

Image

Image

一些常见的问题:

1、Mid-360是否需要倾斜安放:倾斜安放可以增大共视FoV中的点云数量,而FAST-LIVO2的地图构建是以Lidar点云作为基础的,所以推荐进行倾斜安放,但是要在代码中做一定的修改。当然了这些都是次要原因,主要原因是这样帅啊!(PS:Mid-360的FOV为-7°~52°)

2、如何查看采集的数据时间戳是否同步:在terminal打开rqtPlugins->Logging->Bag,导入录制的Rosbag查看时间戳是否对齐。一般而言Mid-360的scan和image的时间戳,偏差不超过0.02s,imu的频率为200Hz,按照4ms/6ms交替输出数据而不是规律的5ms输出。

3、相机、镜头选型:强烈推荐USB3.0口的海康系列相机,分辨率能达到1280x720即可,如MV-CU013-A0UC。镜头根据使用场景来选择相应的光圈和FoV。如果有3DGS项目的需求推荐使用分辨率超1920x1080的相机,如MV-CU050-90UC。

4、使用哪款开发板搭建硬件:个人推荐将FAST-LIVO2代码的运行在主机上运行,边缘开发板作为rosbag record的设备。如果有边缘运行的需求推荐rk3588/ Jetson Orin/ N97系列开发板。

软件搭建

首先是硬件端的软件包。使用LIV_handhold中的mvs_ros_pkg搭配livox_ros_driver2能获得最佳的使用效果(海康官方的ROS包有陈年BUG并且同步效果没那么好)。但是很多人(当然也包括我)启动程序时候会遇到这一行想杀人的红色小字:

Image

但是你不要怕啊不要怕,这才哪到哪。无非就以下4个问题:

1、时钟同步信号没给到相机。请你打开MVS软件cd /opt/MV/bin && ./MVS.sh打开旁边的触发模式,查看是否有画面并且是否为10Hz。一般来说触发源是Line 0,但是如果你的接线是其他信号线,就请修改为Line 1/Line 2,并在mvs_ros_pkg/src/grab_trigger.cpp中做相应修改:

nRet = MV_CC_SetEnumValue(handle, "TriggerSource", MV_TRIGGER_SOURCE_LINE2); // 比如我从LINE0修改成LINE2

Image

2、驱动没链接上(有可能会导致rviz显示黑屏而不报错)。x86电脑输入:

export LD_LIBRARY_PATH=/opt/MVS/lib/64:/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH

Arm电脑输入:

export LD_LIBRARY_PATH=/opt/MVS/lib/aarch64:/lib/aarch64-linux-gnu:$LD_LIBRARY_PATH

3、timeshare同步文件读写问题。打开mvs_ros_pkg/src/grab_trigger.cpp 搜索timeshare文件,查看该路径下是否有这么一个文件并且权限允许read & write。实在不行就自己创建一个并修改相应路径。livox_ros_drvier2的timeshare路径在src/lddc.cpp下。

4、相机格式不对。有的相机支持的格式不是RGB8,请查询手册确认格式后在mvs_ros_pkg/config/left_camera_trigger.yaml中修改PixelFormat。没有支持的格式那就自己修改代码咯(比如我在代码中添加了BayerGR8格式并成功运行)。

还有可能遇到OpenCV报错(Warning or Error)或者启动节点就死的问题,参考解决方案:【FAST-LIVO】1.0 FAST-LIVO编译以及运行程序时崩溃的解决办法_哔哩哔哩_bilibili

另外最好用SSD硬盘而不是TF卡做数据存储,TF速率不足容易让时间戳不匹配


然后就是内外参标定问题。

内参标定推荐工具:ROS-camera-Calibrationkalibr(前者简单后者更准)

外参标定推荐工具:direct_visual_lidar_calibration(用其提供的Docker配置更快,但是启动Docker时一定要启动GPU支持!!!

PS:

1、使用郑博的mvs_ros_pkg录制并不带有Camera_info的Topic(包含的是内参数据),所以需要手动输入内参。参考:direct_visual_lidar_calib环境部署及应用_direct lidar calibration-CSDN博客

2、DVLC的标定结果我记得是Camera to Lidar的,需要求逆转为Lidar to Camera,后续FAST-LIVO2会用到。教程和求逆工具参考:dvlc - Gitee.com

标定效果影响FAST-LIVO2的最终效果,特别是外参!!!


接着是FAST-LIVO2环境配置。可以使用我已经配置好环境的Docker:

docker pull pcl5pcl5/fast_livo2

也可以自行配置,暂时不推荐安装Malloc,可能会导致内存占用过大的问题。


最后是如何将FAST-LIVO2适配Mid-360。最简单的办法,可以在https://github.com/pcl5/FAST-LIVO2/tree/main 中获取我适配的软件包。workspace文件结构如下:

├── CMakeLists.txt 
├── FAST-LIVO2
├── livox_ros_driver
└── rpg_vikit

编译后启动:

roslaunch fast_livo mapping_mid360.launch

雷达倾斜安放时,config中的gravity_align_en记得改为true(大佬已经写好重力自检校了非常友好)。 如果遇到rpg_vikit编译报错请自行CSDN,有修改教程。有实时运行需求的朋友看下面:

因为FAST-LIVO2目前依赖的是Livox_ros_driver,而Mid-360依赖Livox_ros_driver2,导致代码段产生冲突,所以有两种解决方案:

1、替换FAST-LIVO2中所有livox_ros_drvier代码段为livox_ros_driver2。但我懒,所以我选择:

2、启动硬件设备时用另一个工作空间:

another_ws:
├── build
├── devel
└── src
    ├── livox_ros_driver2
    └──  mvs_ros_pkg

和FAST-LIVO2的工作空间隔开(带livox_ros_driver),所有终端同时source /home/xxx/another_ws/devel/setup.bash,FAST-LIVO2就能自动识别到Mid-360的数据啦,因为1和2的驱动数据格式是相同的

最后,感谢郑博简答智能的代码和教程!也希望我的复现过程能帮到大家!欢迎交流!

pcl5 avatar Feb 28 '25 04:02 pcl5

Image 请问左边青色的板子是什么?能share下bom list吗?谢谢

Alex-Beh avatar Feb 28 '25 04:02 Alex-Beh

请问左边青色的板子是什么?能share下bom list吗?谢谢

不好意思,我手上没有这块板子的bom list了。主要就是画了stm32f103和降压电路上去。

pcl5 avatar Feb 28 '25 05:02 pcl5

感谢 @pcl 的精彩分享!你的 Mid-360 复现效果非常炫酷,尤其是软硬件搭建中常见问题的解决思路,对大家帮助很大。再次感谢你对社区的贡献!👏👏👏

xuankuzcr avatar Mar 01 '25 15:03 xuankuzcr

镜头根据使用场景来选择相应的光圈和FoV

可以拓展下这个吗?根据场景到相机的平均距离选取相对的焦距吗?请问你用的镜头的型号是什么?谢谢!

Alex-Beh avatar Mar 02 '25 10:03 Alex-Beh

镜头根据使用场景来选择相应的光圈和FoV

可以拓展下这个吗?根据场景到相机的平均距离选取相对的焦距吗?请问你用的镜头的型号是什么?谢谢!

你好,可以参考下这个:https://mp.weixin.qq.com/s/mJgk76eq38IgaeNRjLtmDA

pcl5 avatar Mar 05 '25 17:03 pcl5

hello,图里的倾斜手持支架也是3d打印出来的吗,可不可以参考下数模文件呢,谢谢!

Amnesiacers avatar Mar 08 '25 08:03 Amnesiacers

真的感谢,使用A0UC相机,mvs_ros_pkg运行报错一直没有解决,之前一直使用其他封装的驱动,自己加了共享内存同步的机制,但是lidar和camera的触发一直有半周期的相位偏移,这几天看到本贴才恍然大悟是pixelformat的问题,LIV_handhold现在支持BayerGB了,A0UC型号在/config/left_camera_trigger.yaml里把PixelFormat设置为3就解决了

xDOYISA avatar Mar 10 '25 05:03 xDOYISA

你好,图里的倾斜手持支架也是3d打印出来的吗,可不可以参考下数模文件呢,谢谢!

是的,都是3D打印的,可以参考我链接里面的cad哦

pcl5 avatar Mar 14 '25 05:03 pcl5

真的感谢,使用A0UC相机,mvs_ros_pkg运行报错一直没有解决,之前一直使用其他封装的驱动,自己加了共享内存同步的机制,但是lidar和camera的触发一直有半周期的相位偏移,这几天看到本贴才恍然大悟是pixelformat的问题,LIV_handhold现在支持BayerGB了,A0UC型号在/config/left_camera_trigger.yaml里把PixelFormat设置为3就解决了

能对你有帮助我很开心!

pcl5 avatar Mar 14 '25 05:03 pcl5

Hey! @pcl5

Thank you for the detailed guide! Quick question for this calculator: https://staff.aist.go.jp/k.koide/workspace/matrix_converter/matrix_converter.html - I understand from the calibration you first enter the "T_lidar_camera" value, then you press: TUM [tx ty tz qx qy qz qw]. And how do you get the exact lidar -> camera matrix from this? You would just inverse it?

mkarklins avatar Mar 15 '25 13:03 mkarklins

Hey! @pcl5

Thank you for the detailed guide! Quick question for this calculator: https://staff.aist.go.jp/k.koide/workspace/matrix_converter/matrix_converter.html - I understand from the calibration you first enter the "T_lidar_camera" value, then you press: TUM [tx ty tz qx qy qz qw]. And how do you get the exact lidar -> camera matrix from this? You would just inverse it?

Image Just put the TUM data, and then press inverse after you press TUM [tx ty tz qx qy qz qw].

pcl5 avatar Mar 15 '25 14:03 pcl5

您好呀,感谢您的分享,我想问一下复现的时候遇到stm32的PA1测出来是10hz脉冲,但是在驱动中开启trigger抓不到图,这是啥原因呢

hujiax380 avatar Mar 20 '25 10:03 hujiax380

您好呀,感谢您的分享,我想问一下复现的时候遇到stm32的PA1测出来是10hz脉冲,但是在驱动中开启trigger抓不到图,这是啥原因呢

我之前也遇到过,具体表现是无报错正常启动rviz,但是没图像。如果怀疑是pwm的问题可以看看相机的指示灯是否是外部触发,如果是海康相机的话可以进海康自带mvs软件查看;另一种可能是驱动问题,按本帖主提供的方法export LD_LIBRARY_PATH=/opt/MVS/lib/64:/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH可以解决,或者直接添加至.bashrc文件中

xDOYISA avatar Mar 20 '25 17:03 xDOYISA

您好呀,感谢您的分享,我想问一下复现的时候遇到stm32的PA1测出来是10hz脉冲,但是在驱动中开启trigger抓不到图,这是啥原因呢

我之前也遇到过,具体表现是无报错正常启动rviz,但是没图像。如果怀疑是pwm的问题可以看看相机的指示灯是否是外部触发,如果是海康相机的话可以进海康自带mvs软件查看;另一种可能是驱动问题,按本帖主提供的方法export LD_LIBRARY_PATH=/opt/MVS/lib/64:/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH可以解决,或者直接添加至.bashrc文件中

对的!先mvs检查外部触发采集有没有效,如果有效再回头看代码。另外我发现有些海康相机的line 0触发口无法接收到3.3v信号,得拉到5v,或者用line 2口才可以,这得注意下。 软件的问题无非我上面说的那几种,八九不离十的

pcl5 avatar Mar 20 '25 17:03 pcl5

您好呀,感谢您的分享,我想问一下复现的时候遇到stm32的PA1测出来是10hz脉冲,但是在驱动中开启trigger抓不到图,这是啥原因呢

我之前也遇到过,具体表现是无报错正常启动rviz,但是没图像。如果怀疑是pwm的问题可以看看相机的指示灯是否是外部触发,如果是海康相机的话可以进海康自带mvs软件查看;另一种可能是驱动问题,按本帖主提供的方法export LD_LIBRARY_PATH=/opt/MVS/lib/64:/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH可以解决,或者直接添加至.bashrc文件中

您好呀,感谢您的分享,我想问一下复现的时候遇到stm32的PA1测出来是10hz脉冲,但是在驱动中开启trigger抓不到图,这是啥原因呢

我之前也遇到过,具体表现是无报错正常启动rviz,但是没图像。如果怀疑是pwm的问题可以看看相机的指示灯是否是外部触发,如果是海康相机的话可以进海康自带mvs软件查看;另一种可能是驱动问题,按本帖主提供的方法export LD_LIBRARY_PATH=/opt/MVS/lib/64:/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH可以解决,或者直接添加至.bashrc文件中

对的!先mvs检查外部触发采集有没有效,如果有效再回头看代码。另外我发现有些海康相机的line 0触发口无法接收到3.3v信号,得拉到5v,或者用line 2口才可以,这得注意下。 软件的问题无非我上面说的那几种,八九不离十的

感谢两位的帮助!我发现我的LINE0不起效,且到LINE2就能正常触发了

hujiax380 avatar Mar 21 '25 03:03 hujiax380

你好,图里的倾斜手持支架也是3d打印出来的吗,可不可以参考下数模文件呢,谢谢!

是的,都是3D打印的,可以参考我链接里面的cad哦

请问在哪

lwbdegit avatar Mar 21 '25 09:03 lwbdegit

你好,请问你 倾斜安装后,有关注Z轴的数据吗?我也是类似倾斜13°,建图发现整个地图也是倾斜的。是需要mid360的驱动里面的外参参数吗

Image

DCYzhao avatar Apr 09 '25 12:04 DCYzhao

@DCYzhao 把这个改为true https://github.com/hku-mars/FAST-LIVO2/blob/137b660b7aa72883d31fa86221f7ab88c83610b7/config/avia.yaml#L66

xuankuzcr avatar Apr 11 '25 05:04 xuankuzcr

@DCYzhao 把这个改为true

FAST-LIVO2/config/avia.yaml

Line 66 in 137b660

gravity_align_en: false

感谢郑博,设置为true确实正常了

DCYzhao avatar Apr 22 '25 01:04 DCYzhao

@DCYzhao 把这个改为true fast-livo2/config/avia.yaml 第66行在137B660 GRAVITY_ALIGN_EN:false

感谢郑博,设置为true确实正常了

你好,请问倾斜安装后,雷达和相机的联合标定怎么做呀

Dora-ye avatar May 29 '25 05:05 Dora-ye

@DCYzhao 把这个改为true fast-livo2/config/avia.yaml 第66行在137B660 GRAVITY_ALIGN_EN:false

感谢郑博,设置为true确实正常了

你好,请问倾斜安装后,雷达和相机的联合标定怎么做呀

正常标定即可,没有标定板的话可以找线直线条比较多的建筑物场景,用[direct_visual_lidar_calibration]手动粗估计,再用[livox_camera_calib]细化。有标定板的话建议用[FAST-Calib]

hujiax380 avatar May 29 '25 06:05 hujiax380

感谢复现过程,请问一下,是否考虑过直接用kalibr对imu和相机做联合标定?间接获取相机和雷达的外参数

aurorawhisper avatar Jun 18 '25 13:06 aurorawhisper

感谢您的分享,我现在有一个离线录制好的bag,想通过fast-livo2的方法来获得fast-livo2的数据集,应该怎么样设置配置文件,使用的mid360雷达和鱼眼相机

pangzhenquan avatar Jul 08 '25 08:07 pangzhenquan

感谢您的分享,我现在有一个离线录制好的bag,想通过fast-livo2的方法来获得fast-livo2的数据集,应该怎么样设置配置文件,使用的mid360雷达和鱼眼相机

Mid360 + 鱼眼相机的完整适配方案我已实现,详见项目主页:
https://github.com/Rhymer-Lcy/FAST-LIVO2-ROS2-MID360-Fisheye

Rhymer-Lcy avatar Jul 08 '25 09:07 Rhymer-Lcy

感谢您的分享,我现在有一个离线录制好的bag,想通过fast-livo2的方法来获得fast-livo2的数据集,应该怎么样设置配置文件,使用的mid360雷达和鱼眼相机

Mid360 + 鱼眼相机的完整适配方案我已实现,详见项目主页: https://github.com/Rhymer-Lcy/FAST-LIVO2-ROS2-MID360-Fisheye

大佬你好,我在使用你提供的方案进行环境安装和编译,有个问题:关于第三步编译的部分,git clone https://github.com/Rhymer-Lcy/FAST-LIVO2-ROS2-MID360-Fisheye.git,下载后的FAST-LIVO2-ROS2-MID360-Fisheye是应该放在/fast_ws/src/里面吗,然后再编译 下面是我的文件目录结构图: fast_ws/ └── src ├── FAST-LIVO2-ROS2-MID360-Fisheye ├── livox_ros_driver2 ├── vikit_common └── vikit_ros

pangzhenquan avatar Jul 09 '25 02:07 pangzhenquan

感谢您的分享,我现在有一个离线录制好的bag,想通过fast-livo2的方法来获得fast-livo2的数据集,应该怎么样设置配置文件,使用的mid360雷达和鱼眼相机

Mid360 + 鱼眼相机的完整适配方案我已实现,详见项目主页: https://github.com/Rhymer-Lcy/FAST-LIVO2-ROS2-MID360-Fisheye

大佬你好,我在使用你提供的方案进行环境安装和编译,有个问题:关于第三步编译的部分,git clone https://github.com/Rhymer-Lcy/FAST-LIVO2-ROS2-MID360-Fisheye.git,下载后的FAST-LIVO2-ROS2-MID360-Fisheye是应该放在/fast_ws/src/里面吗,然后再编译 下面是我的文件目录结构图: fast_ws/ └── src ├── FAST-LIVO2-ROS2-MID360-Fisheye ├── livox_ros_driver2 ├── vikit_common └── vikit_ros

是的,都放在/fast_ws/src/目录下,然后建议切换到livox_ros_driver2目录下运行./build.sh humble即可。

Rhymer-Lcy avatar Jul 09 '25 03:07 Rhymer-Lcy

感谢您的分享,我现在有一个离线录制好的bag,想通过fast-livo2的方法来获得fast-livo2的数据集,应该怎么样设置配置文件,使用的mid360雷达和鱼眼相机

Mid360 + 鱼眼相机的完整适配方案我已实现,详见项目主页: https://github.com/Rhymer-Lcy/FAST-LIVO2-ROS2-MID360-Fisheye

你好大佬,我在FAST_LIVO2的issue中看到了你的热情回复,同时注意到你的对鱼眼相机适配的FAST-LIVO2,以及对应的rpg_vikit项目。 但是因为这两个项目你尚未开放issue,因此通过电子邮件向你咨询问题。

我最近购置了一款四目相机,咱们只讨论其中的单个相机,其FOV为202度,我最近为其如何标定,以及如何适配FAST_LIVO2而苦恼

我之前制作了FAST_calib对应的标定板,但是发现其项目似乎只支持针孔相机+Radtan模型?外参失败

所以我想咨询你是选取的怎样的相机模型与畸变模型来正确标定你的鱼眼相机的内参,以及CAM与LiDAR的外参呢?(问题1) 以及你的代码是否适配标定出来的结果呢?能给个fastlivo2 CAM的yaml样例吗?(问题2)

这两日真的为这个问题苦恼,我想到可以先标一下能够适配原版fastlivo2的相机参数,如使用这个链接中提到的,(https://github.com/hku-mars/FAST-LIVO2/issues/119#issue-2886150350) 使用 “ 内参标定推荐工具:ROS-camera-Calibrationkalibr(前者简单后者更准)

外参标定推荐工具:direct_visual_lidar_calibration(用其提供的Docker配置更快,但是启动Docker时一定要启动GPU支持!!!)

” 来标定内外参,但也不明确其是否适配我的大fov的相机,

正巧看到了您的回复,有对于鱼眼相机的解决方案,所以咨询大佬以上问题,希望能得到您的回答。 感谢🥳🥳🥳

wstwxl avatar Jul 16 '25 06:07 wstwxl

感谢您的分享,我现在有一个离线录制好的bag,想通过fast-livo2的方法来获得fast-livo2的数据集,应该怎么样设置配置文件,使用的mid360雷达和鱼眼相机

Mid360 + 鱼眼相机的完整适配方案我已实现,详见项目主页: https://github.com/Rhymer-Lcy/FAST-LIVO2-ROS2-MID360-Fisheye

你好大佬,我在FAST_LIVO2的issue中看到了你的热情回复,同时注意到你的对鱼眼相机适配的FAST-LIVO2,以及对应的rpg_vikit项目。 但是因为这两个项目你尚未开放issue,因此通过电子邮件向你咨询问题。

我最近购置了一款四目相机,咱们只讨论其中的单个相机,其FOV为202度,我最近为其如何标定,以及如何适配FAST_LIVO2而苦恼

我之前制作了FAST_calib对应的标定板,但是发现其项目似乎只支持针孔相机+Radtan模型?外参失败

所以我想咨询你是选取的怎样的相机模型与畸变模型来正确标定你的鱼眼相机的内参,以及CAM与LiDAR的外参呢?(问题1) 以及你的代码是否适配标定出来的结果呢?能给个fastlivo2 CAM的yaml样例吗?(问题2)

这两日真的为这个问题苦恼,我想到可以先标一下能够适配原版fastlivo2的相机参数,如使用这个链接中提到的,(https://github.com/hku-mars/FAST-LIVO2/issues/119#issue-2886150350) 使用 “ 内参标定推荐工具:ROS-camera-Calibration,kalibr(前者简单后者更准)

外参标定推荐工具:direct_visual_lidar_calibration(用其提供的Docker配置更快,但是启动Docker时一定要启动GPU支持!!)

“ 来标定内外参,但也不明确其是否适配我的大fov的相机,

正巧看到了您的回复,有对于鱼眼相机的解决方案,所以咨询大佬以上问题,希望能得到您的回答。 🥳🥳🥳 感谢

针对问题1

我使用的扫描仪为无穹创新的 MetaCamEDU,其内外参数由出厂时附带提供;若需自行标定,建议使用专用的鱼眼畸变模型配合棋盘格进行标定操作。

针对问题2

代码适配请直接参考:配置样例 config/camera_metacamedu.yaml参数实现 equidistant_camera

Rhymer-Lcy avatar Jul 18 '25 08:07 Rhymer-Lcy

感谢复现过程,请问一下,是否考虑过直接用kalibr对imu和相机做联合标定?间接获取相机和雷达的外参数

我之前有过尝试,但是发现不准。可能原因是mid360的imu不够好

pcl5 avatar Jul 26 '25 11:07 pcl5