最近在 WSL2 + ROS2 Humble + Webots 环境中运行 webots_ros2_universal_robot 示例时,发现 webots-controller 启动后立刻退出。日志显示它自动使用了一个明显不对的地址:
[ERROR] [webots_controller_UR5e-3]: process has died [pid 2087, exit code 1, cmd '/opt/ros/humble/share/webots_ros2_driver/scripts/webots-controller --robot-name=UR5e --protocol=tcp --ip-address=10.255.255.254 --port=1234 ...']
但当前 WSL2 中明明存在正确可用的业务网卡地址,例如:
eth3 = 192.168.10.88eth1 = 192.168.192.160
一开始很容易怀疑是 Webots 选错了网卡,实际上问题更准确地说是:
webots_ros2_driver在 WSL2 下自动推断 Webots 主机地址时,错误地读取了/etc/resolv.conf中的nameserver,并把它当成了 Webots 服务器地址。
如果你的 /etc/resolv.conf 恰好包含:
nameserver 10.255.255.254
那么最终 webots-controller 就会拿着这个错误地址去连接,导致启动失败。
问题现象
运行类似下面的命令启动 Webots 示例:
ros2 launch webots_ros2_universal_robot multirobot_launch.py
控制器节点很快报错退出,日志中的关键部分如下:
[ERROR] [webots_controller_UR5e-3]: process has died [pid 2087, exit code 1, cmd '/opt/ros/humble/share/webots_ros2_driver/scripts/webots-controller --robot-name=UR5e --protocol=tcp --ip-address=10.255.255.254 --port=1234 ros2 --ros-args -r __ns:=/ur5e -p robot_description:=/opt/ros/humble/share/webots_ros2_universal_robot/resource/ur5e_with_gripper.urdf.xacro -p xacro_mappings:=['name:=UR5eWithGripper'] -p use_sim_time:=True -p set_robot_state_publisher:=True --params-file /opt/ros/humble/share/webots_ros2_universal_robot/resource/ros2_control_config.yaml']
而 ifconfig 中实际存在多个 IPv4 地址,例如:
eth1: 192.168.192.160 eth3: 192.168.10.88
看起来像是'地址选错了',但继续深挖会发现,它根本不是从正常网卡选择逻辑里挑出来的。

