gici-open编译与运行

gici-open

上海交大最新开源了一套GNSS/INS/Camera组合的框架,看上去功能齐全,结合了GNSS领域的知名框架RTKLIB,VIO领域知名框架OKVIS以及SVO,github地址是gici-open,里面有代码、一个用户手册以及开源的数据集,先争取实现安装以及示例数据的运行吧

安装与编译

非ROS版本

代码git clone下来后,因为其实我用的系统和开发者的应该是一致的(ubuntu20.04),所以在这里没有遇到什么问题,唯一需要注意的就是之前没有安装glog库以及我电脑里有两个ceres版本,所以需要把这两个配一下

安装glog

其实无非就是又安装了一个库,但是直接git clone 然后安装glog我发现会报错,后来搜了一下发现是需要先安装一个gflags,所以先到gflags这里把gflags编译安装好,再去glog这里,把glog也编译安装好就可以了,因为gici-open要的是0.6以上,所以其实直接git clone就可以了,已经是最新的版本了

指定ceres版本

这个只要在CMakeLists.txt文件里加一句话就可以

set(Ceres_DIR /xxx/ceres-solver-2.1.0/usr/local/lib/cmake/Ceres)

xxx那里就是你ceres 2.1以上版本的路径,当然如果没有装过ceres,直接装一个2.1以上的就好了

个人习惯

在CMakeLists.txt文件里指定好编译模式比较好,因为如果之后需要自己调试或者修改的话,难免要重新cmake和make,这里也是加了一句

set(CMAKE_BUILD_TYPE "Release")

好了,之后只要和标准编译流程就可以了,在gici-open文件夹下

mkdir build && cd build
cmake ..
make -j8

普通的库到这里就可以跑数据集了!但我发现这个库在通信机制以及数据处理上用了不少技巧(很高级,值得学习),所以还是对数据集格式以及一些处理再了解一些再跑吧

ROS版本

gici-open库很贴心的把ros文件夹都建好了(ros_wrapper),所以如果没什么问题的话直接进去catkin_make就完了。但是!因为之前在用VINS-Fusion的时候出现了cv_bridge和opencv版本冲突的问题,当时一怒之下把ros noetic自带的cv_bridge给删除了,所以这里直接catkin_make就会找不到,回想了一下,当时删除直接就是apt remove,所以我们反其道而行之,这次直接

sudo apt-get install ros-noetic-cv-bridge

果然,cv_bridge很完美地回到了原来的地方
之后再去

catkin_make

就编译完成了

Bad News:运行出错

本以为编译成功应该就没问题了,但是现实还是给了我沉痛的一击,在我命令行输入尝试运行示例数据集的时候,出现了很神奇的报错

ERROR: flag 'logtostderr' was defined more than once ......

这个是glog库的问题,但是回忆了一下自己以前确实是没有单独安装过glog的,那为什么会出现重复定义的问题呢?
于是我卸载了电脑里所有的glog库以及gflag库,先

locate glog | grep /usr
locate gflags | grep /usr

把找到的相关的东西都删除掉

sudo rm -rf /usr/local/include/glog/
sudo rm -rf /usr/local/lib/libglog*
sudo rm -rf /usr/local/include/gflags/
sudo rm -rf /usr/local/lib/libgflags*

然后通过网上的资料发现通过apt-get也可以安装,所以就想着试一下也删除一下

sudo apt-get remove libgoogle-glog-dev
sudo apt-get remove libgflags(tab补全)

结果发现还真有!但忘了思考究竟是什么时候安的了,结果给后边埋了个坑
于是把所有都删除完之后,我又重新安装了gloggflag库,然后再去编译gici-open
结果编译报错了,这次的报错是

undefined reference to `google::InitVLOG3__(int**, int*, char const*, int)'
...

这个问题卡了好久,后来我仔细翻了下cmake时候报的信息,发现Ceres库也是有依赖glog的!所以可能是在删除之前的库的时候导致这个地方链接出错了。所以我采用的解决办法就是卸载现在的Ceres2.1.0,再安装一遍
用源码重新安装之后我又先编译了一下IC-GVINS,编译通过,说明Ceres安装的是没啥问题了
再试下gici-open,也编译通过
运行指令

./gici_main ../option/xxx.yaml

当然第一次运行也报错了,不过这个就是别的问题,不是编译的问题了,所以就放在后边说了

配置文件

gici-open库的配置文件确实和我之前接触到的配置文件都不太一样,所以得认真学习一下,幸好有手册,配置结构的大体文件是有streamestimatelogging三个node,manual里也给了一些解释
gici-open 配置文件解释
看起来就是stream来定义一些数据流,estimate来定义一些解算模式啊、输入格式之类的,logging就是日志吧。再结合一个实例pseudo_real_time_estimation_SPP_RRR.yaml每个节点来仔细看一下

Stream Node

在这里插入图片描述
在这里插入图片描述

  • tag
    看起来就是指定一下数据类型,像pseudo_real_time_estimation_SPP_RRR.yaml文件里
stream:
  streamers:
 - streamer:
      tag: str_gnss_rov_file	# gnss流动站观测文件
      ...
 - streamer:
      tag: str_gnss_eph			# 星历
      ...
 - streamer:
      tag: str_imu				# imu数据
	...
 - streamer:
      tag: str_camera			# 图像数据
      ...
 - streamer:
      tag: str_dcb_file			# dcb文件
      ...
 - streamer:
      tag: str_solution_file	# 最后的结果文件
     ...
  • output_tags
    这个是数据的类型,每一个都是和后边的format对应的

  • type
    这个是数据类型,manual里面给的示例是serial,搜了一下是串口的意思,但在pseudo_real_time_estimation_SPP_RRR.yaml文件里就都是file了,这个应该就是普通的文件了(保存好的那种),manual下边也给了,还有tcp-clientntrip-client等等,根据使用需要应该是要的
    指得注意的是,在file类型里,有一个属性是enable_time_tag,这个和数据集里就对应上了,数据集里也有很多.tag文件,解释manual里说的很详细了,就是记录时间戳的
    在这里插入图片描述

  • path
    文件的路径,也没什么好说的

formators

streamers后面紧跟着一个formators node,看了一下发现里面定义的东西和之前streamersoutput_tag是能对应上的,常见的选项包括下面几种
在这里插入图片描述里面比较重要的感觉有io(指定是输入还是输出),还有tag(这个就是streamers里面要对应的)

replay

这个单看manual其实没太看懂,感觉是运行了一遍数据后存成tag文件,然后在replay的时候就可以设置像播放速度、以及播放延迟一些的参数?之后再看看这个具体是指啥
在这里插入图片描述

Estimate Node

这个里面设置的就是一些最终运行时相关的模式了,感觉这个里面的内容就和其他一些常见SLAM库的配置文件内容差不多了,manual里给出了常用的选项有
在这里插入图片描述
这个就要结合manual来仔细看了,之后有时间的话详细地记录一期吧

Logging Node

这个感觉就是结合glog库进行的日志文件输出设置
在这里插入图片描述

非ROS依赖的运行

RTKLIB连接

作为测绘人,发现一个SLAM库能和RTKLIB直接连接起来还是很兴奋的,于是兴致勃勃去尝试和rtkplot建立连接,这个其实在gici-dataset这里有说明
在这里插入图片描述
就按这个流程一步一步来就行,因为我第一次运行的时候笔记本和ubuntu主机不在同一个网络下,所以选择了内网穿透的办法,通过映射ubuntu主机tcp,然后再用ubuntu连接,连接本身是没什么问题的
在这里插入图片描述
右上角有这个标志基本就是连接成功了,显示未连接主要是因为还没数据,如果担心的话可以再用RTKLIB的带的strsvr再单独试一下
在这里插入图片描述
在这里插入图片描述
连接没什么问题的话,准备工作就做好了

gici运行

这里需要注意的是一定要把配置文件改好!一开始我没改好,就会出现很多error,主要是Open streamer xxx failed
在这里插入图片描述
当然最后也会以很经典的
已放弃(核心已转储)结尾
在这里插入图片描述
于是我一个一个看,发现每一个Open streamer xxx failed都对应着自己的一个配置文件没改对的地方…于是只要把需要改的
路径
start_time(这个要和你用的数据集对应,数据集对应的时间github里也有写)都改好了,就可以正常运行了
在这里插入图片描述

总结

虽然还没有看代码,但就通过编译运行时候的接触发现,这个库确实做的还是非常好的,尤其是数据处理的部分,感觉可学性很高。由于这个库刚开源,还没什么资料,编译运行过程中遇到的问题基本都是自己嗯想出来的解决方案,可能不具有普适型,我遇到很多问题都是觉得不对暴力的删除重新装,如果您看到了博客按我的方法进行尝试是请务必注意文件安全

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 44
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 44
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值