解决 ROS 主从机通信问题:从机读取主机 Livox+Fast-LIO 建图数据并 RVIZ 可视化

解决 ROS 主从机通信问题:从机读取主机 Livox+Fast-LIO 建图数据并 RVIZ 可视化

问题背景

在基于香橙派(主机,IP:10.164.150.221)和华硕 ROG 笔记本(从机,IP:10.164.150.69)的 ROS 主从机项目中,遇到以下问题:

  1. 从机可以执行rostopic list看到主机发布的话题(如/livox/imu/livox/lidar/Laser_map),但无法读取话题数据。
  2. 从机执行rostopic hz /livox/lidar提示Cannot load message class for [livox_ros_driver2/CustomMsg]
  3. 从机执行rostopic hz /livox/imu显示no new messages
  4. 从机无法通过 RVIZ 查看主机 Fast-LIO 生成的建图数据。

核心需求:实现主从机 ROS 通信,从机读取主机传感器数据并可视化建图结果。

环境说明

设备角色IP 地址运行节点ROS 版本
香橙派 5 Pro主机10.164.150.221roscore、livox_driver2、fast-lio、ego-plannerNoetic
华硕 ROG 笔记本从机10.164.150.69rviz(可视化)Noetic

解决流程

一、修正主从机 ROS 环境变量配置

ROS 主从机通信的核心是环境变量的正确配置,错误的ROS_IP/ROS_MASTER_URI会导致通信失败。

1. 主机(香橙派)配置

编辑~/.bashrc文件:

nano~/.bashrc

添加/修改以下内容:

# ROS Master 配置exportROS_HOSTNAME=orangepiexportROS_MASTER_URI=http://10.164.150.221:11311exportROS_IP=10.164.150.221

生效配置:

source~/.bashrc

验证配置:

echo$ROS_IP$ROS_MASTER_URI# 预期输出:10.164.150.221 http://10.164.150.221:11311
2. 从机(华硕 ROG)配置

编辑~/.bashrc文件:

nano~/.bashrc

添加/修改以下内容:

# 从机指向主机 MasterexportROS_HOSTNAME=rog-ROG-Strix-G614JVexportROS_MASTER_URI=http://10.164.150.221:11311exportROS_IP=10.164.150.69# 从机自身IP,禁止设为localhost或主机IP

生效配置:

source~/.bashrc

验证配置:

echo$ROS_IP$ROS_MASTER_URI# 预期输出:10.164.150.69 http://10.164.150.221:11311

二、同步主从机/etc/hosts文件

ROS 依赖主机名解析,需保证主从机互相识别对方的主机名和 IP。

1. 主机和从机统一配置/etc/hosts
sudonano/etc/hosts

添加以下内容:

10.164.150.221 orangepi10.164.150.69 rog10.164.150.69 rog-ROG-Strix-G614JV
2. 验证主机名解析
  • 主机 ping 从机:
    pingrog -c3
  • 从机 ping 主机:
    pingorangepi -c3
    若 ping 通则解析正常,若不通检查防火墙或网络连接。

三、修复主机开机自启脚本的环境变量问题

主机通过ego_planner_tibos.sh脚本自动启动 ROS 节点,但非交互式 Shell 不会自动加载.bashrc,导致节点环境变量失效。

1. 问题脚本的核心缺陷

原脚本中nohup roslaunch ... &命令无法继承正确的 ROS 环境变量,节点默认使用localhost通信,从机无法接收数据。

2. 修正后的自启脚本ego_planner_tibos.sh
#!/bin/bash# 第一步:显式设置 ROS 环境变量(优先级最高)exportROS_HOSTNAME=orangepiexportROS_MASTER_URI=http://10.164.150.221:11311exportROS_IP=10.164.150.221# 延迟等待系统初始化sleep60source/home/orangepi/.bashrcsource/opt/ros/noetic/setup.bash# 启动 Livox 驱动节点(强制传递环境变量)sleep10cd/home/orangepi/code/livox_wssourcedevel/setup.bashnohupbash-c"export ROS_HOSTNAME=orangepi; export ROS_IP=10.164.150.221; roslaunch livox_ros_driver2 msg_MID360.launch">/home/orangepi/livox.log2>&1&# 启动 Fast-LIO 建图节点sleep15cd/home/orangepi/code/livox_wssourcedevel/setup.bashnohupbash-c"export ROS_HOSTNAME=orangepi; export ROS_IP=10.164.150.221; roslaunch fast_lio mapping_mid360.launch">/home/orangepi/fast_lio.log2>&1&# 启动 ego-planner 规划节点sleep10cd/home/orangepi/code/fast_drone_wssourcedevel/setup.bashnohupbash-c"export ROS_HOSTNAME=orangepi; export ROS_IP=10.164.150.221; roslaunch ego_planner single_run_in_exp.launch">/home/orangepi/ego_planner.log2>&1&cd/home/orangepi/bag_save_autosleep999999exit1
3. 脚本关键优化点
  • 环境变量前置:脚本开头直接设置 ROS 核心变量,不依赖.bashrc
  • 节点启动封装:用bash -c "export ...; roslaunch ..."确保节点继承正确配置。
  • 日志独立输出:每个节点日志定向到独立文件,方便问题排查。
  • 合理延迟sleep避免节点启动冲突,适配硬件驱动加载节奏。
4. 启动并验证脚本
# 赋予脚本可执行权限chmod+x /home/orangepi/ego_planner_tibos.sh# 杀死旧进程killall-9 roslaunch rosout livox_ros_driver2_node fast_lio_node# 启动脚本/home/orangepi/ego_planner_tibos.sh&

验证节点环境变量:

# 查看 Livox 节点的环境变量PID=$(ps-ef|grep-vgrep|greplivox_ros_driver2_node|awk'{print $2}')cat/proc/$PID/environ|tr'\0''\n'|grepROS_# 预期输出:# ROS_HOSTNAME=orangepi# ROS_IP=10.164.150.221# ROS_MASTER_URI=http://10.164.150.221:11311

四、解决从机消息类加载失败问题

从机提示Cannot load message class,原因是缺少livox_ros_driver2fast_lio的消息编译文件。

1. 从机编译对应功能包
# 创建并进入 ROS 工作空间mkdir-p ~/catkin_ws/src&&cd~/catkin_ws/src# 克隆功能包(与主机版本一致)gitclone https://github.com/Livox-SDK/livox_ros_driver2.gitgitclone https://github.com/hku-mars/fast-lio.git# 编译工作空间cd..catkin_make --cmake-args -DCMAKE_BUILD_TYPE=Release# 生效编译结果sourcedevel/setup.bash

验证消息文件:

ls~/catkin_ws/devel/include/livox_ros_driver2/# 预期看到 CustomMsg.h 文件

五、从机 RVIZ 可视化主机建图数据

编译完成后,从机即可通过 RVIZ 连接主机 Master,查看建图数据。

1. 方式1:加载 Fast-LIO 自带 RVIZ 配置(推荐)
# 从机执行,确保 ROS 环境变量已生效source~/catkin_ws/devel/setup.bash rviz -d ~/catkin_ws/src/fast-lio/rviz_cfg/loam_livox.rviz
2. 方式2:手动配置 RVIZ
  1. 启动空 RVIZ:
    rviz
  2. 核心配置:
    • Global Options → Fixed Frame:选择livox_framebase_link
    • ROS Master → Network Address:填写主机 IP10.164.150.221,端口11311
  3. 添加可视化话题:
    数据类型RVIZ 插件类型对应话题
    最终建图点云PointCloud2/Laser_map
    实时配准点云PointCloud2/cloud_registered
    里程计位姿Odometry/Odometry
    坐标系变换TF/tf
    IMU 数据IMU/livox/imu

验证通信与可视化效果

1. 从机验证话题数据

# 查看 IMU 数据频率rostopic hz /livox/imu# 预期输出:average rate: 200+ Hz# 查看激光雷达数据频率rostopic hz /livox/lidar# 预期输出:average rate: 10+ Hz# 查看建图点云数据rostopicecho/Laser_map

2. RVIZ 可视化验证

若 RVIZ 能看到实时点云和地图,且无TF 变换错误,则配置成功。

常见问题排查:

  • No transform from xxx to xxx:检查/tf话题是否有数据,确认 Fixed Frame 选择正确。
  • 话题显示灰色:确认从机ROS_MASTER_URI指向主机,且主机节点正常运行。

在笔记本从机中运行:

roslaunch ego_planner rviz.launch

## 完整脚本内容:

#!/bin/bash# 核心ROS环境变量配置(所有节点共用,优先级最高)exportROS_HOSTNAME=orangepiexportROS_MASTER_URI=http://10.164.150.221:11311exportROS_IP=10.164.150.221# 系统初始化延迟sleep60source/home/orangepi/.bashrcsource/opt/ros/noetic/setup.bash# 1. 配置串口权限 + 启动mavros节点(优先启动,无人机通信基础)# 给串口/dev/ttyACM0赋权(后台执行+延迟,避免阻塞)sudochmod777/dev/ttyACM0&sleep2# 等待权限生效# 启动mavros节点,强制继承ROS环境变量nohupbash-c"export ROS_HOSTNAME=orangepi; export ROS_IP=10.164.150.221; roslaunch mavros px4.launch">/home/orangepi/mavros.log2>&1&sleep10# 等待mavros节点初始化完成# 2. 启动Livox激光雷达驱动节点sleep10cd/home/orangepi/code/livox_wssourcedevel/setup.bashnohupbash-c"export ROS_HOSTNAME=orangepi; export ROS_IP=10.164.150.221; roslaunch livox_ros_driver2 msg_MID360.launch">/home/orangepi/livox.log2>&1&# 3. 启动Fast-LIO建图节点(依赖livox和mavros数据)sleep15cd/home/orangepi/code/livox_wssourcedevel/setup.bashnohupbash-c"export ROS_HOSTNAME=orangepi; export ROS_IP=10.164.150.221; roslaunch fast_lio mapping_mid360.launch">/home/orangepi/fast_lio.log2>&1&# 4. 启动ego_planner规划节点(依赖建图和mavros数据)sleep10cd/home/orangepi/code/fast_drone_wssourcedevel/setup.bashnohupbash-c"export ROS_HOSTNAME=orangepi; export ROS_IP=10.164.150.221; roslaunch ego_planner single_run_in_exp.launch">/home/orangepi/ego_planner.log2>&1&cd/home/orangepi/bag_save_auto#nohup rosbag record --split --duration=60 /Odometry /cloud_registered /livox/imu /livox/lidar /mavros/imu/data_raw &# 保持脚本运行sleep999999exit1

总结

本次问题的核心是ROS 环境变量配置错误+自启脚本环境失效+从机消息类缺失。解决流程可归纳为:

  1. 正确配置主从机ROS_IP/ROS_MASTER_URI/etc/hosts
  2. 修复自启脚本,确保节点继承正确的网络配置。
  3. 从机编译对应功能包,解决消息类加载问题。
  4. RVIZ 加载配置或手动添加话题,实现可视化。

该流程适用于所有 ROS 主从机通信场景,尤其适合需要自动启动节点的嵌入式设备项目。

参考资料

https://github.com/ZJU-FAST-Lab/Fast-Drone-250
https://blog.csdn.net/kjb655/article/details/151579873?ops_request_misc=%257B%2522request%255Fid%2522%253A%252256ee626d58a463dd6379252f9a6257ea%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=56ee626d58a463dd6379252f9a6257ea&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-2-151579873-null-null.142v102pc_search_result_base2&utm_term=ego%20planner%20mid360&spm=1018.2226.3001.4187
https://blog.csdn.net/qq_56338777/article/details/156907497?spm=1011.2415.3001.5331
https://blog.csdn.net/zhanghm1995/article/details/106781954?ops_request_misc=%257B%2522request%255Fid%2522%253A%252226654f59f59406de58c21a128b46af44%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=26654f59f59406de58c21a128b46af44&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~hot_rank-2-106781954-null-null.142v102pc_search_result_base2&utm_term=ros%E4%B8%BB%E4%BB%8E&spm=1018.2226.3001.4187

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1159025.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git拉取提示本地分支和远程分支存在差异快速解决

git警告如下图这种情况通常发生在: 你本地有未推送的提交 同时远程也有你本地没有的新提交 两个分支的历史产生了分歧 解决: 方案一:使用合并(merge)- 最安全 bash 1. 设置为默认使用合并策略 git config pull.rebase …

汽车MES系统如何处理工艺卡片公式导入导出?

新疆Java程序员のCMS文档神器(680元搞定版) 作为刚接完国企CMS项目的Java老炮儿,我太懂你们要的"开箱即用甲方爸爸满意"的解决方案了!今天就把压箱底的Word/PPT/Excel/PDF全能导入插件掏出来,预算680元&…

C#.NET前端组件如何支持芯片制造行业的大文件断点续传?

【一个即将毕业的武汉码农自救指南:从"大文件上传?那是什么?"到"哥的进度条会跳舞!"的逆袭之路】 "同学,你的简历上写’熟悉前端开发’,那能说说怎么实现2G文件分片上传吗&#x…

关于阶层跃迁

记得当年的社会达尔文吗?达尔文从来没说过他的理论适用于社会科学。现在是阶层跃迁。物理学家也从来没有说过光电效应能导出阶层跃迁。你得明白,要阶层跃迁,首先得有阶层。用这个词的时候就把阶层的合理性给隐含了。而今天的阶层就是过去的阶…

网页上C#如何实现医疗行业的大文件分块上传与加密?

大文件上传系统开发全攻略(兼容IE8的Vue3WebForm实现) 项目背景 兄弟们,这次接了个硬骨头活儿!客户要我们实现一个支持20G文件上传的系统,还要兼容IE8这种古董浏览器,预算只有100块!不过别慌&…

智能座舱革新将至?广州2026这场展会解码AI与场景融合新赛道

智能座舱革新将至?广州2026这场展会解码AI与场景融合新赛道当汽车从出行工具向“移动智慧空间”转型,智能座舱正成为产业革新的核心战场。2026年11月27日至30日,AUTO TECH China 2026 广州国际汽车智能座舱及车载显示技术展览会将在广州中国进…

互联网医疗怎样实现电子处方公式跨平台转存?

富文本编辑器集成文档导入与图片自动上传功能开发记录 作为一名技术开发人员,我独立搭建了一个网站,目前正着手解决富文本编辑器中粘贴 Word 图片以及支持多种文档导入且图片自动上传至服务器的问题。以下是我详细的查找过程与开发记录。 一、需求明确…

国产化数据库如何存储网页编辑器中的动态公式?

针对在 Vue2 UEditor .NET Core 环境中实现 Word/Excel/PPT/PDF 粘贴导入且图片自动上传 的需求,结合你的技术栈和云服务(华为云 OBS),以下是可直接落地的开源解决方案: 一、核心方案:UEditor WordPast…

.NET MVC中如何支持教育行业的大文件夹上传解决方案?

【一个.NET程序员的悲喜交加:前端搞定了,后端求包养!】 各位道友好!俺是山西某个人.NET程序员,刚啃完《C#从入门到住院》,就被客户按头要求搞个20G大文件上传下载系统。现在前端用Vue3原生JS硬怼出了半成品…

如何搜索学术论文:实用方法与高效技巧指南

刚开始做科研的时候,我一直以为: 文献检索就是在知网、Google Scholar 里反复换关键词。 直到后来才意识到,真正消耗精力的不是“搜不到”,而是—— 你根本不知道最近这个领域发生了什么。 生成式 AI 出现之后,学术检…

怎么找出一篇论文的研究问题——实用技巧与方法解析

刚开始做科研的时候,我一直以为: 文献检索就是在知网、Google Scholar 里反复换关键词。 直到后来才意识到,真正消耗精力的不是“搜不到”,而是—— 你根本不知道最近这个领域发生了什么。 生成式 AI 出现之后,学术检…

机械CAD如何与网页编辑器实现公式参数同步?

Word粘贴与文档导入功能解决方案 作为江西IT行业网络公司的PHP工程师,我最近接到一个企业网站后台管理系统的新需求,需要实现Word粘贴和文档导入功能。以下是我的专业解决方案: 需求分析 Word粘贴功能:允许用户从Word复制内容并…

Springboot音乐网站890a8(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表项目功能:用户,歌手信息,歌曲分类,歌曲信息,热门推荐开题报告内容一、研究背景与意义随着互联网技术的飞速发展,音乐行业正经历从实体唱片向数字化、在线化的深刻转型。传统音乐平台存在版权分散、推荐精度低、社交互动弱等问题&#xf…

Springboot应急物资采购系统2548l(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表项目功能:学生,物资分类,物资商品,普通管理员开题报告内容一、研究背景与意义(一)现实背景近年来全球自然灾害与公共卫生事件频发,如2020年新冠疫情导致全球医疗物资缺口超20亿件,2021年河南暴雨造成应…

革了程序员再革打工人:Anthropic发布Cowork,Claude Code走进数字办公自动化

刚刚,Anthropic发布Cowork。 让Claude Code走进了数字办公自动化。 比如简单的桌面整理: 革了程序员再革打工人:Anthropic发布Cowork,Claude Code走进数字办公自动 让人震惊的是,Claude之父爆料Cowork的代码&#xf…

导师严选2026最新!9款AI论文网站测评:本科生毕业论文必备

导师严选2026最新!9款AI论文网站测评:本科生毕业论文必备 2026年AI论文工具测评:为何需要一份权威榜单? 随着人工智能技术的不断进步,越来越多的本科生开始借助AI工具辅助毕业论文写作。然而,市面上的AI论文…

搜索研究文献的渠道有哪些

刚开始做科研的时候,我一直以为: 文献检索就是在知网、Google Scholar 里反复换关键词。 直到后来才意识到,真正消耗精力的不是“搜不到”,而是—— 你根本不知道最近这个领域发生了什么。 生成式 AI 出现之后,学术检…

告别昂贵人工标注,英伟达全自动视频理解助力小模型逆袭顶级大模型

麻省理工学院 (MIT)、英伟达、密歇根大学、加州大学伯克利分校和斯坦福大学刚刚推出了FoundationMotion(又称Wolf V2)。FoundationMotion让AI读懂物理世界的运动逻辑,用自动化工厂重塑视频理解与推理,告别昂贵人工标注。心理学家B…

十二大顶尖大模型决战华尔街与量化投资

大模型越来越强,人们开始探索用大模型来做量化投资。比如25年11月火遍全网的Alpha Arena全球首个AI投资大赛,现在依然在进行(全军覆没囧...)。AI能否战胜市场?一直没有系统的研究报告或论文,刚刚,一篇重磅论…

顶峰相见,「算网杯」2025 AIGC 开发者大赛1月17日苏州迎来决赛!

1月17日,「算网杯」2025 AIGC 开发者大赛即将在中国科学技术大学苏州高等研究院迎来精彩决赛!大赛自启动便备受瞩目,吸引 500 余名企业、高校开发爱好者踊跃参与。经过层层激烈角逐,最终 99 支实力强队脱颖而出,成功晋…