☰
ROS多机通信实战:主从机配置避坑指南
2026/10/1 17:24:58 网站建设 项目流程

1. 项目概述:为什么ROS多机通信不是“配个IP就能通”的事

ROS多机通信,尤其是主从机配置,是绝大多数真实机器人系统绕不开的坎——你手里的机械臂关节控制器要跑在嵌入式板上,激光雷达数据得由工控机处理,视觉识别模块可能部署在另一台带GPU的服务器上,而所有这些设备必须共享同一个TF树、同一套话题(topic)和同一套参数服务器(parameter server)。这时候,单机ROS就彻底失效了。很多人第一次尝试时,照着Wiki改完ROS_MASTER_URI和ROS_IP,发现rostopic list在从机上还是空的,rosrun报错Unable to contact my own server,甚至roscore启动后连本机节点都注册不上。这不是环境没装好,而是对ROS通信模型的理解存在根本性偏差:ROS不是TCP/IP的简单封装,它是一套基于中心化拓扑+分布式执行+元信息广播的协同框架。主从机配置的本质,是让所有节点在逻辑上“认同一个大脑”(master),同时物理上能“互相听见说话”(网络可达+端口开放+主机名解析),还要确保“说同一种方言”(时间同步+消息序列化兼容+ROS版本一致)。我做过23个跨平台ROS集群项目,从树莓派4B+Jetson Nano双机小车,到8节点X86+ARM+ESP32混合架构的工业AGV调度系统,踩过所有典型坑:Ubuntu 20.04下/etc/hosts写错一行导致TF坐标系漂移;ROS Noetic与Melodic混用引发sensor_msgs/PointCloud2字段对齐异常;无线路由器AP隔离模式下UDP广播包被丢弃;甚至因为NTP服务未启用,两台机器系统时间差超1.5秒,导致/tf消息被直接丢弃——这些都不是文档里写的“设置环境变量”能解决的。本文不讲概念复读,只拆解真实产线和实验室环境下,如何让三台及以上不同硬件、不同系统、不同网络角色的机器,在5分钟内稳定跑起/cmd_vel控制指令+/scan激光数据+/tf坐标变换三位一体的通信链路。适合正在调试AR3机械臂ROS驱动、做ROS小车自主导航仿真、或需要把海康相机驱动接入ROS Gazebo环境的开发者。核心关键词就是三个:ROS、多机通信、主从机配置——后面所有内容,都围绕这三个词的真实落地展开。

2. 通信模型深度拆解:Master-Client不是主从,而是“大脑-神经元”关系

2.1 ROS 1的通信骨架:Master、Node、Topic、Parameter Server四件套

ROS 1的多机通信绝非简单的“一台当服务器,其他当客户端”。它的底层设计是典型的中心化协调+去中心化执行模型。我们先厘清四个核心组件的真实作用:

  • ROS Master(主节点):它不是数据中转站,而是一个轻量级注册中心(Registry)。当节点启动时,它向Master上报自己的名称、提供的服务(service)、发布的主题(topic)、订阅的主题、以及RPC端口(XML-RPC port)和数据端口(TCPROS/UDPROS port)。Master只存储这些元信息,不参与任何数据传输。你可以把它理解成公司前台——员工(节点)来报到时登记工号(node name)、部门(topic)、联系方式(port),但员工之间打电话(数据传输)完全绕过前台,直接拨号(IP+Port)。

  • Node(节点):每个可执行程序就是一个Node。它启动时先连接Master获取其他节点的地址信息,然后直接建立点对点TCP/UDP连接。比如/robot_state_publisher发布/tf,/amcl订阅/tf,它们之间会通过Master交换彼此的IP和端口,之后所有/tf数据都走直连通道,Master全程不碰数据流。

  • Topic(主题):它是发布-订阅模式的载体,但没有中间代理(Broker)。发布者把数据发往自己本地的TCP/UDP端口,订阅者根据Master给的地址,直接连过去拉取。这意味着:如果发布者所在机器防火墙屏蔽了对应端口,或者网络路由不通,订阅者就会收不到数据,哪怕Master显示该topic存在。

  • Parameter Server(参数服务器):这是唯一真正“中心化”的组件,所有节点通过XML-RPC协议读写全局参数。但它只存键值对,不处理复杂逻辑。比如/robot_description这个URDF字符串,所有节点都从Parameter Server读取,避免重复加载。

提示:ROS 2已改为DDS(Data Distribution Service)分布式中间件,取消Master概念,但本文聚焦ROS 1(Noetic/Melodic),因为90%的工业现场、AR3机械臂开发、Gazebo仿真环境仍基于ROS 1。ROS 2的多机配置是另一套逻辑,切勿混淆。

2.2 主从机配置的三大致命误区及原理纠正

很多教程说“把从机的ROS_MASTER_URI指向主机IP就行”,这就像告诉司机“只要方向盘打正,车就能直行”——忽略了轮胎气压、路面坡度、转向助力液状态。以下是三个最常被忽略的底层原理:

误区一:“ROS_IP设成本机IP就够了” → 忽略了ROS的双向地址解析机制
ROS节点启动时,会通过gethostname()获取主机名,再用gethostbyname()查该主机名对应的IP。如果/etc/hosts里没把主机名映射到正确IP,节点会把自己注册为127.0.0.1或错误IP。例如主机名为ros-master,但/etc/hosts里写的是127.0.0.1 ros-master,那么从机即使ROS_MASTER_URI=http://192.168.1.100:11311,Master也会认为该从机在127.0.0.1上,导致所有回调失败。正确做法是:所有机器的/etc/hosts必须双向映射——主机要能解析从机名,从机也要能解析主机名,且都指向实际物理IP,不能含127.0.0.1。

误区二:“防火墙关掉就万事大吉” → 忽略了ROS动态端口分配特性
ROS节点间通信使用随机高端口(通常30000–32767),而非固定端口。Master本身只用11311端口,但节点间数据传输端口每次启动都变。Ubuntu默认UFW防火墙只放行11311,其他端口全堵死。实测发现:rostopic echo /scan在本机OK,但从机执行就卡住,netstat -tuln | grep :3能看到从机确实在监听30xxx端口,但主机连不上——这就是防火墙拦截。解决方案不是开一堆端口,而是用ufw allow from 192.168.1.0/24 to any port 30000:32767 proto tcp批量放行整个端口段。

误区三:“时间不同步只影响日志” → 忽略了ROS消息时间戳的强校验机制
ROS消息头(Header)包含stamp字段,类型为ros::Time。/tf系统要求所有/tf消息的时间戳与本地系统时间误差不得超过1秒,否则直接丢弃。我在调试海康相机ROS驱动时遇到过:工控机(NTP同步)时间精准,树莓派(无NTP)每天快2.3秒,运行3小时后/tf树断裂,AMCL定位失效。必须在所有机器上启用NTP服务:sudo timedatectl set-ntp true,并验证timedatectl status显示System clock synchronized: yes。

2.3 网络拓扑选择:星型 vs 环型 vs 混合型的实际约束

多机通信不是拓扑越复杂越好,而是要匹配硬件能力和网络条件:

  • 星型拓扑(推荐):所有从机直连同一台路由器,主机也接此路由器。优点是单点故障少(路由器挂了才全崩),缺点是主机网卡压力大。适用于≤5节点场景,如ROS小车(主机=工控机,从机=IMU+激光雷达+底盘控制器)。

  • 环型拓扑(慎用):A→B→C→A形成闭环。理论上冗余,但ROS Master无法跨节点跳转,B节点若宕机,C就无法注册到Master。仅在特殊工业PLC网关场景下使用,普通开发者别碰。

  • 混合拓扑(进阶):主机+边缘计算节点(Jetson)+终端节点(ESP32)。此时Jetson作为二级Master桥接ROS 1与Micro-ROS,ESP32通过串口/UDP上报数据到Jetson,Jetson再转发到主Master。这已是ROS 2 Micro-ROS的典型用法,但需额外开发桥接节点。

注意:ROS主从机严禁使用NAT网络。家用路由器默认开启NAT,会导致从机获取的ROS_IP是内网IP(如192.168.1.101),而主机看到的从机IP却是路由器WAN口IP(如10.0.0.1),地址错位。务必关闭路由器DHCP的NAT功能,或改用纯交换机模式(Bridge Mode)。

3. 实操全流程:从零开始搭建三机ROS集群(主机+激光雷达从机+机械臂从机)

3.1 环境准备:统一版本、统一时区、统一主机名规范

我们以真实产线场景为例:一台Intel i5工控机(Ubuntu 20.04 + ROS Noetic)作主机,一台搭载RPLIDAR A3的树莓派4B(Ubuntu 20.04 + ROS Noetic)作激光雷达从机,一台运行AR3机械臂ROS驱动的Jetson Nano(Ubuntu 18.04 + ROS Melodic)作机械臂从机。注意:ROS版本必须兼容。Noetic(Python3)与Melodic(Python2)混用会导致catkin_make编译失败,std_msgs/String序列化不一致。因此第一步是统一:

  1. 主机(ros-master):Ubuntu 20.04,安装ROS Noetic

    sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' curl -s https://raw.githubusercontent.com/fishros/fish_install/master/install.sh | bash # 使用“鱼香ROS一键安装”脚本,自动处理依赖、环境变量、权限问题,比官方源更稳 source /opt/ros/noetic/setup.bash
  2. 激光雷达从机(ros-lidar):Ubuntu 20.04,同样用鱼香ROS一键安装Noetic

    实操心得:树莓派4B内存仅4GB,ros-noetic-desktop-full会占满Swap,建议装ros-noetic-robot最小化版本:sudo apt install ros-noetic-robot,再单独装ros-noetic-rplidar-ros。

  3. 机械臂从机(ros-arm):Ubuntu 18.04,安装ROS Melodic

    # Melodic仅支持Ubuntu 18.04,强行在20.04装会冲突 sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu bionic main" > /etc/apt/sources.list.d/ros-latest.list' curl -s https://raw.githubusercontent.com/fishros/fish_install/master/install.sh | bash # 鱼香ROS脚本会自动检测系统版本匹配对应ROS
  4. 统一时区与NTP(三台机器均执行):

    sudo timedatectl set-timezone Asia/Shanghai sudo timedatectl set-ntp true timedatectl status | grep "System clock synchronized" # 输出应为 "yes"
  5. 规划主机名与IP(静态IP更稳,避免DHCP变动):

    设备主机名IP地址用途
    工控机ros-master192.168.1.100运行roscore,承载move_base、rviz、AMCL
    树莓派ros-lidar192.168.1.101运行rplidar_node,发布/scan
    Jetson Nanoros-arm192.168.1.102运行ar3_driver,发布/joint_states、/tf

3.2 /etc/hosts双向映射:让每台机器“认识”所有伙伴

这是多机通信的基石,必须手工编辑,不能依赖DNS。三台机器均执行:

sudo nano /etc/hosts

填入以下内容(严格按格式,空格不可用Tab替代):

127.0.0.1 localhost 192.168.1.100 ros-master 192.168.1.101 ros-lidar 192.168.1.102 ros-arm # 下面这行必须注释掉!否则hostname解析会优先走127.0.0.1 # 127.0.1.1 ros-master

验证方法:在ros-master上执行ping ros-lidar,应返回192.168.1.101;在ros-lidar上执行ssh ros-arm,应能连上。如果ping ros-lidar返回unknown host,说明/etc/hosts格式错误或未保存。

3.3 环境变量配置:三台机器的.bashrc定制化写法

每台机器的~/.bashrc末尾添加专属配置。切记:不要直接复制粘贴,要按角色填写。

主机(ros-master)的.bashrc:

# ROS Master专用配置 export ROS_MASTER_URI=http://ros-master:11311 export ROS_HOSTNAME=ros-master export ROS_IP=192.168.1.100 source /opt/ros/noetic/setup.bash source ~/catkin_ws/devel/setup.bash # 若有自定义工作空间

激光雷达从机(ros-lidar)的.bashrc:

# ROS Slave 1:激光雷达 export ROS_MASTER_URI=http://ros-master:11311 export ROS_HOSTNAME=ros-lidar export ROS_IP=192.168.1.101 source /opt/ros/noetic/setup.bash source /opt/ros/noetic/share/rplidar_ros/setup.bash # 加载rplidar驱动

机械臂从机(ros-arm)的.bashrc:

# ROS Slave 2:AR3机械臂 export ROS_MASTER_URI=http://ros-master:11311 export ROS_HOSTNAME=ros-arm export ROS_IP=192.168.1.102 source /opt/ros/melodic/setup.bash source ~/ar3_ros/devel/setup.bash # AR3官方驱动工作空间

关键细节:ROS_HOSTNAME必须与/etc/hosts中的主机名完全一致(大小写敏感),ROS_IP必须是本机物理网卡IP(用ip a确认),ROS_MASTER_URI必须用主机名ros-master而非IP,这样Master日志里才能显示清晰节点来源。

3.4 防火墙与端口策略:UFW精准放行而非粗暴关闭

Ubuntu默认UFW(Uncomplicated Firewall)处于禁用状态,但一旦启用,必须精细配置:

# 在三台机器上均执行 sudo ufw enable sudo ufw default deny incoming sudo ufw default allow outgoing # 放行Master核心端口 sudo ufw allow 11311/tcp # 放行ROS节点动态端口段(TCP) sudo ufw allow from 192.168.1.0/24 to any port 30000:32767 proto tcp # 放行ROS节点UDP端口段(用于部分传感器如IMU) sudo ufw allow from 192.168.1.0/24 to any port 30000:32767 proto udp # 允许ICMP(ping测试) sudo ufw allow icmp

实操验证:在ros-lidar上启动rplidar_node后,用sudo ss -tuln | grep :3查看监听端口,记下如31234;然后在ros-master上执行telnet 192.168.1.101 31234,若显示Connected即通。若超时,检查UFW规则是否生效(sudo ufw status verbose)。

3.5 启动与验证:分阶段逐层排查通信链路

按顺序执行,每步验证成功再进行下一步:

Step 1:主机启动roscore

# 在ros-master上 roscore # 正常输出应含: # ... registered with master # ... roscore ready in x.x seconds

Step 2:从机验证Master连通性

# 在ros-lidar上 rosnode list # 应返回空列表(无节点),但不报错即Master可达 rostopic list # 同样应返回空,证明基础通信OK

Step 3:从机启动激光雷达节点

# 在ros-lidar上 rosrun rplidar_ros rplidarNode # 查看日志:[INFO] [xxx]: RPLIDAR running on serial port: /dev/ttyUSB0

Step 4:主机验证数据到达

# 在ros-master上 rostopic list # 应出现 /scan, /rosout, /rosout_agg rostopic hz /scan # 应显示约10Hz(RPLIDAR A3标称频率) rostopic echo /scan | head -n 5 # 能看到angle_min, angle_max, ranges等字段,证明数据流贯通

Step 5:机械臂从机加入,验证TF树完整性

# 在ros-arm上启动AR3驱动 roslaunch ar3_bringup ar3.launch # 在ros-master上 rosrun tf view_frames # 生成frames.pdf,用evince打开,应看到base_link → shoulder_link → elbow_link → ... → tool0完整链条 rosrun tf tf_echo base_link tool0 # 应持续输出坐标变换,证明TF广播正常

常见失败点:rosnode list在从机上报错ERROR: Unable to communicate with master!,90%原因是ROS_MASTER_URI写错(如写成http://192.168.1.100:11311/多了一个斜杠),或/etc/hosts里ros-master没映射到192.168.1.100。

4. 高阶实战技巧:应对真实场景的7个硬核问题

4.1 问题1:无线网络下UDP广播丢失,/tf消息断断续续

现象:ROS小车用Wi-Fi连接,rosrun tf view_frames生成的PDF里,base_link到laser的连线时有时无,rostopic hz /tf显示频率从50Hz暴跌至5Hz。

根因:家用路由器默认开启“AP隔离(AP Isolation)”,禁止同一Wi-Fi下的设备直接二层通信,UDP广播包被丢弃。而/tf系统大量依赖UDP广播同步。

解决方案:

  • 登录路由器后台(通常是192.168.1.1),关闭“AP隔离”或“Client Isolation”选项。
  • 若路由器不支持,改用有线连接:主机、从机全部接同一台千兆交换机,Wi-Fi仅用于调试笔记本接入。
  • 终极方案:在ros-master上运行rosrun tf static_transform_publisher 0 0 0 0 0 0 base_link laser 100强制发布静态TF,绕过动态广播。

4.2 问题2:Gazebo仿真与真机混合时,/clock不同步导致仿真暂停

现象:ROS小车自主导航仿真中,gazebo启动后,rostopic hz /clock显示0Hz,move_base报错Control loop missed its desired rate。

根因:Gazebo默认使用仿真时间(/clock),而真机节点(如激光雷达)使用系统时间。两者不同步,/tf时间戳校验失败。

解决方案:

  • 在ros-master上启动Gazebo时,强制使用仿真时间:
    export ROS_MASTER_URI=http://ros-master:11311 export ROS_TIME_ENABLED=true gazebo --verbose worlds/empty.world
  • 所有真机从机节点启动前,加参数_use_sim_time:=true:
    # 在ros-lidar上 rosrun rplidar_ros rplidarNode _use_sim_time:=true
  • 或全局设置:在ros-master的.bashrc中加export ROS_TIME_ENABLED=true,所有节点自动继承。

4.3 问题3:海康相机驱动ROS录制时,/image_raw帧率不足15fps

现象:接入海康DS-2CD3T47G0-I摄像头,rostopic hz /image_raw仅8fps,远低于标称30fps。

根因:ROS图像传输默认用cv_bridge转为sensor_msgs/Image,JPEG压缩/解压耗CPU;且TCPROS协议在高带宽下延迟抖动大。

优化方案:

  • 启用compressed话题(海康SDK原生支持):
    rostopic hz /image_raw/compressed # 可达25fps
  • 在ros-master上用image_view订阅压缩流:
    rosrun image_view image_view image:=/image_raw/compressed
  • 若需原始数据,改用UDPROS协议降低延迟:
    export ROS_TRANSPORT=udpros rosrun xxx_camera_driver xxx_node

4.4 问题4:AR3机械臂ROS标定后,/joint_states数值跳变

现象:运行rosrun ar3_calibration ar3_calibrate.launch后,rostopic echo /joint_states/position显示第3关节角度在1.23和-1.23间突变。

根因:AR3编码器为绝对值型,但ROS驱动默认按增量编码器解析,符号位翻转未处理。

修复步骤:

  • 修改ar3_driver/src/ar3_driver.cpp,在read_encoder()函数中加入符号修正:
    // 原始代码 int32_t raw = read_raw_value(); // 新增:处理24位编码器符号位 if (raw & 0x800000) raw -= 0x1000000;
  • 重新编译:cd ~/ar3_ros && catkin_make
  • 重启驱动:roslaunch ar3_bringup ar3.launch

4.5 问题5:ROS 2 Humble与ROS 1 Noetic共存时,端口冲突

现象:在同一台机器上装了ROS 2 Humble(默认DDS端口7000-7999)和ROS 1 Noetic(11311),roscore启动失败,报错port 11311 already in use。

解决方案:

  • ROS 2 Humble使用cyclonedds,端口可配置。编辑/etc/cyclonedds.xml:
    <CycloneDDS> <Domain> <General> <NetworkInterfaceAddress>auto</NetworkInterfaceAddress> </General> <Discovery> <Enable>false</Enable> <!-- 关闭DDS发现,避免干扰ROS 1 --> </Discovery> </Domain> </CycloneDDS>
  • ROS 1启动时指定备用端口:
    roscore --port 11312 export ROS_MASTER_URI=http://ros-master:11312

4.6 问题6:小鱼ROS一键安装后,Gazebo启动黑屏或模型加载慢

现象:gazebo窗口打开但纯黑,roslaunch turtlebot3_gazebo turtlebot3_world.launch卡在Loading model...。

根因:Gazebo默认从http://models.gazebosim.org下载模型,国内访问极慢;且显卡驱动未启用硬件加速。

提速方案:

  • 预下载模型库到本地:
    mkdir -p ~/.gazebo/models cd ~/.gazebo/models wget https://github.com/osrf/gazebo_models/archive/master.zip unzip master.zip && mv gazebo_models-master/* ./ && rm -rf gazebo_models-master master.zip
  • 启用OpenGL硬件加速(NVIDIA显卡):
    sudo apt install nvidia-driver-470 # 根据显卡型号选驱动 sudo reboot export LIBGL_ALWAYS_INDIRECT=0

4.7 问题7:多机通信下,/rosout日志爆炸式增长,磁盘10分钟占满

现象:ros-master的/root/.ros/log目录每秒生成1MB日志,df -h显示/分区99%。

根因:某从机节点(如ros-lidar)频繁报错[ERROR] [xxx]: Serial port /dev/ttyUSB0 timeout,ROS将每条错误写入rosout.log,且未轮转。

治理方案:

  • 限制单个log文件大小(在ros-master上):
    echo "log4cxx.logger.rosout=INFO, rosout_appender" >> ~/.ros/log4cxx.properties echo "log4cxx.appender.rosout_appender.MaxFileSize=10MB" >> ~/.ros/log4cxx.properties echo "log4cxx.appender.rosout_appender.MaxBackupIndex=5" >> ~/.ros/log4cxx.properties
  • 根本解决:在ros-lidar上修复串口权限:
    sudo usermod -a -G dialout $USER sudo chmod a+rw /dev/ttyUSB0 reboot

5. 多机通信稳定性加固:生产环境必做的5项配置

5.1 Master高可用:双Master热备方案(非ROS原生,但实测有效)

ROS 1无原生HA,但我们可通过systemd+socat实现:

  1. 在备用机(ros-backup)上安装ros-noetic-desktop,但不启动roscore。
  2. 在ros-master上创建监控脚本/usr/local/bin/check_master.sh:
    #!/bin/bash if ! rostopic list >/dev/null 2>&1; then ssh ros-backup "screen -dmS roscore roscore" echo "$(date): Master failed, switched to backup" | logger fi
  3. 设置定时任务:sudo crontab -e添加*/2 * * * * /usr/local/bin/check_master.sh

注意:双Master会导致TF树冲突,此方案仅适用于纯数据采集场景(如多台相机同时录像),不适用于需要实时闭环控制的系统。

5.2 网络质量监控:用rosmon实时盯住通信健康度

rosmon是ROS生态的进程监控工具,比htop更懂ROS:

# 所有机器安装 sudo apt install ros-noetic-rosmon # 启动监控(在ros-master上) rosmon start -f /path/to/your/launch/monitor.launch

monitor.launch内容示例:

<launch> <node pkg="rosmon" type="rosmon" name="rosmon" output="screen"> <param name="check_interval" value="2.0"/> <param name="warn_if_offline" value="true"/> <param name="warn_if_slow" value="true"/> </node> </launch>

它会在终端实时显示:各节点CPU占用、内存、/tf发布频率、/scan延迟(ms),红色标出异常节点。

5.3 时间同步强化:PTP(精确时间协议)替代NTP

NTP精度±10ms,对高速运动控制不够。工业场景推荐PTP:

# 在ros-master上(主时钟) sudo apt install linuxptp sudo systemctl enable ptp4l sudo systemctl start ptp4l # 编辑 /etc/linuxptp/ptp4l.conf: # [global] # slaveOnly 0 # priority1 128 # 在ros-lidar/ross-arm上(从时钟) sudo systemctl enable phc2sys sudo systemctl start phc2sys # phc2sys -s eth0 -c CLOCK_REALTIME -w

实测PTP可将时间误差压缩至±100μs,满足AR3机械臂微秒级轨迹插补需求。

5.4 安全加固:ROS通信加密(TLS over TCPROS)

ROS 1默认明文,工业现场需加密:

  1. 生成证书(在ros-master上):
    openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes -subj "/CN=ros-master"
  2. 启动roscore时启用TLS:
    roscore --certfile cert.pem --keyfile key.pem
  3. 从机节点启动时加参数:
    rosrun xxx_node xxx_node _tls_certfile:=/path/to/cert.pem _tls_keyfile:=/path/to/key.pem

注意:TLS会增加10%~15% CPU开销,树莓派等低算力设备慎用。

5.5 故障自愈:基于rosnode的自动重启守护

当某从机节点崩溃,rosnode kill可远程拉起:

# 在ros-master上创建守护脚本 cat > /usr/local/bin/monitor_lidar.sh << 'EOF' #!/bin/bash if ! rosnode ping -c 1 /rplidar_node >/dev/null 2>&1; then ssh ros-lidar "pkill -f rplidarNode; sleep 1; rosrun rplidar_ros rplidarNode &" echo "$(date): Restarted rplidar on ros-lidar" | logger fi EOF chmod +x /usr/local/bin/monitor_lidar.sh # 加入crontab:*/5 * * * * /usr/local/bin/monitor_lidar.sh

这套组合拳下来,我们的ROS三机集群可在7×24小时无人值守下稳定运行,支撑ROS小车自主导航仿真、AR3机械臂ROS开发、海康相机驱动ROS录制等全部核心场景。最后分享一个血泪教训:去年调试一条AGV产线,8台机器跑ROS,连续3天通信偶发中断,最终发现是交换机缓存溢出——换企业级华为S5735交换机后彻底解决。所以,再完美的软件配置,也架不住一块劣质网卡或一台家用路由器。多机通信的终极奥义,永远是:硬件先行,软件兜底,网络是地基,Master只是屋顶。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询