2026/2/16 12:25:24
网站建设
项目流程
成都网站优化维护,网页设计师资格证培训班,企业网站建设销售话术,现在用什么做网站解决 ROS 主从机通信问题#xff1a;从机读取主机 LivoxFast-LIO 建图数据并 RVIZ 可视化
问题背景
在基于香橙派#xff08;主机#xff0c;IP#xff1a;10.164.150.221#xff09;和华硕 ROG 笔记本#xff08;从机#xff0c;IP#xff1a;10.164.150.69#xff0…解决 ROS 主从机通信问题从机读取主机 LivoxFast-LIO 建图数据并 RVIZ 可视化问题背景在基于香橙派主机IP10.164.150.221和华硕 ROG 笔记本从机IP10.164.150.69的 ROS 主从机项目中遇到以下问题从机可以执行rostopic list看到主机发布的话题如/livox/imu、/livox/lidar、/Laser_map但无法读取话题数据。从机执行rostopic hz /livox/lidar提示Cannot load message class for [livox_ros_driver2/CustomMsg]。从机执行rostopic hz /livox/imu显示no new messages。从机无法通过 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_HOSTNAMEorangepiexportROS_MASTER_URIhttp://10.164.150.221:11311exportROS_IP10.164.150.221生效配置source~/.bashrc验证配置echo$ROS_IP$ROS_MASTER_URI# 预期输出10.164.150.221 http://10.164.150.221:113112. 从机华硕 ROG配置编辑~/.bashrc文件nano~/.bashrc添加/修改以下内容# 从机指向主机 MasterexportROS_HOSTNAMErog-ROG-Strix-G614JVexportROS_MASTER_URIhttp://10.164.150.221:11311exportROS_IP10.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/hostssudonano/etc/hosts添加以下内容10.164.150.221 orangepi10.164.150.69 rog10.164.150.69 rog-ROG-Strix-G614JV2. 验证主机名解析主机 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_HOSTNAMEorangepiexportROS_MASTER_URIhttp://10.164.150.221:11311exportROS_IP10.164.150.221# 延迟等待系统初始化sleep60source/home/orangepi/.bashrcsource/opt/ros/noetic/setup.bash# 启动 Livox 驱动节点强制传递环境变量sleep10cd/home/orangepi/code/livox_wssourcedevel/setup.bashnohupbash-cexport ROS_HOSTNAMEorangepi; export ROS_IP10.164.150.221; roslaunch livox_ros_driver2 msg_MID360.launch/home/orangepi/livox.log21# 启动 Fast-LIO 建图节点sleep15cd/home/orangepi/code/livox_wssourcedevel/setup.bashnohupbash-cexport ROS_HOSTNAMEorangepi; export ROS_IP10.164.150.221; roslaunch fast_lio mapping_mid360.launch/home/orangepi/fast_lio.log21# 启动 ego-planner 规划节点sleep10cd/home/orangepi/code/fast_drone_wssourcedevel/setup.bashnohupbash-cexport ROS_HOSTNAMEorangepi; export ROS_IP10.164.150.221; roslaunch ego_planner single_run_in_exp.launch/home/orangepi/ego_planner.log21cd/home/orangepi/bag_save_autosleep999999exit13. 脚本关键优化点环境变量前置脚本开头直接设置 ROS 核心变量不依赖.bashrc。节点启动封装用bash -c export ...; roslaunch ...确保节点继承正确配置。日志独立输出每个节点日志定向到独立文件方便问题排查。合理延迟sleep避免节点启动冲突适配硬件驱动加载节奏。4. 启动并验证脚本# 赋予脚本可执行权限chmodx /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_HOSTNAMEorangepi# ROS_IP10.164.150.221# ROS_MASTER_URIhttp://10.164.150.221:11311四、解决从机消息类加载失败问题从机提示Cannot load message class原因是缺少livox_ros_driver2和fast_lio的消息编译文件。1. 从机编译对应功能包# 创建并进入 ROS 工作空间mkdir-p ~/catkin_ws/srccd~/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_TYPERelease# 生效编译结果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.rviz2. 方式2手动配置 RVIZ启动空 RVIZrviz核心配置Global Options → Fixed Frame选择livox_frame或base_link。ROS Master → Network Address填写主机 IP10.164.150.221端口11311。添加可视化话题数据类型RVIZ 插件类型对应话题最终建图点云PointCloud2/Laser_map实时配准点云PointCloud2/cloud_registered里程计位姿Odometry/Odometry坐标系变换TF/tfIMU 数据IMU/livox/imu验证通信与可视化效果1. 从机验证话题数据# 查看 IMU 数据频率rostopic hz /livox/imu# 预期输出average rate: 200 Hz# 查看激光雷达数据频率rostopic hz /livox/lidar# 预期输出average rate: 10 Hz# 查看建图点云数据rostopicecho/Laser_map2. RVIZ 可视化验证若 RVIZ 能看到实时点云和地图且无TF 变换错误则配置成功。常见问题排查No transform from xxx to xxx检查/tf话题是否有数据确认 Fixed Frame 选择正确。话题显示灰色确认从机ROS_MASTER_URI指向主机且主机节点正常运行。在笔记本从机中运行roslaunch ego_planner rviz.launch## 完整脚本内容#!/bin/bash# 核心ROS环境变量配置所有节点共用优先级最高exportROS_HOSTNAMEorangepiexportROS_MASTER_URIhttp://10.164.150.221:11311exportROS_IP10.164.150.221# 系统初始化延迟sleep60source/home/orangepi/.bashrcsource/opt/ros/noetic/setup.bash# 1. 配置串口权限 启动mavros节点优先启动无人机通信基础# 给串口/dev/ttyACM0赋权后台执行延迟避免阻塞sudochmod777/dev/ttyACM0sleep2# 等待权限生效# 启动mavros节点强制继承ROS环境变量nohupbash-cexport ROS_HOSTNAMEorangepi; export ROS_IP10.164.150.221; roslaunch mavros px4.launch/home/orangepi/mavros.log21sleep10# 等待mavros节点初始化完成# 2. 启动Livox激光雷达驱动节点sleep10cd/home/orangepi/code/livox_wssourcedevel/setup.bashnohupbash-cexport ROS_HOSTNAMEorangepi; export ROS_IP10.164.150.221; roslaunch livox_ros_driver2 msg_MID360.launch/home/orangepi/livox.log21# 3. 启动Fast-LIO建图节点依赖livox和mavros数据sleep15cd/home/orangepi/code/livox_wssourcedevel/setup.bashnohupbash-cexport ROS_HOSTNAMEorangepi; export ROS_IP10.164.150.221; roslaunch fast_lio mapping_mid360.launch/home/orangepi/fast_lio.log21# 4. 启动ego_planner规划节点依赖建图和mavros数据sleep10cd/home/orangepi/code/fast_drone_wssourcedevel/setup.bashnohupbash-cexport ROS_HOSTNAMEorangepi; export ROS_IP10.164.150.221; roslaunch ego_planner single_run_in_exp.launch/home/orangepi/ego_planner.log21cd/home/orangepi/bag_save_auto#nohup rosbag record --split --duration60 /Odometry /cloud_registered /livox/imu /livox/lidar /mavros/imu/data_raw # 保持脚本运行sleep999999exit1总结本次问题的核心是ROS 环境变量配置错误自启脚本环境失效从机消息类缺失。解决流程可归纳为正确配置主从机ROS_IP/ROS_MASTER_URI和/etc/hosts。修复自启脚本确保节点继承正确的网络配置。从机编译对应功能包解决消息类加载问题。RVIZ 加载配置或手动添加话题实现可视化。该流程适用于所有 ROS 主从机通信场景尤其适合需要自动启动节点的嵌入式设备项目。参考资料https://github.com/ZJU-FAST-Lab/Fast-Drone-250https://blog.csdn.net/kjb655/article/details/151579873?ops_request_misc%257B%2522request%255Fid%2522%253A%252256ee626d58a463dd6379252f9a6257ea%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257Drequest_id56ee626d58a463dd6379252f9a6257eabiz_id0utm_mediumdistribute.pc_search_result.none-task-blog-2allsobaiduend~default-2-151579873-null-null.142v102pc_search_result_base2utm_termego%20planner%20mid360spm1018.2226.3001.4187https://blog.csdn.net/qq_56338777/article/details/156907497?spm1011.2415.3001.5331https://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%257Drequest_id26654f59f59406de58c21a128b46af44biz_id0utm_mediumdistribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~hot_rank-2-106781954-null-null.142v102pc_search_result_base2utm_termros%E4%B8%BB%E4%BB%8Espm1018.2226.3001.4187