pollos是什么意思(LIO-SAM学习与运行测试数据集)
0. 说明
0.1 环境配置说明
环境配置: ubuntu18.04, ros1(ros-melodic)
注: 在ros1的kinetic, melodic, noetic(https://github.com/TixiaoShan/LIO-SAM/issues/206)上被测试过;
ros1的github代码: https://github.com/TixiaoShan/LIO-SAM/tree/master
ros2的github代码: https://github.com/TixiaoShan/LIO-SAM/tree/ros20.2 LIO-SAM
论文:LIO-SAM:Tightly-coupled Lidar Inertial Odometry vis Smoothing and Mapping
是一个 实时激光雷达惯性里程计(lidar-inertial odometry)包 。0.3 系统架构
我们设计了一个系统 ,该系统可以维护两个图形 ,并且运行速度比实时快 10 倍
。(比实时快10倍 ,实时是指的是激光雷达的频率吗?)
"mapOptimization.cpp"中的因子图 (the factor graph) 优化了激光雷达里程计因子和 GPS 因子 (lidar odometry factor and GPS factor) 。该因子图在整个测试过程中始终保持不变 。
"imuPreintegration.cpp"中的因子图优化了 IMU 和激光雷达里程计因子(IMU and lidar odometry factor)并估计了 IMU 偏差 。该因子图会定期重置 ,并保证在 IMU 频率下的实时里程估计 。0.4 LIO-SAM youtube视频演示:
https://www.youtube.com/watch?v=A0H8CoORZJU
视频部分截图如下:Rotation Dataset:
Walking Dataset:
Park Dataset:
Campus Dataset:
Amsterdam Dataset:
stress test:
1. 编译与运行
1.1 依赖
ROS相关:
sudo apt-get install -y ros-melodic-navigation sudo apt-get install -y ros-melodic-robot-localization sudo apt-get install -y ros-melodic-robot-state-publisher1.2 gstam
(先不要急着安装)使用apt方法安装方式如下:
sudo add-apt-repository ppa:borglab/gtsam-release-4.0 sudo apt install libgtsam-dev libgtsam-unstable-dev之前用源码编译安装的 ,如下 ,这次就先不安装
https://blog.csdn.net/BIT_HXZ/article/details/1271355511.2 安装
cd ~/catkin_ws/src git clone https://github.com/TixiaoShan/LIO-SAM.git cd .. catkin_make1.3 运行
(1) launch文件:
roslaunch lio_sam run.launch
如果出现报错: [lio_sam_imuPreintegration-2] process has died [pid 1671, exit code 127, cmd /home/meng/subject/Lio_sam_ws/devel/lib/lio_sam/lio_sam_imuPreintegration __name:=lio_sam_imuPreintegration __log:=/home/meng/.ros/log/635269ee-46bc-11ed-a61b-1c697af31044/lio_sam_imuPreintegration-2.log]. [lio_sam_mapOptmization-5] process has died [pid 1672, exit code 127, cmd /home/meng/subject/Lio_sam_ws/devel/lib/lio_sam/lio_sam_mapOptmization __name:=lio_sam_mapOptmization __log:=/home/meng/.ros/log/635269ee-46bc-11ed-a61b-1c697af31044/lio_sam_mapOptmization-5.log].缺少一些库 。它们已安装但不可用 ,因为不在 LD_LIBRARY_PATH 环境变量中 。所以将 /usr/local/lib 目录添加到变量中解决了我的问题 。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib(2) 播放数据包:
rosbag play your-bag.bag -r 3
2 lidar和imu数据准备
2.1 准备lidar数据
用户需要准备正确格式的点云数据以进行点云校正(cloud deskewing) ,这主要在“imageProjection.cpp ”中完成。
2.1.1 提供点云的时间戳
LIO-SAM 使用 IMU 数据执行点云校正. 因此 ,需要知道扫描中的相对点时间(the relative point time), 最新的 Velodyne ROS 驱动程序应直接输出此信息 。在这里,我们假设点时间通道被称为"time" 。点类型的定义位于"imageProjection.cpp"的顶部。"deskewPoint()"函数利用这个相对时间来获得这个点相对于扫描开始(the beginning of the scan)的变换 。当激光雷达以 10Hz 旋转时 ,一个点的时间戳应该在 0 到 0.1 秒之间变化 。
如果您使用其他激光雷达传感器 ,您可能需要更改此时间通道的名称,并确保它是扫描中的相对时间。2.1.2 提供点所在环号(point ring number)
LIO-SAM 使用此信息在矩阵中正确组织点, 环号表示该点属于传感器的哪个通道 。点类型的定义位于"imageProjection.cpp"的顶部, 最新的 Velodyne ROS 驱动程序应直接输出此信息 。
同样 ,如果您使用其他激光雷达传感器 ,您可能需要重命名此信息 。请注意,该软件包目前仅支持机械激光雷达 。2.2 准备imu数据
(1)imu准备
与最初的 LOAM 实现一样 ,LIO-SAM 仅适用于 9-axis IMU
,它提供横滚 、俯仰和偏航估计(roll, pitch, and yaw estimation) 。横滚和俯仰估计主要用于将系统初始化为正确的姿态 。当使用 GPS 数据时 ,偏航估计将系统初始化在正确的航向 。
从理论上讲 ,像 VINS-Mono 这样的初始化程序将使 LIO-SAM 能够与 6 轴 IMU 一起工作 。系统的性能很大程度上取决于 IMU 测量的质量。 IMU 数据速率越高 ,系统精度就越好。
我们使用 Microstrain 3DM-GX5-25 ,它以 500Hz 的频率输出数据 。我们建议使用至少提供 200Hz 输出速率的 IMU 。注意 ,Ouster 激光雷达的内部 IMU 是一个 6 轴 IMU。(2)imu对齐alignment
LIO-SAM 将 IMU 原始数据从 IMU 帧转换为 Lidar 帧 ,遵循 ROS REP-105[ROS坐标系] 法则(x - 向前 ,y - 左,z - 向上) 。为了使系统正常运行 ,需要在"params.yaml"文件中提供正确的外部转换(the correct extrinsic transformation) 。之所以有两个extrinsic(是extrinsicRot和extrinsicRPY嘛?) ,是因为我的IMU(Microstrain 3DM-GX5-25)加速度(acceleration)和姿态(attitude)坐标不同。取决于您的 IMU 制造商,您的 IMU 的两个外在参数可能相同也可能不同
。
以作者的设置为例:
==>>需要设置 x-z 加速度(x-z acceleration)和陀螺仪负值(gyro negative)的读数来转换激光雷达坐标系(the lidar frame)中的 IMU 数据 ,这在 “params.yaml ” 中由 “extrinsicRot ” 表示 。
==>>姿态读数的转变可能略有不同 。 IMU的姿态测量q_wb通常是指IMU坐标系中的点到世界坐标系(例如ENU)的旋转 。但是 ,该算法需要 q_wl,即从激光雷达到世界的旋转 。所以我们需要从激光雷达到 IMU 的旋转 q_bl ,其中 q_wl = q_wb * q_bl 。为方便起见 ,用户只需在"params.yaml"中提供q_lb为"extrinsicRPY"(如果加速度和姿态坐标相同 ,则与"extrinsicRot"相同) 。(3)imu调试
强烈建议用户取消注释 “imageProjection.cpp ” 的 “imuHandler() ” 中的调试行并测试转换后的 IMU 数据的输出(会在终端打印输出
) 。用户可以旋转传感器套件以检查读数是否与传感器的运动相对应 。可以在此处找到显示更正 IMU 数据的 YouTube 视频链接到 YouTube。
imu与雷达坐标系:
imu调试:
3 样例数据集
下载链接:https://drive.google.com/drive/folders/1gJHwfdHCRdjP7vuT556pv8atqrCJPbUq
3.1 可使用默认设置运行的数据集
(1)数据集
步行数据集–walking dataset
公园数据集–Park dataset
花园数据集–Garden dataset(2)公园数据集
公园数据集用于使用 GPS 数据测试 LIO-SAM 。该数据集由 Yewei Huang(https://robustfieldautonomylab.github.io/people.html) 收集 。
要启用 GPS 功能 ,请将"params.yaml"中的"gpsTopic"更改为"odometry/gps"。在 Rviz 中 ,取消选中"地图(云)“并选中"地图(全局) ” 。还要检查"Odom GPS" ,它可以可视化 GPS 里程计 。
可以调整"gpsCovThreshold"以过滤不良 GPS 读数。 “poseCovThreshold"可用于调整将 GPS 因子添加到图形的频率 。例如 ,您会注意到 GPS 会不断修正轨迹 ,因为您将"poseCovThreshold"设置为 1.0 。由于 iSAM 的重度优化(heavy optimization) ,建议播放速度为 ”-r 1" 。poseCovThreshold 保持为默认的25m^2时:
点云地图:
poseCovThreshold 设置为1m^2,并显示gps时:
3.2 需要配置参数的数据集
(1)旋转数据集–Rotation dataset
(2)校园数据集(large)–Campus dataset (large)
(3)校园数据集(small)–Campus dataset (small)在这些数据集中 ,点云主题是"points_raw" 。 IMU 主题是"imu_correct" ,它给出了 ROS REP105 (ros的坐标系参考标准)标准中的 IMU 数据 。由于此数据集不需要 IMU 转换,因此需要更改以下配置才能成功运行此数据集:
==>>“config/params.yaml"中的"imuTopic"参数需要设置为"imu_correct ” 。
imuTopic: "imu_raw" # IMU data
==>>"config/params.yaml"中的"extrinsicRot"和"extrinsicRPY"需要设置为单位矩阵(identity matrices) 。 # extrinsicRot: [1, 0, 0, # 0, 1, 0, # 0, 0, 1] # extrinsicRPY: [1, 0, 0, # 0, 1, 0, # 0, 0, 1]3.3 Ouster (OS1-128) 数据集–Rooftop dataset
(1)数据集描述
如果您使用默认设置 ,则无需更改此数据集的外部参数 。请按照下面的 Ouster 说明配置包以使用 Ouster 数据运行 。可以在 YouTube 上找到该数据集的视频:
(2)准备工作
硬件部分:
==>>使用外部 IMU。 LIO-SAM 不适用于 Ouster 激光雷达的内部 6 轴 IMU 。您需要将 9 轴 IMU 连接到激光雷达并执行数据收集(data-gathering) 。
==>>配置驱动程序。将 Ouster 启动文件中的"timestamp_mode"更改为"TIME_FROM_PTP_1588" ,这样您就可以为点云设置 ROS 格式的时间戳 。
Config:
==>>将"params.yaml"中的"sensor"更改为"ouster" 。
==>>根据您的激光雷达更改"params.yaml"中的"N_SCAN"和"Horizon_SCAN",即N_SCAN=128 ,Horizon_SCAN=1024。注:Gen 1 和 Gen 2 Ouster:似乎不同版本的点坐标定义可能不同 。请参阅问题 #94 进行调试 。
(3)自己运行
一个终端:
roslaunch lio_sam run.launch
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
另一个终端:
rosbag play your-bag.bag
运行效果:全局地图:
(4)自我体会
可以清楚看出:数据集具有楼顶和地面两个平面 ,属于是多个平面了
3.4 Livox Horizon数据集–Livox Horizon
(1)说明:
请注意 ,固态激光雷达尚未经过 LIO-SAM 的广泛测试 。这里也使用外部 IMU ,而不是内部 IMU 。对此类激光雷达的支持基于对机械激光雷达代码库的最小更改 。需要使用定制的 livox_ros_driver 来发布 LIO-SAM 可以处理的点云格式 。
(2)配置
请更改以下参数以使 LIO-SAM 与 Livox Horizon 激光雷达一起工作:
sensor: livox N_SCAN: 6 Horizon_SCAN: 4000 edgeFeatureMinValidNum: 1(3)自己运行
全局(点云)地图:
(4)自我体会
环境是不是选的不是很好?点云效果很乱
固态雷达不能和lio-sam很好地适应?3.5 KITTI 数据集–2011_09_30_drive_0028
(1)数据集描述
数据集包括的话题和话题频率如下:
要使用其他 KITTI 原始数据生成更多包 ,您可以使用“config/doc/kitti2bag(之前的使用笔记:https://blog.csdn.net/BIT_HXZ/article/details/124319662) ”中提供的 python 脚本 。
(2)数据集外部参数修改
由于 LIO-SAM 需要高频 IMU 才能正常运行 ,因此我们需要使用 KITTI 原始数据(kitti raw data)进行测试 。一个尚未解决的问题是 IMU 的内在特性是未知的 ,这对 LIO-SAM 的准确性有很大影响 。下载提供的示例数据并在"params.yaml"中进行以下更改:
extrinsicTrans: [-8.086759e-01, 3.195559e-01, -7.997231e-01] extrinsicRot: [9.999976e-01, 7.553071e-04, -2.035826e-03, -7.854027e-04, 9.998898e-01, -1.482298e-02, 2.024406e-03, 1.482454e-02, 9.998881e-01] extrinsicRPY: [9.999976e-01, 7.553071e-04, -2.035826e-03, -7.854027e-04, 9.998898e-01, -1.482298e-02, 2.024406e-03, 1.482454e-02, 9.998881e-01] N_SCAN: 64 downsampleRate: 2 or 4 loopClosureEnableFlag: true or false(3)github参考建图效果
github参考图:
(4)自己运行
一个终端:
roslaunch lio_sam run.launch
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
另一个终端:(注意不要带上 -r 3 ,可能是因为kitti数据量比较大 ,带上的话建图会乱)
rosbag play your-bag.bag(5)自我体会
可以清楚看出:没有滤除动态目标
4 其他说明
4.1 params.yaml
# Export settings savePCD: true savePCDDirectory: "/Downloads/LOAM/"修改输出参数为true会在:/Downloads/LOAM/文件夹下生成pcd文件:
终端输入 pcl_viewer xx.pcd 即可查看
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!