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

相关文章

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没