xiangli0608 / Learning_localization_from_scratch_ws

Apache License 2.0
104 stars 18 forks source link

Learning_localization_from_scratch_ws

项目的目的

通过自己手动实现定位相关的功能,来达到学习定位的各个算法的目的。

文章将在 公众号, CSDN, 知乎 三个途径进行同步更新.

依赖库

代码是处于更新状态的,所有需要安装的依赖库都会写在 install_dependence.sh 脚本中,如果发现编译时由于依赖库报错,按照如下命令安装下依赖库即可.

cd /path_to_workspace/Learning_localization_from_scratch_ws
chmod +x install_dependence.sh
./install_dependence.sh

运行环境

测试数据

目前, 所用的数据集是Kaist数据集,其官方链接为 Complex Urban Dataset

数据集的使用方式见:kaist数据集体验

我将所有的数据集汇总到一个在线表格中,地址如下 公众号数据集汇总

提交代码

TODO

以下为每篇文章对应的节点如何运行,以及对应节点的功能简介

基于LIO-SAM的建图

数据集

Complex Urban Dataset

转录bag

Kaist数据集的使用也可以通过工具将数据转成bag从而进行使用。使用的工具是kaist2bag,这个工具已经在工程的kaist_tool文件夹里了,可以直接使用。

具体的使用方法为:

运行

数据就使用之前转录好的bag,将bag的地址填写在 LIO-SAM/launch/run.launch 中,通过命令 roslaunch lio_sam run.launch, 开始建图。

建图效果展示

lio-sam-result

代码改动

  # GPS Settings
  useGPS: true

  # LidarOdom Settings
  useLidarOdom: false

  # WheelOdom Settings
  useWheelOdom: true

建图精度评估 evo(kitti/tum)

第一步 将kaist的真值转成evo能够读取的格式

这一步需要安装依赖项 pip3 install numpy scipy 已经填写在 install_dependence.sh 文件中。

执行步骤为

./src/scripts/kaist2evo.py -p /media/trunk/Trunk/0-LX/Kaist/Urban08

-p 后边接的是数据集的文件夹,之后可以加 -o 加输出轨迹文件的地址。

执行之后会在Urban08文件夹下生成2个txt文件,分别是 tum_ground_truth.txt 与 tum_vrs_gps.txt。

当然,这个我已经转好了,放在了 src/doc/ground_truth 文件夹下,不再需要自己转了。

参考文章

KAIST数据集参数

第二步 输出 lio-sam 的轨迹文件

roslaunch lio_sam run.launch 执行完建图之后,会在 src/doc/mapping_results 文件夹下生成轨迹文件

第三步 执行评估

然后将 src/doc/ground_truth/tum_ground_truth.txt 与 src/doc/mapping_results/tum_lio_sam_pose.txt 这两个文件,分别填在 src/scripts/evo.sh 的 txt1 与 txt2 中

在执行 src/scripts/evo.sh 即可绘制轨迹图,ape图,rpe图。

traj

基于点面匹配的激光里程计

基本原理

代码文件在./lidar_odometry 基于点面匹配,借鉴了LIO-SAM中的匹配方式,不同的是LIO-SAM采用的是帧与附近的帧组成的局部地图匹配,本方案借鉴了A-LOAM的思想,提取面特征,先用前后两帧的面特征点构建点面残差,得到一个粗略的帧间里程计,然后将多帧累计,组成地图与当前帧匹配,修正里程计坐标系和世界坐标系之间的转换关系,得到一个更加精确的里程计。 LIO-SAM角点和平面匹配的残差构建和雅克比推导可以参考:https://zhuanlan.zhihu.com/p/548579394

代码改动

测试效果

roslaunch lidar_odometry run.launch

2