ROVIO安装运行及保存轨迹用evo评估
专为初学SLAM的小白同学(自己也是小白)准备的手把手操作指南,同时记录一下自己学习SLAM时遇到的问题和大家一起分享。
ROVIO是一款基于滤波的单目SLAM
源码:https://github.com/ethz-asl/rovio
论文:https://dx.doi.org/10.3929/ethz-a-010566547
依赖:ROS、kindr、lightweight_filtering(在rovio目录下操作)
安装ROS
参考https://blog.csdn.net/weixin_43243788/article/details/90703625这篇博客的ROS安装部分,如果下载连结很慢可以考虑更换清华大学的源。
安装Kindr
git clone http://github.com/ethz-asl/kindr
cd kindr
mkdir build && cd build
cmake ..
sudo make install
安装ROVIO(同时安装lightweight_filtering)
由于ROVIO是在ROS下运行。因此需要先创建一个ros工程
mkdir -p ~/rovio_ws/src
cd ~/rovio_ws/src
catkin_init_workspace
cd ..
catkin_make
source devel/setup.bash //将对应的工作空间的路径加入环境变量ROS_PACKAGE_PATH中
echo $ROS_PACKAGE_PATH //查看当前环境变量
进入src目录下载rovio源码 并安装lightweight_filtering
cd ~/rovio_ws/src
git clone http://github.com/ethz-asl/rovio
cd rovio
git submodule update --init --recursive //下载子模块lightweight_filtering
cd ~/rovio_ws
catkin_make rovio --cmake-args -DCMAKE_BUILD_TYPE=Release -DMAKE_SCENE=ON
catkin_make
如果在运行的时候,提示找不到一个S开头的头文件,在rovio/Cmakelist 中最后加上 add_dependencies(rovio rovio_gencpp)
运行ROVIO
1.下载EuRoC数据集
2.在rovio_ws工作空间下打开terminal运行
source ./devel/setup.bash
roslaunch rovio rovio_node.launch
重新在你数据集的存放路径下新打开一个terminal运行
rosbag play MH_01_easy.bag
或者修改rovio/launch/rovio_rosbag_node.launch中的的filename参数,将其改为实际rosbag的目录
<param name="rosbag_filename" value="your path/MH_01_easy.bag"/>
在工作空间rovio_ws下打开新terminal运行
source ./devel/setup.bash
roslaunch rovio rovio_rosbag_node.launch
运行效果
修改地图保存路径
在Rovio_Node.hpp中,定义一个ofstream类,然后在发送IMU位姿上面,将这八个数据(时间戳,p的xyz,q的xyzw)保存到自己设定路径下的.txt文件中。
首先在开头添加头文件
#include <iostream>
#include <fstream>
在第670行 imuOutputCT_.transformState(state,imuOutput_);后添加代码
std::ofstream out_pose("/你的保存路径/rovio_traj.txt",std::ios::app);//save pose
out_pose << ros::Time(mpFilter_->safe_.t_) << " "
<< imuOutput_.WrWB()(0) << " "
<< imuOutput_.WrWB()(1) << " "
<< imuOutput_.WrWB()(2) << " "
<< imuOutput_.qBW().x() << " "
<< imuOutput_.qBW().y() << " "
<< imuOutput_.qBW().z() << " "
<< -imuOutput_.qBW().w()
<< std::endl;
就可以愉快的保存轨迹结果了。
使用EVO评估rovio轨迹
evo是一个评测SLAM的工具,非常的容易使用,可以比较各种不同SLAM的算法精度和轨迹等等。也支持tum,euroc,kitti等数据集格式
evo安装参考https://blog.csdn.net/weixin_44386661/article/details/103080551
evo是基于python的工具一般ubuntu16.04预装了python2.7 如果安装了python3出现冲突需要修改优先https://blog.csdn.net/wangguchao/article/details/82151372
同时evo需要安装numpy,scipy,matplotlibm,pandas 以及sklearn
安装之前建议更新一下软件源
sudo apt-apt update
没有问题可以使用apt-get命令安装
sudo apt-get install python-numpy
sudo apt-get install python-scipy
sudo apt-get install python-matplotlib
sudo apt-get install python-pandas
sudo apt-get install python-sklearn
也可以使用pip install安装 如果速度慢可以在后缀加上pip install XXX -i https://pypi.tuna.tsinghua.edu.cn/simple 使用清华的源
下载evo
git clone http://github.com/MichaelGrupp/evo.git
cd evo
pip install --user . --upgrade ##如果安装慢的话也可以使用清华的源加速
常见的参数如下:
- evo_config:用于保存配置文件,把自己常用的参数保存为.json文件,避免每次输入。
- evo_traj:用于绘制轨迹,支持的格式有kitti,eurco,tum 数据集等,也可以用于验证数据是否有效,导出为其他格式等。
- evo_res:可用于比较指标中的多个结果文件(打印消息和统计消息,绘制结果,将统计信息保存在表内)
- evo_ape :计算绝对位姿误差
- evo_rpe:计算相对位姿误差
打开数据集中文件夹中的mav0/state_groundtruth_estimate0/文件夹,会发现有一个文件:
data.csv。这是一个euroc格式的文件,我们首先要把他转成tum格式。输入以下命令:
evo_traj euroc data.csv --save_as_tum
把你的rovio轨迹文件和真实值放在同一文件夹下 打开terminal输入
evo_traj tum --ref=data.tum rovio_traj.txt -va -s -p --plot_mode=xy
就能飒的一下出结果了
还有更多的evo用法等待大家的探索^ _ ^
参考
[1]: https://blog.csdn.net/a7691176/article/details/101353168
[2]: https://blog.csdn.net/Mr_Cat123/article/details/78563998/
[3]:https://blog.csdn.net/Hanghang_/article/details/104535370
[4]: https://zhuanlan.zhihu.com/p/77474890