赞
踩
笔者在学习LIO_SAM时踩了不少坑,文中参考了很多大佬的文章,我只是个搬运工。 有疑问可以随时联系我,欢迎交流。
velodyne 16线 雷达
wheeletc N100 9轴imu
Ubuntu18.04,使用ros melodic
mkdir catkin_ws
cd catkin_ws
mkdir src
catkin_make
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-publisher
安装gtsam4.0.2
git clone https://ghproxy.com/https://github.com/borglab/gtsam/archive/4.0.2.zip
mkdir build
cd build
cmake ..
sudo make
make install
g++: internal compiler error: Killed (program cc1plus)
解决办法:参考这个博客内容
编译lio-sam
//将文件克隆到工作空间下的src文件夹中
git clone https://ghproxy.com/https://github.com/TixiaoShan/LIO-SAM.git
cd ..
catkin_make
标定产生的误差会对结果造成很大的影响,(我在这里踩坑不少)所以我这里把雷达和imu的位置放在一起
这样就不需要在参数文件里修改。注意雷达的坐标系和imu的坐标系一致。
由于之前安装的各功能包时都在工作空间下进行的,故工作空间下src文件夹中应该会有激光雷达、IMU和LIO_SAM三个功能包。我们打开LIO_SAM文件夹中的/config/下的params.yaml文件,修改参数,原文件建议备份一份。
我将pointcloudTopic :改为velodyne_points
imutopic : imu
这里需要根据你的雷达和imu的参数来修改
在这里需要注意,前期在我们的实验平台还没搭建完成时,雷达固定架还没有装好,在等待的这段时间我没有进行标定就进行了程序的运行,遇到了地图漂移和旋转等问题,没有进行进一步测试,原因可能是因为没标定也可恶能是因为在实验室狭窄环境和复杂电磁环境的多种因素。所以在此现将准备工作做好在进行下面的工作。
由于雷达和imu的位置放的很近,我没有标定外参,内参使用的是参考博主
那么文件中平移矩阵就不需要修改
放上博主的参数文件
lio_sam: # Topics pointCloudTopic: "velodyne_points" # Point cloud data(替换成自己的点云话题) imuTopic: "imu" # IMU data(替换自己的imu话题) odomTopic: "odometry/imu" # IMU pre-preintegration odometry, same frequency as IMU gpsTopic: "odometry/gpsz" # GPS odometry topic from navsat, see(没有GPS就不需要更改) module_navsat.launch file # Frames lidarFrame: "base_link" baselinkFrame: "base_link" odometryFrame: "odom" mapFrame: "map" # GPS Settings useImuHeadingInitialization: false # if using GPS data, set to "true" useGpsElevation: false # if GPS elevation is bad, set to "false" gpsCovThreshold: 2.0 # m^2, threshold for using GPS data poseCovThreshold: 25.0 # m^2, threshold for using GPS data # Export settings savePCD: true # https://github.com/TixiaoShan/LIO-SAM/issues/3 savePCDDirectory: "/rosbag/pcd" # in your home folder, starts and ends with "/". Warning: the code deletes "LOAM" folder then recreates it. See "mapOptimization" for implementation # Sensor Settings sensor: velodyne # lidar sensor type, 'velodyne' or 'ouster' or 'livox' N_SCAN: 16 # number of lidar channel (i.e., Velodyne/Ouster: 16, 32, 64, 128, Livox Horizon: 6) Horizon_SCAN: 1800 # lidar horizontal resolution (Velodyne:1800, Ouster:512,1024,2048, Livox Horizon: 4000) downsampleRate: 1 # default: 1. Downsample your data if too many points. i.e., 16 = 64 / 4, 16 = 16 / 1 lidarMinRange: 1.0 # default: 1.0, minimum lidar range to be used lidarMaxRange: 1000.0 # default: 1000.0, maximum lidar range to be used # IMU Settings 对应imu的内参 我这里是直接用的商家提供的 imuAccNoise: 1.0909715156015328e-02 imuGyrNoise: 8.0226069504443656e-04 imuAccBiasN: 4.0347767978459928e-04 imuGyrBiasN: 4.4153147263889589e-05 imuGravity: 9.80511 imuRPYWeight: 0.01 # Extrinsics: T_lb (lidar -> imu) extrinsicTrans: [0.0, 0.0, 0.0] # 平移矩阵 我这里直接设置为0 因为我imu和雷达靠的很近 在此不做赘述了 上面解释过了。 extrinsicRot: [1, 0, 0, # 旋转矩阵 我这里直接是单位矩阵,可以用上面标定的外参对比一下 0, 1, 0, 0, 0, 1] extrinsicRPY: [1, 0, 0, 0, 1, 0, 0, 0, 1] # LOAM feature threshold edgeThreshold: 1.0 surfThreshold: 0.1 edgeFeatureMinValidNum: 10 surfFeatureMinValidNum: 100
工作完成,分别启动IMU节点、雷达节点、lioslam节点。
//启动imu
roslaunch fdilink_ahrs ahrs_data.launch
//启动雷达
roslaunch velodyne_pointcloud VLP16_points.launch
//启动slam
roslaunch lio_sam run.launch
//顺便录制包,这里只用录制/imu /velodyne_pointclouds 就行
此时程序应该是可以正常启动运行了,建议在室外有足够空间位置的地方进行测试。
贴上一张我运行成功的图
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。