多传感器融合框架 Ethzasl MSF Framework 编译与运行:
对应论文: A Robust and Modular Multi-Sensor Fusion ApproachApplied to MAV Navigation. 2013 RIOS.
对应代码: https://github.com/ethz-asl/ethzasl_msf
系统: Ubuntu16.03 + ROS Kinetic
创建工作空间:
mkdir -p /MSF_catkin_ws/src
cd /MSF_catkin_ws/src
catkin_init_workspace #初始化工作空间
cd ..
catkin_make #编译
cd MSF_catkin_ws/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
重新编译:
cd ..
source devel/setup.bash
catkin_make
注意: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/
安装博主的步骤安装,报错:
fatal error: mav_msgs/RollPitchYawrateThrust.h: No such file or directory。
是由于少安装了依赖项:
git clone https://github.com/ethz-asl/mav_comm.git
重新编译:
1)首先下载 https://pan.baidu.com/s/1eShq7lg数据集:
将其放置在 MSF_catkin_ws/src/data 目录下面。
2)修改 src/ethzasl_msf/msf_updates/viconpos_sensor_fix.yaml 文件:
将其中所有的:
/pose_sensor/pose_sensor/
替换为:
/msf_viconpos_sensor/pose_sensor/
找到:
/pose_sensor/core/data_playback: false
修改成:
/pose_sensor/core/data_playback: true
src/ethzasl_msf/msf_updates/launch/viconpos_sensor.launch 文件中找到:
在这一行的前面加入两行 remap 操作,将传感器的 topic 与引擎的 topic 对应上:
找到:
在其之后添加(这一步目的为初始化卡尔曼滤波器):
启动 MSF pose_sensor 节点:
在 MSF 目录下执行如下命令打开 pose_sensor 节点:
source devel/setup.bash
roslaunch msf_updates viconpos_sensor.launch
6)打开动态配置参数功能(可选):
rosrun rqt_reconfigure rqt_reconfigure
在菜单中即可动态设置参数。
7)播放 vicon 的 bag 文件:
在MSF 目录下执行如下命令:
rosbag play data/dataset.bag --pause -s 25
这一行命令是暂停并从第 25s 后开始播放 bag 文件,文档中说这是为了等待 MAV 硬件系统站稳并处于非观察模式(不理解)。总之,如果你准备好运行了,就可以开始点击空格键进行数据播放了,播放的数据大约剩余 86s 左右。
数据模拟:
刚才跑成功了数据融合节点,但是并没有任何可视化的输出可以给我们看到。ethzasl msf 提供了一些脚本来进行数据模拟的功能,可以让我们更直观地看到结果。
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
2)启动 plot_relevant 脚本:
在 MSF 目录下执行如下命令打开 plot_relevant 脚本:
source devel/setup.bash
rosrun msf_core plot_relevant
另外也可以直接在命令行运行:
rqt_plot msf_core/state_out/data[0]:data[1]:data[2]
如果一切正常,即可看到如下曲线绘制,这样就表示成功运行起来了:
不知道为什么我的数据曲线没有显示出来。查了很多博客也没出解决办法,有些困惑,标注一下留作以后解决。
参考:
https://blog.csdn.net/ouyangandy0608/article/details/82143707
http://wiki.ros.org/ethzasl_sensor_fusion/Tutorials/Introductory%20Tutorial%20for%20Multi-Sensor%20Fusion%20Framework
http://www.liuxiao.org/2016/07
https://www.cnblogs.com/ilekoaiq/p/9311357.html
https://blog.csdn.net/weixin_42469289/article/details/103661603
https://www.cnblogs.com/ilekoaiq/p/9311357.html