我们使用的是 Raspberry Pi,它有一个连接到以太网端口的激光雷达。问题是 mdns4_minimal 将 $(hosname).local 解析为两个 IP。一个 IP 是从以太网端口(来自 Lidar)获取的,另一个 IP 是从 WiFi 获取的。这会导致 ROS 出现问题,某些节点获取的是激光雷达的 IP 地址,而不是 WiFi 的 IP 地址,从而导致节点之间无法正确通信。
我认为解决方案可能是更改主机名解析的优先级以优先考虑 WiFi 连接,但我在互联网上没有找到任何说明如何做到这一点。
或者有更好的方法来解决这个问题吗?
答案1
首先,您可以指定名称解析优先级(或者更确切地说,命令) 在/etc/nsswitch.conf
。
例如,在 Raspbian 11(牛眼)Pi 上,相关部分/etc/nsswitch.conf
如下所示:
hosts: files mdns4_minimal [NOTFOUND=return] dns
例如,如果您将其放在dns
mdns4_minimal 之前,则主机名解析将优先使用 dns 而不是 mdns:
hosts: files dns mdns4_minimal [NOTFOUND=return]
阅读您的评论后,我了解您希望保留 mDNS 解析,但指定哪个接口都参与了这个过程。
deny-interfaces
您可以通过将接口添加到中的列表来指示 Avahi 守护进程(负责 mDNS)忽略该接口/etc/avahi/avahi-daemon.conf
。来自联机帮助页:
deny-interfaces= Set a comma separated list of network interfaces that should be ignored by avahi-daemon. Other not specified interfaces will be used, unless allow-interfaces= is set.
This option takes precedence over allow-interfaces=.
然后,使用 重新启动守护进程systemctl restart avahi-daemon
。