【多传感器融合定位】【2】【python版本的切换和evo的安装】【evo的使用记录】
- 0 前言
- 1 基于evo的里程计精度评价
- 1.1 安装evo和切换python版本
- 1.1 ubuntu18.04下切换python版本
- 1.2 安装pip3
- 1.3 安装evo
- 1.4 测试
- 1.5 python版本退回
- 1.2 evo的使用
- 1.2.1 evo使用须知
- 1.2.1 分段统计精度(相对位姿误差RPE:relative pose error)
- 1.2.2 计算整体轨迹误差
- 1.2.3 绘制出运行轨迹 evo_traj
- 1.2.3.1 绘制单个或多个文件的运动轨迹
- 2 关于使用vscode编译slam工程,c_cpp_properties.json文件的配置
- 2.1 首先生成c_cpp_properties.json文件
- 2.2 包含进自己创建的头文件
0 前言
1 基于evo的里程计精度评价
- 以组合导航的结果为真值,使用evo工具进行里程计精度评价
1.1 安装evo和切换python版本
1.1 ubuntu18.04下切换python版本
- 参考:ubuntu切换python版本
- 安装evo之前要把evo切换到ubuntu所携带的python3版本,可参考上述链接
1.2 安装pip3
sudo apt install python3-pip
1.3 安装evo
- 注意安装evo时提前安装好可能存在的依赖问题
sudo apt-get install tcl-dev tk-dev python3-tk
然后安装evo
pip install evo --upgrade --no-binary evo
然后
echo 'export PATH=$PATH:/home/bupo/.local/bin' >>~/.bashrc
source ~/.bashrc
参考文章:安装VO/SLAM测评工具evo遇到的坑 如下:
1.4 测试
- 我没测试,想测试参考ubuntu18.04安装evo,以及python版本切换中的的第7小节
1.5 python版本退回
为了保证ros的正常使用,接下来需要把python版本从python3切换至python2,可以保证安装evo后ros正常使用。
sudo update-alternatives --config python
选择python2的默认版本即可
1.2 evo的使用
- 参考:测评工具evo安装与使用
- EVO使用记录
- 这里为了演示,所以提供了我跑出来的NDT点云匹配算法和gnss+imu得到的里程计信息:链接:https://pan.baidu.com/s/157C_mRcK43oTwIG2tN8Oqw 提取码:yoss
- 文件内存储的数据为,每一行为一个3*4的变换矩阵的信息:
T(0,0) T(0,1) T(0,2) T(0,3) T(1,0) T(1,1) T(1,2) T(1,3) T(2,0) T(2,1) T(2,2) T(0,3)
//其中 平移矩阵为t( T(0,3),T(1,3) , T(0,3))
1.2.1 evo使用须知
- evo支持一下几种数据格式:
TUM 轨迹文件
KITTI 位姿
EUROC .csv和.txt文件
ROS bag文件
- 在使用evo的时候都要在工具后面先给出想要处理的数据格式如:
evo_traj tum -h(查看帮助)
1.2.1 分段统计精度(相对位姿误差RPE:relative pose error)
evo_rpe kitti ground_truth.txt laser_odom.txt -r trans_part --delta 100 --plot --plot_mode xyz
- 其中–delta 100表示的是每隔100米统计一次误差,这样统计的其实就是误差的百分比,和kitti的odometry榜单中的距离误差指标就可以直接对应了。
- RPE(m,relative pose error):相对位姿误差
- RMSE(Root Mean Square Error)均方根误差:衡量观测值与真实值之间的偏差。
- 不添加-r 即默认情况下只统计translation part
1.2.2 计算整体轨迹误差
evo_ape kitti ground_truth.txt laser_odom.txt -r full --plot --plot_mode xyz
- APE:绝对位姿误差
- -r 表示APE所基于的姿态关系
- -r full表示同时考虑平移和旋转得到的APE,无单位(unit-less)
- -r trans_part 表示考虑平移部分得到的APE,单位为m
- -r rot_part 表示考虑旋转部分得到的APE,无单位(unit-less)
1.2.3 绘制出运行轨迹 evo_traj
1.2.3.1 绘制单个或多个文件的运动轨迹
- 单个文件
evo_traj kitti laser_odom.txt -p
- 多个文件
evo_traj kitti laser_odom.txt ground_truth.txt -p
- 多个文件,但存在参考轨迹,这里就把ground_truth.txt当作参考轨迹
evo_traj kitti laser_odom.txt --ref ground_truth.txt -va -p
其中ref是参考轨迹,-va是对齐后的详细信息,-p是画出图像,也可以使用
–plot_mode {xy,xz,yx,yz,zx,zy,xyz}
来选择单独绘制某个平面的信息
evo_traj kitti laser_odom.txt -p --plot_mode xy
- 演示为单个,输出的图像包括:
- 轨迹三维图
- 平移的XYZ数据
3 绕轴(X,Y,Z)旋转的数据(roll,pitch,yaw)(滚转角,俯仰角,偏航角)
evo_traj kitti ground_truth.txt laser_odom.txt -p --plot_mode=xy
2 关于使用vscode编译slam工程,c_cpp_properties.json文件的配置
2.1 首先生成c_cpp_properties.json文件
- 按下
ctrl+shitf+P
,输入并选择ROS:Update C++ Properties
即可更新c_cpp_properties.json
里面的头文件路径,里面有ros的路径,devel中include的路径,各个功能包include的路径,会默认包含~/.bashrc
文件中包含的source(查看~/.bashrc,为sudo gedit ~/.bashrc
) - 此时的
c_cpp_properties.json
为:
{
"configurations": [
{
"browse": {
"databaseFilename": "${workspaceFolder}/.vscode/browse.vc.db",
"limitSymbolsToIncludedHeaders": false
},
"includePath": [
"/opt/ros/melodic/include/**",
"/usr/include/**"
],
"name": "ROS",
"intelliSenseMode": "gcc-x64",
"compilerPath": "/usr/bin/gcc",
"cStandard": "gnu11",
"cppStandard": "c++14"
}
],
"version": 4
}
参考:VSCode调试ROS程序
2.2 包含进自己创建的头文件
- 如果仅仅执行上一步,会出现提示,这是由于找不到自己创建的头文件导致的
- 解决方案:
在c_cpp_properties.json
的includePath
参数下,加上该头文件的位置,如所缺失的头文件一般在include文件下,:
- 但是添加了仍然会出现找不到的提示,此时把鼠标放在该头文件处,会弹出
查看问题
和快速修复
,点击快速修复
- 点击
添加到“xx/xxx/xxx”
,会自动把该文件的目录添加进去