使用开源代码IC_GVINS从0到1跑通自己的数据集(相机+北斗)

使用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数据时好时坏,非常的影响大家的科研热情。
一些使用传感器的注意点:

  1. 传感器最好都实现在Windows上位机确认一下能够读取数据,像imu和GNSS都需要做校准和调整的工作。
  2. 传感器的频率设置以及消息格式:

插入频率图片:

  1. IMU的坐标系:需要额外注意IMU的数据采用x前y右z下的坐标系,有的厂商会给两个坐标系,一个是硬件本身的坐标系,一个是在ROS里输出的坐标系,我认为作者一再强调imu坐标系这个点,是非常重要的,后面有个大坑就是因为imu坐标系的问题,一般我们的坐标系会采用右手系:x右y前y上,如果坐标系不一致的话,需要在源码和参数做一些调整。

  2. G60模块和北斗/GPS模块
    室内没有信号,需要在室外获取数据;此外,北斗和GPS模块不可以和相机,IMU等靠得太近,最好还要和imu有个位差,就算北斗模块放在imu上面或者下面,不要保持统一水平面,不然会影响数据,在ros里订阅一下话题查看一下北斗GPS数据是否正常。(而G60可以和相机,imu靠的比较近)

    **
    rostopic echo /fix(这里的/fix是北斗数据的topic,改成你自己的即可)
    **
    正常获取数据的界面如下:
    

在这里插入图片描述

如果出现 nan nan nan的情况,说明没有正常获取数据,以下是几种可能的情况:

  1. 将天线拿到高于G60的地方静置3分钟左右,初始化需要一点时间。

  2. 查看该地是否有信号,首先室内是没有信号的,要到室外去,G60模块不能有遮挡。然后根据技术支持提供的WINDOWS端的上位机软件进行检测,查看周围是否有信号:

  3. 查看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测量值。
overview.png

**作者:**武汉大学集成智能导航(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
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值