本文详细说明了目前功能最为强大齐全的建图和定位功能包(Lightning-Speed Lidar Localization and Mapping)在ROS noetic上的编译安装步骤,解决了一些可能存在的编译问题。


1  项目说明

该项目包含了在线建图、离线建图和在线重定位的节点,其快速建图功能继承自faster-lio,并加入了一些优化内存处理和占用的工程手段,具体见:https://github.com/gaoxiang12/lightning-lm.git。由于原作者的部署平台是基于Ubuntu22.04 ROS2版本的,作为旧时代的新人,笔者实际使用的平台是ROS1,因此需要进行适当的改动,不过已有相关工作进行了ROS1版本的处理,改动量不算特别多,有余力可以自行修改,这里参考:https://github.com/liefengguo/lightning-lm_ROS.git


2  环境依赖

  • Ubuntu 20.04
  • ROS noetic
  • OpenCV
  • Pangolin
  • PCL
  • PCL_conversions
  • Glog
  • Gflags
  • Yaml-cpp
  • Livox ros driver

下面说明这些主要依赖的安装步骤:

2.1  ROS noetic

ROS的安装参考鱼香ROS的一键安装指令:

wget http://fishros.com/install -O fishros && . fishros

后续按照终端提示,操作安装 ROS noetic desktop full 完整版即可。

2.2  工具库

一系列工具库:OpenCV、PCL、Glog、Gflags、Yaml-cpp等,通过apt install 指令安装:

sudo apt install libopencv-dev libpcl-dev pcl-tools libyaml-cpp-dev libgoogle-glog-dev libgflags-dev ros-noetic-pcl-conversions

2.3  Pangolin

Pangolin-0.9.3 是原生项目使用的可视化工具,建议直接使用,避免后续编译问题!

官方仓库:https://github.com/stevenlovegrove/Pangolin.git,下载0.9.3版本如下:

# 使用国内代理加速
git clone http://gh-proxy.com/https://github.com/stevenlovegrove/Pangolin.git

cd Pangolin/

# 切换到0.9.3标签
git checkout v0.9.3

修改.gitmodules文件,这里同样也是改为国内代理加速如下:

[submodule "scripts/vcpkg"]
	path = scripts/vcpkg
	url = https://gh-proxy.com/https://github.com/microsoft/vcpkg.git
[submodule "components/pango_python/pybind11"]
	path = components/pango_python/pybind11
	url = https://gh-proxy.com/https://github.com/pybind/pybind11.git

然后补全 Pangolin文件夹中缺少的子模块:

git submodule update --init --recursive

这里,Pangolin安装还缺少一个Catch2的工具包,直接源码下载编译安装:

git clone https://gh-proxy.com/https://github.com/catchorg/Catch2.git

cd Catch2/

# 编译安装
cmake -B build -S . -DBUILD_TESTING=OFF

sudo cmake --build build --target install

Catch2安装完成后,需要继续修改~/Pangolin/scripts/install_prerequisites.sh 的124行,将其修改为:PKGS_RECOMMENDED+=(libjpeg-dev libpng-dev)  如下:

关闭 Pangolin 编译的 -Werror选项

修改 ~/Pangolin/CMakeLists.txt 中89行的 add_compile_options(-Wall -Wextra -Werror) 为:add_compile_options(-Wall -Wextra)

最后,编译Pangolin,执行以下指令,完成Pangolin安装!

cd Pangolin/

# 安装pangolin的依赖
./scripts/install_prerequisites.sh recommended

# 编译安装
mkdir build && cd build
cmake .. 
make -j8
sudo make install

2.4  Livox ros driver

该项目支持Livox系列雷达,需要编译安装Livox SDK和对应的Livox ros driver

git clone https://gh-proxy.com/https://github.com/Livox-SDK/Livox-SDK.git

# 编译安装Livox SDK
cd Livox-SDK
cd build && cmake ..
make -j4
sudo make install

创建ROS工作空间,命名为lightnlm_ws:

mkdir -p ~/lightnlm_ws/src
cd ~/lightnlm_ws/src && catkin_init_workspace

# 下载livox ros driver
git clone https://gh-proxy.com/https://github.com/Livox-SDK/livox_ros_driver.git

# 编译 Livox ros driver
catkin_make -DCATKIN_WHITELIST_PACKAGES="livox_ros_driver"

3  Lightning-LM

3.1  编译安装

经过上述的一系列操作,终于进入了编译安装 lightning-lm 的步骤。

cd ~/lightnlm_ws/src

# 下载ROS1版本的lightning-lm
git clone https://gh-proxy.com/https://github.com/liefengguo/lightning-lm_ROS.git

修改~/lightning-lm_ROS/CMakeLists.txt 为如下内容:

cmake_minimum_required(VERSION 3.5)
project(lightning)

# =========================================================
# build type
# =========================================================
set(CMAKE_BUILD_TYPE Release)

if(NOT CMAKE_CXX_STANDARD)
    set(CMAKE_CXX_STANDARD 17)
endif()

add_definitions(-DPCL_NO_PRECOMPILE)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -fopenmp -g")
set(CMAKE_CXX_FLAGS_RELEASE "-O2 -fopenmp -g -ggdb")
set(CMAKE_CXX_FLAGS_DEBUG "-ggdb -g -fopenmp")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -g")

if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
    add_compile_options(-Wall -Wextra -Wpedantic)
endif()

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)

# =========================================================
#  catkin
# =========================================================
find_package(catkin REQUIRED COMPONENTS
    roscpp
    std_msgs
    geometry_msgs
    sensor_msgs
    nav_msgs
    std_srvs
    tf2
    tf2_ros
    message_filters
    pcl_ros
    pcl_conversions
    message_generation
    livox_ros_driver
)

# =========================================================
#  ROS message / service
# =========================================================
add_service_files(
  DIRECTORY srv
  FILES
  LocCmd.srv
  SaveMap.srv
)

generate_messages(
  DEPENDENCIES
  std_msgs
  geometry_msgs
  sensor_msgs
  nav_msgs
)

catkin_package(
  CATKIN_DEPENDS
  roscpp
  std_msgs
  geometry_msgs
  sensor_msgs
  nav_msgs
  std_srvs
  tf2
  tf2_ros
  pcl_conversions
  message_filters
  livox_ros_driver
  message_runtime
)

# =========================================================
#  第三方库
# =========================================================
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
include(cmake/packages.cmake)

# =========================================================
# include dirs
# =========================================================
include_directories(
    ${catkin_INCLUDE_DIRS}
)

# =========================================================
# install
# =========================================================
install(DIRECTORY config
        DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION})

# =========================================================
# source
# =========================================================
add_subdirectory(src)

然后,进行编译安装:

cd ~/lightnlm_ws

# catkin_make 
catkin_make -DCATKIN_WHITELIST_PACKAGES="lightning"

3.2  运行测试

这里仅初步测试建图功能,建图模式:

# 启动在线建图节点
roslaunch lightning run_online.launch 

# 播放ROS数据包
rosbag play test.bag 

运行可视化界面如下:

建图完毕后,保存地图指令:

rosservice call /lightning/save_map "{map_id: 01}"

地图数据保存在系统主目录的.ros/data/01/文件夹,如下所示:


4  小结

Lightning-LM是高性能激光雷达建图定位框架,原生支持ROS2。本文介绍其在ROS Noetic上的适配安装:配置ROS Noetic、Pangolin、Livox等依赖后,使用ROS1分支代码,修改CMakeLists.txt适配catkin构建,编译即可运行在线建图与重定位功能。

长文原创不易,还请点个赞!

Logo

立足具身智能前沿赛道,致力于搭建全球化、开源化、全栈式技术交流与实践共创平台。

更多推荐