从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)

背景:SLAM小白,因为项目需要花了两天时间编译代码+连接雷达实现了交互。

踩了很多坑,简单记录一下,让后面感兴趣的朋友少走点弯路~ 肯定有很多不专业的、错误的地方,还请大家不吝赐教(噗通)

也可以见知乎:https://zhuanlan.zhihu.com/p/357020888/ (我发现从知乎复制内容到CSDN特别方便啊)未完待续惹 

主要分为5个部分:

  1. 编译算法前的准备(对应目录第1-4章)
  2. 编译SLAM算法 LeGO-LOAM-BOR (对应目录第5章)
  3. 编译SLAM算法 LeGO-LOAM和跑包 (对应目录第6-7章)
  4. 连接Velodyne激光雷达 VLP-16 (对应目录第8章)
  5. 基于小车的实时建图(对应目录第9-10章)

目录

1. 安装 ROS

2. 安装 OpenCV

3. 安装 GTSAM (Georgia Tech Smoothing and Mapping library, 4.0.0-alpha2)

4. 安装 PCL

5. 重头戏来了!编译 LeGO-LOAM-BOR

6. 跑包,在数据集上进行测试

7 删除LeGO-LOAM-BOR,重新下载编译LeGO-LOAM

8 与Velodyne VLP-16 三维激光雷达连接

9 实时建图:算法和雷达交互

10 小车及大范围场景的实时建图

参考文献


源代码github:https://github.com/RobustFieldAutonomyLab/LeGO-LOAM/

优化版本的代码:https://github.com/facontidavide/LeGO-LOAM-BOR/tree/speed_optimization

硬件设备:Intel NUC 10代i7(NUC10i7FNH)

软件系统:Ubuntu 16.04

如果要正确编译、运行算法,相关依赖库必须准确、完整安装好,要不然会各种报错,绕路踩坑。下面对相关依赖库安装流程简要叙述。观察CMakeLists.txt,主要需要以下几个库:

find_package(GTSAM REQUIRED QUIET)
find_package(PCL REQUIRED QUIET)
find_package(OpenCV REQUIRED QUIET)

当然,还有必须要的ROS。


1. 安装 ROS

机器预先已装 ROS-kinetic,具体安装过程这里不再赘述。


2. 安装 OpenCV

机器预先已装 OpenCV 4.3.0,具体安装过程这里不再赘述。

测试是否安装正确:

转到~/opencv-4.3.0/samples/cpp/example_cmake 目录下,打开终端,输入:

cmake .
make
./opencv_example

如果右上角,弹框出现 Hello OpenCV 则证明安装成功,如下图:

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第1张图片


3. 安装 GTSAM (Georgia Tech Smoothing and Mapping library, 4.0.0-alpha2)

参考https://github.com/RobustFieldAutonomyLab/LeGO-LOAM/中Dependency

wget -O ~/Downloads/gtsam.zip https://github.com/borglab/gtsam/archive/4.0.0-alpha2.zip
cd ~/Downloads/ && unzip gtsam.zip -d ~/Downloads/
cd ~/Downloads/gtsam-4.0.0-alpha2/
mkdir build && cd build
cmake ..
sudo make install

正在编译

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第2张图片

安装完成示意

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第3张图片


4. 安装 PCL

一开始没有注意要安装PCL,直接尝试编译LeGO-LOAM,发现无法通过编译,报错

Invoking "cmake" failed

或者

Invoking "make cmake_check_build_system" failed

后来才发现,需要安装PCL (捂脸)

PCL Address: https://github.com/PointCloudLibrary/pcl

4.1 首先提前安装PCL需要的各种依赖包

 sudo apt-get update
 sudo apt-get install git build-essential linux-libc-dev
 sudo apt-get install cmake cmake-gui 
 sudo apt-get install libusb-1.0-0-dev libusb-dev libudev-dev
 sudo apt-get install mpi-default-dev openmpi-bin openmpi-common 
 sudo apt-get install libflann1.8 libflann-dev
 sudo apt-get install libeigen3-dev
 sudo apt-get install libboost-all-dev
 sudo apt-get install libvtk5.10-qt4 libvtk5.10 libvtk5-dev
 sudo apt-get install libqhull* libgtest-dev
 sudo apt-get install freeglut3-dev pkg-config
 sudo apt-get install libxmu-dev libxi-dev 
 sudo apt-get install mono-complete
 sudo apt-get install qt-sdk openjdk-8-jdk openjdk-8-jre

PCL可视化相关函数库安装

sudo apt-get install libopenni-dev 
sudo apt-get install libopenni2-dev

(有的教程表示 Boost >= 1.43,CMake >= 2.6,at least gcc 4.7.3 on Linux,so, 装过的朋友尽量装新版的API。)

4.2 从Github上clone PCL源码

 git clone https://github.com/PointCloudLibrary/pcl.git

4.3 编译PCL

  cd pcl
 mkdir release
 cd release
 cmake -DCMAKE_BUILD_TYPE=None -DCMAKE_INSTALL_PREFIX=/usr \
 -DBUILD_GPU=ON -DBUILD_apps=ON -DBUILD_examples=ON \
 -DCMAKE_INSTALL_PREFIX=/usr ..
 make

4.4 安装

sudo make install

4.5 在自己的代码里,测试PCL点云显示(这步非常关键!)

测试代码pcl_test.cpp:

#include 
#include 
#include 
#include 
#include 
#include 
 
 
int main(int argc, char **argv) {
    std::cout << "Test PCL !!!" << std::endl;
    
    pcl::PointCloud::Ptr point_cloud_ptr (new pcl::PointCloud);
    uint8_t r(255), g(15), b(15);
    for (float z(-1.0); z <= 1.0; z += 0.05)
    {
      for (float angle(0.0); angle <= 360.0; angle += 5.0)
      {
	pcl::PointXYZRGB point;
	point.x = 0.5 * cosf (pcl::deg2rad(angle));
	point.y = sinf (pcl::deg2rad(angle));
	point.z = z;
	uint32_t rgb = (static_cast(r) << 16 |
		static_cast(g) << 8 | static_cast(b));
	point.rgb = *reinterpret_cast(&rgb);
	point_cloud_ptr->points.push_back (point);
      }
      if (z < 0.0)
      {
	r -= 12;
	g += 12;
      }
      else
      {
	g -= 12;
	b += 12;
      }
    }
    point_cloud_ptr->width = (int) point_cloud_ptr->points.size ();
    point_cloud_ptr->height = 1;
    
    pcl::visualization::CloudViewer viewer ("test");
    viewer.showCloud(point_cloud_ptr);
    while (!viewer.wasStopped()){ };
    return 0;
}

CMakeLists.txt文件

cmake_minimum_required(VERSION 2.6)
project(pcl_test)

find_package(PCL 1.2 REQUIRED)

include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})

add_executable(pcl_test pcl_test.cpp)

target_link_libraries (pcl_test ${PCL_LIBRARIES})

install(TARGETS pcl_test RUNTIME DESTINATION bin)

将pcl_test.cpp和CMakeLists.txt放在同一个文件夹下,如下图(具体文件夹没有要求)

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第4张图片

执行:

cmake .
make
./pcl_test

4.6 然后报错:o(╥﹏╥)o 这个错误还是很常见的

bug: fatal error: pcl/visualization/pcl_visualizer.h: No such file or directory

这就体现了,运行测试代码的重要性,之前编译PCL都没有任何问题。

错误的原因是:没有正确安装好PCL库,PCL库的可视化需要依赖VTK库,所以如果没有提前装VTK,就会遇到这个问题。

解决方法:先装VTK和其他依赖包,再装PCL。(仔细一想,我是没有装VTK,惹)

4.7 安装VTK

4.7.1 在按照VTK之前,要安装依赖库X11,OpenGL和CMake-gui

首先安装X11

 sudo apt-get install libx11-dev libxext-dev libxtst-dev libxrender-dev libxmu-dev libxmuu-dev

安装OpenGL

sudo apt-get install build-essential libgl1-mesa-dev libglu1-mesa-dev

安装 CMake-gui

sudo apt-get install cmake cmake-gui

4.7.2 下载VTK源代码

下载链接:https://www.vtk.org/download/

PCL和VTK可能存在版本需求,截止安装日2020年3月9日,PCL官网版本为1.11,(可以在/usr/include中寻找自己的PCL版本。)这里我下载的VTK版本是7.1.1,选择下图中的,VTK-7.1.1.tar.gz,下载完成后解压缩到文件夹中,自定义安装目录。(亲测可以使用。具体对应关系还不清楚惹。)

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第5张图片

4.7.3 安装VTK

(1) 终端输入下指令,启动cmake-gui;

cmake-gui

(2) 设置where is the source code:的路径为文件夹VTK-7.1.1所在路径,如这里是/home/js/VTK-7.1.1;

(3) 设置where to build the binaries:的路径为/home/js/VTK-7.1.1/build,即在/home/VTK-7.1.1的路径下新建文件夹build;如下图

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第6张图片

(4) 点击“Configure”,在弹出对话框中选择“Current Generator”为“Unix MakeFiles”,完成之后会提示“Configuring done”;

(5) 然后在里面勾选“VTK_GROUP_Qt”选项,再次点击“Configure”按钮,若提示警告信息,需要设置Qt安装路径,则设置路径后,再次点击“Configure”按钮;

(6) 提示“Configure done”,点击“Generate”按钮,在vtk_build会生成工程文件,完成之后会提示“Generating done”,如下图

(7) cd到vtk目录下的build文件夹,若没有则在使用$mkdir build来创建

(8) 终端输入,编译和安装

sudo make
sudo make install

至此,VTK安装完成!

4.8 卸载PCL

因为之前装了错误的PCL,所以需要卸载掉PCL,再重新安装。

终端内输入

sudo rm -r /usr/include/pcl-1.11 /usr/share/pcl-1.11 /usr/bin/pcl* /usr/lib/libpcl*
sudo apt-get remove libpcl-dev pcl-tools

即可。

4.9 重新安装PCL

因为已经安装好了依赖包,所以无需重新安装。重复4.2~4.4即可。

4.10 测试PCL

重复4.5步骤,此时不再显示错误,显示如下图形!

如果一开始不显示圆环(可能是一个矩形块)也不要紧,缩小即可见到。

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第7张图片

PCL-1.11, VTK-7.1.1,Yes!


5. 重头戏来了!编译 LeGO-LOAM-BOR

因为一开始编译LeGO-LOAM出错,所以这次装一下优化版本LeGO-LOAM-BOR,希望不出错(事实证明只是我一厢情愿罢了)。

执行:

cd ~/catkin_ws/src
git clone https://github.com/facontidavide/LeGO-LOAM-BOR.git
cd ..
catkin_make

呃,非常抱歉,还是没有编译成功。

5.1 出错1

报错:

Invoking "cmake" failed
pip install -U rosdep rosinstall_generator wstool rosinstall six vcstools
Invoking "make cmake_check_build_system" failed
-- Could NOT find cv_bridge (missing: cv_bridge_DIR)

cv_bridge 是opencv和ros连接起来的桥,这个意思就是ROS缺少了cv_bridge,下面提供解决方案。

5.1.1 下载cv_bridge

git clone https://github.com/ros-perception/vision_opencv.git

5.1.2 找到下载文件地址,将vision_opencv中的cv_bridge/拿出来,放到工作空间(catkin_wa/src)中,编译:

cd ~/catkin_ws/src/cv_bridge
mkdir build
cd build
cmake ..
make
sudo make install

(1) 很不幸,编译不通过,报错:

Boost include path: /usr/include
Could not find the following Boost libraries:
boost_python37
No Boost libraries were found. You may need to set BOOST_LIBRARYDIR to the
directory containing Boost libraries or BOOST_ROOT to the location of Boost.

这个意思是,电脑里找不到boost_python37库,这个原因可能是装了其他的python版本。导致命名出现问题。

解决方案:进入/usr/lib/x86_64-linux-gnu文件夹中查看相关boost_python库,如图所示,发现没有boost_python37的相关库,只有python-py35的库。

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第8张图片

我们要建立python-py35到python-py37的软连接。如果没找到python-py35而是找到了python-py3x(x为数字,可能为6,对应python3.6版本;可能为7,对应python3.7版本或者其他数字),解决方案相同,建立软连接即可。

即 py35.s0 -> py37.so py35.a -> py37.a,打开终端,输入

cd /usr/lib/x86_64-linux-gnu/
sudo ln -s libboost_python-py35.so libboost_python37.so
sudo ln -s libboost_python-py35.a libboost_python37.a

5.1.3 重新编译cv_bridge,重复(2)中操作

编译成功啦!

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第9张图片


5.2 出错2

然后我们重新编译LeGO-LOAM-BOR,继续报错:

Could not find a package configuration file provided by "pcl_ros" with any of the following names:
pcl_rosConfig.cmake
pcl_ros-config.cmake

这个好解决,缺少pcl-ros

打开终端输入

sudo apt-get install ros-kinetic-pcl-ros

安装pcl-ros。

5.3 出错3

然后我们重新编译LeGO-LOAM-BOR,继续报错:

CMake Error at /home/js/catkin_ws/devel/share/ddynamic_reconfigure/cmake/ddynamic_reconfigureConfig.cmake:113 (message):
 Project 'ddynamic_reconfigure' specifies
 '/home/js/catkin_ws/src/ddynamic_reconfigure-kinetic-devel/include' as an
 include dir, which is not found. It does neither exist as an absolute
directory nor in

这个问题是缺少ddynamic_reconfigure

我们打开终端输入

sudo apt-get install ros-kinetic-ddynamic-reconfigure

安装ddynamic-reconfigure,然后将文件夹复制到catkin_ws/src中,如下图

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第10张图片

5.4 出错4

然后我们重新编译LeGO-LOAM-BOR,继续报错:

make 66%时错误

error: return-statement with no value, in function returning ‘int’ [-fpermissive]
efine import_array() {if (_import_array() < 0) {PyErr_Print(); PyErr_SetString(PyExc_ImportError, "numpy.core.multiarray failed to import"); return NUMPY_IMPORT_ARRAY_RETVAL; } }
note: in definition of macro ‘import_array’
efine import_array() {if (_import_array() < 0) {PyErr_Print(); PyErr_SetString(PyExc_ImportError, "numpy.core.multiarray failed to import"); return NUMPY_IMPORT_ARRAY_RETVAL; } }
src/CMakeFiles/cv_bridge_boost.dir/build.make:62: recipe for target 'src/CMakeFiles/cv_bridge_boost.dir/module.cpp.o' failed
make[2]: *** [src/CMakeFiles/cv_bridge_boost.dir/module.cpp.o] Error 1
CMakeFiles/Makefile2:930: recipe for target 'src/CMakeFiles/cv_bridge_boost.dir/all' failed
make[1]: *** [src/CMakeFiles/cv_bridge_boost.dir/all] Error 2
Makefile:140: recipe for target 'all' failed
make: *** [all] Error 2

解决方法是,修改/home/js/catkin_ws/src/cv_bridge/src/module.hpp(根据自己的路径),将最后一段(36~40)行改为

static void do_numpy_import( )
{
 import_array( );
}

5.5 然后我们重新编译LeGO-LOAM-BOR,终于成功了!!

catkin_make

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第11张图片


6. 跑包,在数据集上进行测试

6.1 针对LeGO-LOAM-BOR方法,在数据集上进行测试。

数据集地址:

https://github.com/TixiaoShan/Stevens-VLP16-Dataset​github.com

 

https://github.com/RobustFieldAutonomyLab/jackal_dataset_20170608​github.com

 

下载数据集,然后在catkin_ws中新建dataset文件夹,保存数据包,打开终端输入

cd ~/catkin_ws
mkdir dataset

然后拷贝数据包,如下图。

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第12张图片

其中,nsh_indoor_outdoor.bag有国内百度网盘链接,提取码:l5rl

https://pan.baidu.com/s/1UswMElc81AKY8hnpmkjnrA​pan.baidu.com

 

打开终端,输入

roslaunch lego_loam_bor run.launch rosbag:=~catkin_ws/dataset/nsh_indoor_outdoor.bag lidar_topic:=/velodyne_points imu_topic:=/imu/data

其中,~catkin_ws/dataset/nsh_indoor_outdoor.bag 为数据集绝对路径,也可以cd进数据集文件夹,输入相对路径。其中,/imu/data是可选的

但是,很遗憾,失败了,提示无法打开数据包。

6.2 针对LeGO-LOAM-BOR方法,实时建图。

也不知道这个方法啥原因,我决定再试试给个机会,基于VLP雷达实时建图试试。

(1)首先要修改run.launch,可以另存为run1.launch:


    
    
    

    
    

    
    
    
    
      
     
    

    
 
       

    

(2)启动Velodyne16激光雷达

roslaunch velodyne_pointcloud VLP16_points.launch

(3)启动LeGO-LOAM-BOR

roslaunch lego_loam_bor run1.launch

可以正常启动,但是建图效果十分怪异,无法进行旋转,只是一个二维的,不给机会了,换回原来的方法!


7 删除LeGO-LOAM-BOR,重新下载编译LeGO-LOAM

7.1 编译LeGO-LOAM

我怀疑可能是LeGO-LOAM-BOR算法的问题,也有可能是我的问题。不管了,我准备卸载掉LeGO-LOAM-BOR,重新编译LeGO-LOAM。

搜索LeGO-LOAM-BOR,将所有与LeGO-LOAM-BOR相关的文件、文件夹都删去

因为LeGO-LOAM-BOR和LeGO-LOAM需要的依赖库相同,所以无需重复安装依赖库,直接下载编译即可。

cd ~/catkin_ws/src
git clone https://github.com/RobustFieldAutonomyLab/LeGO-LOAM.git
cd ..
catkin_make -j1

编译完成示意图:

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第13张图片

7.2 跑包,在数据集上进行测试LeGO-LOAM

打开终端输入

roslaunch lego_loam run.launch

cd到数据集文件夹下面,重新开启一个终端,输入

rosbag play --clock nsh_indoor_outdoor.bag

或者是

rosbag play nsh_indoor_outdoor.bag --clock --topic /velodyne_points /imu/data

(也可以输入数据集绝对路径)

即可看到数据集运行效果

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第14张图片

也可以更换数据集,

rosbag play --clock 1.bag

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第15张图片

其他数据集加载方式完全相同。


8 与Velodyne VLP-16 三维激光雷达连接

VLP-16与计算机采用网线连接,而不是2D雷达多采用USB连接。

此时,出现了一个问题,终端输入ifconfig,找不到有限网卡,只有lo,无线网卡,并没有表示eth0等的有限网卡。

8.1 尝试重新装有限网卡驱动

尝试了重新装有限网卡驱动,首先

lspci | grep -i net. 

找网络控制器,lspci. 找所有硬件设备,很抱歉,一串字母,我也不知道这个设备是什么网卡。如果有了解这个啥意思的欢迎留言告诉~

查阅了网上的资料,应该是I219-V网卡,对应的驱动型号是e1000e。从

Download Intel® Network Adapter Driver for PCIe* Intel® Gigabit Ethernet Network Connections under Linux*​downloadcenter.intel.com

 

下载了网卡驱动,直接下载点击安装即可。

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第16张图片

下载了两个版本:3.8.4和3.5.1,进行安装。

但是,并没有work,无法安装上有限网卡驱动,我怀疑是有限网卡驱动已经安装了。

8.2 尝试重新启动网络管理服务

该操作针对有线连接图标不见,ifconfig查看也无网卡的情况。

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第17张图片

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第18张图片

但是,并没有work,可能是由于这个解决方案是针对有线连接的图标不见的情形,并不是现在遇到的现在的找不到有限网卡的情形。

8.3 尝试更新系统内核

查阅了网上资料,有人也遇到同样的问题,他通过更新内核解决了,我于是也是尝试更新一下。

键入:uname -r

可以查看当前内核版本:目前是5.2.20

准备更新的内核:5.6.16

8.3.1 开始升级内核。先安装升级所需的libssl1.1

wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.0g-2ubuntu4_amd64.deb
sudo dpkg -i libssl1.1_1.1.0g-2ubuntu4_amd64.deb

8.3.2 下载内核

地址:https://kernel.ubuntu.com/~kernel-ppa/mainline/

选择 5.6.16

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第19张图片

选择下面amd64中,标框的4个deb包。

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第20张图片

直接下载即可

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第21张图片

8.3.3 安装内核

然后双击安装即可,安装的顺序是 headers_all, headers_generic, modules_generic, image_generic。(不依照也没事,它会提示有依赖关系)。也可以sudo dpkg -i linux-*(包名)安装,但是直接安装更简单。

安装完执行sudo update-grub后重启计算机

打开终端即可看到内核已经更新( uname -r 也可以),5.6.16-050616-generic

8.4 查看有限网卡

打开终端输入 ifconfig,终于!出现了有限网卡eno1。原来就是内核版本的问题。

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第22张图片

8.5 新建有线连接

新增有限连接网络 VLP-16 (名称任意设置)

然后选择IPV4 Settings,方法选为 Manual,更改网络配置。

address: 192.168.1.77 
netmask: 255.255.255.0 
gateway: 192.168.1.1

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第23张图片

然后点击保存。(注意IP地址的77,可以为1到254除开201以外的所有值,因为201是激光雷达的默认IP。)

8.6 安装ROS依赖包(激光雷达驱动)

sudo apt-get install ros-kinetic-velodyne

PS: kinetic:与机器安装的ROS版本一致。

8.7 创建ROS工程

mkdir -p catkin_velodyne/src
cd catkin_velodyne/src
git clone https://github.com/ros-drivers/velodyne.git
cd ..
rosdep install --from-paths src --ignore-src --rosdistro kinetic -y
catkin_make
source devel/setup.bash

编译一切正常,准备与雷达连接。

8.8 开始连接雷达

Velodyne雷达与电脑网线连接,并给雷达供电(12V),可以发现右上角图标更换。

打开网络连接界面,可以发现网络已经连接。

在更新内核之前,是怎么都连接不上的!

当然,这也就意味着NUC无法通过WIFI上网了。需要联网的工作,尽量选择在之前完成。

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第24张图片

此时,打开网页,网址处输入192.168.1.201,会弹出激光雷达的参数界面:

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第25张图片

这表明,雷达连接一切正常。

8.9 测试雷达

打开终端,输入

 roslaunch velodyne_pointcloud VLP16_points.launch

打开新的终端,输入下式,可以打开rviz,进行结果可视化

rosrun rviz rviz -f velodyne

不过刚打开是啥都没有的,需要自己订阅。

首先点击Add,添加pointsCloud2,

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第26张图片

然后会发现左边的目录中多了个PointsCloud2,在该目录下点击topic,选择/velodyne_points,

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第27张图片

即可以看到三维点云信息,如下图。

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第28张图片

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第29张图片

在终端中输入,可以记录数据:

rosbag record -o xxx.bag topic -name

比如velodyne_points,只保存/velodyne_points这个topic的数据(可以用rostopic list -v开看当前可用的topic),保存在当前目录的out.bag当中。

想简单点就

rosbag record -a

不过这个应该是保存了所有内容,所以体量非常大。

下图是连接激光雷达与NUC。

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第30张图片


9 实时建图:算法和雷达交互

这里只针对LeGO-LOAM方法

首先,将LeGO-LOAM包里的run.launch文件进行修改,只需要将文件第4行中的true改成false即可,即

因为第4行 true表示虚拟运行,false表示真机器人运行。(之前的适用于LeGO-LOAM-BOR方法的launch文件不用管了)

打开终端输入

roslaunch velodyne_pointcloud VLP16_points.launch

再打开一个终端输入

roslaunch lego_loam run.launch

即可显示建图信息。(这是俺的教研室)

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第31张图片

打开终端输入 rosbag record -a可以记录当前的数据。

运行结束后,打开两个终端,输入

roslaunch lego_loam run.launch
rosbag play --clock xxxxx.bag

xxxxx为自己保存的包名字。

即可以跑自己做出来的数据集。效果如下图,因为保存了所有的topic,所以内容会比较多。

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第32张图片


10 小车及大范围场景的实时建图

装车

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第33张图片

远距离通讯采用的是INSIGHT实时图传设备

办公室走廊实时建图

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第34张图片

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第35张图片

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第36张图片

环土木交通楼实时建图

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第37张图片

从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)_第38张图片

参考文献

https://github.com/RobustFieldAutonomyLab/LeGO-LOAM/

https://github.com/facontidavide/LeGO-LOAM-BOR/tree/speed_optimization

https://blog.csdn.net/acyddlm/article/details/82974012

https://blog.csdn.net/fsencen/article/details/79386570

https://blog.csdn.net/weixin_41827934/article/details/90175635

https://blog.csdn.net/qq_29761791/article/details/94135193

https://www.cnblogs.com/winslam/p/12074432.html

http://www.bubuko.com/infodetail-3341579.html

http://blog.sina.com.cn/s/blog_c0468c8f0101ld2x.html

https://blog.csdn.net/qq_39346534/article/details/108617770

https://blog.csdn.net/yehe111/article/details/106800025/

https://blog.csdn.net/MIRANA0/article/details/106696334

https://www.jb51.net/article/192497.htm

https://blog.csdn.net/sinat_36502563/article/details/102996736

https://blog.csdn.net/m0_37931718/article/details/106612478

https://blog.csdn.net/mrh1714348719/article/details/103896168

https://blog.csdn.net/learning_tortosie/article/details/86527542

https://blog.csdn.net/qq_43535779/article/details/102579230

 

 

你可能感兴趣的:(LeGO-LOAM,Velodyne,移动小车子,slam,c++)