1 ROS tested with Melodic
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
2 gtsam (Georgia Tech Smoothing and Mapping library)
wget -O ~/Downloads/gtsam.zip https://ghproxy.com/https://github.com/borglab/gtsam/archive/4.0.2.zip
cd ~/Downloads/ && unzip gtsam.zip -d ~/Downloads/
cd ~/Downloads/gtsam-4.0.2/
mkdir build && cd build
cmake -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF ..
sudo make install -j8
or
sudo add-apt-repository ppa:borglab/gtsam-release-4.0
sudo apt update
sudo apt install libgtsam-dev libgtsam-unstable-dev
3 下载和编译LIO-SAM
mkdir -p catkin_ws/src
cd ~/catkin_ws/src
git clone https://ghproxy.com/https://github.com/TixiaoShan/LIO-SAM.git
cd ..
catkin_make
Error: GTSAM was built against a different version of Eigen。
这个问题是GTSAM自带的eigen库和之前安装的eigen库的版本不同导致的。
解决办法:
修改gtsam下的CMakeLists.txt文件中的内容,在if(GTSAM_USE_SYSTEM_EIGEN)前面加上set(GTSAM_USE_SYSTEM_EIGEN ON),使得gtsam使用自己安装的eigen而不是它自带的eigen。然后重新编译gtsam,之后再编译LIO-SAM,问题解决。
运行LIO-SAM
roslaunch lio_sam run.launch
rosbag play park.bag
4下载和编译ouster_example
Ouster激光雷达的驱动程序安装过程
https://ouster.atlassian.net/wiki/spaces/SUPPORT/pages/928120883/Ouster+ROS
sudo apt install build-essential cmake libglfw3-dev libglew-dev libeigen3-dev libjsoncpp-dev libtclap-dev
sudo apt install ros-melodic-ros-core ros-melodic-pcl-ros ros-melodic-tf2-geometry-msgs ros-melodic-rviz
cd ~/catkin_ws/src
git clone https://github.com/ouster-lidar/ouster_example.git
cd ..
catkin_make -DCMAKE_BUILD_TYPE=Release
运行ouster
roslaunch ouster_ros ouster.launch
5 报错实例
[lio_sam_imuPreintegration-2] process has died [pid 18568, exit code 127, cmd /home/uav/MappingSrc/devel/lib/lio_sam/lio_sam_imuPreintegration __name:=lio_sam_imuPreintegration __log:=/home/uav/.ros/log/a65082e4-a798-11ec-b3d5-02428e571c30/lio_sam_imuPreintegration-2.log].
实际问题是库文件libmetis.so 的位置。它是一个运行时库,但是当应用程序查找它时,它的位置不在预期的目录中。在通过运行命令sudo make install -j8安装库gtsam 时,文件libmetis.so安装在/usr/local/lib/的默认位置,但是当我们启动 ros 工作区时,运行时库查看位置/opt/ros/melodic/库/
cd /usr/local/lib/
sudo cp libmetis.so /opt/ros/melodic/lib/
再次运行,一切正常。
运行时报错 [lio_sam_mapOptmization-5] process has died [pid 260348, exit code -11
解决: gtsam编译时带上这个参数,cmake -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF ..
- 运行时报错 error while loading shared libraries: libmetis-gtsam.so: cannot open shared object file: No such file or directory
解决: sudo ln -s /usr/local/lib/libmetis-gtsam.so /usr/lib/libmetis-gtsam.so
- 保存地图数据
savePCDDirectory: “/Downloads/LOAM/”
注意!!代码会删除这个路径重新创建,不要用已有的路径哦,最好改一下代码把删除路径的逻辑去掉。
修改_TIMEOUT_SIGINT值,默认15s,改为60s。
sudo gedit /opt/ros/noetic/lib/python3/dist-packages/roslaunch/nodeprocess.py
4. Rviz展示
如果点云的点很大,窗口缩小一下试试。
出现报错 boost was not found需要重新安装boost
CMake Error at /usr/lib/x86_64-linux-gnu/cmake/pcl/PCLConfig.cmake:48 (message):
common is required but boost was not found
Call Stack (most recent call first):
/usr/lib/x86_64-linux-gnu/cmake/pcl/PCLConfig.cmake:687 (pcl_report_not_found)
/usr/lib/x86_64-linux-gnu/cmake/pcl/PCLConfig.cmake:850 (find_external_library)
LIO-SAM/CMakeLists.txt:25 (find_package)
这是因为系统中存在多个boost版本引起冲突造成的
在安装系统时自动在x86_64-linux-gun中安装了boost
在安装ros系统时又在opt/ros/melodic中安装了boost
查看boost版本
dpkg -S /usr/include/boost/version.hpp
常规版操作
在LIO-SAM/CMakeLists.txt文件中加上这一句话,去明确引导到一个系统就可以解决问题:
set(Boost_LIBRARY_DIR /usr/lib/x86_64-linux-gnu/)
然后删除build和devel文件夹,重新编译就没问题了
♥♥♥升级版操作
解决boost多版本问题
默认使用的时1.65版本的boost,删除其余版本删除库和头文件
sudo rm -f /opt/ros/melodic/lib/libboost_*
############################################################
卸载旧版本Boost库并安装新版本
查看本机现boost版本
dpkg -S /usr/include/boost/version.hpp
删除/usr/include/boost文件夹,删除/usr/local/lib中和boost有关的文件
sudo rm -rf /usr/include/boost
sudo rm -rf /usr/lib/x86_64-linux-gnu/libboost*
到此boost 1.65.1就已经成功被卸载了
安装
到boost官网下载1.65.1(或其他版本)的tar.gz文件
https://www.boost.org/users/history/
解压安装
tar -xzvf boost_1_65_0.tar.gz
sudo ./bootstrap.sh
在执行下面的命令,这样头文件就被默认安装在/usr/local/include头文件下,库文件就被默认安装在/usr/local/lib下
sudo ./b2 install
设置环境变量sudo gedit /etc/profile
#在文件末尾添加
export CPLUS_INCLUDE_PATH=/usr/local/include/boost:$CPLUS_INCLUDE_PATH
export LIBRARY_PATH=/usr/local/lib:$LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH