使用ros2跑mid360的fastlio2算法详细教程
1、ROS2-Humble系统要求使用Ubuntu 22.04版本,所以需要先安装虚拟机。ubuntu镜像可以从这里下载:ubuntu-releases-22.04安装包下载_开源镜像站-阿里云
2、安装完Ubuntu后进入系统,按照ROS2的官方文档安装Humble版本:Ubuntu (deb packages) — ROS 2 Documentation: Humble documentation
3、编译并安装Livox-mid360的驱动库:Livox-SDK/Livox-SDK2: Drivers for receiving LiDAR data and controlling lidar, support Lidar HAP and Mid-360.
第一步:
- 先安装CMAKE库
$ sudo apt install cmake - 然后
$ gcc -v确认一下gcc版本大于4.8.1 - 执行如下命令克隆、编译、安装库,安装完成后 .a和.so库在
/usr/local/lib目录下,头文件在/usr/local/include目录下。
$ git clone https://github.com/Livox-SDK/Livox-SDK2.git $ cd ./Livox-SDK2/ $ mkdir build $ cd build $ cmake .. && make -j $ sudo make installcmake .. && make -j:这一步如果报错
CMake Error at CMakeLists.txt:1 (cmake_minimum_required): Compatibility with CMake < 3.5 has been removed from CMake. Update the VERSION argument <min> value. Or, use the <min>...<max> syntax to tell CMake that the project requires at least <min> but has been updated to work with policies introduced by <max> or earlier. Or, add -DCMAKE_POLICY_VERSION_MINIMUM=3.5 to try configuring anyway. 解决办法:cmake -DCMAKE_POLICY_VERSION_MINIMUM=3.5 .. && make -j
运行上面的指令,因为cmake版本过高
第二步
安装ROS2系统的编译工具colcon$ sudo apt install python3-colcon-common-extensions
第三步
新建ros_ws文件夹作为ROS2的工作目录,并在目录下新建src文件存放套件源码
$ mkdir -p ros_ws/src/ $ cd ros_ws/src/4.克隆livox_ros_driver2 到src目录
git clone https://github.com/Livox-SDK/livox_ros_driver2.git5编译驱动
source /opt/ros/humble/setup.sh ./build.sh humble~/mid360/ros_ws/src/livox_ros_driver2一般在这个目录下可以找到build.sh
6.修改ros_ws/install/livox_ros_driver2/share/livox_ros_driver2/config/MID360_config.json中的本机ip和设备ip,然后执行下命令运行测试程序,成功后会在右侧显示雷达扫描的点云图。!!!!!!!!非常重要,参考下图的来修改
{ "lidar_summary_info" : { "lidar_type": 8 }, "MID360": { "lidar_net_info" : { "cmd_data_port": 56100, "push_msg_port": 56200, "point_data_port": 56300, "imu_data_port": 56400, "log_data_port": 56500 }, "host_net_info" : { "cmd_data_ip" : "192.168.1.50",//全部改成这个 "cmd_data_port": 56101, "push_msg_ip": "192.168.1.50", "push_msg_port": 56201, "point_data_ip": "192.168.1.50", "point_data_port": 56301, "imu_data_ip" : "192.168.1.50", "imu_data_port": 56401, "log_data_ip" : "", "log_data_port": 56501 } }, "lidar_configs" : [ { "ip" : "192.168.1.188",//最后俩位查看雷达的sn码来修改 "pcl_data_type" : 1, "pattern_mode" : 0, "extrinsic_parameter" : { "roll": 0.0, "pitch": 0.0, "yaw": 0.0, "x": 0, "y": 0, "z": 0 } } ] } source ../../install/setup.sh ros2 launch livox_ros_driver2 rviz_MID360_launch.py运行之后就可以得到点云图
- 将soruce命令加入到用户目录的.bashrc文件末尾,这样就不用每次运行ros launch都要source了
source ~/ros_ws/install/setup.bash
跑fastlio2算法包
cd ros_ws/src # cd into a ros2 workspace folder git clone https://github.com/Ericsii/FAST_LIO.git --recursive cd .. rosdep install --from-paths src --ignore-src -y colcon build --symlink-install //务必使用这个来编译,其他指令很容易报错 . ./install/setup.bash # use setup.zsh if use zsh注意在 colcon build --symlink-install这个步骤,可能会产生一个编译错误
sky@sky:~/mid360/ros_ws$ colcon build --symlink-install Starting >>> livox_ros_driver2 --- stderr: livox_ros_driver2 CMake Warning (dev) at /usr/lib/x86_64-linux-gnu/cmake/pcl/PCLConfig.cmake:146 (find_package): Policy CMP0144 is not set: find_package uses upper-case <PACKAGENAME>_ROOT variables. Run "cmake --help-policy CMP0144" for policy details. Use the cmake_policy command to set the policy and suppress this warning. CMake variable EIGEN_ROOT is set to: /usr/include/eigen3 For compatibility, find_package is ignoring the variable, but code in a .cmake module might still use it. Call Stack (most recent call first): /usr/lib/x86_64-linux-gnu/cmake/pcl/PCLConfig.cmake:299 (find_eigen) /usr/lib/x86_64-linux-gnu/cmake/pcl/PCLConfig.cmake:543 (find_external_library) /opt/ros/humble/share/pcl_conversions/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package) /opt/ros/humble/share/pcl_conversions/cmake/pcl_conversionsConfig.cmake:41 (include) /opt/ros/humble/share/ament_cmake_auto/cmake/ament_auto_find_build_dependencies.cmake:67 (find_package) CMakeLists.txt:225 (ament_auto_find_build_dependencies) This warning is for project developers. Use -Wno-dev to suppress it. CMake Warning (dev) at /usr/lib/x86_64-linux-gnu/cmake/pcl/PCLConfig.cmake:128 (find_package): Policy CMP0167 is not set: The FindBoost module is removed. Run "cmake --help-policy CMP0167" for policy details. Use the cmake_policy command to set the policy and suppress this warning. Call Stack (most recent call first): /usr/lib/x86_64-linux-gnu/cmake/pcl/PCLConfig.cmake:297 (find_boost) /usr/lib/x86_64-linux-gnu/cmake/pcl/PCLConfig.cmake:543 (find_external_library) /opt/ros/humble/share/pcl_conversions/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package) /opt/ros/humble/share/pcl_conversions/cmake/pcl_conversionsConfig.cmake:41 (include) /opt/ros/humble/share/ament_cmake_auto/cmake/ament_auto_find_build_dependencies.cmake:67 (find_package) CMakeLists.txt:225 (ament_auto_find_build_dependencies) This warning is for project developers. Use -Wno-dev to suppress it. CMake Warning (dev) at /usr/lib/x86_64-linux-gnu/cmake/pcl/Modules/FindFLANN.cmake:44 (find_package): Policy CMP0144 is not set: find_package uses upper-case <PACKAGENAME>_ROOT variables. Run "cmake --help-policy CMP0144" for policy details. Use the cmake_policy command to set the policy and suppress this warning. CMake variable FLANN_ROOT is set to: /usr For compatibility, find_package is ignoring the variable, but code in a .cmake module might still use it. Call Stack (most recent call first): /usr/lib/x86_64-linux-gnu/cmake/pcl/PCLConfig.cmake:256 (find_package) /usr/lib/x86_64-linux-gnu/cmake/pcl/PCLConfig.cmake:301 (find_flann) /usr/lib/x86_64-linux-gnu/cmake/pcl/PCLConfig.cmake:543 (find_external_library) /opt/ros/humble/share/pcl_conversions/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package) /opt/ros/humble/share/pcl_conversions/cmake/pcl_conversionsConfig.cmake:41 (include) /opt/ros/humble/share/ament_cmake_auto/cmake/ament_auto_find_build_dependencies.cmake:67 (find_package) CMakeLists.txt:225 (ament_auto_find_build_dependencies) This warning is for project developers. Use -Wno-dev to suppress it. CMake Warning (dev) at /usr/lib/x86_64-linux-gnu/cmake/pcl/PCLConfig.cmake:128 (find_package): Policy CMP0167 is not set: The FindBoost module is removed. Run "cmake --help-policy CMP0167" for policy details. Use the cmake_policy command to set the policy and suppress this warning. Call Stack (most recent call first): /usr/lib/x86_64-linux-gnu/cmake/pcl/PCLConfig.cmake:297 (find_boost) /usr/lib/x86_64-linux-gnu/cmake/pcl/PCLConfig.cmake:543 (find_external_library) /opt/ros/humble/share/pcl_conversions/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package) /opt/ros/humble/share/pcl_conversions/cmake/pcl_conversionsConfig.cmake:41 (include) /opt/ros/humble/share/ament_cmake_auto/cmake/ament_auto_find_build_dependencies.cmake:67 (find_package) CMakeLists.txt:225 (ament_auto_find_build_dependencies) This warning is for project developers. Use -Wno-dev to suppress it. /usr/include/apr-1.0 apr-1 CMake Warning (dev) at /opt/ros/humble/share/rosidl_generator_py/cmake/rosidl_generator_py_generate_interfaces.cmake:20 (find_package): Policy CMP0148 is not set: The FindPythonInterp and FindPythonLibs modules are removed. Run "cmake --help-policy CMP0148" for policy details. Use the cmake_policy command to set the policy and suppress this warning. Call Stack (most recent call first): /opt/ros/humble/share/ament_cmake_core/cmake/core/ament_execute_extensions.cmake:48 (include) /opt/ros/humble/share/rosidl_cmake/cmake/rosidl_generate_interfaces.cmake:286 (ament_execute_extensions) CMakeLists.txt:241 (rosidl_generate_interfaces) This warning is for project developers. Use -Wno-dev to suppress it. CMake Warning (dev) at /opt/ros/humble/share/python_cmake_module/cmake/Modules/FindPythonExtra.cmake:52 (find_package): Policy CMP0148 is not set: The FindPythonInterp and FindPythonLibs modules are removed. Run "cmake --help-policy CMP0148" for policy details. Use the cmake_policy command to set the policy and suppress this warning. Call Stack (most recent call first): /opt/ros/humble/share/rosidl_generator_py/cmake/rosidl_generator_py_generate_interfaces.cmake:23 (find_package) /opt/ros/humble/share/ament_cmake_core/cmake/core/ament_execute_extensions.cmake:48 (include) /opt/ros/humble/share/rosidl_cmake/cmake/rosidl_generate_interfaces.cmake:286 (ament_execute_extensions) CMakeLists.txt:241 (rosidl_generate_interfaces) This warning is for project developers. Use -Wno-dev to suppress it. CMake Warning (dev) at /opt/ros/humble/share/python_cmake_module/cmake/Modules/FindPythonExtra.cmake:140 (find_package): Policy CMP0148 is not set: The FindPythonInterp and FindPythonLibs modules are removed. Run "cmake --help-policy CMP0148" for policy details. Use the cmake_policy command to set the policy and suppress this warning. Call Stack (most recent call first): /opt/ros/humble/share/rosidl_generator_py/cmake/rosidl_generator_py_generate_interfaces.cmake:23 (find_package) /opt/ros/humble/share/ament_cmake_core/cmake/core/ament_execute_extensions.cmake:48 (include) /opt/ros/humble/share/rosidl_cmake/cmake/rosidl_generate_interfaces.cmake:286 (ament_execute_extensions) CMakeLists.txt:241 (rosidl_generate_interfaces) This warning is for project developers. Use -Wno-dev to suppress it. failed to create symbolic link '/home/sky/mid360/ros_ws/build/livox_ros_driver2/ament_cmake_python/livox_ros_driver2/livox_ros_driver2' because existing path cannot be removed: Is a directory gmake[2]: *** [CMakeFiles/ament_cmake_python_symlink_livox_ros_driver2.dir/build.make:70:CMakeFiles/ament_cmake_python_symlink_livox_ros_driver2] 错误 1 gmake[1]: *** [CMakeFiles/Makefile2:520:CMakeFiles/ament_cmake_python_symlink_livox_ros_driver2.dir/all] 错误 2 gmake[1]: *** 正在等待未完成的任务.... gmake: *** [Makefile:146:all] 错误 2 --- Failed <<< livox_ros_driver2 [2.74s, exited with code 2] Summary: 0 packages finished [2.91s] 1 package failed: livox_ros_driver2 1 package had stderr output: livox_ros_driver2 1 package not processed 解决办法:这意味着 CMake 尝试创建一个符号链接,但目标路径已经存在并且是一个目录。你可以手动删除它:
rm -rf /home/sky/mid360/ros_ws/build/livox_ros_driver2/ament_cmake_python/livox_ros_driver2/livox_ros_driver2
把这个文件下的这个包删除就行
然后就可以运行fastlio2的算法包了
###下面三个是使用ros2启动mid360驱动包的,在同一个终端按顺序启动即可 cd ~/mid360/ros_ws source ~/mid360/ros_ws/install/setup.bash ros2 launch livox_ros_driver2 rviz_MID360_launch.py ###下面步骤是启动fastlio2算法包的(重新打开一个终端) cd ros_ws/src source ~/mid360/ros_ws/install/setup.bash ros2 launch fast_lio mapping.launch.py 其他报错:运行雷达驱动包有点云数据,但是fastlio2算法包运行之后,显示黑屏,并且没有数据显示,这个问题是运行fastliio算法包崩溃了,大概率是包的冲突,
sky@sky:~/mid360/ros_ws$ source install/setup.bash sky@sky:~/mid360/ros_ws$ ros2 launch fast_lio mapping.launch.py [INFO] [launch]: All log files can be found below /home/sky/.ros/log/2025-08-18-21-27-52-585647-sky-144534 [INFO] [launch]: Default logging verbosity is set to INFO [INFO] [fastlio_mapping-1]: process started with pid [144535] [INFO] [rviz2-2]: process started with pid [144537] [rviz2-2] Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway. [fastlio_mapping-1] /home/sky/mid360/ros_ws/install/fast_lio/lib/fast_lio/fastlio_mapping: symbol lookup error: /lib/x86_64-linux-gnu/libpcl_io.so.1.12: undefined symbol: libusb_set_option [ERROR] [fastlio_mapping-1]: process has died [pid 144535, exit code 127, cmd '/home/sky/mid360/ros_ws/install/fast_lio/lib/fast_lio/fastlio_mapping --ros-args --params-file /home/sky/mid360/ros_ws/install/fast_lio/share/fast_lio/config/mid360.yaml --params-file /tmp/launch_params_v46jnbq_']. [rviz2-2] [INFO] [1755523673.190659466] [rviz2]: Stereo is NOT SUPPORTED [rviz2-2] [INFO] [1755523673.190715080] [rviz2]: OpenGl version: 4.6 (GLSL 4.6) [rviz2-2] [INFO] [1755523673.201940923] [rviz2]: Stereo is NOT SUPPORTE解决办法:
1. 修复 FAST-LIO 的库依赖问题 错误 undefined symbol: libusb_set_option 表明 libpcl_io 和 libusb 版本不兼容。尝试以下步骤: 方法 1:降级 libpcl bash sudo apt remove libpcl-dev sudo apt install libpcl-dev=1.12.1+dfsg-5ubuntu0.1 # Ubuntu 22.04 默认版本 sudo ldconfig 方法 2:更新 libusb bash sudo apt install libusb-1.0-0-dev sudo apt upgrade libusb-1.0-0 方法 3:手动编译 PCL 如果问题仍然存在,从源码编译 PCL: bash git clone https://github.com/PointCloudLibrary/pcl.git cd pcl && mkdir build && cd build cmake .. -DCMAKE_BUILD_TYPE=Release make -j$(nproc) sudo make install 报错:
sky@sky:~/mid360/ros_ws$ ros2 launch fast_lio mapping.launch.py [INFO] [launch]: All log files can be found below /home/sky/.ros/log/2025-08-19-01-18-35-837053-sky-190899 [INFO] [launch]: Default logging verbosity is set to INFO [INFO] [fastlio_mapping-1]: process started with pid [190901] [INFO] [rviz2-2]: process started with pid [190903] [rviz2-2] Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway. [fastlio_mapping-1] [INFO] [1755537515.950811500] [laser_mapping]: p_pre->lidar_type 2 [fastlio_mapping-1] Multi thread started [fastlio_mapping-1] ~~~~/home/sky/mid360/ros_ws/src/FAST_LIO/ file opened [fastlio_mapping-1] [INFO] [1755537515.955457193] [laser_mapping]: Node init finished. [fastlio_mapping-1] Failed to find match for field 'time'. [fastlio_mapping-1] Failed to find match for field 'ring'. [fastlio_mapping-1] Failed to find match for field 'time'. [fastlio_mapping-1] Failed to find match for field 'ring'. [rviz2-2] [INFO] [1755537516.123347654] [rviz2]: Stereo is NOT SUPPORTED [rviz2-2] [INFO] [1755537516.123411995] [rviz2]: OpenGl version: 4.6 (GLSL 4.6) [rviz2-2] [INFO] [1755537516.135036306] [rviz2]: Stereo is NOT SUPPORTED [fastlio_mapping-1] IMU Initial Done [fastlio_mapping-1] [WARN] [1755537516.165249588] [laser_mapping]: No point, skip this scan! [fastlio_mapping-1] [fastlio_mapping-1] Failed to find match for field 'time'. [fastlio_mapping-1] Failed to find match for field 'ring'. [fastlio_mapping-1] [INFO] [1755537516.266224533] [laser_mapping]: Initialize the map kdtree [fastlio_mapping-1] Failed to find match for field 'time'. [fastlio_mapping-1] Failed to find match for field 'ring'. 原因:你贴出的代码正是 FAST-LIO 的 preprocess.cpp。
问题的根源是:当 lidar_type = 2(PointCloud2)时,默认的 default_handler 不会给点云里的每个点填充 curvature(即时间信息),于是 Fast-LIO 直接丢弃整帧,rviz 黑屏。
解决方法:
-------------------------------------------------- 1 分钟补丁(改 `mid360_handler()`) 打开文件 ```bash gedit ~/mid360/ros_ws/src/FAST_LIO/src/preprocess.cpp ``` 找到 `mid360_handler()` 函数,把下面 3 行替换进去: - 找到 ```cpp added_pt.curvature = 0.; ``` 替换为 ```cpp /* 用整帧 header.stamp 作为统一时间戳 (ms) */ added_pt.curvature = rclcpp::Time(msg->header.stamp).seconds() * 1000.0; ``` (其余代码不动,只需改这一处。) 保存后: ```bash cd ~/mid360/ros_ws colcon build --packages-select fast_lio source install/setup.bash ros2 launch fast_lio mapping.launch.py ``` 日志立即不再出现 `Failed to find match for field 'time'`,`/cloud_registered` 10 Hz 正常输出,rviz 即可看到实时点云。