SLAM实验篇
TUM数据集
associate.py使用
使用方法
python2 associate.py rgb.txt depth.txt > associate.txt
注意:这里官方提供的脚本是python2的
evo
evo_ape和evo_rpe计算方法
介绍前,先对定义一下公式标注:
算法估计位姿: P 1 . . . . . . P n ∈ S E ( 3 ) P_1......P_n\in SE(3) P1......Pn∈SE(3)
真实位姿: Q 1 . . . . . . Q n ∈ S E ( 3 ) Q_1......Q_n\in SE(3) Q1......Qn∈SE(3)
下标代表时间 t t t(或帧),这里我们假设估计位姿和真实位姿各帧时间已对齐,总帧数相同。 △ \triangle △表示相隔时间time interval。
安装
建议参考官网
错误一
在运行evo_traj tum data.tum -p
报以下错误
[ERROR] Unhandled error in evo.main_traj
Traceback (most recent call last):
File "/home/houyiliang/.local/lib/python3.8/site-packages/evo/entry_points.py", line 99, in launch
main_module.run(args)
File "/home/houyiliang/.local/lib/python3.8/site-packages/evo/main_traj.py", line 420, in run
from evo.tools import plot
File "/home/houyiliang/.local/lib/python3.8/site-packages/evo/tools/plot.py", line 43, in <module>
import seaborn as sns
File "/home/houyiliang/.local/lib/python3.8/site-packages/seaborn/__init__.py", line 2, in <module>
from .rcmod import * # noqa: F401,F403
File "/home/houyiliang/.local/lib/python3.8/site-packages/seaborn/rcmod.py", line 5, in <module>
from . import palettes
File "/home/houyiliang/.local/lib/python3.8/site-packages/seaborn/palettes.py", line 9, in <module>
from .utils import desaturate, get_color_cycle
File "/home/houyiliang/.local/lib/python3.8/site-packages/seaborn/utils.py", line 11, in <module>
import pandas as pd
File "/home/houyiliang/.local/lib/python3.8/site-packages/pandas/__init__.py", line 48, in <module>
from pandas.core.api import (
File "/home/houyiliang/.local/lib/python3.8/site-packages/pandas/core/api.py", line 22, in <module>
from pandas.core.algorithms import (
File "/home/houyiliang/.local/lib/python3.8/site-packages/pandas/core/algorithms.py", line 40, in <module>
from pandas.core.dtypes.cast import (
File "/home/houyiliang/.local/lib/python3.8/site-packages/pandas/core/dtypes/cast.py", line 23, in <module>
from dateutil.parser import ParserError
ImportError: cannot import name 'ParserError' from 'dateutil.parser' (/usr/lib/python3/dist-packages/dateutil/parser/__init__.py)
[ERROR] evo module evo.main_traj crashed - no logfile written (disabled)
可以看到这里错误是ImportError: cannot import name 'ParserError' from 'dateutil.parser'
缺什么我们就安什么
pip install python-dateutil==2.8.2
可以从 pypi网站上,查看 python-dateutil 最新版本编号
安装成功我们继续执行evo_traj tum data.tum -p
,又出现了新的错误
File "/home/houyiliang/.local/lib/python3.8/site-packages/matplotlib/backends/_backend_tk.py", line 8, in <module>
import tkinter as tk
ModuleNotFoundError: No module named 'tkinter'
老规矩缺什么安装什么
sudo apt-get update
sudo apt-get install python3-tk
安装完成后再次运行,又又又报错
from PIL import Image, ImageTk
ImportError: cannot import name 'ImageTk' from 'PIL' (/usr/lib/python3/dist-packages/PIL/__init__.py)
再来
sudo apt-get install python3-pil python3-pil.imagetk
大功告成
支持的轨迹
- ros——ROS数据包
当数据包中含有topic:geometry_msgs/PoseStamped, geometry_msgs/TransformStamped, geometry_msgs/PoseWithCovarianceStamped 和nav_msgs/Odometry,可以使用EVO工具进行轨迹对比。
在v1.9版本之后,TF类topic也同样支持EVO评估。 - euroc——EuRoC MAV数据集
本身EuRoC数据集不支持EVO工具的直接使用,需要转换成TUM类型数据集进行评估。
EuRoC数据集中以csv结尾的文件存储了地面真值信息。
使用EuRoC数据集时要注意坐标系,ground truth,IMU和Camera之间有着不同的轴约定。 - kitti——KITTI数据集
KITTI数据集输出的轨迹数据中不包含时间戳信息。KITTI轨迹的文件中存储12个描述数据,是齐次位姿矩阵SE(3)的前三行
//SE(3)
a b c d
e f g h
i j k l
0 0 0 1
//kitti traj file
a b c d e f g h i j k l
- tum——TUM RGB-D数据集
每行有8个条目,包含时间戳(以秒为单位)、位置和方向(四元数),每个值由空格分隔,结尾没有空格
timestamps x y z q_x q_y q_z q_w
轨迹之间的转换
不同类型的轨迹之间有的可以互相转换有的则不可以,下表给出了轨迹类型之间的转换关系
–save_as_bag | –save_as_kitti | –save_as_tum | |
---|---|---|---|
bag | yes | yes | yes |
euroc | yes | yes | yes |
kitti | no | yes | no |
tum | yes | yes | yes |
//Example
// export a EuRoC groundtruth file to a TUM trajectory
evo_traj euroc data.csv --save_as_tum
//(will be saved as data.tum)
//export TUM trajectories to KITTI format
evo_traj tum traj_1.txt traj_2.txt traj_3.txt --save_as_kitti
//(will be saved as *.kitti)
//export TUM trajectories to ROS bagfile
evo_traj tum traj_1.txt traj_2.txt traj_3.txt --save_as_bag
//(will be saved as <timestamp>.bag with topics traj_1, traj_2 and traj_3)