ETHZ-MSF第一部分:配置环境编译运行ETHZ-MSF例程代码
介绍
MSF即Multiple-Sensor-Fusion,Ethz-MSF提出了一个通用框架,称为多传感器融合扩展卡尔曼滤波器(MSF-EKF),能够处理来自理论上无限数量的不同传感器和传感器类型的延迟、相对和绝对测量,从而允许传感器套件的自校准。
编译运行MSF踩了不少坑,MSF资料本身没有那么多,因此将自己的使用过程记录下来,帮助自己也帮助大家!我的论文也将以此为基础开展工作,后续会同步更新MSF的相关工作。
我的系统环境
Ubuntu 18.04
ROS melodic
第一步:安装环境、创建环境、添加库和代码
1. 安装 ROS
- 推荐鱼香肉丝的一键丝滑安装ROS
https://fishros.org.cn/forum/topic/20/%E5%B0%8F%E9%B1%BC%E7%9A%84%E4%B8%80%E9%94%AE%E5%AE%89%E8%A3%85%E7%B3%BB%E5%88%97?lang=zh-CN
2. 创建工作空间并添加依赖库和项目
1)创建工作空间,添加项目和库
// 建立工作空间和源文件夹
mkdir -p /MSF_catkin_ws/src
cd ./MSF_catkin_ws/src
catkin_init_workspace
// 编译
cd ..
catkin_make
// 添加依赖库和MSF工程
cd ./src
// 下载 glog
git clone https://github.com/ethz-asl/glog_catkin.git
// 下载 catkin_simple
git clone https://github.com/catkin/catkin_simple.git
// 下载 asctec_mav_framework
git clone https://github.com/ethz-asl/asctec_mav_framework.git
// 最后下载 Ethzasl MSF Framework 框架源代码
git clone https://github.com/ethz-asl/ethzasl_msf.git
// 最后编译ROS工程
// 设置环境,回到工作空间的目录
cd ..
source devel/setup.bash
// 再次编译整个工程
catkin_make
如果git clone下载慢可以安装这个工具:dev_sidecar
github下:https://github.com/docmirror/dev-sidecar
gitee下:https://gitee.com/interesting-goods/dev-sidecar?_from=gitee_search
2)以上是我在参考网上中文教程时候的步骤,但我编译遇到下列报错
报错1:
- 报错原因:提示找不到glog库
- 解决思路:第一反应那就是要安装glog库
- 解决办法:运行下面指令安装glog库
sudo apt-get install libgoogle-glog-dev
- 注意:
- 我在这个链接中也有看到这个问题但是按照链接中的方法我没有成功 https://zhuanlan.zhihu.com/p/109892245
- 在这个参考链接的解决方案里,我在cd进入glog目录下我并没有找到对应的.sh文件,而看评论区有人说不要在src下安装,因此我就产生思路,直接安装一下glog库随后就可以了
报错2:
-
报错原因:对于类的静态成员变量,如果你希望在类的定义中就给它初始化值,那么你需要用constexpr,因为这需要在编译时就完成初始化。这是因为,静态数据成员是属于类的,而不是属于任何类的对象的,所以它的生命周期从定义点开始,到程序结束。
-
解决办法:按照其说明,找到头文件和该变量,将const替换成constexpr关键字
-
注意:constexpr是C++11引入的关键字,用于表示常量表达式。常量表达式是指值在编译时就能确定的表达式。
报错3:
- 报错原因:i和src_i可能是unsigned int类型的变量。当你尝试计算i - src_i的绝对值时,如果不进行类型转换,万一i更小,那么这个值按道理是负数,但是由于它是无符号,会溢出成为很大的正数,那abs结果就不对了,而我们强制转换int即可以存储负数
- 解决办法:按照其说明,在abs函数中的表达式上再加上一个int的强制转换
报错4:
提示fatal error: mav_msgs/RollPitchYawrateThrust.h: No such file or directory
- 报错原因:缺失了mav_msgs这个文件夹
- 解决办法:需要在src文件夹下执行
git clone https://github.com/ethz-asl/mav_comm.git
3)解决报错后重新编译到达100%即可
catkin_make
第二步:修改配置文件,运行MSF测试样例
运行测试样例,结合下面三个参考链接应该就可以成功运行了!
参考链接
- tutorials中文版
http://www.liuxiao.org/2016/07/ros-%E5%A4%9A%E4%BC%A0%E6%84%9F%E5%99%A8%E5%8D%A1%E5%B0%94%E6%9B%BC%E8%9E%8D%E5%90%88%E6%A1%86%E6%9E%B6-ethzasl-msf-framework-%E7%BC%96%E8%AF%91%E4%B8%8E%E4%BD%BF%E7%94%A8/ - 官方tutorials
https://wiki.ros.org/ethzasl_sensor_fusion/Tutorials/Introductory%20Tutorial%20for%20Multi-Sensor%20Fusion%20Framework - 知乎教程
https://zhuanlan.zhihu.com/p/109892245