本文记录在 Jetson Nano Super / Jetson Orin Nano Super 平台上基于 Ubuntu 22.04 和 ROS2 Humble 部署 Livox MID-360、FAST-LIO 和 EGO-Planner 的实机流程。需要先明确技术边界FAST-LIO 负责实时定位与建图EGO-Planner 负责基于当前点云和里程计进行局部轨迹规划。也就是说本文标题里的“建图”核心由 FAST-LIO 完成EGO-Planner 主要消费 FAST-LIO 的位姿和点云结果。1. 实验效果MID-360 通过以太网接入 JetsonROS2 驱动发布雷达点云和 IMUFAST-LIO 实时输出里程计和点云地图EGO-Planner 根据局部点云生成下一步轨迹或位置指令。实机测试平台如下左侧为 MID-360 与载具/支架右侧 Jetson/显示端运行 ROS2、FAST-LIO、EGO-Planner 和 RViz2。2. 系统架构ROS2 下的数据流如下Livox MID-360 | | UDP Ethernet v livox_ros_driver2 | | /livox/lidar livox_ros_driver2/msg/CustomMsg 或 PointCloud2 | /livox/imu sensor_msgs/msg/Imu v FAST-LIO ROS2 | | /Odometry 或 /odom | /cloud_registered | /path | /map_save service v EGO-Planner ROS2 适配版 | | /planning/pos_cmd | /planning/bspline v 控制器 / 飞控 / RViz2 可视化各模块职责模块作用关键输出livox_ros_driver2接收 MID-360 原始 UDP 数据并发布 ROS2 话题/livox/lidar、/livox/imuFAST-LIO ROS2LiDAR-IMU 紧耦合里程计和增量点云地图/Odometry、/cloud_registeredEGO-Planner根据里程计、点云和目标点生成局部轨迹/planning/pos_cmd、轨迹话题RViz2点云、TF、路径和轨迹可视化三维调试界面3. 硬件与软件环境本文环境计算平台Jetson Nano Super / Jetson Orin Nano Super 系统Ubuntu 22.04 ROSROS2 Humble 雷达Livox MID-360 驱动Livox-SDK2 livox_ros_driver2 建图FAST-LIO ROS2 适配版 规划EGO-Planner ROS2 适配版或自移植版本如果使用的是老款 Jetson Nano 4GB需要注意它官方 JetPack 长期停留在较老 Ubuntu 版本跑 Ubuntu 22.04 ROS2 Humble 通常属于非官方系统或社区镜像性能和依赖兼容性都要额外验证。本文更适合 Jetson Orin Nano Super 这类 Ubuntu 22.04 / JetPack 6.x 平台。4. Jetson 性能准备Jetson 上跑实时点云算法时建议先进入高性能模式sudonvpmodel-m0sudojetson_clocks安装基础依赖sudoaptupdatesudoaptinstall-y\build-essential cmakegitwgetcurl\python3-colcon-common-extensions python3-rosdep python3-vcstool\libpcl-dev libeigen3-dev libboost-all-dev libgoogle-glog-dev\ros-humble-rviz2 ros-humble-pcl-ros ros-humble-tf2-eigen\ros-humble-rmw-cyclonedds-cpp初始化rosdepsudorosdep init rosdep update建议使用 CycloneDDSJetson 上在多节点点云通信时通常比默认 Fast DDS 更稳定echosource /opt/ros/humble/setup.bash~/.bashrcechoexport RMW_IMPLEMENTATIONrmw_cyclonedds_cpp~/.bashrcsource~/.bashrc如果编译时内存不足可以临时增加 swap。Orin Nano 8GB 一般够用但同时编译多个大包时仍建议降低并行度colcon build --symlink-install --parallel-workers25. 配置 MID-360 网络MID-360 使用网口通信需要确保 Jetson 和雷达在同一网段。常见配置是把 Jetson 有线网卡设置成类似IP: 192.168.1.50 Netmask: 255.255.255.0 Gateway: 留空检查网卡ipaddrping192.168.1.1实际雷达 IP 以 Livox Viewer 或雷达配置文件为准。后面livox_ros_driver2/config/MID360_config.json里的host_net_info也要改成 Jetson 的有线网卡 IP。6. 安装 Livox-SDK2 与 livox_ros_driver2先安装 Livox-SDK2mkdir-p~/livox_ws/srccd~/livox_ws/srcgitclone https://github.com/Livox-SDK/Livox-SDK2.gitcdLivox-SDK2mkdirbuildcdbuild cmake..-DCMAKE_BUILD_TYPEReleasemake-j2sudomakeinstall再编译 ROS2 驱动cd~/livox_ws/srcgitclone https://github.com/Livox-SDK/livox_ros_driver2.gitcd~/livox_ws/src/livox_ros_driver2source/opt/ros/humble/setup.bash ./build.sh humbleROS2 Humble 下启动 MID-360cd~/livox_wssourceinstall/setup.bash ros2 launch livox_ros_driver2 msg_MID360_launch.py检查话题ros2 topic list|greplivox ros2 topic hz /livox/lidar ros2 topicecho/livox/imu--once如果只想看 RViz2 点云ros2 launch livox_ros_driver2 rviz_MID360_launch.py注意FAST-LIO 对每个点的时间戳很敏感。MID-360 接 FAST-LIO 时优先使用msg_MID360_launch.py发布的 Livox 自定义消息因为它包含点级时间信息利于运动畸变补偿。7. 编译 FAST-LIO ROS2ROS2 下建议使用已经适配 ROS2 Humble 的 FAST-LIO 版本例如FAST_LIO_ROS2。编译前要先 source Livox 驱动因为 FAST-LIO 需要livox_ros_driver2/msg/CustomMsg。mkdir-p~/fastlio2_ws/srccd~/fastlio2_ws/srcgitclone https://github.com/Ericsii/FAST_LIO_ROS2.git--recursivecd~/fastlio2_wssource/opt/ros/humble/setup.bashsource~/livox_ws/install/setup.bash rosdepinstall--from-paths src --ignore-src-ycolcon build --symlink-install --parallel-workers2sourceinstall/setup.bash针对 MID-360需要在 FAST-LIO 的 yaml 中确认以下参数common:lid_topic:/livox/lidarimu_topic:/livox/imutime_sync_en:falsemapping:extrinsic_est_en:falseextrinsic_T:[0.0,0.0,0.0]extrinsic_R:[1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0]extrinsic_T和extrinsic_R必须根据 MID-360 与机体/IMU 的实际安装关系填写。如果使用 MID-360 内置 IMU仍要确认代码中外参定义方向避免 LiDAR 到 IMU 和 IMU 到 LiDAR 写反。启动 FAST-LIOcd~/fastlio2_wssource/opt/ros/humble/setup.bashsource~/livox_ws/install/setup.bashsourceinstall/setup.bash ros2 launch fast_lio mapping.launch.py config_file:mid360.yaml如果仓库没有mid360.yaml可以从avia.yaml或其他 Livox 配置复制一份重点修改lid_topic imu_topic time_sync_en extrinsic_T extrinsic_R filter_size_surf pcd_save检查 FAST-LIO 输出ros2 topic list|grep-EOdom|odom|cloud|pathros2 topic hz /cloud_registered ros2 topicecho/Odometry--onceRViz2 中建议添加Fixed Frame: camera_init 或 map按实际 TF 为准 PointCloud2: /cloud_registered Odometry: /Odometry Path: /path TF8. 接入 EGO-Planner ROS2这里需要特别说明ZJU-FAST-Lab 原版 EGO-Planner 主要是 ROS1/catkin 工程ROS2 Humble 下通常需要使用社区 ROS2 移植版或者自行把消息、launch、参数和 CMake 迁移到ament_cmake。接入原则不变EGO-Planner 只需要拿到三个核心输入1. 里程计nav_msgs/msg/Odometry 2. 局部点云sensor_msgs/msg/PointCloud2 3. 目标点geometry_msgs/msg/PoseStamped和 FAST-LIO 对接时推荐映射如下odom_topic - /Odometry cloud_topic - /cloud_registered goal_topic - /goal_pose 或 /move_base_simple/goalROS2 launch 中可以写成类似Node(packageego_planner,executableego_planner_node,nameego_planner_node,outputscreen,parameters[{odom_topic:/Odometry,cloud_topic:/cloud_registered,goal_topic:/goal_pose,map_frame:camera_init}])如果你的 EGO-Planner ROS2 版本仍使用私有话题命名检查并 remapros2nodeinfo /ego_planner_node ros2 topic list常见 remap 关系/grid_map/odom - /Odometry /grid_map/cloud - /cloud_registered /waypoint - /goal_pose启动后检查规划输出ros2 topic list|grepplanning ros2 topicecho/planning/pos_cmd--once9. 推荐启动顺序9.1 启动 MID-360 驱动cd~/livox_wssource/opt/ros/humble/setup.bashsourceinstall/setup.bash ros2 launch livox_ros_driver2 msg_MID360_launch.py9.2 启动 FAST-LIOcd~/fastlio2_wssource/opt/ros/humble/setup.bashsource~/livox_ws/install/setup.bashsourceinstall/setup.bash ros2 launch fast_lio mapping.launch.py config_file:mid360.yaml9.3 启动 RViz2rviz2添加/cloud_registered、/Odometry、/path和 TF确认地图稳定。9.4 启动 EGO-Plannercd~/ego_ros2_wssource/opt/ros/humble/setup.bashsource~/fastlio2_ws/install/setup.bashsourceinstall/setup.bash ros2 launch ego_planner run_mid360_fastlio.launch.py然后用 RViz2 的2D Goal Pose或自定义发布器发送目标点。10. Jetson 上的参数建议10.1 livox_ros_driver2publish_freq不要一开始拉太高建议先从 10 Hz 或 20 Hz 调通publish_freq: 10.0 或 20.0 xfer_format: 使用 Livox 自定义消息或含时间戳的格式如果只做可视化可以用 PointCloud2如果要跑 FAST-LIO优先使用 CustomMsg。10.2 FAST-LIOJetson 上主要瓶颈是 CPU 和内存带宽建议filter_size_surf: 0.2 ~ 0.5 filter_size_map: 0.2 ~ 0.5 cube_side_length: 不要设置过大 pcd_save_en: 调试阶段关闭最终保存时再打开启动后用下面命令看资源占用tegrastats如果 CPU 长期打满可以先降低 MID-360 发布频率、加大体素滤波、关闭 RViz2 或把 RViz2 放到上位机远程显示。10.3 EGO-Planner实机首次测试建议保守max_vel: 0.5 ~ 1.0 m/s max_acc: 0.5 ~ 1.5 m/s^2 planning_horizon: 4 ~ 6 m resolution: 0.15 ~ 0.25 m obstacles_inflation: 大于机体半径 定位误差如果 Jetson 端同时跑 RViz2、FAST-LIO 和 Planner 卡顿优先把 RViz2 放到另一台电脑通过同一 ROS_DOMAIN_ID 订阅 Jetson 的话题。11. 常见问题11.1ros2 topic list看不到/livox/lidar检查1. Jetson 有线网卡 IP 是否和 MID-360 同网段 2. MID360_config.json 中 host IP 是否写成 Jetson 网口 IP 3. 防火墙是否拦截 UDP 4. 是否启动了 msg_MID360_launch.py 5. 网线和供电是否稳定11.2 FAST-LIO 报点云没有 time 字段通常是启动了 RViz 点云格式 launch而不是自定义消息 launch。应使用ros2 launch livox_ros_driver2 msg_MID360_launch.py而不是只用于显示的 PointCloud2 launch。FAST-LIO 需要点级时间戳做去畸变。11.3 地图重影、墙面变厚或漂移优先检查1. IMU 是否正常发布 2. 雷达与 IMU 时间戳是否同步 3. 外参方向是否写反 4. 雷达是否固定牢靠 5. 启动时平台是否短暂静止11.4 EGO-Planner 不出轨迹一般是输入话题、坐标系或目标点问题ros2nodeinfo /ego_planner_node ros2 topicecho/Odometry--onceros2 topicecho/cloud_registered--onceros2 run tf2_tools view_frames确认1. Planner 订阅到了 FAST-LIO 的里程计 2. 点云和里程计在同一个 frame 或 TF 可变换 3. 目标点 frame 与 map/camera_init 一致 4. 局部地图范围覆盖当前位置和目标方向 5. z 高度没有落在障碍物或地图外11.5 Jetson 运行一段时间后变慢检查功耗和温度tegrastats建议1. 使用主动散热 2. 使用足够功率的电源 3. 开启 jetson_clocks 4. 降低点云发布频率 5. RViz2 放到上位机运行12. rosbag2 录制与离线复现实机调试时建议录包ros2 bag record\/livox/lidar\/livox/imu\/Odometry\/cloud_registered\/path\/planning/pos_cmd\/tf\/tf_static离线回放ros2 bag playbag目录保存点云地图时在 FAST-LIO 配置里开启pcd_save然后调用保存服务。不同 ROS2 适配版服务名可能略有差异常见为ros2servicelist|grepmap ros2servicecall /map_save std_srvs/srv/Trigger{}13. 总结在 Jetson Nano Super / Orin Nano Super Ubuntu 22.04 ROS2 Humble 上MID-360 实时建图链路的关键是livox_ros_driver2 负责稳定发布 MID-360 点云和 IMU FAST-LIO ROS2 负责 LiDAR-IMU 里程计和实时点云地图 EGO-Planner ROS2 适配版负责消费里程计和点云输出局部轨迹。调试时建议按“驱动 - FAST-LIO - EGO-Planner”的顺序逐层验证。只要/livox/lidar、/livox/imu、/cloud_registered、/Odometry这几条关键链路稳定后续规划器接入就主要是话题名、frame 和参数的问题。参考资料livox_ros_driver2: https://github.com/Livox-SDK/livox_ros_driver2Livox-SDK2: https://github.com/Livox-SDK/Livox-SDK2FAST_LIO_ROS2: https://github.com/Ericsii/FAST_LIO_ROS2EGO-Planner: https://github.com/ZJU-FAST-Lab/ego-plannerEGO-Planner-v2 ROS2 相关 issue: https://github.com/ZJU-FAST-Lab/EGO-Planner-v2/issues/43