Ethzasl MSF 多传感器融合框架的编译与使用教程

2023-12-18 04:38

本文主要是介绍Ethzasl MSF 多传感器融合框架的编译与使用教程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转载自:https://zhuanlan.zhihu.com/p/109892245

Ethzasl MSF 多传感器融合框架的编译与使用教程

bottle

bottle

本科生,喜欢机器人,想搞机器人,面向未来编程ing

本文简介我自己编译与安装MSF框架的心酸血泪史,并列举安装过程中可能会遇到的坑及其解决方案。

本文不介绍MSF算法本质,MSF算法网上已经有讲的很好的中英文文章,此处再写有班门弄斧之嫌,有兴趣的同学可以移步以下链接:

论文:A Robust and Modular Multi-Sensor Fusion Approach Applied to MAV Navigation

"极品巧克力"的文章:相机IMU融合四部曲(三):MSF详细解读与使用

下面介绍编译及安装过程:

常规的安装方法可根据MSF官方的wiki进行:Introductory tutorial for using ethzasl_msf_sensor_fusion

中文解读版:[ROS] 多传感器卡尔曼融合框架 Ethzasl MSF Framework 编译与使用

我最开始也是参照这两个教程,但是编译的时候出现了 找不到glog_catkin 导致无法编译的问题,后来根据这一篇文章的方法直接安装glog,问题得以解决,下面介绍步骤:

0. 我的编译环境

Ubuntu 16.04 + ROS Kinetic

  1. 新建工作空间:
mkdir -p /MSF/src
cd ./MSF/src
catkin_init_workspace

先编译一下:

cd ..
catkin_make

2. 添加所有的依赖库并编译整个项目:

有两种方法,先介绍常规方法:

//常规方法,分别下载库文件到src文件夹中
cd src #若原来已经在src目录下则忽略此步
git clone https://github.com/ethz-asl/glog_catkin.git
git clone https://github.com/catkin/catkin_simple.git
git clone https://github.com/ethz-asl/asctec_mav_framework.git
git clone https://github.com/ethz-asl/ethzasl_msf.git
sudo apt-get install autoconf automake libtool//添加完依赖就可以编译啦
cd ..
source ./devel/setup.bash
catkin_make

不出意外会有很多warnings,不过只要不出error,最后进度条到100%就编译完成啦!

但是我在编译的时候出现了glog_catkin找不到的error,重装了好几次以后通过这种方法解决了:

//为了与常规方法区分,暂且称之为硬核方法
cd src #若原来已经在src目录下则忽略此步
git clone https://github.com/ethz-asl/glog_catkin.git
git clone https://github.com/catkin/catkin_simple.git
git clone https://github.com/ethz-asl/asctec_mav_framework.git
git clone  https://github.com/ethz-asl/mav_comm.git
git clone https://github.com/ethz-asl/ethzasl_msf.git
git clone https://github.com/google/glog  #不是glog_catkin
sudo apt-get install autoconf automake libtoolcd glog
./autogen.sh
./configure
make -j 24
sudo make install//同样添加完依赖就可以编译啦
cd ..
cd .. #返回MSF目录
source ./devel/setup.bash
catkin_make

这样子就编译啦,我编译没有什么问题,但是根据https://blog.csdn.net/weixin_42469289/article/details/103661603,可能会有一些权限上的问题,根据文中内容,只需要更改权限即可:

chmod 777 /src/ethzasl_msf/msf_core/cfg/MSF_Core.cfg
chmod 777 /home/lufeng/MSF/src/ethzasl_msf/msf_core/cfg/MSF_Core.cfg
chmod 777 /home/lufeng/MSF/src/ethzasl_msf/msf_distort/cfg/MSF_Distort.cfg
chmod 777 /home/lufeng/MSF/src/ethzasl_msf/msf_updates/cfg/SinglePoseSensor.cfg
chmod 777 /home/lufeng/MSF/src/ethzasl_msf/msf_updates/cfg/PositionPoseSensor.cfg
chmod 777 /home/lufeng/MSF/src/ethzasl_msf/msf_updates/cfg/SphericalPositionSensor.cfg
chmod 777 /home/lufeng/MSF/src/ethzasl_msf/msf_updates/cfg/SinglePositionSensor.cfg
————————————————
版权声明:本文为CSDN博主「陆枫先森」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42469289/article/details/103661603

出现上图就是编译成功了。

如果还有一些诸如cannot open,fatal error的error,可以参考下文:

[ROS] 多传感器卡尔曼融合框架 Ethzasl MSF Framework 编译与使用​

blog.csdn.net图标

3. 下载数据集

直接进入此网站

attachment:dataset.bag of ethzasl_sensor_fusion/Tutorials/Introductory Tutorial for Multi-Sensor Fusion Framework​wiki.ros.org

点击最上面的"下载"即可

下载完以后把数据集粘贴到MSF目录即可,如图:

p.s. 如果下载速度慢可以试试科学上网或者下载上面贴出的教程中作者给出的百度网盘:

https://pan.baidu.com/s/1eShq7lg​pan.baidu.com

4. 配置

1)打开 src/ethzasl_msf/msf_updates/viconpos_sensor_fix.yaml 文件

将所有的

/pose_sensor/pose_sensor/

改为

/msf_viconpos_sensor/pose_sensor/

在官方wiki上还有一句"Do NOT replace the ones that have msf_core."但我自己安装过程中并没有发现带有msf_core的语句,所以放心替换就是了~

找到

/pose_sensor/core/data_playback: false

将false改为true

/pose_sensor/core/data_playback: true

检查一下

fixed_covariance

是否为true,不出意外应该本来就是true不用改

敲黑板!!下一步比较重要,也是中文教程贴没有贴出的,我们需要把

/msf_viconpos_sensor/pose_sensor/pose_use_fixed_covariance: true

移到文档第一行!!否则运行的时候会报警一些奇怪的东西,而且似乎会出现收不到数据的情况,出处见github上的issue:https://github.com/ethz-asl/ethzasl_msf/issues/101

修改后你的文件应该长这样:

2)修改 src/ethzasl_msf/msf_updates/launch/viconpos_sensor.launch 文件

找到

<rosparam file="$(find msf_updates)/viconpos_sensor_fix.yaml"/>

在这一行语句前加两句:

<remap from="/msf_core/imu_state_input" to="/auk/fcu/imu"  />
<remap from="msf_updates/transform_input" to="/vicon/auk/auk" />

找到

</node>

在其后加一句:

<node pkg="rosservice" type="rosservice" name="initialize" args="call --wait /msf_viconpos_sensor/pose_sensor/initialize_msf_scale 1"/>

修改后你的文件应该长这样:

5.运行MSF框架

roscore
# ctrl + shift + T 新建窗口
source devel/setup.bash 
roslaunch msf_updates viconpos_sensor.launch

不出意外你的窗口应该长这样:

这里的warnings是正常的,因为我们还没有启动数据集,自然收不到信息。

6. 打开动态配置参数功能(可选):

打开新窗口,输入

rosrun rqt_reconfigure rqt_reconfigure

7. 打开数据集

新建窗口,输入

rosbag play dataset.bag --pause -s 25

至于为什么在25s处播放,官方给的解释是:“Then run the data playback in pause mode and from t=25s on - before the MAV was standing still and thus was in an unobservable mode.”咱也不懂。。。

这时候可以看到:

这时候点击空格就可以运行数据集了,但是先别急着点,我们需要先做一些数据可视化的工作。

8.数据可视化

这里有两种方法:

1)修改 src/ethzasl_msf/msf_core/scripts/plot_relevant 文件:

找到

rxplot msf_core/state_out/data[0]:data[1]:data[2] msf_core/state_out/data[3]:data[4]:data[5] -b $T -t "position & velocity" -l px,py,pz,vx,vy,vz &
rxplot msf_core/state_out/data[13]:data[14]:data[15] msf_core/state_out/data[16] -b $T -t "acc bias & scale" -l x,y,z,L 

改为

rqt_plot msf_core/state_out/data[0]:data[1]:data[2]
# rxplot msf_core/state_out/data[0]:data[1]:data[2] msf_core/state_out/data[3]:data[4]:data[5] -b $T -t "position & velocity" -l px,py,pz,vx,vy,vz &
# rxplot msf_core/state_out/data[13]:data[14]:data[15] msf_core/state_out/data[16] -b $T -t "acc bias & scale" -l x,y,z,L

然后启动脚本:

source devel/setup.bash 
rosrun msf_core plot_relevant

注意:一定要在开始数据集开始running之前打开可视化窗口,否则将会无法显示数据曲线

2)直接运行:

source devel/setup.bash 
rqt_plot msf_core/state_out/data[0]:data[1]:data[2]

然后返回数据集窗口,按下空格,看到数据集欢快的跑起来,再切到MSF pose_sensor 节点的窗口,看到如下则正常:

与此同时,数据窗口显示:

就ok啦!!!

参考文章:

[ROS] 多传感器卡尔曼融合框架 Ethzasl MSF Framework 编译与使用 - 技术刘​www.liuxiao.org图标CSDN-专业IT技术社区-登录​blog.csdn.net

ROS Ethzasl MSF Framework (多传感器扩展卡尔曼融合框架 )安装编译使用教程(已测试成功)​blog.csdn.net图标ethzasl_sensor_fusion/Tutorials/Introductory Tutorial for Multi-Sensor Fusion Framework​

wiki.ros.org图标

编辑于 2020-02-29

这篇关于Ethzasl MSF 多传感器融合框架的编译与使用教程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/507065

相关文章

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Python使用pip工具实现包自动更新的多种方法

《Python使用pip工具实现包自动更新的多种方法》本文深入探讨了使用Python的pip工具实现包自动更新的各种方法和技术,我们将从基础概念开始,逐步介绍手动更新方法、自动化脚本编写、结合CI/C... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Conda与Python venv虚拟环境的区别与使用方法详解

《Conda与Pythonvenv虚拟环境的区别与使用方法详解》随着Python社区的成长,虚拟环境的概念和技术也在不断发展,:本文主要介绍Conda与Pythonvenv虚拟环境的区别与使用... 目录前言一、Conda 与 python venv 的核心区别1. Conda 的特点2. Python v

Spring Boot中WebSocket常用使用方法详解

《SpringBoot中WebSocket常用使用方法详解》本文从WebSocket的基础概念出发,详细介绍了SpringBoot集成WebSocket的步骤,并重点讲解了常用的使用方法,包括简单消... 目录一、WebSocket基础概念1.1 什么是WebSocket1.2 WebSocket与HTTP

C#中Guid类使用小结

《C#中Guid类使用小结》本文主要介绍了C#中Guid类用于生成和操作128位的唯一标识符,用于数据库主键及分布式系统,支持通过NewGuid、Parse等方法生成,感兴趣的可以了解一下... 目录前言一、什么是 Guid二、生成 Guid1. 使用 Guid.NewGuid() 方法2. 从字符串创建

Python使用python-can实现合并BLF文件

《Python使用python-can实现合并BLF文件》python-can库是Python生态中专注于CAN总线通信与数据处理的强大工具,本文将使用python-can为BLF文件合并提供高效灵活... 目录一、python-can 库:CAN 数据处理的利器二、BLF 文件合并核心代码解析1. 基础合

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客