Skip to content
This repository has been archived by the owner on Mar 20, 2024. It is now read-only.

Latest commit

 

History

History
614 lines (405 loc) · 24.3 KB

RunR3liveProject.md

File metadata and controls

614 lines (405 loc) · 24.3 KB

开源项目R3live的配置与运行

R3live是香港大学MARS实验室以Livox雷达为核心做的多传感器融合的SLAM方案,开源项目地址:https://github.com/hku-mars/r3live,以下是R3live项目的配置与运行的记录。

一、安装ROS

1.1、配置Ubuntu软件库

  • 打开Software & Updates(紫色图标),注意不是右边的Software Update(灰色图标)

Software and updates

  • 将下载来源改为阿里云,如下图所示

Configure your Ubuntu repositories

1.2、设置软件源

packages.ros.org加入到软件源

#sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

ros官方的源下载包会比较慢,可以改为中科院ros源。

  • 导入key
gpg --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
gpg --export C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 | sudo tee /usr/share/keyrings/ros.gpg > /dev/null
  • 将软件源添加至系统
sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/ros.gpg] https://mirrors.ustc.edu.cn/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
  • 刷新软件源缓存
sudo apt update

参考链接: 中科院ROS源使用帮助

1.3、添加软件包密钥

这里没有安装curl软件包,也可以用wget下载(ubuntu自带)

sudo apt install curl

curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -

如果用curl下载失败,可以改用wgethttp://packages.ros.org/ros.key下载

wget http://packages.ros.org/ros.key
sudo apt-key add ros.key

上述处理方法来自:Unable to locate package, no valid OpenPGP data

1.4、安装ros-noetic

注意需要先更新一下软件包索引,另外,这里为了减少额外ROS包的安装,下载的内容最全的ROS版本ros-noetic-desktop-full

其他只有部分内容的ros-noetic-desktopros-noetic-ros-base是否也可以,需要尝试,个人觉得ros-noetic-desktop应该可以,但ros-noetic-ros-base不行,r3live需要RViz可视化工具,当然自己安装缺少的ROS包一定是可以的。

sudo apt update 

sudo apt install ros-noetic-desktop-full

ROS package

1.5、配置ROS环境

将ROS环境设置到~/.bashrc

echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc

source ~/.bashrc

1.6、安装构建ROS包的依赖包

安装在自己创建、(build)构建ROS包时依赖的包

sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential

初始化rosdep,这一步在官方文档中存在,但是进行尝试后,由于网络原因会出错,而且跳过这一步好像也没有太影响(可跳过)。

sudo rosdep init

rosdep update

这里找到一个解决方案rosdep init cannot download default sources list,但未进行尝试,有兴趣可以试试。

1.7、安装R3live依赖的ROS包

sudo apt-get install ros-noetic-cv-bridge ros-noetic-tf ros-noetic-message-filters ros-noetic-image-transport ros-noetic-image-transport*

如果是其他版本的ROS库,对应ROS版本替换XXX

sudo apt-get install ros-XXX-cv-bridge ros-XXX-tf ros-XXX-message-filters ros-XXX-image-transport ros-XXX-image-transport*

参考链接:

二、安装livox的ROS驱动程序

这里不用livox激光雷达,只用数据集跑,还是需要安装livox的ROS驱动程序,如果不进行这一步,当编译R3live程序时,编译不会通过并且会明确告诉你缺少livox的ros驱动程序。

2.1、编译安装livox-SDK驱动

livox-SDK的地址:https://github.com/Livox-SDK/Livox-SDK

git clone https://github.com/Livox-SDK/Livox-SDK.git

cd Livox-SDK

cd build && cmake ..

make

sudo make install

2.2、验证livox-SDK驱动的安装

在编译安装完成后,可以进行简单的测试,以确定是否成功安装。

在build文件夹下,进入sample/lidar或者进入sample/hub文件夹下,运行相应的示例程序进行测试。

在虚拟机下运行或者是没有livox雷达,看到如下输出之后,认为SDK已正确安装,这个时候,可以control + c退出示例程序了

livox SDK

2.3、创建ROS工作路径

在Home路径下,创建ROS工作路径catkin_ws(名称可以自定),编译安装catkin_make命令要在catkin_ws路径下执行,另外,在ROS工作路径下创建src文件夹,将代码放在src文件夹内以便管理。

以下命令为循环创建catkin_wssrc文件夹,mkdir命令中的-p(--parents)参数,表示自动建立好路径中那些尚不存在的文件夹。

mkdir -p ~/catkin_ws/src

2.4、编译安装livox的ROS驱动程序

livox的ROS驱动程序:https//github.com/Livox-SDK/livox_ros_driver

进入到ROS工作路径中src文件夹~/catkin_ws/src,下载ROS驱动程序代码

cd ~/catkin_ws/src

git clone https://github.com/Livox-SDK/livox_ros_driver.git

回到ROS工作路径中~/catkin_ws,编译安装livox的ROS驱动程序

cd ~/catkin_ws

catkin_make

2.5、配置ROS工作路径的运行设置到系统环境

echo "source ~/catkin_ws/devel/setup.sh" >> ~/.bashrc

source ~/.bashrc

参考链接:

三、安装CGAL和pcl_viewer

安装CGAL和pcl_viewer

sudo apt-get install libcgal-dev pcl-tools

如果后续编译R3live时出现报缺失CGAL的错误,则需要将CGAL的依赖全部安装一遍。命令如下:

sudo apt-get install build-essential
 
sudo apt-get install libpcl-dev pcl-tools    
 
sudo apt-get install libglu1-mesa-dev
 
sudo apt-get install libglut-dev
 
sudo apt-get install libopencv-dev python-opencv
 
sudo apt-get install qttools5-dev-tools
 
sudo apt-get install qt5-default libcgal11v5 libcgal-qt5-11 libcgal-qt5-dev libcgal-ipelets
 
sudo apt-get install geomview
 
sudo apt-get install libgmp-dev libmpfr-dev
 
sudo apt-get install libcgal-dev # CGAL库

参考链接:

四、安装OpenCV

4.1、下载OpenCV源码

r3live作者提示OpenCV版本需要大于3.3,并且已经验证过了3.3.13.4.164.2.14.5.3的可行性,我们这里选择4.5.3进行安装。

下载OpenCV4.5.3源码并解压

cd ~

wget https://github.com/opencv/opencv/archive/4.5.3.zip

unzip 4.5.3.zip

4.2、生成makefile文件

创建并进入到build文件夹

cd ~/opencv-4.5.3

mkdir -p build && cd build

使用cmake生成makefile文件

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_GTK=ON -D OPENCV_GENERATE_PKGCONFIG=YES ..

CMAKE_BUILD_TYPE=RELEASE:表示编译发布版本 CMAKE_INSTALL_PREFIX:表示生成动态库的安装路径,可以自定义 WITH_GTK=ON:这个配置是为了防止GTK配置失败:即安装了libgtk2.0-dev依赖,还是报错未安装 OPENCV_GENERATE_PKGCONFIG=YES:表示自动生成OpenCV的pkgconfig文件,否则需要自己手动

4.3、编译OpenCV

使用所有系统内核编译OpenCV,提高编译速度。

make -j$(nproc)

这里$(nproc)表示系统内核数,如果知道自己的内核数或者想设置为其他内核数,命令格式为make -j[内核数],例如make -j8使用8个内核,建议不要设置高于系统内核数,可能会出现系统卡死的情况,另外,如果编译时报错,可以尝试不使用多个内核编译,虽然需要更长的编译时间,但是可以避免一些奇怪的报错。

注意:如果需要重新cmake,请先将build目录下的文件清空,再重新cmake,以免发生错误。

4.4、安装OpenCV

sudo make install

4.5、将OpenCV的库添加到系统路径

  • 方法一:

    创建opencv.conf文件

    sudo vim /etc/ld.so.conf.d/opencv.conf

    /usr/local/lib写入到opencv.conf文件,需要注意的是:这里的/usr/local/lib是cmake编译时填的动态库安装路径加上/lib

    /usr/local/lib

    重新加载配置,使得配置的路径生效

    sudo ldconfig
  • 方法二:

    配置ld.so.conf文件

    sudo vim /etc/ld.so.conf

    在文件中加上一行include /usr/loacal/lib,这个路径是cmake编译时填的动态库安装路径加上/lib

    OpenCV Config

4.6、将OpenCV库配置到系统环境中

在cmake生成makefile文件时,选择了自动生成OpenCV的pkgconfig文件(OPENCV_GENERATE_PKGCONFIG=YES),在动态库安装路径/usr/local/lib下的/pkgconfig路径可以看到opencv4.pc文件。

/usr/local/lib/pkgconfig配置到/etc/bash.bashrc配置文件中。

sudo vim /etc/bash.bashrc

在文件末尾加入

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

保存退出,然后执行如下命令使配置生效

source /etc/bash.bashrc

4.7、验证OpenCV 4.x库路径是否配置正确到系统配置中

执行以下命令,可看到输出OpenCV版本号4.5.3则为配置正确。

pkg-config --modversion opencv4

4.8、确保OpenCV 4.x版本正确被R3live找到

执行4.7小节中的命令,可以看到输出OpenCV版本号4.5.3,但是R3live中找的是OpenCV,因此需要输入以下命令验证

pkg-config --modversion opencv

这时会发现,找不到opencv.pc

opencv pc

为了让系统找OpenCV包时,直接找到OpenCV 4.x包(拷贝opencv4.pcopencv.pc,并配置pkg-config

sudo cp /usr/local/lib/pkgconfig/opencv4.pc /usr/local/lib/pkgconfig/opencv.pc

pkg-config找到opencv.pc文件

pkg-config --cflags --libs opencv

4.9、OpenCV版本太多配置冲突,卸载OpenCV重新安装(未尝试,可能存在风险)

输入以下命令卸载OpenCV相关库,这里可能存在的问题是不只是OpenCV库,其他相关的库也会被删掉,因此,经过这个操作之后,其他库可能出现问题,另外为了正确运行,需要对上面所有涉及到OpenCV库的步骤进行确认,可能会要重新安装库,该方法来自于r3live中的r3live/issues/20#issuecomment-1006419883,如下图所示

sudo apt-get purge '*opencv*'

r3live issue 20


参考链接:

五、编译运行R3live

5.1、编译安装R3live

cd ~/catkin_ws/src

git clone https://github.com/hku-mars/r3live.git

cd ../

catkin_make

# 下面这一句可以不需要了,已在安装livox的ROS驱动程序时添加到~/.bashrc了
# source ~/catkin_ws/devel/setup.bash

5.2、下载rosbag数据文件

r3live作者给出了一些rosbag数据文件,为了保证链接有效性,这里不放出链接,请直接查看R3live开源Github库 - README或者是r3live_dataset

5.3、运行R3live

打开一个终端,输入以下命令,启动r3live

roslaunch r3live r3live_bag.launch

打开另一个终端,输入以下命令,使用rosbag提供数据

rosbag play YOUR_DOWNLOADED.bag

5.4、运行时,可能遇到的问题

5.4.1、Rviz进程终止运行

错误信息如下:

[rviz-3] process has died [pid XXXXX, exit code -6 XXXX......]

该错误由OpenGL版本是mesa导致RViz启动不了,这时关闭硬件加速器即可。运行如下命令,并在此启动RViz即可。

export LIBGL_ALWAYS_SOFTWARE=1

解决方案来自:ros中启动rviz显示段错误,核心以转储问题 rviz process has died

5.4.2、内存分配失败报错(内存不够)

修改r3live/src/rgb_map文件夹中,pointcloud_rgbd.cpp中的光流模块image的buffer的分配的大小。

r3live issue 11

上图中说的168行并不准确,因为代码不是最新的,作者已针对内存小于12GB的机器,改小了buffer大小(1e8),大于12GB的设备还是1e9。在最新代码(日期20230803)中的177行r3live/src/rgb_map/pointcloud_rgbd.cpp#L177

这里我改成了1e7,在虚拟机中8GB内存也可以正确跑出来结果来了。

需要注意的是:修改之后,需要编译安装R3live5.1、编译安装R3live)。

解决方案来自:r3live/issues/11#issuecomment-1003692169

5.5、可视化R3live RGB点云

在通过播放rosbag运行R3live时,可以按下“S”或者“s”,保存地图。默认会保存在${HOME}/r3live_output,通过运行作者写的r3live_reconstruct_mesh.launch可以将保存下来的rgb点云数据rgb_pt.pcd构建网格与纹理。

5.5.1、构建网格与纹理

运行以下命令,默认构建${HOME}/r3live_output目录下的rgb点云(即运行时,不需要进入到存有结果的目录下)。

roslaunch r3live r3live_reconstruct_mesh.launch

5.5.2、安装可视化工具

sudo apt-get install pcl-tools meshlab

5.5.3、可视化点云信息

cd ${HOME}/r3live_output
pcl_viewer rgb_pt.pcd

5.5.4、可视化重构的网格

cd ${HOME}/r3live_output
meshlab textured_mesh.ply

5.5.5、pcd与ply文件格式

pcd文件,包括头部属性与数据信息

  • 头部属性,包括一些pcd文件版本VERSION、每个点包含哪些维度FIELDS、每个维度的数据占用字节大小SIZE、每个维度的数据类型TYPE、每个维度含有多少个元素COUNT、用点的数量表示点云数据集的宽度WIDTH、用点云数据集中点的数量表示点云数据集的高度HEIGHT、指定数据集合中点的采集视点VIEWPOINT、点云中点的总数POINTS、点云数据的存储类型DATA等。
  • pcb文件中xyzrgb数据中的rgb用一个4个字节的int表示,每个字节以此表示alphargb

ply文件格式,存在两种格式,(由点信息和平面信息构成)以及(由点信息、平面信息和边信息构成),其中点信息包括xyzrgb等属性,平面信息是由三角形构成,一般为一个或者两个,边信息,由两个点和颜色信息构成,用于分割两个三角形。

ply文件格式中,两个三角形构成的平面信息由4个点构成,例如0 1 2 3表示两个三角形0 1 20 2 3构成的平面。这样构成主要是近可能的用少的点表示平面,参考三角形扇形(Fans)、条形(Strips)和网格


参考链接:

附页

个人电脑配置与环境

  • 实体机: Macbook Pro 15(2015 mid),MacOS 12.6.8版本
  • VMware Fusion 虚拟机:Ubuntu 20.04.6版本,4核心,8GB内存
  • ROS版本:Noetic(对应于Ubuntu 20.04)
  • OpenCV:OpenCV 4.5.3

其他软件版本为Ubuntu系统自带默认版本。

参考链接