Building a Resilient Control Scheme over Unreliable Wireless Networks

Chandler Swift
https://duluth.chandlerswift.com/robot/

About the Robot

  • Purchased in 1999 by UMD's Computer Science department
  • Specs: Pentium III, 64MB RAM,
  • Lots of neat specialty hardware

Objectives

  • Drive the robot over wifi
  • Keep original hardware
  • Don't break things!

Methods

  • Hardware improvements
  • Kernel/driver tweaks
  • Software protocol improvements

Methods – Software

#!/usr/bin/python3
import time
from threading import Timer

last_cmd_received = time.time()
WATCHDOG_THRESHOLD = 0.100  # seconds

# Runs every (100 plus the time elapsed
# in the function)ms
def run_watchdog():
	elapsed = time.time() - last_cmd_received
	if elapsed > WATCHDOG_THRESHOLD:
		set_robot_drive(0,0)
		Timer(0.1,run_watchdog).start() 

def on_cmd(cmd):
	global last_cmd_received
	last_cmd_received = time.time()
	...

if __name__ == "__main__":
	run_watchdog()
	server.run_forever()

Results – Hardware – Brostrend

Brostrend Adapter, run 1 Brostrend Adapter, run 2
Brostrend Adapter, run 3 Brostrend Adapter, run 4

Results – Hardware – Canakit Internal

Internal Canakit Adapter, run 1 Internal Canakit Adapter, run 2
Internal Canakit Adapter, run 3 Internal Canakit Adapter, run 4

Results – Hardware – Canakit External

External Canakit Adapter, run 1 External Canakit Adapter, run 2
External Canakit Adapter, run 3 External Canakit Adapter, run 4

Results – Hardware – Overview

brostrend-1.csv	546	42	7.69
brostrend-2.csv	577	126	21.84
brostrend-3.csv	554	8	1.44
brostrend-4.csv	619	53	8.56
external-1.csv	635	227	35.75
external-2.csv	730	268	36.71
external-3.csv	600	141	23.50
external-4.csv	552	103	18.66
internal-1.csv	593	241	40.64
internal-2.csv	578	236	40.83
internal-3.csv	591	263	44.50
internal-4.csv	557	273	49.01

Results – Stopping Distance – Overview

Run	Enabled	Disabled
1	10	198
2	13	144
3	15	156
4	15	192
5	14	198
6	8	156
7	8	192
8	4	168
Average	10.9	176