1 项目地址
ethz-asl/rovio
是什么项目就不多介绍了。
https://github.com/ethz-asl/rovio
2 环境要求
安装好ROS的环境,具体就不再这里展开,具体查看ros官网wiki。
我这里Ubuntu的版本是20.04,bash
用的是zsh
3 代码依赖
使用ros编译的基本规范,src
目录下分别下载这2个项目,也就是
https://github.com/ethz-asl/kindr)
当然别忘了在rovio
的项目下,执行git submodule update --init --recursive
,拉取lightweight_filtering
项目。
4 如何编译
如果使用catkin_make
编译,会遇到下面即将提到的第一个问题。
强烈建议使用catkin build rovio --cmake-args -DCMAKE_BUILD_TYPE=Release
进行编译。
一定要加上--cmake-args -DCMAKE_BUILD_TYPE=Release
参数选项,表示以release的方式编译代码,程序的执行效率更高,否则运行会出现明显的卡顿。
第一个问题&fix
使用catkin_make
编译,错误提示如下。
解决方法,使用catkin_make_isolated
,其原因是kindr
这个项目并不是用catkin的方式管理的,而是用cmake的方式。
第二个错误&fix
提示未定义变量。
原因是作者开发时,使用的OpenCV是V2版本,现在我们的环境,OpenCV用的V4版本,其中有些变量已经不兼容了,所以需要根据OpenCV的版本更改变量的名称。
按照下面的方法修改2个文件,我是参考这个修改的:https://github.com/ethz-asl/rovio/pull/252
--- a/include/rovio/ImgUpdate.hpp
+++ b/include/rovio/ImgUpdate.hpp
@@ -586,8 +586,12 @@ ImgOutlierDetection<typename FILTERSTATE::mtState>,false>{
void commonPreProcess(mtFilterState& filterState, const mtMeas& meas){
assert(filterState.t_ == meas.aux().imgTime_);
for(int i=0;i<mtState::nCam_;i++){
- if(doFrameVisualisation_){
+ if (doFrameVisualisation_) {
+#if (CV_MAJOR_VERSION <= 3)
cvtColor(meas.aux().pyr_[i].imgs_[0], filterState.img_[i], CV_GRAY2RGB);
+#else
+ cvtColor(meas.aux().pyr_[i].imgs_[0], filterState.img_[i], cv::COLOR_GRAY2RGB);
+#endif
}
}
--- a/include/rovio/featureTracker.hpp
+++ b/include/rovio/featureTracker.hpp
@@ -125,7 +125,11 @@ class FeatureTrackerNode{
pyr_.computeFromImage(img_,true);
// Drawing
+#if (CV_MAJOR_VERSION <= 3)
cvtColor(img_, draw_image_, CV_GRAY2RGB);
+#else
+ cvtColor(img_, draw_image_, cv::COLOR_GRAY2RGB);
+#endif
5 下载数据集
下载地址:
http://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets
我选择是第一个。如果使用浏览器下载比较慢,可以使用BitComet
等类似的软件,速度会快不少。
数据集我放在workspace的datasets
目录下,如下图所示,
**(非常重要)**在数据所在的目录下,手动新建一个rovio
的文件夹。
后续程序运行,会在这个目录报错log,如果没有找到这个文件夹,程序会报错。
6 运行
第一步:修改launch文件
修改rovio/launch/rovio_rosbag_node.launch
文件,指定上文中数据集所存放的路径。
第二步:加载launch文件
首先 source devel/setup.zsh
或者source devel_isolated/setup.zsh
然后执行,roslaunch rovio rovio_rosbag_node.launch
。
到此为止,恭喜,程序可以顺利运行了。