# cluster-slam **Repository Path**: slashzyz/cluster-slam ## Basic Information - **Project Name**: cluster-slam - **Description**: cluster-slam - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2023-04-18 - **Last Updated**: 2023-10-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ccmslam_5uav ## 介绍 本仓库在CCM-SLAM基础上,进行了改进。在原有最多使用四架无人机的基础上,改进为五架无人机地图融合。 改进部分主要在ServerSystem, Viewer, MapMatcher等类内进行了新节点实例化。 ## 环境说明 - Ubuntu 20或18 - OpenCV 3.2 ## 配置步骤: ### 1. OpenCV安装 安装依赖 ``` sudo apt install -y build-essential checkinstall cmake pkg-config yasm git gfortran sudo apt install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev sudo apt install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgtk2.0-dev libtbb-dev libatlas-base-dev ``` 下载[OpenCV3.2](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Fopencv%2Fopencv%2Farchive%2Frefs%2Ftags%2F3.2.0.zip) 解压后,完成部分文件修改参考[https://blog.csdn.net/u014613745/article/details/78310916](https://gitee.com/link?target=https%3A%2F%2Fblog.csdn.net%2Fu014613745%2Farticle%2Fdetails%2F78310916) 1).找到FindCUDA.cmake文件 找到行 find_cuda_helper_libs(nppi) 改为 ``` find_cuda_helper_libs(nppial) find_cuda_helper_libs(nppicc) find_cuda_helper_libs(nppicom) find_cuda_helper_libs(nppidei) find_cuda_helper_libs(nppif) find_cuda_helper_libs(nppig) find_cuda_helper_libs(nppim) find_cuda_helper_libs(nppist) find_cuda_helper_libs(nppisu) find_cuda_helper_libs(nppitc) ``` 2).找到行 ``` set(CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppi_LIBRARY};${CUDA_npps_LIBRARY}") ``` 改为 ``` set(CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppial_LIBRARY};${CUDA_nppicc_LIBRARY};${CUDA_nppicom_LIBRARY};${CUDA_nppidei_LIBRARY};${CUDA_nppif_LIBRARY};${CUDA_nppig_LIBRARY};${CUDA_nppim_LIBRARY};${CUDA_nppist_LIBRARY};${CUDA_nppisu_LIBRARY};${CUDA_nppitc_LIBRARY};${CUDA_npps_LIBRARY}") ``` 3).找到行 unset(CUDA_nppi_LIBRARY CACHE) 改为 ``` unset(CUDA_nppial_LIBRARY CACHE) unset(CUDA_nppicc_LIBRARY CACHE) unset(CUDA_nppicom_LIBRARY CACHE) unset(CUDA_nppidei_LIBRARY CACHE) unset(CUDA_nppif_LIBRARY CACHE) unset(CUDA_nppig_LIBRARY CACHE) unset(CUDA_nppim_LIBRARY CACHE) unset(CUDA_nppist_LIBRARY CACHE) unset(CUDA_nppisu_LIBRARY CACHE) unset(CUDA_nppitc_LIBRARY CACHE) ``` 4).cuda9中有一个单独的halffloat(cuda_fp16.h)头文件,也应该被包括在opencv的目录里 将头文件cuda_fp16.h添加至 opencv\modules\cudev\include\opencv2\cudev\common.hpp 即在common.hpp中添加 ``` #include ``` 完成后即可开始编译 ``` cd opencv 3.20 mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local \ -DOPENCV_GENERATE_PKGCONFIG=1 .. make -j4 sudo make install ``` 此时可以通过 ``` pkg-config --modversion opencv ``` 查看到opencv此时的版本已经为3.2,且被装在/usr/local里 ### 2. ROS安装与配置 ```bash sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list' ``` ```bash sudo apt install curl curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add - ``` ```bash sudo apt install ros-noetic-desktop # 若为ubuntu18则为melodic ``` ```bash echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrc ``` ```bash sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential ``` [rosdepc链接](https://gitee.com/link?target=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzkzMzI2MTU2Nw%3D%3D%26mid%3D2247484207%26idx%3D1%26sn%3De2762a8a9bf9c1a44fea4d365bfc9c2f%26chksm%3Dc24e7abff539f3a9d557d46188a6af3e2f385850c0df1721a9f8cb2ac90873e1f7353b9a1282%26mpshare%3D1%26scene%3D1%26srcid%3D1022y7kDVt7kCLa4n1ZXWAZC%26sharer_sharetime%3D1634858167048%26sharer_shareid%3D3e3650f7959dd3017b423b28ebe07cb1%26exportkey%3DA87wEj0Ymq%2BHy48ilhHpvCE%3D%26pass_ticket%3Db%2BYFCkXlTwiOLyaMziPP63zfarN4dUtbLfxGTLLossTKGDY4HFUk2SKWs4QHZdO0%26wx_header%3D0%23rd) ``` sudo apt-get install python3-pip sudo pip3 install rosdepc sudo rosdepc init rosdepc update ``` 测试 ``` roscore rosrun turtlesim turtlesim_node ``` > 若是出现问题IOError:[Errno 13]permission denied: /home/neousys/.ros/roscore-11311.pid" > > fix: 给文件名加权限即可 > > ``` > sudo chmod 777 -R ~/.ros/ > ``` ### 3. Realsense-ros **此处已默认nx安装librealsense 2.51** 安装ros包 ``` cd ~/catkin_ws/src git clone https://github.com/IntelRealSense/realsense-ros.git # 把2.3.2版本复制进来 git clone https://github.com/pal-robotics/ddynamic_reconfigure.git cd ~/catkin_ws && catkin_make ``` 测试 ``` roslaunch realsense2_camera rs_camera.launch rqt_image_raw ``` ### 4. cluster-slam配置 按照下面配置编译代码 - ```bash sudo apt-get install python-catkin-tools ``` - ```bash mkdir -p ~/cluster-slam_ws/src cd ~/cluster-slam_ws source /opt/ros/noetic/setup.bash catkin init catkin config --extend /opt/ros/noetic ``` - ```bash # 代码复制 cd cd ~/cluster-slam_ws/src git clone https://gitee.com/slashzyz/cluster-slam.git ``` - ```bash # 编译DBoW2库 cd ~/cluster-slam_ws/src/cluster-slam/cslam/thirdparty/DBoW2/ mkdir build cd build cmake .. make -j8 ``` - ```bash # 编译g2o库 cd ~/cluster-slam_ws/src/cluster-slam/cslam/thirdparty/g2o mkdir build cd build cmake --cmake-args -DG2O_U14=0 .. make -j8 ``` - ```bash # 解压词典 cd ~/cluster-slam_ws/src/cluster-slam/cslam/conf unzip ORBvoc.txt.zip ``` - ```bash # 编译程序代码 cd ~/cluster-slam_ws/ catkin build ccmslam --cmake-args -DG2O_U14=0 -DCMAKE_BUILD_TYPE=Release source ~/cluster-slam_ws/devel/setup.bash ``` ### 5. 相机配置文件与运行 #### D435i 相机launch文件配置 打开realsense-ros包下的rs_camera.launch,将其中分辨率 ```xml ``` 改为: ```xml ``` 将图像频率 ```bash ``` 改为 ```bash ``` 为了多机slam融合 需要对无人机x的相机进行编号,即将其中的 ```xml ``` 改为 ```xml ``` 此处的x表示第几架无人机 最终为: ![image-20230419190853764](./image/image-20230419190853764.png) **conf文件配置** ```bash cd ~/cluster-slam_ws/src/cslam/conf gedit vi_d455.yaml ``` ![image-20230419190955278](./image/image-20230419190955278.png) 对其中的内参、畸变参数进行修改 只修改该部分 ```xml Camera.fx: 208.875259 Camera.fy: 208.628463 Camera.cx: 214.399047 Camera.cy: 123.552673 Camera.k1: -0.056723371148109436 Camera.k2: 0.07017022371292114 Camera.p1: -0.000241746864048764 Camera.p2: 0.000677465635817498 Camera.k3: -0.0224686115980148 ``` 查询相机参数 ```bash roslaunch realsense2_camera rs_camera.launch rostopic echo /camera/color/camera_info ``` 将其中的K的四个、D的五个的参数,覆盖上述参数 #### 多无人机网络配置 所有无人机端均需要完整配置一遍以上步骤,最终在pc端运行Server.launch,各个无人机nx上运行Clientx_d435.launch **!!!保证所有设备在同一网路下,无人机NX上打开终端** ```bash gedit ~/.bashrc ``` 插入(第一行为pc端的ip,通过ifconfig指令查询;第二行为nx端ip,每架无人机不同,查询自己的并输入) ```bash export ROS_MASTER_URI=http://192.168.xxx.xxx:11311 export ROS_IP=192.168.xxx.xxx ``` **!!!注意每台NX均需要完成该步骤** #### 运行 **相机运行** ```bash roslaunch realsense2_camera rs_camera.launch ``` **服务器端运行** ```bash roslaunch ccmslam Server.launch roscd ccmslam rviz -d conf/rviz/ccmslam.rviz ``` 将rviz中右侧标签栏中MarkerC0、MapPointsC0、MarkerC1、MapPointsC1、MarkerC2、MapPointsC2、MarkerC3、MapPointsC3旁均点亮对钩 ![image-20230419191326739](./image/image-20230419191326739.png) **无人机端运行** ```bash roslaunch ccmslam Client0_d435.launch ``` 此时,对无人机进行**初始化**,即举着无人机进行**轻微的**旋转和平移,知道该终端出现 ![image-20230419191529738](./image/image-20230419191529738.png) ```bash Clientsystem initialized (Client ID: 0) [ INFO] [1681803951.793837487]: Started CSLAM client node... New Map created with 100 points ``` 表示此时已经初始化完成,并生成了地图点 #### 多机运行 多无人机即需要在各自运行 ```bash roslaunch realsense2_camera rs_camera.launch roslaunch ccmslam Clientx_d435.launch ``` 当前已经支持五架无人机运行,即x可以从0-4运行四个