R3live是香港大学MARS实验室以Livox雷达为核心做的多传感器融合的SLAM方案,开源项目地址:https://github.com/hku-mars/r3live,以下是R3live项目的配置与运行的记录。
- 打开
Software & Updates
(紫色图标),注意不是右边的Software Update
(灰色图标)
- 将下载来源改为阿里云,如下图所示
将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源使用帮助
这里没有安装curl
软件包,也可以用wget
下载(ubuntu自带)
sudo apt install curl
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
如果用curl
下载失败,可以改用wget
从http://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
注意需要先更新一下软件包索引,另外,这里为了减少额外ROS包的安装,下载的内容最全的ROS版本ros-noetic-desktop-full
。
其他只有部分内容的ros-noetic-desktop
,ros-noetic-ros-base
是否也可以,需要尝试,个人觉得ros-noetic-desktop
应该可以,但ros-noetic-ros-base
不行,r3live需要RViz
可视化工具,当然自己安装缺少的ROS包一定是可以的。
sudo apt update
sudo apt install ros-noetic-desktop-full
将ROS环境设置到~/.bashrc
中
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
安装在自己创建、(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,但未进行尝试,有兴趣可以试试。
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*
参考链接:
- 官方文档:Ubuntu install of ROS Noetic
- R3live开源Github库 - README
- Unable to locate package, no valid OpenPGP data
- rosdep init cannot download default sources list
这里不用livox激光雷达,只用数据集跑,还是需要安装livox的ROS驱动程序,如果不进行这一步,当编译R3live程序时,编译不会通过并且会明确告诉你缺少livox的ros驱动程序。
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
在编译安装完成后,可以进行简单的测试,以确定是否成功安装。
在build文件夹下,进入sample/lidar
或者进入sample/hub
文件夹下,运行相应的示例程序进行测试。
在虚拟机下运行或者是没有livox雷达,看到如下输出之后,认为SDK已正确安装,这个时候,可以control + c
退出示例程序了
在Home路径下,创建ROS工作路径catkin_ws
(名称可以自定),编译安装catkin_make
命令要在catkin_ws
路径下执行,另外,在ROS工作路径下创建src
文件夹,将代码放在src
文件夹内以便管理。
以下命令为循环创建catkin_ws
与src
文件夹,mkdir
命令中的-p
(--parents
)参数,表示自动建立好路径中那些尚不存在的文件夹。
mkdir -p ~/catkin_ws/src
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
echo "source ~/catkin_ws/devel/setup.sh" >> ~/.bashrc
source ~/.bashrc
参考链接:
安装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库
参考链接:
r3live作者提示OpenCV版本需要大于3.3
,并且已经验证过了3.3.1
、3.4.16
、4.2.1
、4.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
创建并进入到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文件,否则需要自己手动
使用所有系统内核编译OpenCV,提高编译速度。
make -j$(nproc)
这里$(nproc)
表示系统内核数,如果知道自己的内核数或者想设置为其他内核数,命令格式为make -j[内核数]
,例如make -j8
使用8个内核,建议不要设置高于系统内核数,可能会出现系统卡死的情况,另外,如果编译时报错,可以尝试不使用多个内核编译,虽然需要更长的编译时间,但是可以避免一些奇怪的报错。
注意:如果需要重新cmake,请先将build目录下的文件清空,再重新cmake,以免发生错误。
sudo make install
-
方法一:
创建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
在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
执行以下命令,可看到输出OpenCV版本号4.5.3
则为配置正确。
pkg-config --modversion opencv4
执行4.7小节中的命令,可以看到输出OpenCV版本号4.5.3
,但是R3live中找的是OpenCV
,因此需要输入以下命令验证
pkg-config --modversion opencv
这时会发现,找不到opencv.pc
为了让系统找OpenCV包时,直接找到OpenCV 4.x包(拷贝opencv4.pc
为opencv.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
输入以下命令卸载OpenCV相关库,这里可能存在的问题是不只是OpenCV库,其他相关的库也会被删掉,因此,经过这个操作之后,其他库可能出现问题,另外为了正确运行,需要对上面所有涉及到OpenCV库的步骤进行确认,可能会要重新安装库,该方法来自于r3live
中的r3live/issues/20#issuecomment-1006419883,如下图所示
sudo apt-get purge '*opencv*'
参考链接:
- 香港大学R3live:手把手教你如何编译和运行
- Ubuntu 18.04安装配置OpenCV 4.4.0
- Installation in Linux - docs.opencv.org
- OpenCV configuration options reference - docs.opencv.org
- 多版本opencv管理 --pkg-config
- Package opencv was not found in the pkg-config search path. Perhaps you should add the directory containing `opencv.pc' to the PKG_CONFIG_PATH environment variable No package 'opencv' found pkg-config: exit status 1
- r3live/issues/20#issuecomment-1006419883
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
r3live作者给出了一些rosbag数据文件,为了保证链接有效性,这里不放出链接,请直接查看R3live开源Github库 - README或者是r3live_dataset
打开一个终端,输入以下命令,启动r3live
roslaunch r3live r3live_bag.launch
打开另一个终端,输入以下命令,使用rosbag
提供数据
rosbag play YOUR_DOWNLOADED.bag
错误信息如下:
[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
修改r3live/src/rgb_map
文件夹中,pointcloud_rgbd.cpp
中的光流模块image的buffer的分配的大小。
上图中说的168行并不准确,因为代码不是最新的,作者已针对内存小于12GB的机器,改小了buffer大小(1e8
),大于12GB的设备还是1e9
。在最新代码(日期20230803)中的177行r3live/src/rgb_map/pointcloud_rgbd.cpp#L177
这里我改成了1e7
,在虚拟机中8GB内存也可以正确跑出来结果来了。
需要注意的是:修改之后,需要编译安装R3live
(5.1、编译安装R3live)。
解决方案来自:r3live/issues/11#issuecomment-1003692169
在通过播放rosbag运行R3live时,可以按下“S”或者“s”,保存地图。默认会保存在${HOME}/r3live_output
,通过运行作者写的r3live_reconstruct_mesh.launch
可以将保存下来的rgb点云数据rgb_pt.pcd
构建网格与纹理。
运行以下命令,默认构建${HOME}/r3live_output
目录下的rgb点云(即运行时,不需要进入到存有结果的目录下)。
roslaunch r3live r3live_reconstruct_mesh.launch
sudo apt-get install pcl-tools meshlab
cd ${HOME}/r3live_output
pcl_viewer rgb_pt.pcd
cd ${HOME}/r3live_output
meshlab textured_mesh.ply
pcd文件,包括头部属性与数据信息
- 头部属性,包括一些pcd文件版本
VERSION
、每个点包含哪些维度FIELDS
、每个维度的数据占用字节大小SIZE
、每个维度的数据类型TYPE
、每个维度含有多少个元素COUNT
、用点的数量表示点云数据集的宽度WIDTH
、用点云数据集中点的数量表示点云数据集的高度HEIGHT
、指定数据集合中点的采集视点VIEWPOINT
、点云中点的总数POINTS
、点云数据的存储类型DATA
等。 - pcb文件中xyzrgb数据中的rgb用一个4个字节的
int
表示,每个字节以此表示alpha
、r
、g
、b
。
ply文件格式,存在两种格式,(由点信息和平面信息构成)以及(由点信息、平面信息和边信息构成),其中点信息包括xyzrgb等属性,平面信息是由三角形构成,一般为一个或者两个,边信息,由两个点和颜色信息构成,用于分割两个三角形。
ply文件格式中,两个三角形构成的平面信息由4个点构成,例如0 1 2 3
表示两个三角形0 1 2
与0 2 3
构成的平面。这样构成主要是近可能的用少的点表示平面,参考三角形扇形(Fans)、条形(Strips)和网格
参考链接:
- R3live开源Github库 - README
- r3live_dataset
- ros中启动rviz显示段错误,核心以转储问题 rviz process has died
- r3live/issues/11#issuecomment-1003692169
- PCD文件格式
- PCD(点云数据)文件格式
- 将.ply格式转换为.pcd格式
- PLY - Polygon File Format
- 三角形扇形(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系统自带默认版本。
- 官方文档:Ubuntu install of ROS Noetic
- R3live开源Github库 - README
- Unable to locate package, no valid OpenPGP data
- rosdep init cannot download default sources list
- 香港大学R3live:手把手教你如何编译和运行
- livox-SDK驱动程序Github库 - README
- livox的ROS驱动程序Github库 - README
- Ubuntu 18.04安装配置OpenCV 4.4.0
- Installation in Linux - docs.opencv.org
- OpenCV configuration options reference - docs.opencv.org
- 多版本opencv管理 --pkg-config
- Package opencv was not found in the pkg-config search path. Perhaps you should add the directory containing `opencv.pc' to the PKG_CONFIG_PATH environment variable No package 'opencv' found pkg-config: exit status 1
- r3live/issues/20#issuecomment-1006419883
- r3live_dataset
- ros中启动rviz显示段错误,核心以转储问题 rviz process has died
- r3live/issues/11#issuecomment-1003692169
- PCD文件格式
- PCD(点云数据)文件格式
- 将.ply格式转换为.pcd格式
- PLY - Polygon File Format
- 三角形扇形(Fans)、条形(Strips)和网格