ROS Network Autoconfiguration¶
The goal of this packge is to provide automatic configuration of ROS networking for most use cases without impacting usage that require manual configuration.
Note
While the current design does not consider IPv6 support, contributions are appreciated.
Usage¶
Once installed, autoconfiguration is enabled by setting the ROS_INTERFACE
environment variable in ~/.bashrc or the local equivilent.
ROS_INTERFACE=auto
source /opt/ros/kinetic/setup.bash
setup.bash will call the environment hook
installed as /opt/ros/kinetic/catkin/profile.d/20.network_autoconfig.sh
and set the ROS_IP, ROS_HOSTNAME, and ROS_MASTER_URI as needed.
Use Cases¶
Based on the most common use cases encountered in the field, the following
networks configuration modes can be configured by setting the ROS_INTERFACE
environment variable before sourcing the ROS environment.
Fully Automatic Networking¶
ROS_INTERFACE=auto
In this mode the env-hook will attempt the determine the ROS_IP by
querying the routing tables for the default route.
If a VPN provides the default route, the ROS_IP will be set to the local side
of the tunnel. This may prevent it from being able to connect to other hosts
on the local network. If this is not the desired operation, consider Semi-automatic
Networking.
This mode will also set the ROS_MASTER_URI by IP address and will update the
ROS_INTERFACE variable to the detected default gateway interface.
Automatic Local Networking¶
ROS_INTERFACE=local
In this mode the ROS_MASTER_URI and the ROS_HOSTNAME will be set to
$HOSTNAME.local for Avahi zeroconf networking.
Semi-automatic Networking¶
ROS_INTERFACE=wlp3s0
This mode uses the ROS_INTERFACE to specify a network device, and will
automatically set the ROS_IP and ROS_MASTER_URI based on the primary
IPv4 address assigned to the specified interface. This mode is also good for
cases where the robot has a telemetry link to the internet but connects to
other robots over an ethernet connection that is configured via DHCP.
Manual Networking¶
If the IP address is static the ROS_IP, ROS_HOSTNAME, and
ROS_MASTER_URI can be configured manually and the env-hook is a no-op.
Source Install¶
Installing from source may require something like
ROS_INTERFACE=wlp3s0
source $ROS_WORKSPACE/devel/setup.bash