Skip to content

Network Configuration Guide

Proper network configuration is essential for reliable robot communication and competition compliance. This guide covers the complete MARSLib network setup.

    
flowchart TD
  A["Driver Station Laptop"] -->|10.0.0.5<br/>FMS| B["OM5P Radio"]
  B -->|10.TE.AM.1<br/>Robot LAN| C["roboRIO"]
  B -->|Bridge<br/>2.4GHz| D["Devices"]
  
  E["IP Cameras"] -->|10.TE.AM.2+| B
  F["Co-Processor"] -->|10.TE.AM.20| B
  G["Limelight"] -->|10.TE.AM.11| B
  
  H["Field Management<br/>System"] -->|FMS| B
  
  C -->|CAN| I["Motor Controllers"]
  C -->|CAN| J["Sensors"]
  
  style A fill:#B32416,stroke:#d42e1e,stroke-width:2px,color:#fff
  style B fill:#1a1a1a,stroke:#2a2a2a,stroke-width:2px,color:#e8e8e8
  style C fill:#1a1a1a,stroke:#2a2a2a,stroke-width:2px,color:#29b6f6
  style H fill:#1a1a1a,stroke:#B32416,stroke-width:2px,color:#fff
  style E fill:#2a2a2a,stroke:#1a1a1a,stroke-width:1px,color:#666
  style F fill:#2a2a2a,stroke:#1a1a1a,stroke-width:1px,color:#666
  style G fill:#2a2a2a,stroke:#1a1a1a,stroke-width:1px,color:#ff6b6b
  style I fill:#0a0a0a,stroke:#2a2a2a,stroke-width:1px,color:#666
  style J fill:#0a0a0a,stroke:#2a2a2a,stroke-width:1px,color:#666

  
DeviceIP AddressPurpose
roboRIO10.TE.AM.1Main robot controller
Driver Station10.TE.AM.5Competition laptop
Radio10.TE.AM.1Bridge (same as roboRIO)
IP Camera 110.TE.AM.11Vision camera 1
IP Camera 210.TE.AM.12Vision camera 2
Co-Processor10.TE.AM.20Raspberry Pi/Jetson
Limelight10.TE.AM.11Vision system

Legend: TE = Team Number, AM = Alliance (Red/Blue)

Example for Team 2614:

  • roboRIO: 10.26.14.1
  • Driver Station: 10.26.14.5
  • Camera 1: 10.26.14.11

Initial Radio Configuration:

  1. Connect to radio via Ethernet.
  2. Access web interface: http://192.168.1.1
  3. Login: admin / admin.
  4. Set team number: Your FRC team number.
  5. Configure channel: Choose least congested 2.4GHz channel.
  6. Set security: WPA2-Personal with strong password.

Competition Settings:

{
"teamNumber": 2614,
"channel": 6,
"security": "WPA2-Personal",
"band": "2.4GHz",
"bandwidthLimit": "20Mbps",
"firewall": "enabled"
}

Method 1: Web Dashboard

  1. Connect to roboRIO USB.
  2. Access: http://roborio-TEAM-FRC.local
  3. Configure → Network.
  4. Set static IP: 10.TE.AM.1

Method 2: Imaging Tool

  1. Open roboRIO Imaging Tool.
  2. Configure team number.
  3. Image to SD card.
  4. Image roboRIO (5-10 minutes)

Limelight Configuration:

  1. Connect to Limelight via USB.
  2. Access: http://limelight.local or 10.TE.AM.11
  3. Configure:
    • Set static IP: 10.TE.AM.11
    • Team number: Your team number.
    • Camera exposure: Low (5-15 for AprilTags)
    • Pipeline: AprilTag pipeline.

PhotonVision Configuration:

  1. Install PhotonVision on coprocessor.
  2. Configure network settings:
    • Static IP: 10.TE.AM.11
    • Gateway: 10.TE.AM.1
    • DNS: 10.TE.AM.1

Raspberry Pi Configuration:

Terminal window
# Edit network configuration
sudo nano /etc/dhcpcd.conf
# Add static IP configuration
interface eth0
static ip_address=10.26.14.20/24
static routers=10.26.14.1
static domain_name_servers=10.26.14.1
# Restart networking
sudo systemctl restart dhcpcd

Jetson Orin Configuration:

Terminal window
# Configure network interface
sudo nmcli con modify "Wired connection 1" \
ipv4.addresses 10.26.14.20/24 \
ipv4.gateway 10.26.14.1 \
ipv4.dns "10.26.14.1" \
ipv4.method manual

Vision System Network Setup:

public class VisionNetworkConfig {
public static final String ROBORIO_IP = "10.26.14.1";
public static final String LIMELIGHT_IP = "10.26.14.11";
public static final String COPROCESSOR_IP = "10.26.14.20";
// Camera configurations
public static final int FRONT_CAM_ID = 11;
public static final int BACK_CAM_ID = 12;
public static void configureCameras() {
// Configure Limelight
Limelight frontCamera = new Limelight(FRONT_CAM_ID);
frontCamera.setPipelineIndex(0); // AprilTag pipeline
// Configure PhotonVision
PhotonCamera backCamera = new PhotonCamera("back-cam");
backCamera.setVersion(PhotonVersion.v3);
}
}

Network Tables Server Configuration:

public class NetworkTablesConfig {
public static final String SERVER_ADDRESS = "10.26.14.1"; // roboRIO
public static void configureNetworkTables() {
// Start NetworkTables server on roboRIO
NetworkTables.startServer();
NetworkTables.setServerTeam(2614); // Automatically configures IP
}
}

Client Configuration:

public class NetworkTablesClient {
public static void connectToRobot() {
// Connect to robot NetworkTables
NetworkTables.setClientTeam(2614);
NetworkTables.startClient4();
// Wait for connection
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
boolean connected = NetworkTables.isConnected();
if (!connected) {
System.err.println("Failed to connect to robot NetworkTables!");
}
}
}

Issue: Cannot Connect to Robot

Diagnosis:

Terminal window
# 1. Check roboRIO is reachable
ping 10.26.14.1
# 2. Check Driver Station connection
# Driver Station should show green "Communications"
# 3. Check Radio link
ssh admin@10.26.14.1
# Look at radio status LEDs

Solutions:

  1. Verify radio is powered (solid blue LED)
  2. Check Ethernet cables are securely connected.
  3. Restart Driver Station application.
  4. Reimage radio if necessary.

**Issue: Robot Response Delayed

Diagnosis:

// Monitor network latency
public class NetworkMonitor {
public static void checkLatency() {
long startTime = System.nanoTime();
// Send NetworkTables ping
NetworkTables.getEntry("Ping").setDouble(0.0);
Double pong = NetworkTables.getEntry("Pong").getDouble(0.0);
long latency = System.nanoTime() - startTime;
double latencyMs = latency / 1_000_000.0;
Logger.recordOutput("Network/LatencyMs", latencyMs);
if (latencyMs > 50) {
MARSFaultManager.warn("High network latency: " + latencyMs + "ms");
}
}
}

Solutions:

  1. Reduce wireless interference (change radio channel)
  2. Use wired connection for development.
  3. Optimize network tables updates (don’t spam updates)
  4. Check for bandwidth-heavy applications (vision streaming)

**Issue: Robot randomly disconnects

Diagnosis:

Terminal window
# Check signal strength
# Watch Driver Station "Signal Strength" indicator
# Check radio logs
ssh admin@10.26.14.1
dmesg | grep -i wifi

Solutions:

  1. Update radio firmware to latest version.
  2. Check power supply to radio.
  3. Inspect antenna connections on radio.
  4. Reduce wireless interference at venue.

Pre-Competition Checklist:

  • Connect to practice field.
  • Test driver station connection.
  • Verify all devices communicate.
  • Test robot code deployment.
  • Check camera streaming works.

Practice Field Test:

public class FMSConnectionTest {
public static void testFMSConnection() {
// Test FMS attachment
DriverStation ds = DriverStation.getInstance();
// Check FMS connected
boolean fmsAttached = ds.isFMSAttached();
boolean dsAttached = ds.isDSAttached();
Logger.recordOutput("FMS/Connected", fmsAttached);
Logger.recordOutput("DS/Connected", dsAttached);
if (fmsAttached && dsAttached) {
System.out.println("✅ FMS connection test passed");
} else {
System.err.println("❌ FMS connection test failed");
}
}
}

Monitor Network Usage:

public class BandwidthMonitor {
public static void monitorBandwidth() {
// Monitor data usage from cameras
double[] bandwidthUsage = new double[2];
bandwidthUsage[0] = getCameraBandwidth(0); // Front camera
bandwidthUsage[1] = getCameraBandwidth(1); // Back camera
double totalBandwidth = bandwidthUsage[0] + bandwidthUsage[1];
Logger.recordOutput("Network/TotalBandwidthMbps", totalBandwidth);
// FMS bandwidth limit: ~7Mbps per robot
if (totalBandwidth > 6.5) {
MARSFaultManager.warn("High bandwidth usage: " + totalBandwidth + "Mbps");
}
}
private static double getCameraBandwidth(int cameraIndex) {
// Estimate camera bandwidth based on resolution and FPS
// Typical: 640x480 @ 30fps = ~4-5Mbps
return 4.5;
}
}

Recommended Settings:

  • Security Mode: WPA2-Personal.
  • Password: Strong password (16+ characters)
  • Encryption: AES.
  • Key Rotation: Change password each season.

Password Management:

Terminal window
# Generate strong password
openssl rand -base64 16 | head -c 16
# Update radio password
# Access radio web interface → Wireless → Security

Enable Radio Firewall:

{
"firewall": "enabled",
"rules": [
{
"action": "allow",
"protocol": "tcp",
"ports": [80, 443, 1180, 1181, 1182],
"description": "Web, SSH, NetworkTables"
},
{
"action": "allow",
"protocol": "udp",
"ports": [5010, 5011, 5012, 5013, 5014],
"description": "NT, DS, Camera, Radio, USB"
}
]
}

For alliance coordination or multi-robot setups.

public class MultiRobotCommunication {
private final String[] allianceRobots = {
"10.26.14.1", // Us
"10.1.14.1", // Alliance partner 1
"10.2.14.1" // Alliance partner 2
};
public void broadcastAlliancePosition() {
Pose2d myPose = drive.getPose();
// Broadcast our position to alliance
for (String robotIp : allianceRobots) {
if (!robotIp.equals(NetworkTablesConfig.ROBORIO_IP)) {
NetworkTables.getTable(robotIp).getEntry("RobotPose").setString(myPose.toString());
}
}
}
public Pose2d getAlliancePartnerPosition(String partnerIp) {
String poseString = NetworkTables.getTable(partnerIp)
.getEntry("RobotPose").getString("");
if (poseString != null && !poseString.isEmpty()) {
return Pose2d.fromString(poseString);
}
return null;
}
}

SSH Access Configuration:

Terminal window
# Enable SSH access to roboRIO
ssh admin@10.26.14.1
# Enable SSH in web dashboard
# Networking → SSH → Enable
# Change default password
passwd admin

Remote Code Deployment:

Terminal window
# Deploy code over network
./gradlew deploy
# This uses SSH to copy JAR to roboRIO
# Requires network connection

Ready to configure? Set up your network and get connected!