Fast-Lio SLAM.上篇

2022-11-29 14:56:36 浏览数 (1)

我很早以前就想把公众号的广告关了,我虽然粉丝少,但是却注重体验。

应该大家看不到什么广告了,我还是很爱我滴粉丝们的

另外也感谢俊哥把他的显示器给我用,虽然有些光线,但是不重要了:

终于有了外置的屏幕

但是可能立着看代码是好的,但是实在是太长了,有点受不了~

工友在机器上面编译了好几天也失败了,后面又换了MAC(笑死M1的片子,开虚拟机编译)又是报错的一天。

没啥办法了,现在就是这样接外面搞

相当于雷达和计算平台,就处理回传的点云数据,然后,这里使用一个Ubuntu的桌面版本来运行建图的包。

先安装PCL库:

代码语言:javascript复制
$ 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.9 libflann-dev
$ sudo apt-get install libeigen3-dev 这个需要自己下载正确版本安装,我的是3.3.7
$ sudo apt-get install libboost-all-dev
$ sudo apt-get install libvtk7.1p-qt
$ sudo apt-get install libvtk7.1p 
$ sudo apt-get install libvtk7-qt-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 openjdk-8-jdk openjdk-8-jre

遇到错误自己研究

代码语言:javascript复制
$ git clone https://github.com/PointCloudLibrary/pcl.git 

PCL的库

代码语言:javascript复制
$ 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  
$ sudo make install

然后安装,这里我就不验证了,应该我是安装上了,如果没有安装好,寄了

在/usr/include,/usr/lib, /usr/bin d等目录下可以看到于pcl有关的头文件、库、和可执行程序等文件。

继续安装数值计算的模板库:

Eigen 是C 语言里的一个开源模版库,支持线性代数运算,矩阵和矢量运算,数值分析及其相关的算法。

代码语言:javascript复制
sudo apt-get install libeigen3-dev

安装

代码语言:javascript复制
git clone https://github.com/eigenteam/eigen-git-mirror

#安装

cd eigen-git-mirror
mkdir build
cd build
cmake ..
sudo make install

#安装后,头文件安装在/usr/local/include/eigen3/
#移动头文件

 sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include 

后面这个移动的命令我没有执行

Ceres solver 是谷歌开发的一款用于非线性优化的库,在谷歌的开源激光雷达slam项目cartographer中被大量使用。使用ceres库必须先安装eigen库,ceres库是基于eigen的。

这个库需要在Git里面下载解压一下,然后安装的时候不要按照官方的安装命令来,有很多的错误。

代码语言:javascript复制
sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3 libgflags-dev libgoogle-glog-dev libgtest-dev

安装这个

代码语言:javascript复制
cd ceres-solver-2.0.0
mkdir build
cd build
cmake ..
make -j4

执行这个命令

代码语言:javascript复制
sudo make install

我的ROS安装了这么多

激光雷达的SDK安装:

代码语言:javascript复制
sudo apt install cmake

这个不用执行,不然你以为上面是这么编译的

代码语言:javascript复制
git clone https://github.com/Livox-SDK/Livox-SDK.git
cd Livox-SDK
cd build && cmake ..
make
sudo make install

按照顺序一条一条的执行,笑死了,有的人一股脑的全复制执行,我喂你吃饭好不好。

代码语言:javascript复制
https://github.com/Livox-SDK/Livox-SDK/blob/master/README_CN.md

SDK的位置

代码语言:javascript复制
https://github.com/Livox-SDK/livox_ros_driver

这个就是我们要安装的雷达的ROS驱动,相当于比SDK更加高一层的包装。不愧是中国人做的东西,真长脸,有中文的doc。

代码语言:javascript复制
git clone https://github.com/Livox-SDK/livox_ros_driver.git ws_livox/src

执行

代码语言:javascript复制
cd ws_livox
catkin_make

这个执行的时候,注意要把ros的环境激活一下,不然就报错了

代码语言:javascript复制
source ./devel/setup.sh

记得安装好以后搞一下这个

代码语言:javascript复制
roslaunch livox_ros_driver [launch file] [param]

这个是使用雷达的命令

  1. 如果 [param] 参数项为空,则览沃 ROS 驱动程序会根据配置文件中的具体配置来连接对应的设备,具体连接规则如下:

    当配置文件中指定的设备连接状态配置为使能连接时 (true) ,览沃 ROS 驱动程序只会连接该配置文件中指定的设备;

说明

    (1)该配置文件位于 "ws_livox/src/livox_ros_driver/config" 目录下;

    (2)当配置文件中指定的设备连接状态全部配置为禁止连接 (false) 时,览沃 ROS 驱动程序会自动连接扫描到的所有设备;

  1. 如果 [param] 参数为 LiDAR 的广播码,以 LiDAR( 广播码为 0TFDG3B006H2Z11 ) 和 LiDAR ( 广播码为 1HDDG8M00100191 ) 为例,使用的具体命令如下 :
代码语言:javascript复制
roslaunch livox_ros_driver livox_lidar_rviz.launch bd_list:="0TFDG3B006H2Z11&1HDDG8M00100191"

每台览沃 LiDAR 设备拥有一个唯一的广播码。广播码由14位字符长度的序列号和一个额外的字符组成( 1、2或者 3),一共 15 位字符长度,上述序列号位于 LiDAR 机身外壳的二维码下面(见下图)。广播码被用来指定要连接的 LiDAR 设备,详细组成格式如下:

我的小工友数了一晚上然后笃定的告诉我,这个东西上面是14位和doc上面写的15不一样,我也数量,确实是14,然后15是需要末尾 1,哥哥,我吐了。

上图中 X ,在 MID-100_Left/MID-40/Horizon/Tele 产品中对应为 1 ,在 MID-100_Middle 中对应为 2,在MID-100_Right 中对应为 3 。

这个是驱动可以跑起来的任务

三个参数是具体任务跑起来可以设置的一些参数

代码语言:javascript复制

float32 x               # X axis, unit:m
float32 y               # Y axis, unit:m
float32 z               # Z axis, unit:m
float32 intensity       # the value is reflectivity, 0.0~255.0
uint8 tag               # livox tag
uint8 line              # laser number in lidar

雷达的点云格式

直接连接 LiDAR 时,使用 livox_lidar_config.json 来配置 LiDAR 参数,文件内容示例如下:

代码语言:javascript复制
{
   "lidar_config": [
      {
         "broadcast_code": "0TFDG3B006H2Z11",
         "enable_connect": true,
         "return_mode": 0,
         "coordinate": 0,
         "imu_rate": 1,
         "extrinsic_parameter_source": 0
      }
    ]
}

格式

乱吗?确实乱,下篇文章继续写,先溜了。

代码语言:javascript复制
https://blog.csdn.net/weixin_44857882/article/details/119877566
代码语言:javascript复制
https://github.com/ceres-solver/ceres-solver/releases/tag/2.1.0
代码语言:javascript复制
http://eigen.tuxfamily.org/index.php?title=Main_Page
代码语言:javascript复制
https://blog.csdn.net/weixin_41836738/article/details/121451965

0 人点赞