摘要:安装Ubuntu16.04, 配置部署环境,完成雷达标定。
关键词:Livox Mid-70 livox_camera_calib 激光雷达标定
虚拟机安装
不要问我为什么不使用实机安装。因为我只有一台机器安装Ubuntu22.04,再安装一个系统实在是过于臃肿。而且在Ubuntu22.04下,标定程序环境配置环节会由于ROS
,ceres-solver
,eigen3
的版本问题产生难以解决的编译错误(如果不相信我可以去试试)。本次安装使用镜像为ubuntu-16.04.7-desktop-amd64.iso
,直接去ubuntu官网寻找下载即可。
我的虚拟机配置如下:
- 硬盘30G
- 内存6G
- cpu核心6核
上述配置可根据自己电脑配置调整。注意:内存太小可能导致编译内存不够,30G对于标定程序已经够用。
安装过程我不再赘述,默认安装即可无需其他调整。在安装完成后可以安装VirtualBox的增强功能,然后即可共享本地文件夹到虚拟机,这对后续标定有很大帮助。安装过程可以参考 VirtualBox虚拟机共享文件夹
环境配置
先列出整个环境:
ROS
: ros-kineticceres-solver
: 1.14.xeigen3
: 3.2.92g++
: 5.4.0cmake
: 3.5.1
一、ros安装
具体安装细节详见ROS KINETIC
这里使用中国源服务器,也可根据需要调整源。
# 添加软件源
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
# 添加秘钥
sudo apt install curl # if you haven't already installed curl
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
# 更新软件源
sudo apt update
# 全部安装
sudo apt install ros-kinetic-desktop-full
# 在安装完后,将source文件添加到~/.bashrc以免每次source
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
# 在初始化ros之前先下载部分依赖
sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential
# 最后初始化ros,这里容易连接失败,可能需要科学的力量。
sudo rosdep init
rosdep update
二、eigen3以及ceres库
eigen3
在安装ros
时已经自动安装了,默认版本为3.2.97
。接下来安装ceres-solver
,到github上克隆库即可。
mkdir ~/workspace
cd ~/workspace
# 这里记得指定分支
git clone https://github.com/ceres-solver/ceres-solver --branch 1.14.x
cd ceres-solver
mkdir build && cd build
cmake ..
make -j4
sudo make install
到此,所有库文件安装完毕。
三、Livox驱动
在安装驱动前要明确自己使用的是什么版本的激光雷达,我这里使用的是Mid70
,它只支持livox_ros_driver
以及Livox-sdk
,而Mid-360
比较新只支持livox_ros_driver2
以及Livox_sdk2
。具体对应的驱动版本还是应该去官网查询对应手册以及对应github仓库上的README
说明
安装Livox-SDK
cd ~/workspace
git clone https://github.com/Livox-SDK/Livox-SDK.git
cd Livox-SDK
cd build && cmake ..
make -j4
sudo make install
安装livox_ros_driver
cd ~/workspace
mkdir ws_livox
git clone https://github.com/Livox-SDK/livox_ros_driver.git ws_livox/src
cd ws_livox
catkin_make
不出意外的话,上述过程的编译是没有错误的。如果出现错误请检查之前步骤是否正确。
最后检验雷达,看是否能正常发布点云。
在此之前,先修改livox_ros_driver
下的config/livox_lidar_config.json
{
"lidar_config": [
{
"broadcast_code": "3GGDJAB00100401", # 这里修改成你的雷达的sn码
"enable_connect": true, # 以下部分有需要的可做修改,默认即可。
"return_mode": 0,
"coordinate": 0,
"imu_rate": 0,
"extrinsic_parameter_source": 0,
"enable_high_sensitivity": false
}
],
"timesync_config": {
"enable_timesync": false,
"device_name": "/dev/ttyUSB0",
"comm_device_type": 0,
"baudrate_index": 2,
"parity_index": 0
}
}
最后启动点云发布程序,一切正常的话可以再rviz
中看到点云图
source devel/setup.bash
roslaunch livox_ros_driver livox_lidar_rviz.launch
到此,恭喜你所有环境配置已经完成。接下来准备数据收集与雷达标定程序编译。
雷达标定程序
这里使用的是香港大学github开源项目 Targetless Extrinsic Calibration of Multiple Small FoV LiDARs and Cameras using Adaptive Voxelization
该程序可在无目标场景下,通过获取一张照片以及一段时间点云图,进行迭代运算自动拟合雷达外参。
接下来准备克隆仓库、编译测试:
cd ~/catkin_ws/src
git clone https://github.com/hku-mars/livox_camera_calib
cd .. && catkin_make
source ~/catkin_ws/devel/setup.bash
roslaunch livox_camera_calib calib.launch
配置文件说明:
在使用程序前要修改配置文件config/calib.yaml
# Data path. adjust them!
common:
image_file: "/home/ycj/data/calib/image/0.png" # 这里是准备图像路径
pcd_file: "/home/ycj/data/calib/pcd/0.pcd" # 这里是收集点云数据路径
result_file: "/home/ycj/data/calib/extrinsic.txt"
# Camera Parameters. Adjust them!
camera: # 相机外参
camera_matrix: [1364.45, 0.0, 958.327,
0.0, 1366.46, 535.074,
0.0, 0.0, 1.0 ]
dist_coeffs: [0.0958277, -0.198233, -0.000147133, -0.000430056, 0.000000]
# Calibration Parameters.!
calib:
calib_config_file: "/home/ycj/catkin_ws/src/livox_camera_calib/config/config_outdoor.yaml" # 这里写对应config/config_outdoor.yaml文件路径
use_rough_calib: true # set true if your initial_extrinsic is bad
数据准备
1. PCD文件
使用官方Livox Viewer
可录制.lvx
文件,通过livox_ros_driver
可把.lvx
文件转换成rosbag
,最后使用pcl_ros
将rosbag
转换成每一帧pcd
文件。注意:录制时长最好在25s左右,太短可能导致标定失败。
1.1
到官网下载Livox Viewer
,Ubuntu16.04这个版本->Livox Viewer
使用Livox Viewer
连接雷达,点击左上角相机按钮即可开始录制,再次点击结束录制。在data/record files/
可找到录制文件。
1.2 转换rosbag
cd ws_livox
source ./devel/setup.bash
roslaunch livox_ros_driver lvx_to_rosbag.launch lvx_file_path:=""
1.3 转成pcd
mkdir pcds
rosrun pcl_ros bag_to_pcd <input_file.bag> /livox/lidar pcds
1.4 合并pcd
安装CloudCompare
,可以参考文章CloudCompare安装。
我使用的是flatpak
sudo apt install flatpak
sudo apt install gnome-software-plugin-flatpak
# 添加源,可以自行换成国内源
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
# 安装,需要几分钟。
flatpak install flathub org.cloudcompare.CloudCompare
# 运行
flatpak run org.cloudcompare.CloudCompare
在CloudCompare中全选导入pcds
中的pcd
文件,点击菜单栏edit
中的merge
即可。
最后到处pcd文件,在到处类型中选择,Point Cloud Libaray cloud
。
2. 照片
使用标定过的相机截取一张图即可,我使用的是海康工业相机。使用MVS
截取一张图片即可。
运行标定程序
cd ~/catkin_ws/src
source ~/catkin_ws/devel/setup.bash
roslaunch livox_camera_calib calib.launch
之后你会看到rviz
启动,对图像边界进行迭代拟合。
运行一段时间后会弹出标定前后点云着色图。标定结果保存在livox_camera_calib/src/result/extrinsic
中。
就此标定结束
总结
顺着本篇文章即可完成一次简单标定,但是其中数据处理过程仍然过于繁琐。在后续过程中可考虑使用脚本或者其他程序完成图像获取以及pcd收集的工作,从而简化标定过程。整体标定过程还是需要一段时间,大约几分钟。本人才疏学浅,刚刚接触激光雷达,若有错误请多多包涵!