R3LIVE安装教程

零、重装系统后的预操作

sudo apt-get update
sudo apt-get upgrade

一、安装ROS系统

  1. 配置Ubuntu软件仓库。
    这一步需要使用国内镜像源,确保安装时的所有的ROS功能包全部被安装,不会出现connected fail的问题。
  2. 设置Sources.list。
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
  1. 设置密钥。
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
  1. 安装ROS
sudo apt-get update
sudo apt-get install ros-kinetic-desktop-full
  1. 初始化Rosdep
    必然会遇到的问题:init和update问题。
    参考文献:https://blog.csdn.net/weixin_44023934/article/details/121242176
# home文件夹下
git clone https://github.com/ros/rosdistro.git
# 通过pwd命令,得到类似于“/home/LiFeiHong/rosdistro”的路径,并粘贴该路径。
cd /usr/lib/python2.7/dist-packages/rosdep2 
sudo gedit rep3.py
# REP3_TARGETS_URL = ‘https://raw.githubusercontent.com/ros/rosdistro/master/releases/targets.yaml’ 替换成 REP3_TARGETS_URL = 'file:///home/ubuntu16/rosdistro/releases/targets.yaml'
cd /usr/lib/python2.7/dist-packages/rosdistro
sudo gedit __init__.py
#  DEFAULT_INDEX_URL = ‘https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml’ 替换成 DEFAULT_INDEX_URL = 'file:///home/ubuntu16/rosdistro/index-v4.yaml'

sudo mkdir -p /etc/ros/rosdep/sources.list.d  
cd /etc/ros/rosdep/sources.list.d  
sudo touch 20-default.list 

sudo gedit /etc/ros/rosdep/sources.list.d/20-default.list
# os-specific listings first
yaml file:///home/LiFeiHong/rosdistro/rosdep/osx-homebrew.yaml osx

# generic
yaml file:///home/LiFeiHong/rosdistro/rosdep/base.yaml
yaml file:///home/LiFeiHong/rosdistro/rosdep/python.yaml
yaml file:///home/LiFeiHong/rosdistro/rosdep/ruby.yaml
gbpdistro file:///home/LiFeiHong/rosdistro/releases/fuerte.yaml fuerte

# newer distributions (Groovy, Hydro, ...) must not be listed anymore, they are being fetched from the rosdistro index.yaml instead

以上操作执行完成后,执行以下两个步骤。

rosdep update
  1. 环境配置
    如果每次打开一个新的终端时ROS环境变量都能够自动配置好(即添加到bash会话中),那将会方便很多:
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
  1. 构建工厂依赖
    到目前为止,你已经安装了运行核心 ROS 包所需的内容。为了创建和管理自己的 ROS 工作区,有各种各样的工具和需求分别分布。例如:rosinstall 是一个经常使用的命令行工具,它使你能够轻松地从一个命令下载许多 ROS 包的源树。
sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential
  1. 安装与R3LIVE相关的功能
sudo apt-get install ros-kinetic-cv-bridge ros-kinetic-tf ros-kinetic-message-filters ros-kinetic-image-transport*

注意,第四步和第八步需要保证需要安装的功能包在get操作后,需要完成prepare、unpack以及signing up的操作后,才表明安装完成,同时,需要确保没有任何一个功能包没有因为网络原因而安装失误。

二、livox_ros_driver 安装揽沃ROS驱动程序

览沃ROS驱动程序是一个全新的 ROS 包,专门用于连接览沃生产的 LiDAR 产品。

2.1 Livox-SDK 安装

# Livox SDK requires CMake 3.0.0+ as dependencies.
sudo apt install cmake
# Document/livox
git clone https://github.com/Livox-SDK/Livox-SDK.git
cd Livox-SDK
cd build && cmake ..
make
sudo make install

2.2 build livox_ros_driver

# Document/livox
git clone https://github.com/Livox-SDK/livox_ros_driver.git ws_livox/src
cd ws_livox
catkin_make
source ./devel/setup.sh

3 Cgal and pcl_viewer (optional)

sudo apt-get install libcgal-dev pcl-tools

但是可能是我电脑环境的原因,编译时依旧报缺失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

4 OpenCV

ROS自带Opencv3.3.1因此,不需要再次安装。

# 查看ROS中使用的OpenCV的版本:
pkg-config opencv --modversion
# pkg-config一个用于获取系统中安装的包/库的相关信息(例如依赖头文件目录、依赖库文件目录)的程序,通常用于编译和链接一个或多个库
# 查看本机linux下安装的OpenCV的版本:
查看opencv 3以及以下版本:
pkg-config --modversion opencv
查看opencv4版本:
pkg-config --modversion opencv4


5 Eigen3.3.4

查看Eigen功能包的版本:cat /usr/include/eigen3/Eigen/src/Core/util/Macros.h
pkg-config --modversion eigen3

pkg-config --modversion eigen3

# 下载Eigen3.4.0
# 官网:http://eigen.tuxfamily.org/index.PHP?title=Main_Page
# Download
# eigen3
cd eigen3

mkdir build
cd build
cmake ..
make
sudo make install 

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

sudo mv /usr/include/eigen3/ /usr/include/eigen_3292/
sudo mv /usr/local/include/eigen3/ /usr/include/eigen3/
gedit /usr/include/eigen3/Eigen/src/Core/util/Macros.h  # Showing 3.3.4 means OK.
sudo cp  /usr/include/eigen3/  /usr/local/include/eigen3/

6 R3LIVE

cd ~/catkin_ws/src
git clone https://github.com/hku-mars/r3live.git
cd ../
catkin_make
source ~/catkin_ws/devel/setup.bash

livox_diriver
注意:source ./devel/setup.sh 该命令只在当前的终端中有效,所以报错有可能是因为你在新建的终端窗口中运行 catkin_make。这种情况只需要先去指定目录下先source一下再回到~/catkin_ws/src目录下catkin_make。

cd ws_livox
source ./devel/setup.sh
cd ~/catkin_ws/src
catkin_make

https://zhuanlan.zhihu.com/p/442177134

https://blog.csdn.net/weixin_44857882/article/details/119877566

https://blog.csdn.net/weixin_43926887/article/details/123296565?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-123296565-blog-124044397.pc_relevant_multi_platform_whitelistv3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-123296565-blog-124044397.pc_relevant_multi_platform_whitelistv3&utm_relevant_index=5

https://blog.csdn.net/smartfoolish/article/details/122407063?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3-122407063-blog-124044397.pc_relevant_multi_platform_whitelistv3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3-122407063-blog-124044397.pc_relevant_multi_platform_whitelistv3&utm_relevant_index=6

https://blog.csdn.net/handily_1/article/details/122271243?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-122271243-blog-124044397.pc_relevant_multi_platform_whitelistv3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-122271243-blog-124044397.pc_relevant_multi_platform_whitelistv3&utm_relevant_index=2

工作日志

2022年8月15日星期一

  1. 周三之前需要将Kinect数据以及LiDAR数据应用在R3Live中。
    1.1. 梳理大致的操作流程。
    1.2. 尝试在ThinkPad中运行R3LIVE,检查是否该项目确实是可运行的。
  • roslaunch r3live r3live_bag.launch

  • r3live存储于home/dev/devpychram/pycharm

  • 查看离线点云地图(后缀.pcd文件
    如何查看文件夹中是否包含后缀为pcd的文件
    locate 配合数据库查看文件位置 locate *.sh

  • 如何查看自己的电脑上安装的livox-ros-driver(ROS包)是官方发布的还是R3Live发布的(经验证,ThinkPad中安装的版本是改进版)
    差异在文件Iddc.cpp文件上。livox_ros_driver/livox_ros_driver/lddc.cpp

/**************** Modified for R2LIVE **********************/
double g_ros_init_start_time = -3e8;
double init_lidar_tim = 3e10;
double init_ros_time = 0;
double skip_frame = 100;
/**************** Modified for R2LIVE **********************/
import open3d as o3d
import numpy as np
def read_pcd(file_path):
	pcd = o3d.io.read_point_cloud(file_path)
	print(np.asarray(pcd.points))
	colors = np.asarray(pcd.colors) * 255
	points = np.asarray(pcd.points)
	print(points.shape, colors.shape)
	return np.concatenate([points, colors], axis=-1)
  • LiDAR采集得到的数据格式与文件后缀又是什么?
    目前来看,点云数据是.pcd后缀文件
    数据格式是NX3或者NX4的矩阵数据。
    Kinect相机同样可以生成点云数据,但是周三的实际尝试中只是看重Kinect相机对彩色图象的采集。
  • bag数据怎么形成以及包含什么内容
  • Kinect标记是什么?
  • LiDAR标记是什么?
  • 整体的流程概述:
    • Kinect相机和雷达设备准备就绪;

      • 相机的启动
        ls /dev/video*
        这一步结束之后,会得到N个摄像头的设备名称,选择你想要的设备,并将launch文件中设备号修改为你想要的设备名称。如果不知道那个设备号是你想要的,那就一个个尝试。
        cd /opt/ros/melodic/share/usb_cam/launch
        sudo gedit usb_cam-test.launch
        roslaunch usb_cam usb_cam-test.launch
      • r3live_bag.launch中修改内容
        目前没看明白,但launch中的内容已经修改过了。
    • 相机内参标定;
      黑白棋盘格,用以标定相机内参
      相机内参标定究竟标了什么?相机内参外参保姆级教程
      ROS上基于usb_cam软件包实现usb摄像头的摄像功能
      对应功能包官方步骤
      更加详细的教程
      相机的镜头需要尽量具备与Livox一致的视场角(70.4° * 77.2°)。
      rosrun package_name executable_file_name
      相机校准需要得到的信息包含什么,以及其中各项代表的含义?

      • extrinsic 外参:真实世界中的坐标与相机坐标系中的对应坐标之间转换的旋转矩阵以及平移向量。
      • intrinsic 内参:图片宽度、图片高度;相机内参矩阵(K,相机坐标系向像素坐标系转换的矩阵)Camera_matrix、扭曲矩阵(畸变系数)distortion_matrix、矫正矩阵rectification_matrix、映射矩阵projection_matrix

      具体的校准过程。
      1 安装usb_cam sudo apt install ros-kinetic-usb-cam具体见参考文献。
      2 编译usb_cam节点
      3 在Rviz中查看相机的输出;同时在该软件中显示相关的topic数据。重要的是观察到/usb_cam/image_raw。
      4 开始校准操作:安装相机校准软件包:sudo apt install ros-kinetic-uvc-camera sudo apt install ros-kinetic-camera-calibration
      5 先启动roscore,再启动uvc_camera软件包,之后启动camera_calibration软件包(rosrun uvc_camera uvc_camera_node
      6 使用相机对准校准棋盘,执行命令rosrun camera_calibration cameracalibrator.py –size 8×6 –square 0.0255 image:=/image_raw。其中,–size是上述棋盘的宽度和高度, –square 0.0255是棋盘的一个小方格的实际尺寸(因此需要拿着尺子对方格进行测量)。之后需要一直将相机朝着上下左右四个方向移动以及倾斜状态下继续上下左右(在每一步,保持棋盘静止,直到图像在校准窗口中突出显示)。直到X Y Size Skew对应绿条填满。
      7 四个绿条满格后,点击calibration以实际计算校准信息;点击Save按钮,以保存校准信息,将会存储在一个/tmp目录(如“/tmp/calibrationdata.tar.gz”
      8 将该生成的校准文件移动到当前用户的home目录下。

      在这里插入图片描述


      9 打开head_camera.yaml文件修改相关内容就能保证该校准参数文件正常使用了。
      10 之后再次使用usb_camera时,就会出现相关的参数文件了。
      补充内容
      1 标定板在视野中的倾斜位置——Skew;
      2 rosrun camera_calibration cameracalibrator.py --size 7x6 --square 0.03 image:=/usb_cam_node/image_raw camera:=/usb_cam_node该命令有这么叙述的。应该是以该段命令为准,同时,size指的是横行和竖行的内部角点的输目。
      3 相机内参的标定方式目前看来仅此一种。

      在这里插入图片描述

    • 雷达内参标定;
      雷达似乎是没有内参一说。

    • 相机-雷达外参标定;
      Camera-LIDAR 联合标定方法总结
      激光雷达相机校准
      livox_camera_calib功能包用于雷达和相机的联合标定,目的是为了得到外参。但是外参指的是什么外参,相机自己的外参?——相机的外参:雷达坐标系和相机坐标系之间转换矩阵(但是需要该清楚每一种校准方式得到的外参矩阵是相机坐标系向雷达坐标系的转换还是雷达向相机的转换。)
      这里的标定测试数据不需要依靠黑白棋校准板,而是使用官网给定的几张图片
      Note:在ThinkPad中这些测试数据的位置:16_r3live/ws_calibrate/ws_calibrate/src/testin
      但是不明白的是,为什么有多场景,多场景和单个场景的差别在于?——取决于外参的计算是基于一张图片还是多张图片
      该校准库执行的时候需要在配置文件16_r3live/ws_calibrate/ws_calibrate/src/livox_camera_calib/config)中提供相机的部分内参信息:内在矩阵和畸变系数。
      Note:事情就是这样,看够十篇左右的文章博客,这个知识点就基本掌握了。
      激光雷达和相机的联合标定的结果是得到激光雷达相对于相机的旋转和平移。

      在这里插入图片描述


      很好奇的点是:内参文件和外参文件在哪里用到,怎么使用的?

      • AutoWare
        查看内存使用情况:free -m
        查看qt的版本:qmake -v
        查看安装的cuda版本:cat /usr/local/cuda/version.txt nvidia-smi
    • 数据采集;
      图象数据与雷达点云数据的融合一定是彼此独立的,他们的融合是在哪里进行的,如果是在模型阶段,那么我们如何为R3LIVE提供两种模态的数据,同时提供相机的内参和外参参数?——bag是作为输入,而config.yaml中包含了内参和外参的数据信息。

    • 相机数据和雷达数据进行融合得到bag文件
      这里其实是通过在录制过程中,ROS将两部分的数据进行融合而生成一个bag文件
      具体的过程是:
      1 通过use_cam启动相机;
      2 通过livox驱动启动雷达;
      3 启动R3Live的r3live_bag.launch文件
      4 启动rosbag录制;得到一个bag文件,包含两个部分。
      问题1:回放bag文件时,ThinkPad上会出现虚晃的现象,而R3live提供的bag文件不会出现这种问题。
      问题2:
      假设自采集得到的bag文件没有任何问题,那么开始进行操作S。
      问题2:在ThinkPad上执行S操作,会造成对话框司机,从而无法生成pcd文件
      补充两个知识点:第一,这里通过在OMEN电脑上验证,结果显示pcd文件以及r3live文件,只有在执行S操作时才会生成。第二,Reconstruct and texture your mesh以及Visualize your saved maps.两个过程的命令是建立在r3live和pcd文件的基础上的。第三,S操作的执行最好等到整个bag文件结束之后执行,因为此时,整个场景已经在Rviz软件中得以构建完成。
      假如场景融合构建过程的卡死问题确实是由于ThinkPad硬件问题所导致(这一点由伊红姐之前的讲述进一步验证),那么可以使用OMEN尝试进行构建。
      问题3:但是OMEN的虚拟机似乎无法接受U盘的内容,这一点很残酷!
      但是之前伊红姐说过,可以在它的电脑上进行多传感器数据的融合,因此,现在的问题有两点:
      第一点,bag文件回放晃动的问题。
      第二点,外参和内参的精度进一步提升。
      可能的解决办法是:
      第一,对比B站上发布视频的ROS页面内容,发觉无VIO分支;同时缺乏一些display的字段。还有没有接受到image!
      第二,重新审视伊红姐写的文档。

    • R3LIVEplaybag文件
      bag文件作为输入,经由R3LIVE处理得到的一种重现。但是这种重建过程是否也可以录制,不过现在我没看到这一点。

    • 熟悉整个流程之后,需要将命令啥的,最好的梳理一遍,同时多看几篇文章以核实命令是否准确,或者说理解得更加深刻一些!如果某个地方出了问题,可以明白如何解决

    • 其实还有个很急迫、重要的事情,就是需要真真实实地运行一个ROS代码/过程,直到文件都储存在哪儿

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...
win11本地账户怎么改名?win11很多操作都变了样,用户如果想要...