使用开源代码IC_GVINS从0到1跑通自己的数据集(相机+北斗)
在此文章中,笔者会尽量回忆并记录所有在跑代码阶段遇到的问题以及解决方案,希望能给大家提供一些帮助。当然,有很多的问题被忽略了,大家也可以私信我或者留言(越早越好哦~趁我还有热乎的记忆,我会尽力帮助大家。ps:我觉得我几乎是把所有坑都踩了一遍哈哈)。
使用IC_GVINS从0到1跑自己的数据集(相机+北斗)使用手册
注意:在此感谢武汉大学集成智能导航(i2Nav)团队的唐海亮、牛小骥和张提升等大佬开源该代码供我们学习,并感谢武汉大学的澎师兄等给予我的帮助的人,让我在此次复现代码的过程中除了学习到代码本身的知识,提升工程实践能力之外,也对融合北斗数据的SLAM方案有了新的认识。
在此文章中,笔者会尽量回忆并记录所有在跑代码阶段遇到的问题以及解决方案,希望能给大家提供一些帮助。当然,有很多的问题被忽略了,大家也可以私信我或者留言(越早越好哦~趁我还有热乎的记忆,我会尽力帮助大家。ps:我觉得我几乎是把所有坑都踩了一遍哈哈)。
先放一张运行的效果图:

其实我跑出来的效果一般,但是能跑 。下面进入正文:
1. 硬件选型以及源码下载
原项目的方案:
https://www.bilibili.com/video/BV15a411q71D/
https://gitcode.com/gh_mirrors/ic/IC-GVINS/overview?utm_source=csdn_github_accelerator&isLogin=1
笔者的硬件平台如下:
相机:INDEMIND 双目惯导相机模组
IMU:WHEELTEC惯导N100N(其实是和G60模块一起的可以组成INS的,但是我这边信号不好,IMU和北斗的数据融合精度也不会提高所以就没有用融合;此外为什么没有用INDEMIND内置的IMU呢,因为坐标系转换的我实在精疲力竭,后面我也会简单介绍一下)
GNSS:WHEELTEC的G60模块(由于项目要求,我们使用的是北斗数据,问了技术人员,GPS和北斗都采用NMEA0183协议,只是数据表头不一样,不重要不重要,正常在上位机关闭GPS模块只读北斗的数据就行,如果要用GPS数据就关闭北斗模块就行)
注意:笔者在此不对上述传感器怎么在上位机读取数据做进一步的介绍,默认大家都能够正确使用ROS SDK正常读取数据哈,如果确实有需要,可以联系我。题外话,笔者都是用usb直接读取数据哈,没有用无人车底盘,大家如果有的话当然最好啦,因为一手拿设备,一手端着电脑,还要忍受gnss数据时好时坏,非常的影响大家的科研热情。
一些使用传感器的注意点:
- 传感器最好都实现在Windows上位机确认一下能够读取数据,像imu和GNSS都需要做校准和调整的工作。
- 传感器的频率设置以及消息格式:
插入频率图片:

-
IMU的坐标系:需要额外注意IMU的数据采用x前y右z下的坐标系,有的厂商会给两个坐标系,一个是硬件本身的坐标系,一个是在ROS里输出的坐标系,我认为作者一再强调imu坐标系这个点,是非常重要的,后面有个大坑就是因为imu坐标系的问题,一般我们的坐标系会采用右手系:x右y前y上,如果坐标系不一致的话,需要在源码和参数做一些调整。
-
G60模块和北斗/GPS模块
室内没有信号,需要在室外获取数据;此外,北斗和GPS模块不可以和相机,IMU等靠得太近,最好还要和imu有个位差,就算北斗模块放在imu上面或者下面,不要保持统一水平面,不然会影响数据,在ros里订阅一下话题查看一下北斗GPS数据是否正常。(而G60可以和相机,imu靠的比较近)** rostopic echo /fix(这里的/fix是北斗数据的topic,改成你自己的即可) ** 正常获取数据的界面如下:

如果出现 nan nan nan的情况,说明没有正常获取数据,以下是几种可能的情况:
-
将天线拿到高于G60的地方静置3分钟左右,初始化需要一点时间。
-
查看该地是否有信号,首先室内是没有信号的,要到室外去,G60模块不能有遮挡。然后根据技术支持提供的WINDOWS端的上位机软件进行检测,查看周围是否有信号:
-
查看IMU和相机模块是否被开启,G60的天线离其他传感器模块太近也会导致信号被屏蔽。
根据实验来看,第三种可能性更大。
打开GnssTookit3->打开视图->选择星位图->打开星位图视图
等待一分钟,检测信号,如果能够看到上面的界面,说明该地有信号。考虑一下上述的第三种状况。
5. 硬件摆放

比较简陋,以下是几点摆放说明:
- imu x要指向运行方向(或者车头)
- G60模块不要有遮挡
- 相机和imu可以这么固定,找我要外参数据。
2. 环境配置
2. 环境配置
这里主要参考的原文(链接如下):
https://gitcode.com/gh_mirrors/ic/IC-GVINS/overview?utm_source=csdn_github_accelerator&isLogin=1
IC-GVINS
一个稳健、实时、以惯性导航为中心的全球卫星导航系统-视觉惯性导航系统。
在复杂的环境中,视觉导航系统易受影响,而惯性导航系统(INS)则不受外部因素影响。因此,我们提出了一种名为IC-GVINS的强健、实时、以INS为核心的全球导航卫星系统(GNSS)-视觉惯性导航系统,以充分利用INS的优势。通过在INS中补偿地球自转,提高了高精度惯性测量单元(IMU)的准确性。为了提高在高速动态条件下的系统鲁棒性,使用精确的INS信息来辅助特征跟踪和地标三角化。借助GNSS辅助初始化,在因子图优化框架内统一世界坐标系中紧密融合了IMU、视觉和GNSS测量值。
**作者:**武汉大学集成智能导航(i2Nav)团队的唐海亮、牛晓吉和张诗胜。
2.1 安装依赖
2.1.2 系统和编译器
建议您使用带有最新编译器(gcc >= 8.0 或 clang >= 6.0)的Ubuntu 18.04或Ubuntu 20.04。
笔者使用的是Ubuntu18.04+ROS,在此提一句,笔者使用的INDEMIND相机最高也只支持Ubuntu18.04。
#安装gcc-8
sudo apt install gcc-8 g++-8
#安装clang
sudo apt install clang
2.1.3 机器人操作系统
这个就是ROS Melodic,给大家推荐个特别方便的安装方法:
鱼香ROS的一键安装步骤:
wget http://fishros.com/install -O fishros && sudo bash fishros
(强力推荐,非常方便)
2.1.4 Ceres求解器及其依赖项
我们在IC-GVINS中使用Ceres求解器解决非线性最小二乘问题。支持的版本是Ceres Solver 2.0.0或2.1.0。请参考Ceres安装说明。
IC-GVINS还需要依赖Eigen(>=3.3.7)、TBB、glog(>=0.4.0)。您可以按如下方式安装:
sudo apt install libeigen3-dev libgoogle-glog-dev libtbb-dev
如果您的系统库无法满足这些版本,应从源代码构建它们。(可以直接装源码)
2.1.5 OpenCV
支持的版本是OpenCV(>=3.2.0)。您可以从系统库安装OpenCV,也可以从源代码构建。IC-GVINS也支持OpenCV 4。
sudo apt install libopencv-dev
我的建议是从源码构建。
2.1.6 yaml-cpp
sudo apt install libyaml-cpp-dev
2.2 安装并运行IC-GVINS
2.2.1 构建源代码
#创建工作区目录并进入
mkdir ~/gvins_ws && cd ~/gvins_ws
mkdir src && cd src
#将仓库克隆到src目录
git clone https://github.com/i2Nav-WHU/IC-GVINS.git
#回到gvins_ws目录
cd ..
#使用catkin_make构建源代码
#使用gcc
catkin_make -j8 -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=gcc-8 -DCMAKE_CXX_COMPILER=g++-8
#使用clang
#catkin_make -j8 -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
2.2.2 运行演示数据集
如果您已下载开源数据集,可以执行以下命令。
#打开一个新的终端并加载工作区环境
#对bash
source ~/gvins_ws/devel/setup.bash
#对zsh
#source ~/gvins_ws/devel/setup.zsh
#运行IC-GVINS节点
#您需要修改配置文件和命令行中的路径
roslaunch ic_gvins ic_gvins.launch configfile:=path/urban38/IC-GVINS/gvins.yaml
#在另一个终端播放ROS bag
rosbag play path/urban38/urban38.bag
2.3 数据集
2.3.1 KAIST复杂城市数据集
KAIST.png

urban38
链接:https://pan.baidu.com/s/18yRYUQdu_-DmrYnXQy9VNQ#list/path=%2F
密码:gyvr
urban39
链接:https://pan.baidu.com/share/init?surl=4CHl7LaIIkBKpwhyuPPbPA
密码:mnrn
KAIST_1.png

2.3.2 IC-GVINS机器人数据集
这个数据集是作者提供的他们自己收集的数据集
IC.png

campus
链接:https://pan.baidu.com/s/18yRYUQdu_-DmrYnXQy9VNQ#list/path=%2F
密码:igks
building
链接:https://pan.baidu.com/share/init?surl=Y48jFmdAOBF4y30KBK9bAw
密码:2drg
IC_1.png
在这里插入图片描述
2.4 使用自己的数据集
您可以使用自己收集的数据集运行IC-GVINS。请注意以下几点:
- 准备同步数据:确保GNSS、相机和IMU的数据在ROS包中良好同步;
- IMU坐标系要求:IMU数据应采用前右下(Front-Right-Down)格式;
- 修改话题名称:调整ic_gvins.launch文件中的主题名称以匹配您的数据;
- 配置参数调整:根据实际情况修改配置文件中的参数设置。
以上是作者介绍的内容。
但是运行自己的数据集在网上并不能找到一些前辈的记录或者教程,所以想用自己的传感器和数据集复现出效果就显得特别困难。
下面就具体介绍笔者是如何用IC-GVINS运行自己的数据集的。
3. IC-GVINS运行自己的数据集
下面我们从传感器标定内外参数,时间同步,修改参数文件等步骤一一介绍。
3.1 INDEMINE相机内参标定
我们使用的是INDEMIND相机,根据官方的技术支持进行一些前期工作:
https://imsee-sdk-docs.readthedocs.io/zh/latest/src/sdk/support_platforms.html
在此我再记录一下我的步骤:
-
下载安装IMSEE-SDK
git clone https://github.com/INDEMIND/IMSEE-SDK cd <imsee_sdk> make ros -
安装camera_calibration
#安装camera_calibration,一般ros已经默认安装 sudo apt-get install ros-melodic-camera-calibration -
下载安装imu_utils(用来标定IMU内参)
在这里额外说明一下,IMU的内参标定需要静置2个小时以上,可能还存在误差,所以我的建议是找商家要现成参数文件。
此外,imu_utils的安装步骤有一点复杂,在这我推荐个链接,大家按照博客安装进行
用imu_utils标定IMU,之后用于kalibr中相机和IMU的联合标定_slam标定imu wait for imu data是什么原因-CSDN博客
使用imu_utils进行IMU的误差标定以及IMU姿态解算_imu的误差标定以及姿态解算-CSDN博客
基本上在这中途遇到的报错,网上都有解决方案。
-
下面开始标定相机内参
参考链接:使用kalibr标定双目相机以及IMU–安装运行标定全过程以及踩坑记录-CSDN博客
indemind相机本身设置的相机频率是50hz,为了降低频率过快导致标定误差过大,我们需要先使用rostopic tools来重新发布hz,商家说硬件的频率是没法更改 的,我尝试过修改config文件,但是没有生效,所以我们还是采用topic tools来修改。
INDEMIND厂家提供了直接获取相机和imu内参以及外参的脚本:
./get_devce_info我的建议是直接获取的参数可以和自己标定的做一下对比,差别不太大就行。
首先运行相机:
>>进入ros文件夹 $ sudo su #和realsense相机不同,indemind相机启动需要权限 $ source devel/setup.bash $ roslaunch imsee_ros_wrapper start.launch #启动相机 或者 $ roslaunch imsee_ros_wrapper display.launch #启动相机的同时启动rviz,可以在rviz直接看相机传回的图像如果遇到以下报错:报错 libopencv_calib3d3.so.3.3.
Failed to load nodelet [/imsee/imsee_wrapper_node] of type [imsee/ROSWrapperNodelet] even after refreshing the cache: Failed to load library ../indemind/IMSEE-SDK/ros/devel/lib//libimsee_wrapper.so. Make sure that you are calling the PLUGINLIB_EXPORT_CLASS macro in the library code, and that names are consistent between this macro and your XML. Error string: Could not load library (Poco exception = libopencv_calib3d3.so.3.3.so.3.3: cannot open shared object file: No such file or directory)首先明确一下自己用的设备的架构,如果用的TX2,将lib/others/tx2-opencv3.4.3中的libindemind.so文件放到lib/aarch64中,重新编译。
如果用的是电脑,就换成对应的.so文件就行。
tip:INDEMIND相机不支持Jetson Nano的arm架构
具体相机内参和IMU的标定参考下面的链接(写的比较仔细,强烈建议):
使用kalibr标定双目相机以及IMU–安装运行标定全过程以及踩坑记录-CSDN博客
在这里需要注意以下几点:
- 标定板建议使用提供的aprilgrid标定板,打印到a4纸上,需要注意更改.yaml的内容。
- 录制数据包时要把标定板放在相机的视线里,确保能够提到角点
- 标定板打印下来要清楚一点,粘贴平整,不然误差会很大(误差在0.2左右就可以了)。
# 进入管理员模式,启动相机,查看相机启动发布的话题
cd IMSEE-SDK/
sudo su
source ros/devel/setup.bash
roslaunch imsee_ros_wrapper display.launch
rostopic list
# 可以通过echo来查看输出、频率
rostopic echo /imsee/..
rostopic hz /imsee/..
#或者用rqt来查看
rosrun rqt_topic rqt_topic
#修改相机发布频率之前,这里面的话题还包括了一个修正后的左右目,接下来用这个rectified话题,畸变参数能小一些:
rosrun topic_tools throttle messages /imsee/image/rectified/left 20.0 /imsee/left_rec_20
rosrun topic_tools throttle messages /imsee/image/rectified/right 20.0 /imsee/right_rec_20
#录制数据包
rosbag record -O stereocam.bag /imsee/left_rec_20 /imsee/right_rec_20
#开始标定
source ~/kalibr_workspace/devel/setup.bash
rosrun kalibr kalibr_calibrate_cameras --bag stereocam.bag --target april.yaml --models pinhole-radtan pinhole-radtan --topics /imsee/left_rec_20 /imsee/right_rec_20
标定完之后会有可视化界面。
3.2 相机和IMU联合标定外参
因为icgvins要求imu满足前右下的坐标系,而indemind自带的imu是右前上,需要做额外的代码修改,为了省事 ,我就选择了使用N100,**imu在ros sdk的launch里可以设置输出的坐标系。**默认输出 的是右前上,所以需要在launch里修改一下输出前右下坐标系。
-
固定相机和imu,imu的x保持为前进的方向即可。
-
启动相机和IMU,然后修改话题。
==注意:==这款IMU默认的频率是100hz,我们需要在上位机修改成200hz(跟着用户手册操作就行,这里就不展示了)
#启动imu ... #启动相机 ... #修改话题 rosrun topic_tools throttle messages /imu 200.0 /imu0 rosrun topic_tools throttle messages /imsee/image/rectified/left 20.0 /imsee/left_rec_20 rosrun topic_tools throttle messages /imsee/image/rectified/right 20.0 /imsee/right_rec_20 #录包 rosbag record -O stereo_imu.bag /imsee/left_rec_20 /imsee/right_rec_20 /imu0 #进行标定 source ~/kalibr_workspace/devel/setup.bash rosrun kalibr kalibr_calibrate_imu_camera --bag stereo_imu.bag --target april.yaml --imu imu.yaml --cam stereocam-camchain.yaml (这里有个imu.yaml文件也需要放在kalibr目录下)imu.yaml内容如下
%YAML:1.0 --- type: IMU name: N100 Gyr: unit: " rad/s" avg-axis: gyr_n: 8.0226069504443656e-04 # Gyro误差模型高斯白噪声 gyr_w: 4.4153147263889589e-05 # Gyro误差模型随机游走噪声 x-axis: gyr_n: 5.3921043773503836e-04 gyr_w: 2.2364472813436421e-05 y-axis: gyr_n: 5.8344519509160989e-04 gyr_w: 2.2667820610429897e-05 z-axis: gyr_n: 1.2841264523066615e-03 gyr_w: 8.7427148367802434e-05 Acc: unit: " m/s^2" avg-axis: acc_n: 1.0909715156015328e-02 # Acc误差模型高斯白噪声 acc_w: 4.0347767978459928e-04 # Acc误差模型随机游走噪声 x-axis: acc_n: 1.0761065941039795e-02 acc_w: 2.6630975523772447e-04 y-axis: acc_n: 8.5197044939375362e-03 acc_w: 1.6972573784404112e-04 z-axis: acc_n: 1.3448375033068652e-02 acc_w: 7.7439754627203219e-04使用kalibrb标定外参时需要在目录下放修改后的imu.yaml,参考如下
#Accelerometers accelerometer_noise_density: 1.0909715156015328e-02 accelerometer_random_walk: 4.0347767978459928e-04 #Gyroscopes gyroscope_noise_density: 8.0226069504443656e-04 gyroscope_random_walk: 4.4153147263889589e-05 rostopic: /camera/imu update_rate: 200.0
得到的外参不能够直接使用,需要我们转化成四元数的表达,在这里可以直接让Chat-GPT给你算,我是写了一个代码调用了eigen算的,代码也放在下面了:记得将矩阵替换成自己标定出来的外参矩阵
#include <iostream>
#include <Eigen/Dense>
int main() {
// 定义一个旋转矩阵
//
Eigen::Matrix3d rotationMatrix;
rotationMatrix << 0.05498962, 0.03325747, 0.9979329,
0.99758879, -0.04421131, -0.05349726,
0.04234074, 0.99846848, -0.03560844;
// 使用Eigen库中的函数从旋转矩阵计算四元数
Eigen::Quaterniond quaternion(rotationMatrix);
// 打印四元数
std::cout << "四元数: (" << quaternion.w() << ", "
<< quaternion.x() << ", "
<< quaternion.y() << ", "
<< quaternion.z() << ")" << std::endl;
// 如果你想要从四元数转回旋转矩阵来验证(可选)
Eigen::Matrix3d rotationMatrixFromQuaternion = quaternion.matrix();
// 打印转换回来的旋转矩阵
std::cout << "从四元数转换回来的旋转矩阵:\n" << rotationMatrixFromQuaternion << std::endl;
return 0;
}
最后修改的完整ic-gvins的config参数文件如下:
# IC-GVINS多源融合定位算法配置文件
# 结果输出路径
# Output directory
outputpath: "/home/suncn/gvins_ws/src/IC-GVINS/output"
is_make_outputdir: true
# 时间信息, s
# Time length for GNSS/INS intialization
initlength: 1
# IMU原始数据频率, Hz
# IMU sample rate
imudatarate: 200.0
# 考虑地球自转补偿项
# Consider the Earth rotation
#iswithearth: true
iswithearth: true
# 天线杆臂, IMU前右下方向, m
# GNSS lever-arm in IMU body frame (front-right-down)
antlever: [-0.37, 0.208, -0.353]
# IMU噪声建模参数
# IMU noise parameters
imumodel:
arw: 0.013684 # deg/sqrt(hr)
vrw: 0.000088 # m/s/sqrt(hr)
gbstd: 0.000802 # deg/hr
abstd: 0.010909 # mGal
corrtime: 1.0 # hr
# GNSS中断配置
# GNSS outage configurations, the GNSS will not be used after the gnssoutagetime
isusegnssoutage: false
gnssoutagetime: 0
# 固定阈值GNSS抗差
# A fixed threshold (STD, m) for GNSS outlier culling
gnssthreshold: 20
# 是否开启可视化
# Use visualization
is_use_visualization: true
# 跟踪
# Tracking configurations
track_check_histogram: true # 直方图检查, 避免出现光照变化较大的图像 (Check histogram for drastic illumulation change)
track_min_parallax: 20 # track_min_parallax: 20 # 关键帧最小像素视差 (The minmum parallax in pixels to choose a keyframe)
track_max_interval: 0.5 # track_max_interval: 0.5 # 最大的关键帧间隔, 超过则插入观测帧, s (The maximum lenght to choose a observation frame)
track_max_features: 200
# track_max_features: 300 # 最大提取特征数量 (The maximum features to detect, may be more or less, see tracking.cc)
# 优化
# Optimization configurations
reprojection_error_std: 1.5 # reprojection_error_std: 1.5 # 像素重投影误差 (The reprojection error std for optimizition and outlier culling)
optimize_windows_size: 10 # optimize_windows_size: 10 # 滑动窗口大小 (The size of the sliding window, number of the keyframes )
optimize_num_iterations: 20 # optimize_num_iterations: 20 # 优化迭代次数 (The iterations in total)
optimize_estimate_extrinsic: false # optimize_estimate_extrinsic: true # 是否估计相机和IMU的外参 (Estimate the extrinsic)
optimize_estimate_td: false # optimize_estimate_td: true # 否估计相机和IMU之间的时间间隔 (Estimate the time delay)
# Camera parameters
cam0:
# 内参 [fx, fy, cx, cy(, skew)]
# Intrinsic parameters, pinhole model
intrinsic: [263.54809325, 263.51860304, 291.92859584, 189.56831071]
# 畸变参数 [k1, k2, p1, p2(, k3)]
# Distortion parameters
distortion: [-0.00805451, 0.00890036, 0.00110142, 0.00142004]
# 图像分辨率
# Resolution
resolution: [640, 400]
# 相机IMU外参 (Camera-IMU extrinsic)
# Pb = q_b_c * Pc + t_b_c
# q (x, y, z, w)
q_b_c: [0.494919, 0.549779, 0.48144, 0.47012]
t_b_c: [-0.04314436,-0.02309919, -0.07765525]
# IMU和相机时间延时 (The time delay between the IMU and camera)
# t_i = t_c + td+-0.9495
td_b_c: -0.7694290781145723
3.3 录包和运行
#开启ic_gvins(室外)
#步骤如下:
#1. 开启相机
cd IMSEE-SDK/
sudo su
source ros/devel/setup.bash
roslaunch imsee_ros_wrapper start.launch
#2. 设置相机发布频率:相机原本50hz,这里改为20hz
rosrun topic_tools throttle messages /imsee/image/rectified/left 20.0 /cam0
rosrun topic_tools throttle messages /imsee/image/rectified/right 20.0 /cam1
#3. 开启IMU(N100N):IMU频率200hz,坐标系为前右下(非笛卡尔坐标系)
cd wheeltec-gps-ros1/
source devel/setup.bash
roslaunch fdilink_ahrs ahrs_data.launch
#4. 开启北斗/GPS topic为:/fix
cd wheeltec-gps-ros1/
source devel/setup.bash
roslaunch wheeltec_gps_driver wheeltec_gps_driver.launch
#5. 查看话题是否有数据
rostopic echo /fix
#6. 开启算法
cd gvins_ws
source devel/setup.bash
roslaunch ic_gvins ic_gvins.launch configfile:=/home/user/gvins_ws/src/IC-GVINS/config/gvins2.yaml
#录制数据包(option)
rosbag record -O test.bag /cam0 /fix /imu0
3.4一些报错和解决方案
-
初始化不成功
答:1)大概率是时间戳相差太大,观察一下算法终端打印的时间戳

这里可以看到三个时间戳相差很大,所以一致初始化没成功(没有运行界面),正常数据读入后,时间戳相差在1s都是可以的。

在算法里可以将这个时间戳误差修改带一点,建议写个shell脚本,同时开启传感器的驱动,这样获取的时间戳几乎一致,初始化也更容易成功。
-
failed to get rigtht IMU series

程序运行过程中大概率会出现以上关于imu的一系列报错,如何解决呢?
回归代码本身吧,在具体报错的行打印log,帮助自己判断到底在那里一行执行失败,这里可以看一下MISC::getImuSeriesFromTo这个函数

红色地方是我修改过的,因为我设置log打印车来imu的值是0,那按照原本的代码,imu1不就是-1,数组越界了,我猜测这可能就是导致程序崩溃的原因,所以这里我们加一组判断情况,过滤掉imu0=0的情况,当然我这里修改的未必严谨,可以再多思考一下。
-
不能闭环的问题
这个其实我也不太清楚解决方案,但是可以做一些尝试,这里放一下大佬给的建议:
1. 第一个就是检查下外参 2. 第二个就是视觉,在室外跑数据感觉视觉其实很容易失败的,所以视觉那部分的参数可以调一下,比如关键帧可以多一些,然后特征点少一些之类的 3. 最后还有一个就是很笨但很有效的方法,其实VINS程序鲁棒性强很多,可以用VINS跑下你的数据试试,如果VINS都跑不好那就说明可能代码得改动一些才能跑个大差不差了然后我个人认为呢
1. 外参很重要,如果能跑起来了,那外参就只能决定算法精度了 2. 之前跑过lio-sam,里面不能闭环的原因是因为imu频率给的不够,所以我们在这至少要保证imu频率在200hz 3. z轴上很飘,建议调整一下角度,看看不关注z轴的情况下,能否实现转弯, 4. 打印gnss的数据看一下是否是因为gnss数据不准(大概率不会,z轴上会飘而已,总体还是没啥问题的) -
…当然还遇到了很多的报错,有一些网上都有解决方案,还有一些时间线太长,我已经记不清了,欢迎大家补充,我会继续修改更新。
4 参考链接
前两个链接非常建议看一看!
- 【INDEMIND相机运行SLAM】_indemind github-CSDN博客
- 使用kalibr标定双目相机以及IMU–安装运行标定全过程以及踩坑记录-CSDN博客
- INDEMIND相机运行VINS-slam_indemind运行vins-fusion-CSDN博客
- 【INDEMIND相机运行SLAM】_indemind github-CSDN博客
最后,如果大家有什么问题,或者需要什么数据,都可以来联系我,希望大家都可以成功~
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)