1. 本文简介
本文依照港科大开源的代码和论文
文章主要内容:对无人机集群实现协同定位。参与融合的定位因子有以下4点
- 全向鱼眼相机的VIO定位:VINS-Fisheye
- 基于地图定位:视觉特征点协同建图
- 基于UWB协同定位:节点间测距
- 视觉检测定位
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
编译,编译成功再走下一步。
可能会遇到eigen3,opencv,lib**类似问题,请点击3.2的链接参考我另外一篇文章
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 以及 h76之后 注释,具体注释内容如下
add_executable(${PROJECT_NAME}_simulator
test/swarm_local_sim.cpp)
target_link_libraries(${PROJECT_NAME}_simulator
${catkin_LIBRARIES}
${CERES_LIBRARIES}
${camera_models_LIBRARIES}
${YAML_CPP_LIBRARIES}
dw
faiss
OpenMP::OpenMP_CXX
)
编译catkin_make
,我会有一个cmake的警告,但是问题应该不大:
至此编译成功,但是距离算法成功应用还有一段举例,未完待续…