尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

怎么在ubuntu22.04z中基于ROS2的rviz2下载Point_Lio包运行mid360雷达?

怎么在ubuntu22.04z中基于ROS2的rviz2下载Point_Lio包运行mid360雷达? 本文收录于 《全栈 Bug 调优实战版》 专栏。专栏聚焦真实项目中的各类疑难 Bug从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者还是负责复杂项目的资深工程师都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论助你稳步进阶、放大技术价值。特别说明文中问题案例来源于真实生产环境与公开技术社区并结合多位一线资深工程师与架构师的长期实践经验经过人工筛选与AI系统化智能整理后输出。文中的解决方案并非唯一“标准答案”而是兼顾可行性、可复现性与思路启发性的实践参考供你在实际项目中灵活运用与演进。欢迎订阅本专栏一次订阅后专栏内所有文章可永久免费阅读后续更新内容皆不用再次订阅持续更新中。 问题描述详细问题描述如下怎么在ubuntu22.04z中基于ROS2的rviz2下载Point_Lio包运行mid360雷达全文目录 问题描述 请知悉如下方案不保证一定适配你的问题✅️问题解决方案方案 A最推荐、最稳妥的落地方案——先官方驱动出点云再接 ROS2 版 Point-LIO1先装 ROS 2 Humble Desktop包含 RViz22安装 Livox SDK23编译 Livox 官方 ROS2 驱动 livox_ros_driver24修改 MID-360 网络配置这是最容易翻车的一步5先只跑 RViz2确认 MID-360 点云已经通了6安装 Point-LIO 的 ROS2 port而不是直接生啃 ROS1 官方仓库7重点Point-LIO 运行时不要再用 rviz_MID360_launch.py要用 msg_MID360_launch.py8配置 Point-LIO 的 mid360.yaml / avia.yaml9运行 Point-LIO优先试 mapping_mid360.launch.py10如果 Point-LIO 还是报错按这个顺序排方案 B先做“离线验证”——录一段 bag再回放给 Point-LIO方案 C先只把“官方驱动 RViz2”彻底跑透再决定要不要继续上 Point-LIO✅️问题延伸✅️问题预测✅️小结 结语 互动说明 文末福利技术成长加速包 Who am I? 请知悉如下方案不保证一定适配你的问题如下是针对上述问题进行专业角度剖析答疑不喜勿喷仅供参考### ✅️问题理解你这个问题本质上不是一句“下载 Point_LIO 然后运行”就完了而是一个四段链路打通的问题Ubuntu 22.04 上先把 ROS 2 Humble RViz2 环境装对。ROS 官方明确把Ubuntu 22.04作为 Humble 的 Tier 1 平台而且推荐ros-humble-desktop其中就包含 RViz2。先把 Livox MID-360 的官方驱动跑通至少要做到 RViz2 里先能看到点云。Livox 官方的livox_ros_driver2明确支持Mid-360并且 ROS2 下提供了rviz_MID360_launch.py和msg_MID360_launch.py两类启动方式。再接 Point-LIO。这里最关键的坑是Point-LIO 不是“任何 PointCloud2 都能吃”。Point-LIO 官方和 ROS2 port 都强调Livox 系列要想正确跑起来必须使用带每点时间戳的数据源否则就会出现典型错误Failed to find match for field time.这也是为什么你不能直接拿rviz_MID360_launch.py的普通可视化路径就指望 Point-LIO 正常工作。Point-LIO 官方仓库本身是 ROS1 风格。官方 README 里的运行方式还是roslaunchdevel/setup.bash所以你在 Ubuntu 22.04 ROS2 下不能“原样照抄官方仓库”直接跑更稳妥的是使用当前 ROS2 port。这个 ROS2 port 的 README 明确写了它测试环境就是Ubuntu 22.04 Humble并要求先安装、先 sourcelivox_ros_driver2。这一步非常关键。你可以把整个链路理解成下面这个流程这个图的核心含义只有一句先打通“驱动可视化”再打通“LIO建图”不要一上来同时排驱动、网络、消息类型、时间戳、外参、IMU 五类问题。✅️问题解决方案方案 A最推荐、最稳妥的落地方案——先官方驱动出点云再接 ROS2 版 Point-LIO这是我最推荐你的路线适合第一次接 MID-360也适合你现在目标是“真跑起来”而不是研究源码差异。1先装 ROS 2 Humble Desktop包含 RViz2ROS 官方文档对 Ubuntu 22.04 的建议非常明确先apt upgrade尤其要把systemd/udev相关包更新好然后再安装 ROS 2官方推荐ros-humble-desktop因为它包含 RViz2。colcon官方教程也明确给出了python3-colcon-common-extensions的安装方式。sudoaptupdatesudoaptupgrade-ysudoaptinstallcurl-yexportROS_APT_SOURCE_VERSION$(curl-shttps://api.github.com/repos/ros-infrastructure/ros-apt-source/releases/latest|grep-Ftag_name|awk-F{print $4})curl-L-o/tmp/ros2-apt-source.debhttps://github.com/ros-infrastructure/ros-apt-source/releases/download/${ROS_APT_SOURCE_VERSION}/ros2-apt-source_${ROS_APT_SOURCE_VERSION}.$(./etc/os-releaseecho${UBUNTU_CODENAME:-${VERSION_CODENAME}})_all.debsudodpkg-i/tmp/ros2-apt-source.debsudoaptupdatesudoaptinstallros-humble-desktop ros-dev-tools python3-colcon-common-extensions-yechosource /opt/ros/humble/setup.bash~/.bashrcsource/opt/ros/humble/setup.bash装完先用下面两句确认环境printenv|grepROS_DISTROwhichrviz2你应该看到ROS_DISTROhumble并且rviz2有路径。这个阶段别急着碰 Point-LIO。先把基础层坐实。2安装 Livox SDK2Livox 官方说明里Livox-SDK2就是给HAP / Mid-360这类新设备用的安装完成后库会放到/usr/local/lib头文件在/usr/local/include。这也是后面livox_ros_driver2能不能正常编译、运行的基础。cd~gitclone https://github.com/Livox-SDK/Livox-SDK2.gitcdLivox-SDK2mkdirbuildcdbuild cmake..make-j$(nproc)sudomakeinstall如果你后面运行驱动时遇到liblivox_sdk_shared.so找不到Livox 官方 README 的 FAQ 直接给了处理方式把/usr/local/lib加到LD_LIBRARY_PATH。echoexport LD_LIBRARY_PATH${LD_LIBRARY_PATH}:/usr/local/lib~/.bashrcsource~/.bashrc3编译 Livox 官方 ROS2 驱动livox_ros_driver2Livox 官方 README 明确说明了几件事Ubuntu 22.04 对应 ROS2 Humble驱动仓库必须 clone 到[workspace]/src/目录下ROS2 Humble 下官方构建命令就是./build.sh humble。mkdir-p~/ws_livox/srcgitclone https://github.com/Livox-SDK/livox_ros_driver2.git ~/ws_livox/src/livox_ros_driver2cd~/ws_livox/src/livox_ros_driver2source/opt/ros/humble/setup.sh ./build.sh humble然后把驱动工作空间也加进环境echosource ~/ws_livox/install/setup.bash~/.bashrcsource~/ws_livox/install/setup.bash4修改 MID-360 网络配置这是最容易翻车的一步官方 ROS2 启动文件rviz_MID360_launch.py/msg_MID360_launch.py都会用到config/MID360_config.json。所以你必须先把这个 JSON 改成和你本机网卡、雷达实际网络一致。官方 launch 片段也明确显示它会读取MID360_config.json。你至少要检查/修改这些内容lidar_ip改成你 MID-360 当前实际 IPhost_net_info里的各个*_ip改成你Ubuntu 有线网卡的 IP保证主机和雷达处于同一网段如果 launch 文件里的设备码 / 序列号还是占位默认值也要改成你自己的设备 SN官方启动脚本搜索结果能看到默认cmdline_bd_code只是一个示例值。建议你先查本机网卡ipaddr然后改这里路径示例~/ws_livox/src/livox_ros_driver2/config/MID360_config.json非常重要改完配置后最好重新 build 一次并重新 sourceinstall/setup.bash。因为 ROS2 overlay / install 模式下很多人会遇到“明明改了 src 里的配置运行时却像没生效”的错觉colcon的工作区机制本身就是 underlay/overlayGitHub issue 里也有人专门踩到“实际跑的是 install 里的已安装副本”这个坑。cd~/ws_livox/src/livox_ros_driver2 ./build.sh humblesource~/ws_livox/install/setup.bash5先只跑 RViz2确认 MID-360 点云已经通了官方驱动文档写得很清楚ROS2 下 Mid-360 有专门的 RViz 启动文件rviz_MID360_launch.py它发布 PointCloud2 并自动带起 RViz2FAQ 里还特别说了如果 RViz 打开了但没有点云要检查Fixed Frame是否设置成livox_frame。source/opt/ros/humble/setup.bashsource~/ws_livox/install/setup.bash ros2 launch livox_ros_driver2 rviz_MID360_launch.py这个阶段你的目标只有 3 个ros2 topic list|greplivox ros2 topicecho/livox/lidar--onceros2 topicecho/livox/imu--once如果 RViz2 里仍然没有点云先别碰 Point-LIO优先排下面四项MID360_config.json里的lidar_ip对不对host_net_info的 IP 是不是你电脑当前有线网卡的实际 IPRViz2 的 Fixed Frame 是否是livox_frame是否缺少/usr/local/lib的动态库路径。6安装 Point-LIO 的 ROS2 port而不是直接生啃 ROS1 官方仓库这里最关键的认知是HKU-MARS 官方 Point-LIO README 仍然是 ROS1 风格而你现在是 Ubuntu 22.04 ROS2所以更靠谱的是使用当前 ROS2 port。这个 ROS2 port 的 README 明确说它测试环境是Ubuntu 22.04 Humble并且需要先安装livox_ros_driver2。另外它还给出了 Humble 下额外依赖pcl_ros、pcl_conversions、visualization_msgs、Eigen。sudoaptinstallros-humble-pcl-ros ros-humble-pcl-conversions ros-humble-visualization-msgs libeigen3-dev-ymkdir-p~/point_lio_ws/srccd~/point_lio_ws/srcgitclone https://github.com/dfloreaa/point_lio_ros2.gitcd~/point_lio_wssource/opt/ros/humble/setup.bashsource~/ws_livox/install/setup.bash colcon build --symlink-installsourceinstall/setup.bash建议你也把它写进~/.bashrc但要注意 source 顺序echosource ~/point_lio_ws/install/setup.bash~/.bashrcsource~/.bashrcsource 顺序建议/opt/ros/humble/setup.bash~/ws_livox/install/setup.bash~/point_lio_ws/install/setup.bash这样 Point-LIO 才能正确找到livox_ros_driver2的消息定义。7重点Point-LIO 运行时不要再用rviz_MID360_launch.py要用msg_MID360_launch.py这一步是全流程最关键的坑点。Livox 官方驱动在 ROS2 下有两类启动方式rviz_MID360_launch.py发布PointCloud2方便可视化msg_MID360.launch/msg_MID360_launch.py发布Livox customized pointcloud data而 Point-LIO 官方 README 与 ROS2 port README 都强调Livox 系列需要使用带每点时间信息的自定义数据结构因为 Point-LIO 是逐点时间处理不是只看一帧整体点云。官方驱动文档里xfer_format1对应的也是 Livox customized pointcloud format。所以你跑 Point-LIO 时应该这样起驱动source/opt/ros/humble/setup.bashsource~/ws_livox/install/setup.bash ros2 launch livox_ros_driver2 msg_MID360_launch.py而不是继续用# 这个适合做 RViz 验证不适合直接喂 Point-LIOros2 launch livox_ros_driver2 rviz_MID360_launch.py如果你把普通 PointCloud2 直接喂给 Point-LIO最典型的报错就是Failed to find match for field time.或者 LiDAR 类型识别不对或者地图漂移明显、轨迹异常。8配置 Point-LIO 的mid360.yaml/avia.yaml这个 ROS2 port 里已经有config/mid360.yaml。当前可见内容里默认就把话题设为了/livox/lidar和/livox/imu并提供了scan_line、imu_en、extrinsic_est_en、satu_acc、satu_gyro、acc_norm、extrinsic_T、extrinsic_R等参数。你至少要核对这几项lid_topic通常应与实际 Livox 自定义点云话题一致常见是/livox/lidarimu_topic通常是/livox/imuimu_en如果你要用 IMU保持trueextrinsic_est_en如果你的 LiDAR-IMU 外参已知建议关掉在线估计satu_acc/satu_gyro/acc_norm一定要按你的 IMU 实际量程和单位改extrinsic_T/extrinsic_R一定要按你自己的安装外参改Point-LIO 把它定义为LiDAR 在 IMU body frame 下的位姿。如果你懒得翻文件我建议你先做这件事grep-nlid_topic\|imu_topic\|extrinsic_T\|extrinsic_R\|satu_acc\|satu_gyro\|acc_norm~/point_lio_ws/src/point_lio_ros2/config/mid360.yaml然后把这些值一个个对照你实际设备修改。这里再强调两件非常容易被忽略的事Point-LIO ROS2 port README 明确说IMU 和 LiDAR 必须同步。如果外参已知README 也明确建议extrinsic_est_en false。9运行 Point-LIO优先试mapping_mid360.launch.py从这个 ROS2 port 当前可见内容来看仓库已经有mid360.yaml并且 issue 里能看到用户直接运行mapping_mid360.launch.py因此如果你拉的是当前较新的提交/主线我建议你优先试这个命令。# 终端1驱动必须是 msg 版source/opt/ros/humble/setup.bashsource~/ws_livox/install/setup.bash ros2 launch livox_ros_driver2 msg_MID360_launch.py# 终端2Point-LIOsource/opt/ros/humble/setup.bashsource~/ws_livox/install/setup.bashsource~/point_lio_ws/install/setup.bash ros2 launch point_lio mapping_mid360.launch.py如果你的这个 port / fork 里没有mapping_mid360.launch.py那就退回老思路ros2 launch point_lio mapping_avia.launch.py然后把config/avia.yaml改成 MID-360 的实际话题与外参。ROS2 port README 里本来就写着mapping_avia理论上支持mid-70、mid-40或“其他 Livox serials”——本质就是按 Livox 串行雷达那套数据通路去接。10如果 Point-LIO 还是报错按这个顺序排这是我给你的实战排错顺序非常重要第一层看消息类型对不对ros2 topic info /livox/lidar ros2 interface show livox_ros_driver2/msg/CustomMsg如果/livox/lidar不是livox_ros_driver2/msg/CustomMsg这类自定义格式而只是普通PointCloud2那你大概率就是起错 launch 了。Point-LIO 需要的是带每点时间信息的数据。第二层看话题名对不对很多人驱动已经正常发了但mid360.yaml里订阅的还是别的话题名。直接ros2 topic list|greplivox然后回头改lid_topic/imu_topic。这个问题在很多 LiDAR 算法里都很常见。第三层看时间戳对不对如果出现Failed to find match for field time.不要瞎改lidar_type先回头检查你是不是把rviz_MID360_launch.py的普通点云喂给了 Point-LIO。这个报错的根因几乎就指向“每点时间字段缺失”。第四层看配置有没有真正生效如果你明明改了MID360_config.json或mid360.yaml但运行行为完全像没变化最稳的做法不是怀疑人生而是cd~/ws_livox/src/livox_ros_driver2 ./build.sh humblesource~/ws_livox/install/setup.bashcd~/point_lio_ws colcon build --symlink-installsourceinstall/setup.bash因为 ROS2 工作区是 overlay/install 模式重新 build re-source 比“只改 src 然后直接跑”靠谱得多。方案 B先做“离线验证”——录一段 bag再回放给 Point-LIO如果你现场网络环境很烦、交换机和网卡配置又杂最省时间的方法是先把 MID-360 数据录下来再离线回放。这样你可以把“网络/IP/交换机”问题和“Point-LIO 算法/配置”问题拆开。Point-LIO ROS2 port README 本身就提到过 rosbag 中如果缺少每点时间会触发Failed to find match for field time.说明离线数据本身是否保留正确时间结构是成败关键。流程建议先用msg_MID360_launch.py起官方驱动录包ros2 bag record /livox/lidar /livox/imu关闭驱动后离线回放ros2 bag playyour_bag_dir另开终端跑 Point-LIO这样做的好处是你能证明驱动层已经正确发出话题你能反复试mid360.yaml参数而不必每次都连硬件你能稳定复现问题调试效率高很多。这套方案特别适合下面两类人机房/车间网络复杂经常怀疑交换机和 IP已经能看到点云但 Point-LIO 时好时坏想把变量控制住。方案 C先只把“官方驱动 RViz2”彻底跑透再决定要不要继续上 Point-LIO如果你当前不是“马上要出里程计/建图结果”而是第一次接 MID-360 硬件那我甚至建议你先把 Point-LIO 暂时放一边只做两件事rviz_MID360_launch.py稳定出点云/livox/lidar、/livox/imu话题持续稳定发布因为官方驱动已经明确支持 Mid-360且有专门 RViz2 启动文件而 Point-LIO 这边官方仓库是 ROS1 风格ROS2 端口虽然可用但对 MID-360 的适配在不同提交/fork 下仍可能有差异社区 issue 里也有人专门讨论过livox_ros_driver2的依赖与CustomMsg订阅改动。这不是“逃避问题”而是标准的工程策略驱动层先闭环消息层再闭环算法层最后闭环真正工程上最怕的不是某一步不会而是五层一起查。这个拆分思路能极大缩短你的排障时间。✅️问题延伸这个问题往深里看真正的专业点不在“会不会敲命令”而在你是否理解下面这些底层逻辑。第一为什么 Point-LIO 对 Livox 特别在意“每点时间戳”因为 Point-LIO 是一种高带宽、逐点处理的 LIO不是简单把一整帧点云当成同一时刻去做。官方仓库和 ROS2 port 都反复强调Livox 路径必须走自定义消息原因就是它携带了逐点时间信息。没有这个信息就谈不上正确去畸变、正确做运动补偿更别说在急转弯或高速运动里稳定建图了。第二为什么“能在 RViz2 看到点云”不等于“Point-LIO 一定能跑”因为 RViz2 只是消费“可显示的点云”而 Point-LIO 消费的是“适合算法的点云”。两者不是一回事。官方驱动的rviz_MID360_launch.py和msg_MID360_launch.py本来就是两条不同目的的路径前者偏可视化后者偏算法输入。第三为什么外参、IMU 量程、加速度单位会严重影响结果Point-LIO README 和 ROS2 port README 都直接点名了这几个参数extrinsic_T、extrinsic_R、satu_acc、satu_gyro、acc_norm。这说明算法默认你对自己的 IMU 特性和安装关系心里有数。工程里很多“漂移、发散、轨迹翻转”的根因不是算法不行而是你把 IMU 单位、外参方向或者饱和值填错了。第四为什么 ROS2 下经常出现“我明明改了配置却没生效”因为 ROS2 常用的是 overlay/install 工作区模型。源码里的文件被安装到install/后你真正运行时用到的可能是安装副本而不是你刚改的src版本。所以工程上稳妥做法永远是改配置 - 重新 build - 重新 source。这不是形式主义这是 ROS2 工作区机制本身决定的。第五当前 ROS2 Point-LIO 对 MID-360 的现实状态是什么结论要说实话能跑但没有“官方原生 ROS2 MID360 一把梭”的丝滑程度。因为 HKU-MARS 官方 Point-LIO 主仓库还是 ROS1 味道更浓ROS2 port 是社区在维护和演进。当前 port 里已经出现mid360.yaml等内容但社区 issue 也说明在某些提交/fork 下MID-360 相关依赖与CustomMsg订阅路径仍可能需要你确认。也就是说路线可行但你得按工程化方式把每层验证做扎实。✅️问题预测我提前帮你预测一下后面你大概率会碰到这些典型问题1. 现象rviz_MID360_launch.py能开 RViz2但看不到点云高概率原因MID360_config.json里lidar_ip不对host_net_info的主机 IP 没改成当前网卡 IPRViz2 Fixed Frame 不是livox_frame动态库路径没加/usr/local/lib。2. 现象Point-LIO 启动后报Failed to find match for field time.高概率原因你起的是rviz_MID360_launch.py而不是msg_MID360_launch.py你喂给 Point-LIO 的不是带每点时间信息的 Livox 自定义消息录包/回放过程中把时间结构丢了。3. 现象Point-LIO 能跑但轨迹漂、地图歪、姿态怪高概率原因extrinsic_T/extrinsic_R错acc_norm单位错satu_acc/satu_gyro不符合实际 IMULiDAR 和 IMU 没同步。4. 现象改了配置也没效果高概率原因ROS2 install 副本还在用旧配置你只改了src/没重新 build新终端没重新 source。5. 现象编译livox_ros_driver2失败或运行时报找不到 SDK 库高概率原因Livox-SDK2没正确sudo make install/usr/local/lib没进LD_LIBRARY_PATH驱动不是 clone 在[workspace]/src下。✅️小结把整件事浓缩成一句最重要的话Ubuntu 22.04 上跑 ROS2 RViz2 MID-360 Point-LIO正确姿势不是“直接下载 Point_LIO 包”而是先装 Humble Desktop先装 Livox-SDK2先编译livox_ros_driver2先用rviz_MID360_launch.py验证点云再改用msg_MID360_launch.py把带每点时间戳的 Livox 自定义消息喂给 ROS2 版 Point-LIO最后再校正mid360.yaml的话题、外参、IMU 参数。你现在最应该执行的最小闭环是# 1. 先把官方驱动跑通ros2 launch livox_ros_driver2 rviz_MID360_launch.py# 2. 确认话题正常ros2 topic list|greplivox# 3. Point-LIO 时改用 msg 版本ros2 launch livox_ros_driver2 msg_MID360_launch.py# 4. 再起 Point-LIOros2 launch point_lio mapping_mid360.launch.py 结语 互动说明希望以上分析与解决思路能为你当前的问题提供一些有效线索或直接可用的操作路径。若你按文中步骤执行后仍未解决不必焦虑或抱怨这很常见——复杂问题往往由多重因素叠加引起欢迎你将最新报错信息、关键代码片段、环境说明等补充到评论区我会在力所能及的范围内结合大家的反馈一起帮你继续定位 如果你有更优或更通用的解法非常欢迎在评论区分享你的实践经验或改进方案你的这份补充可能正好帮到更多正在被类似问题困扰的同学正所谓「赠人玫瑰手有余香」也算是为技术社区持续注入正向循环 文末福利技术成长加速包 文中部分问题来自本人项目实践部分来自读者反馈与公开社区案例也有少量经由全网社区与智能问答平台整理而来。若你尝试后仍没完全解决问题还请多一点理解、少一点苛责——技术问题本就复杂多变没有任何人能给出对所有场景都 100% 套用的方案。如果你已经找到更适合自己项目现场的做法非常建议你沉淀成文档或教程这不仅是对他人的帮助更是对自己认知的再升级。如果你还在持续查 Bug、找方案可以顺便逛逛我专门整理的 Bug 专栏《全栈 Bug 调优实战版》️这里收录的都是在真实场景中踩过的坑希望能帮你少走弯路节省更多宝贵时间。✍️如果这篇文章对你有一点点帮助欢迎给 bug菌 来个一键三连关注 点赞 收藏你的支持是我持续输出高质量实战内容的最大动力。同时也欢迎关注我的硬核公众号 「猿圈奇妙屋」获取第一时间更新的技术干货、BAT 等互联网公司最新面试真题、4000G 技术 PDF 电子书、简历 / PPT 模板、技术文章 Markdown 模板等资料通通免费领取。你能想到的绝大部分学习资料我都尽量帮你准备齐全剩下的只需要你愿意迈出那一步来拿。 Who am I?我是 bug菌热活跃于 CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等技术社区CSDN 博客之星 Top30、华为云多年度十佳博主/卓越贡献者、掘金多年度人气作者 Top40掘金、InfoQ、51CTO 等平台签约及优质作者全网粉丝累计30w。更多高质量技术内容及成长资料可查看这个合集入口 点击查看 ️硬核技术公众号「猿圈奇妙屋」期待你的加入一起进阶、一起打怪升级。- End -
返回列表