1. 本文简介
本文依照港科大开源的代码论文
文章主要内容:对无人机集群实现协同定位。参与融合的定位因子有以下4点

1.全向鱼眼相机的VIO定位:VINS-Fisheye
2.基于地图定位:视觉特征点协同建图
3.基于UWB协同定位:节点间测距
4.视觉检测定位

2.论文框架

3.算法安装与环境配置

3.1 创建工作空间

备注:3.2中安装插件cv_bridge中也创建过,不要重复创建,用一个即可

mkdir -p GDPt_ws/src
cd GDPt_ws/src
catkin_init_workspace

3.2 安装依赖插件
我写的VINS系列代码需要插件安装教程
注:这节看起来平平无奇,但是环境总是最难配的,所以我单独写了一篇,你可以选择直接装文章里所有插件,也可以跳过直接往下走,后续显示缺什么再返回去装

3.3 添加Omni-swarm所需核心功能包
①依赖功能包

cd GDPt_ws/src
git clone https://github.com/HKUST-Swarm/inf_uwb_ros.git
git clone https://github.com/HKUST-Swarm/bspline
git clone https://github.com/HKUST-Swarm/swarm_msgs.git

通过catkin_make编译,编译成功再走下一步。

cd src
git clone https://github.com/HKUST-Aerial-Robotics/Omni-swarm
git clone https://github.com/HKUST-Swarm/swarm_detector

然后下载models,下载地址(大小655MB),解压缩之后放在swarm_loop文件夹下,如图


3.4 Debug
建议直接catkin_make,下边列出我出现的错误

①找不到Eigen3

Could not find a package configuration file provided by "Eigen3" with any
  of the following names:

    Eigen3Config.cmake
    eigen3-config.cmake

  Add the installation prefix of "Eigen3" to CMAKE_PREFIX_PATH or set
  "Eigen3_DIR" to a directory containing one of the above files.  If "Eigen3"
  provides a separate development package or SDK, be sure it has been
  installed.

首先确定你成功安装eigen3

pkg-config --modversion eigen3

如果显示版本,那么证明你成功安装,是搜索目录的问题,解决方法

②缺少 libXX

/usr/bin/ld: 找不到 -ldw
collect2: error: ld returned 1 exit status

有这几种可能
我是因为之前没有安装libdw
直接 sudo apt-get install libdw-dev

② camera_models
可以在VINS_Fusion的文件夹下找到
建议先下载VINS_Fusion,然后把camera_models文件夹拖到GDPT/src(GDPT是我的工作空间)
③ vins
是类似的 也是在VINS_Fusion 下可以找到
①②解决完的文件夹是这样的


注意!!!:如果你把VINS_fusion添加进来还是显示缺少vins-config,就先把OMni和swarm_detector先剪切出去,等其余功能包编译成功,再复制回来再次编译。
原理:功能包之间互相依赖的时候编译顺序是很重要的,正规做法是先单独编译被依赖的VINS_Fusion先单独编译,再共同编译。

③缺少Opencv 3.4.0
我电脑上之前有Opencv3.2.0,但是用不了,我是把3.2.0版本的卸载了,安装3.4.10教程
④缺少Torch
缺少Torch这个部分我奋斗了好几天,先总结以下我的经验,

由于OMni有目标检测的部分,所以用到了深度学习的pytorch库,那么pytorch又依赖CUDA,CUDA需要使用显卡他的安装又受显卡驱动的影响,所以是绝对不能在虚拟机上做的

给出比较好的一个教程,但是我个人是没有成功,我担心是由于硬件限制,所以决定不死磕了,因为我实际上做的是融合定位的部分,那目标检测的因子本来也不加上,所以把重点转移到如何修改Omni代码,不跑torch
所以以下是不用目标检测部分的代码调试!!!!!!!!!!!!!!!

详细修改内容
①删除3.3中git clone的swarm_detector功能包
②src/Omni-swarm/swarm_loop/CMakeLists.txt
h9 由set(USE_TENSORRT on)改为set(USE_TENSORRT off)
h43和h44 注释,具体内容如下

find_package(CUDA)
include_directories(${CUDA_INCLUDE_DIRS} ${TORCH_INCLUDE_DIRS})

③src/Omni-swarm/swarm_localization/CMakeLists.txt
h59~h61 、h64以及 h76之后 注释,具体注释内容如下

add_executable(${PROJECT_NAME}_simulator        test/swarm_local_sim.cpp)

add_dependencies(${PROJECT_NAME}_simulator ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS} )

target_link_libraries(${PROJECT_NAME}_simulator
${catkin_LIBRARIES}
${CERES_LIBRARIES}
${camera_models_LIBRARIES}
${YAML_CPP_LIBRARIES}
dw
faiss
OpenMP::OpenMP_CXX
)

编译catkin_make,还是会有一些问题,这个问题主要是vins的代码部分,显示一些文件找不到,但是因为Omni用的是鱼眼相机,我最后想用单目realsense相机,所以这些问题留着后续解决