diff --git a/aos/build/aos_all.gyp b/aos/build/aos_all.gyp
index 95aaaa5..5caa6b7 100644
--- a/aos/build/aos_all.gyp
+++ b/aos/build/aos_all.gyp
@@ -20,12 +20,9 @@
         '../common/common.gyp:queue_test',
         '../common/common.gyp:die_test',
         '../common/util/util.gyp:trapezoid_profile_test',
-        '../common/sensors/sensors.gyp:sensor_receiver_test',
         '../common/glibusb/glibusb.gyp:gbuffer_test',
         '../common/glibusb/glibusb.gyp:glibusb_test',
         'Common',
-        # TODO(brians): move this to Common
-        '<(AOS)/common/sensors/sensors.gyp:sensors_test',
       ],
     },
     {
diff --git a/aos/common/sensors/sensor_packer.h b/aos/common/sensors/sensor_packer.h
deleted file mode 100644
index cfcf045..0000000
--- a/aos/common/sensors/sensor_packer.h
+++ /dev/null
@@ -1,22 +0,0 @@
-#ifndef AOS_COMMON_SENSORS_SENSOR_PACKER_H_
-#define AOS_COMMON_SENSORS_SENSOR_PACKER_H_
-
-namespace aos {
-namespace sensors {
-
-// An interface that handles reading input data and putting it into the sensor
-// values struct.
-// See sensors.h for an overview of where this fits in.
-template<class Values>
-class SensorPackerInterface {
- public:
-  virtual ~SensorPackerInterface() {}
-
-  // Reads the inputs (from WPILib etc) and writes the data into *values.
-  virtual void PackInto(Values *values) = 0;
-};
-
-}  // namespace sensors
-}  // namespace aos
-
-#endif  // AOS_COMMON_SENSORS_SENSOR_PACKER_H_
diff --git a/aos/common/sensors/sensor_receiver-tmpl.h b/aos/common/sensors/sensor_receiver-tmpl.h
deleted file mode 100644
index b260de8..0000000
--- a/aos/common/sensors/sensor_receiver-tmpl.h
+++ /dev/null
@@ -1,264 +0,0 @@
-#include "aos/common/inttypes.h"
-#include "aos/common/network_port.h"
-
-namespace aos {
-namespace sensors {
-
-template<class Values>
-const time::Time SensorReceiver<Values>::kJitterDelay =
-    time::Time::InSeconds(0.003);
-// Not a multiple of kSensorSendFrequency to unwedge ourself if we hit some bug
-// where it needs to get off of that frequency to work.
-template<class Values>
-const time::Time SensorReceiver<Values>::kGiveupTime =
-    time::Time::InSeconds(0.1555);
-
-template<class Values>
-SensorReceiver<Values>::SensorReceiver(
-    SensorUnpackerInterface<Values> *unpacker)
-    : unpacker_(unpacker),
-      start_time_(0, 0),
-      last_good_time_(0, 0) {
-  Unsynchronize();
-}
-
-template<class Values>
-void SensorReceiver<Values>::RunIteration() {
-  if (synchronized_) {
-    if (ReceiveData()) {
-      LOG(DEBUG, "receive said to try a reset\n");
-      Unsynchronize();
-    } else {
-      // TODO(brians): resync on crio reboots (and update the times...)
-      if (GoodPacket()) {
-        unpacker_->UnpackFrom(&data_.values);
-        last_good_time_ = time::Time::Now();
-      } else {
-        if ((time::Time::Now() - last_good_time_) > kGiveupTime) {
-          LOG(INFO, "resetting because didn't get a good one in too long\n");
-          Unsynchronize();
-        } else {
-          // We got a packet, but it wasn't an interesting one.
-        }
-      }
-    }
-  } else {
-    LOG(INFO, "resetting to try receiving data\n");
-    Reset();
-    if (Synchronize()) {
-      LOG(INFO, "synchronized successfully\n");
-      synchronized_ = true;
-      before_better_cycles_ = after_better_cycles_ = 0;
-      last_good_time_ = time::Time::Now();
-    } else {
-      LOG(INFO, "synchronization failed\n");
-    }
-  }
-}
-
-template<class Values>
-bool SensorReceiver<Values>::GoodPacket() {
-  bool good;
-  // If it's a multiple of kSensorSendFrequency from start_count_.
-  if (((data_.count - start_count_) % kSendsPerCycle) == 0) {
-    if (((data_.count - start_count_) / kSendsPerCycle) >=
-        ((NextLoopTime() - start_time_).ToNSec() / kLoopFrequency.ToNSec())) {
-      good = true;
-#if 0
-      if (((data_.count - start_count_) / kSendsPerCycle % 20) == 0) {
-        LOG(DEBUG, "dropping one for fun\n");
-        good = false;
-      }
-#endif
-    } else {
-      LOG(INFO,
-          "packet %" PRId32 " late. is packet #%d, wanted #%" PRId64 " now\n",
-          data_.count, (data_.count - start_count_) / kSendsPerCycle,
-          (NextLoopTime() - start_time_).ToNSec() / kLoopFrequency.ToNSec());
-      good = false;
-    }
-  } else {
-    good = false;
-  }
-
-  static time::Time last_time(0, 0);
-  time::Time now = time::Time::Now();
-  time::Time next_goal_time = NextLoopTime() - kJitterDelay;
-  // If this is the packet after the right one.
-  if (((data_.count - start_count_ - 1) % kSendsPerCycle) == 0) {
-    // If this one is much closer than the last one (aka the one that we used).
-    if ((now - next_goal_time).abs() * 11 / 10 <
-        (last_time - next_goal_time).abs()) {
-      LOG(DEBUG, "next one better than one being used %d\n",
-          after_better_cycles_);
-      if (after_better_cycles_ > kBadCyclesToSwitch) {
-        LOG(INFO, "switching to the packet after\n");
-        ++start_count_;
-        before_better_cycles_ = after_better_cycles_ = 0;
-      } else {
-        ++after_better_cycles_;
-      }
-    } else {
-      after_better_cycles_ = 0;
-    }
-  }
-  // If this is the right packet.
-  if (((data_.count - start_count_) % kSendsPerCycle) == 0) {
-    // If the last one was closer than this one (aka the one that we used).
-    if ((last_time - next_goal_time).abs() * 11 / 10 <
-        (now - next_goal_time).abs()) {
-      LOG(DEBUG, "previous better than one being used %d\n",
-          before_better_cycles_);
-      if (before_better_cycles_ > kBadCyclesToSwitch) {
-        LOG(INFO, "switching to the packet before\n");
-        --start_count_;
-        before_better_cycles_ = after_better_cycles_ = 0;
-      } else {
-        ++before_better_cycles_;
-      }
-    } else {
-      before_better_cycles_ = 0;
-    }
-  }
-  last_time = now;
-
-  return good;
-}
-
-// Looks for when the timestamps transition from before where we want to after
-// and then picks whichever one was closer. After that, reads kTestCycles and
-// makes sure that at most 1 is bad.
-template<class Values>
-bool SensorReceiver<Values>::Synchronize() {
-  time::Time old_received_time(0, 0);
-  const time::Time start_time = time::Time::Now();
-  // When we want to send out the next set of values.
-  time::Time goal_time = NextLoopTime(start_time) - kJitterDelay;
-  if (goal_time <= start_time) {
-    goal_time += kLoopFrequency;
-  }
-  assert(goal_time > start_time);
-  while (true) {
-    if (ReceiveData()) return false;
-    time::Time received_time = time::Time::Now();
-    if (received_time >= goal_time) {
-      // If this was the very first one we got, try again.
-      if (old_received_time == time::Time(0, 0)){
-        LOG(INFO, "first one we got was too late\n");
-        return false;
-      }
-
-      assert(old_received_time < goal_time);
-
-      // If the most recent one is closer than the last one.
-      if ((received_time - goal_time).abs() <
-          (old_received_time - goal_time).abs()) {
-        start_count_ = data_.count;
-      } else {
-        start_count_ = data_.count - 1;
-      }
-      start_time_ = goal_time;
-
-      int bad_count = 0;
-      for (int i = 0; i < kTestCycles;) {
-        ReceiveData();
-        received_time = time::Time::Now();
-        if (GoodPacket()) {
-          LOG(DEBUG, "checking packet count=%" PRId32
-              " received at %" PRId32 "s%" PRId32 "ns\n",
-              data_.count, received_time.sec(), received_time.nsec());
-          // If |the difference between the goal time for this numbered packet
-          // and the time we actually got this one| is too big.
-          if (((goal_time +
-                kSensorSendFrequency * (data_.count - start_count_)) -
-               received_time).abs() > kSensorSendFrequency) {
-            LOG(INFO, "rejected time of the last good packet. "
-                "got %" PRId32 "s%" PRId32 "ns."
-                " wanted %" PRId32 "s%" PRId32 "ns\n",
-                received_time.sec(), received_time.nsec(),
-                goal_time.sec(), goal_time.nsec());
-            ++bad_count;
-          }
-          ++i;
-        }
-        if (bad_count > 1) {
-          LOG(WARNING, "got multiple packets with bad timestamps\n");
-          return false;
-        }
-      }
-
-      Synchronized(goal_time + kLoopFrequency * kTestCycles);
-      return true;
-    }
-
-    old_received_time = received_time;
-  }
-}
-
-template<class Values>
-bool SensorReceiver<Values>::ReceiveData() {
-  int old_count = data_.count;
-  if (DoReceiveData()) return true;
-
-  if (data_.count < 0) {
-    LOG(FATAL, "data count overflowed. currently %" PRId32 "\n", data_.count);
-  }
-  if (data_.count < old_count) {
-    LOG(INFO, "count reset. was %" PRId32 ", now %" PRId32 "\n",
-        old_count, data_.count);
-    return true;
-  }
-  if (data_.count < start_count_) {
-    LOG(INFO, "count reset. started at %" PRId32 ", now %" PRId32 "\n",
-        start_count_, data_.count);
-  }
-  LOG(DEBUG, "received data count %" PRId32 "\n", data_.count);
-  return false;
-}
-
-template<class Values>
-void SensorReceiver<Values>::Unsynchronize() {
-  synchronized_ = false;
-  before_better_cycles_ = after_better_cycles_ = 0;
-}
-
-template<class Values>
-const time::Time NetworkSensorReceiver<Values>::kWarmupTime =
-    time::Time::InSeconds(0.075);
-
-template<class Values>
-NetworkSensorReceiver<Values>::NetworkSensorReceiver(
-    SensorUnpackerInterface<Values> *unpacker)
-    : SensorReceiver<Values>(unpacker),
-      socket_(NetworkPort::kSensors) {}
-
-template<class Values>
-void NetworkSensorReceiver<Values>::Reset() {
-  LOG(INFO, "beginning warm up\n");
-  time::Time start = time::Time::Now();
-  while ((time::Time::Now() - start) < kWarmupTime) {
-    socket_.Receive(this->data(), sizeof(*this->data()));
-  }
-  LOG(INFO, "done warming up\n");
-}
-
-template<class Values>
-bool NetworkSensorReceiver<Values>::DoReceiveData() {
-  while (true) {
-    if (socket_.Receive(this->data(), sizeof(*this->data())) ==
-        sizeof(*this->data())) {
-      this->data()->checksum = ntoh(this->data()->checksum);
-      if (!this->data()->CheckChecksum()) {
-        LOG(WARNING, "got a bad packet\n");
-        continue;
-      }
-
-      this->data()->NetworkToHost();
-      return false;
-    }
-    LOG(WARNING, "received incorrect amount of data\n");
-  }
-}
-
-}  // namespace sensors
-}  // namespace aos
diff --git a/aos/common/sensors/sensor_receiver.h b/aos/common/sensors/sensor_receiver.h
deleted file mode 100644
index 16b72ac..0000000
--- a/aos/common/sensors/sensor_receiver.h
+++ /dev/null
@@ -1,121 +0,0 @@
-#ifndef AOS_COMMON_SENSORS_SENSOR_RECEIVER_H_
-#define AOS_COMMON_SENSORS_SENSOR_RECEIVER_H_
-
-#include "aos/common/sensors/sensor_unpacker.h"
-#include "aos/common/network/ReceiveSocket.h"
-#include "aos/common/sensors/sensors.h"
-#include "aos/common/time.h"
-#include "aos/common/gtest_prod.h"
-
-namespace aos {
-namespace sensors {
-namespace testing {
-
-FORWARD_DECLARE_TEST_CASE(SensorReceiverTest, Simple);
-FORWARD_DECLARE_TEST_CASE(SensorReceiverTest, BadStartup2);
-FORWARD_DECLARE_TEST_CASE(SensorReceiverTest, StartTimeAndCountMismatch);
-
-}  // namespace testing
-
-// A class that handles receiving sensor values from the cRIO.
-// See sensors.h for an overview of where this fits in.
-//
-// Abstract class to make testing the complex logic for choosing which data to
-// use easier.
-template<class Values>
-class SensorReceiver {
- public:
-  // Does not take ownership of unpacker.
-  SensorReceiver(SensorUnpackerInterface<Values> *unpacker);
-
-  void RunIteration();
-
- protected:
-  SensorData<Values> *data() { return &data_; }
-
- private:
-  // How long before the control loops run to aim for receiving sensor data (to
-  // prevent jitter if some packets arrive up to this much later).
-  static const time::Time kJitterDelay;
-  // How many cycles not to send data out to make sure that we're in phase
-  // (during this time, the code verifies that <= 1 cycle is not within 1
-  // cycle's time of kJitterDelay).
-  static const int kTestCycles = 8;
-  // How many cycles that we need (consecutively) of another packet being closer
-  // to the right time than the ones we're reading before we switch.
-  static const int kBadCyclesToSwitch = 8;
-  // If we don't get a good packet in this long, then we Synchronize() again.
-  static const time::Time kGiveupTime;
-
-  FRIEND_TEST_NAMESPACE(SensorReceiverTest, Simple, testing);
-  FRIEND_TEST_NAMESPACE(SensorReceiverTest, BadStartup2, testing);
-  FRIEND_TEST_NAMESPACE(SensorReceiverTest, StartTimeAndCountMismatch, testing);
-
-  // Subclasses need to implement this to read 1 set of data (blocking until it
-  // is available) into data().
-  // It needs to have the correct byte order etc and not be corrupted
-  // (subclasses can check the checksum if they want).
-  // Returns whether or not to Reset() and try synchronizing again.
-  virtual bool DoReceiveData() = 0;
-
-  // Optional: if subclasses can do anything to reinitialize after there are
-  // problems, they should do it here.
-  // This will be called right before calling DoReceiveData() the first time.
-  virtual void Reset() {}
-
-  // Optional: if subclasses want to be notified when this is first convinced
-  // that it has a good packet, they should do whatever here.
-  virtual void Synchronized(time::Time /*last_packet_ideal_time*/) {}
-
-  // Returns whether the current packet looks like a good one to use.
-  bool GoodPacket();
-
-  // Synchronizes with incoming packets and sets start_count_ to where we
-  // started reading.
-  // Returns whether it succeeded in locking on.
-  bool Synchronize();
-  // Receives a set of values and makes sure that it's sane.
-  // Returns whether to start over again with timing.
-  bool ReceiveData();
-  void Unsynchronize();
-
-  SensorUnpackerInterface<Values> *const unpacker_;
-  SensorData<Values> data_;
-  // The count that we started out (all other sent packets will be multiples of
-  // this).
-  int32_t start_count_;
-  // When start_count_ "should" have been received. Used for checking to make
-  // sure that we don't send out a packet late.
-  time::Time start_time_;
-  bool synchronized_;
-  int before_better_cycles_, after_better_cycles_;
-  // The time of the last packet that we sent out.
-  time::Time last_good_time_;
-
-  DISALLOW_COPY_AND_ASSIGN(SensorReceiver<Values>);
-};
-
-// A SensorReceiver that receives data from a SensorBroadcaster.
-template<class Values>
-class NetworkSensorReceiver : public SensorReceiver<Values> {
- public:
-  NetworkSensorReceiver(SensorUnpackerInterface<Values> *unpacker);
-
- private:
-  // How long to read data as fast as possible for (to clear out buffers etc).
-  static const time::Time kWarmupTime;
-
-  virtual bool DoReceiveData();
-  virtual void Reset();
-
-  ReceiveSocket socket_;
-
-  DISALLOW_COPY_AND_ASSIGN(NetworkSensorReceiver<Values>);
-};
-
-}  // namespace sensors
-}  // namespace aos
-
-#include "aos/common/sensors/sensor_receiver-tmpl.h"
-
-#endif  // AOS_COMMON_SENSORS_SENSOR_RECEIVER_H_
diff --git a/aos/common/sensors/sensor_receiver_test.cc b/aos/common/sensors/sensor_receiver_test.cc
deleted file mode 100644
index 5032dfd..0000000
--- a/aos/common/sensors/sensor_receiver_test.cc
+++ /dev/null
@@ -1,159 +0,0 @@
-#include "aos/common/sensors/sensor_receiver.h"
-
-#include "gtest/gtest.h"
-
-#include "aos/common/sensors/sensors.h"
-#include "aos/common/time.h"
-#include "aos/common/queue_testutils.h"
-
-using ::aos::time::Time;
-
-namespace aos {
-namespace sensors {
-namespace testing {
-
-struct TestValues {
-  int count;
-  int more_data;
-};
-class TestSensorReceiver : public SensorReceiver<TestValues>,
-    public SensorUnpackerInterface<TestValues> {
- public:
-  TestSensorReceiver()
-      : SensorReceiver<TestValues>(this),
-        resets_(0),
-        unpacks_(0) {
-    data()->count = 0;
-  }
-
-  void Reset() {
-    LOG(DEBUG, "reset for the %dth time\n", ++resets_);
-  }
-  bool DoReceiveData() {
-    last_received_count_ = ++data()->count;
-    data()->values.count = last_received_count_;
-    Time::IncrementMockTime(kSensorSendFrequency);
-    data()->FillinChecksum();
-    data()->HostToNetwork();
-    return false;
-  }
-
-  int resets() { return resets_; }
-  int unpacks() { return unpacks_; }
-  using SensorReceiver<TestValues>::data;
-
-  void ResetFakeData() {
-    data()->count = 0;
-  }
-
-  void UnpackFrom(TestValues *data) {
-    // Make sure that it didn't lose one that we gave it.
-    EXPECT_EQ(last_received_count_, data->count);
-    ++unpacks_;
-    LOG(DEBUG, "%dth unpack\n", unpacks_);
-  }
- 
- private:
-  int resets_;
-  int unpacks_;
-  int last_received_count_;
-};
-
-class SensorReceiverTest : public ::testing::Test {
- protected:
-  SensorReceiverTest() {
-    ::aos::common::testing::EnableTestLogging();
-    Time::EnableMockTime(Time(971, 254));
-  }
-
-  TestSensorReceiver &receiver() { return receiver_; }
-
- private:
-  TestSensorReceiver receiver_;
-};
-
-TEST_F(SensorReceiverTest, Simple) {
-  static const int kIterations = 53;
-  for (int i = 0; i < kIterations; ++i) {
-    receiver().RunIteration();
-  }
-  EXPECT_EQ(1, receiver().resets());
-  // expected value is kIterations/kSendsPerCycle (rounded up) (the number of
-  // times that it should get a good one) - 1 (to compensate for the iteration
-  // when it synced itself up)
-  EXPECT_EQ((kIterations + kSendsPerCycle - 1) / kSendsPerCycle - 1,
-            receiver().unpacks());
-}
-
-TEST_F(SensorReceiverTest, CRIOReboot) {
-  for (int i = 0; i < 50; ++i) {
-    receiver().RunIteration();
-    if (i == 27) {
-      receiver().ResetFakeData();
-      time::Time::IncrementMockTime(time::Time::InSeconds(20));
-    }
-  }
-  EXPECT_EQ(2, receiver().resets());
-  EXPECT_GE(receiver().unpacks(), 4);
-}
-
-TEST_F(SensorReceiverTest, CRIOSkew) {
-  for (int i = 0; i < 505; ++i) {
-    receiver().RunIteration();
-    time::Time::IncrementMockTime(time::Time(0, 4000));
-  }
-  // TODO(brians) verify here that it actually corrects (happens twice with
-  // current constants)
-  EXPECT_EQ(1, receiver().resets());
-  EXPECT_EQ(50, receiver().unpacks());
-}
-
-TEST_F(SensorReceiverTest, BadStartup1) {
-  time::Time::SetMockTime(NextLoopTime() - Time(0, 100));
-  for (int i = 0; i < 55; ++i) {
-    receiver().RunIteration();
-  }
-  EXPECT_EQ(1, receiver().resets());
-  EXPECT_EQ(5, receiver().unpacks());
-}
-
-TEST_F(SensorReceiverTest, BadStartup2) {
-  time::Time::SetMockTime(NextLoopTime() -
-                          SensorReceiver<TestValues>::kJitterDelay -
-                          time::Time(0, 1));
-  for (int i = 0; i < 55; ++i) {
-    receiver().RunIteration();
-  }
-  EXPECT_EQ(2, receiver().resets());
-  EXPECT_EQ(5, receiver().unpacks());
-}
-
-TEST_F(SensorReceiverTest, BadStartup3) {
-  time::Time::SetMockTime(NextLoopTime() -
-                          time::Time::InSeconds(0.002) +
-                          kLoopFrequency / 20);
-  for (int i = 0; i < 55; ++i) {
-    receiver().RunIteration();
-  }
-  EXPECT_EQ(1, receiver().resets());
-  EXPECT_EQ(5, receiver().unpacks());
-}
-
-// I think that it somehow got this way once and never recovered.
-// It should never get this way, but if it does, it should recover.
-TEST_F(SensorReceiverTest, StartTimeAndCountMismatch) {
-  for (int i = 0; i < 1005; ++i) {
-    receiver().RunIteration();
-    if (i == 3) {
-      receiver().start_count_ += 10;
-    }
-  }
-  EXPECT_EQ(2, receiver().resets());
-  EXPECT_GT(receiver().unpacks(), 30);
-}
-
-// TODO(brians) finish writing tests and commenting them and the code
-
-}  // namespace testing
-}  // namespace sensors
-}  // namespace aos
diff --git a/aos/common/sensors/sensor_sink.h b/aos/common/sensors/sensor_sink.h
deleted file mode 100644
index 760f90e..0000000
--- a/aos/common/sensors/sensor_sink.h
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef AOS_COMMON_SENSORS_SENSOR_SINK_H_
-#define AOS_COMMON_SENSORS_SENSOR_SINK_H_
-
-#include "aos/common/sensors/sensors.h"
-
-namespace aos {
-namespace sensors {
-
-// Generic class for something that can do something with sensor data.
-template<class Values>
-class SensorSinkInterface {
- public:
-  virtual ~SensorSinkInterface() {}
-
-  virtual void Process(SensorData<Values> *data) = 0;
-};
-
-}  // namespace sensors
-}  // namespace aos
-
-#endif  // AOS_COMMON_SENSORS_SENSOR_SINK_H_
diff --git a/aos/common/sensors/sensor_unpacker.h b/aos/common/sensors/sensor_unpacker.h
deleted file mode 100644
index b19e0c6..0000000
--- a/aos/common/sensors/sensor_unpacker.h
+++ /dev/null
@@ -1,22 +0,0 @@
-#ifndef AOS_COMMON_SENSORS_SENSOR_UNPACKER_H_
-#define AOS_COMMON_SENSORS_SENSOR_UNPACKER_H_
-
-namespace aos {
-namespace sensors {
-
-// An interface that handles taking data from the sensor Values struct and
-// putting it into queues (for control loops etc).
-// See sensors.h for an overview of where this fits in.
-template<class Values>
-class SensorUnpackerInterface {
- public:
-  virtual ~SensorUnpackerInterface() {}
-
-  // Takes the data in *values and writes it out into queues etc.
-  virtual void UnpackFrom(Values *values) = 0;
-};
-
-}  // namespace sensors
-}  // namespace aos
-
-#endif  // AOS_COMMON_SENSORS_SENSOR_UNPACKER_H_
diff --git a/aos/common/sensors/sensors.cc b/aos/common/sensors/sensors.cc
deleted file mode 100644
index 60f411f..0000000
--- a/aos/common/sensors/sensors.cc
+++ /dev/null
@@ -1,89 +0,0 @@
-#include "aos/common/sensors/sensors.h"
-
-namespace aos {
-namespace sensors {
-
-const time::Time kSensorSendFrequency =
-    ::aos::control_loops::kLoopFrequency / kSendsPerCycle;
-
-namespace {
-
-// Table grabbed from <http://gcc.gnu.org/svn/gcc/trunk/libiberty/crc32.c>.
-const uint32_t crc32_table[] = {
-  0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9,
-  0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005,
-  0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61,
-  0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd,
-  0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9,
-  0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75,
-  0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011,
-  0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd,
-  0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039,
-  0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5,
-  0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81,
-  0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d,
-  0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49,
-  0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95,
-  0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1,
-  0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d,
-  0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae,
-  0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072,
-  0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16,
-  0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca,
-  0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde,
-  0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02,
-  0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066,
-  0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba,
-  0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e,
-  0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692,
-  0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6,
-  0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a,
-  0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e,
-  0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2,
-  0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686,
-  0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a,
-  0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637,
-  0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb,
-  0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f,
-  0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53,
-  0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47,
-  0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b,
-  0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff,
-  0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623,
-  0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7,
-  0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b,
-  0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f,
-  0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3,
-  0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7,
-  0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b,
-  0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f,
-  0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3,
-  0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640,
-  0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c,
-  0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8,
-  0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24,
-  0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30,
-  0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec,
-  0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088,
-  0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654,
-  0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0,
-  0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c,
-  0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18,
-  0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4,
-  0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0,
-  0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c,
-  0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668,
-  0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4
-};
-
-}  // namespace
-uint32_t CalculateChecksum(char *buf, size_t size) {
-  uint32_t ret = ~0;
-  for (size_t i = 0; i < size; ++i) {
-    ret = (ret << 8) ^ crc32_table[((ret >> 24) ^ buf[i]) & 255];
-  }
-  return ~ret;
-}
-
-}  // namespace sensors
-}  // namespace aos
diff --git a/aos/common/sensors/sensors.gyp b/aos/common/sensors/sensors.gyp
deleted file mode 100644
index b8a2092..0000000
--- a/aos/common/sensors/sensors.gyp
+++ /dev/null
@@ -1,76 +0,0 @@
-{
-  'targets': [
-    {
-      'target_name': 'sensor_sink',
-      'type': 'static_library',
-      'sources': [
-      ],
-      'dependencies': [
-        'sensors',
-      ],
-      'export_dependent_settings': [
-        'sensors',
-      ],
-    },
-    {
-      'target_name': 'sensors',
-      'type': 'static_library',
-      'sources': [
-        'sensors.cc'
-      ],
-      'dependencies': [
-        '<(AOS)/common/common.gyp:time',
-        '<(AOS)/common/common.gyp:controls',
-      ],
-      'export_dependent_settings': [
-        '<(AOS)/common/common.gyp:time',
-        '<(AOS)/common/common.gyp:controls',
-      ],
-    },
-    {
-      'target_name': 'sensors_test',
-      'type': '<(aos_target)',
-      'sources': [
-        'sensors_test.cc',
-      ],
-      'dependencies': [
-        '<(EXTERNALS):gtest',
-        'sensors',
-        '<(AOS)/common/common.gyp:queue_testutils',
-      ],
-    },
-    {
-      'target_name': 'sensor_receiver',
-      'type': 'static_library',
-      'sources': [
-        #'sensor_receiver-tmpl.h'
-      ],
-      'dependencies': [
-        '<(AOS)/common/network/network.gyp:socket',
-        'sensors',
-        '<(AOS)/common/common.gyp:time',
-        '<(AOS)/common/common.gyp:gtest_prod',
-      ],
-      'export_dependent_settings': [
-        '<(AOS)/common/network/network.gyp:socket',
-        'sensors',
-        '<(AOS)/common/common.gyp:time',
-        '<(AOS)/common/common.gyp:gtest_prod',
-      ],
-    },
-    {
-      'target_name': 'sensor_receiver_test',
-      'type': 'executable',
-      'sources': [
-        'sensor_receiver_test.cc',
-      ],
-      'dependencies': [
-        '<(EXTERNALS):gtest',
-        'sensor_receiver',
-        '<(AOS)/common/common.gyp:time',
-        'sensors',
-        '<(AOS)/common/common.gyp:queue_testutils',
-      ],
-    },
-  ],
-}
diff --git a/aos/common/sensors/sensors.h b/aos/common/sensors/sensors.h
deleted file mode 100644
index 78fd8a9..0000000
--- a/aos/common/sensors/sensors.h
+++ /dev/null
@@ -1,83 +0,0 @@
-#ifndef AOS_COMMON_SENSORS_SENSORS_H_
-#define AOS_COMMON_SENSORS_SENSORS_H_
-
-#include "aos/common/time.h"
-#include "aos/common/byteorder.h"
-#include "aos/common/control_loop/ControlLoop.h"
-#include "aos/common/inttypes.h"
-
-namespace aos {
-// This namespace contains all of the stuff for dealing with reading sensors and
-// communicating it to everything that needs it. There are 4 main classes whose
-// instances actually process the data. They must all be registered in the
-// appropriate ::aos::crio::ControlsManager hooks.
-//
-// SensorPackers get run on the cRIO to read inputs (from WPILib or elsewhere)
-// and put the values into the Values struct (which is templated for all of the
-// classes that use it).
-// SensorUnpackers get run on both the atom and the cRIO to take the data from
-// the Values struct and put them into queues for control loops etc.
-// SensorBroadcasters (on the cRIO) send the data to a SensorReceiver (on the
-// atom) to pass to its SensorUnpacker there.
-// CRIOControlLoopRunners register with a SensorBroadcaster to get called right
-// after reading the sensor data so that they can immediately pass it so a
-// SensorUnpacker and then run their control loops.
-// The actual SensorPacker and SensorUnpacker classes have the Interface suffix
-// on them.
-namespace sensors {
-
-// How many times per ::aos::control_loops::kLoopFrequency sensor
-// values get sent out by the cRIO.
-// This must evenly divide that frequency into multiples of sysClockRateGet().
-const int kSendsPerCycle = 10;
-// ::aos::control_loops::kLoopFrequency / kSendsPerCycle for
-// convenience.
-extern const time::Time kSensorSendFrequency;
-using ::aos::control_loops::kLoopFrequency;
-using ::aos::control_loops::NextLoopTime;
-
-uint32_t CalculateChecksum(char *buf, size_t size);
-
-// This is the struct that actually gets sent over the UDP socket.
-template<class Values>
-struct SensorData {
-  // All of the other 4-byte chunks in the message bitwise-exclusive-ORed
-  // together. Needed because it seems like nobody else checks... (vxworks not
-  // sending the UDP checksum or (not very likely) linux not checking it).
-  // TODO(brians): static_assert that this is at the front
-  uint32_t checksum;
-
-  Values values;
-  // Starts at 0 and goes up.
-  int32_t count;
-
-  void NetworkToHost() {
-    count = ntoh(count);
-  }
-  void HostToNetwork() {
-    count = hton(count);
-  }
-
-  void FillinChecksum() {
-    checksum = CalculateChecksum(reinterpret_cast<char *>(this) +
-                                 sizeof(checksum),
-                                 sizeof(*this) - sizeof(checksum));
-  }
-  // Returns whether or not checksum is correct.
-  bool CheckChecksum() {
-    uint32_t expected = CalculateChecksum(reinterpret_cast<char *>(this) +
-                                          sizeof(checksum),
-                                          sizeof(*this) - sizeof(checksum));
-    if (checksum != expected) {
-      LOG(INFO, "expected %" PRIx32 " but got %" PRIx32 "\n",
-          expected, checksum);
-      return false;
-    }
-    return true;
-  }
-} __attribute__((packed));
-
-}  // namespace sensors
-}  // namespace aos
-
-#endif  // AOS_COMMON_SENSORS_SENSORS_H_
diff --git a/aos/common/sensors/sensors_test.cc b/aos/common/sensors/sensors_test.cc
deleted file mode 100644
index 0df93c9..0000000
--- a/aos/common/sensors/sensors_test.cc
+++ /dev/null
@@ -1,38 +0,0 @@
-#include "aos/common/sensors/sensors.h"
-
-#include <stdint.h>
-
-#include "gtest/gtest.h"
-
-#include "aos/common/queue_testutils.h"
-
-namespace aos {
-namespace sensors {
-namespace testing {
-
-struct TestValues {
-  int32_t data1, data2;
-};
-
-TEST(SensorDataTest, Checksum) {
-  ::aos::common::testing::EnableTestLogging();
-
-  SensorData<TestValues> data;
-  data.values.data1 = 0;
-  data.values.data2 = 5;
-  data.FillinChecksum();
-  EXPECT_TRUE(data.CheckChecksum());
-  data.values.data1 = 1;
-  EXPECT_FALSE(data.CheckChecksum());
-  data.values.data1 = 0xFFFFFFFF;
-  EXPECT_FALSE(data.CheckChecksum());
-  data.values.data1 = 0;
-  EXPECT_TRUE(data.CheckChecksum());
-  data.values.data1 = 5;
-  data.values.data2 = 0;
-  EXPECT_FALSE(data.CheckChecksum());
-}
-
-}  // namespace testing
-}  // namespace sensors
-}  // namespace aos
diff --git a/frc971/input/gyro_board_reader.cc b/frc971/input/gyro_board_reader.cc
index f701898..a094c4e 100644
--- a/frc971/input/gyro_board_reader.cc
+++ b/frc971/input/gyro_board_reader.cc
@@ -1,7 +1,8 @@
 #include <libusb-1.0/libusb.h>
-#include <memory>
 #include <string.h>
 
+#include <memory>
+
 #include "aos/common/inttypes.h"
 #include "aos/atom_code/init.h"
 #include "aos/common/logging/logging.h"
diff --git a/frc971/input/input.gyp b/frc971/input/input.gyp
index 4f57cbf..225a855 100644
--- a/frc971/input/input.gyp
+++ b/frc971/input/input.gyp
@@ -37,7 +37,6 @@
         '<(AOS)/atom_code/atom_code.gyp:init',
         '<(AOS)/build/aos.gyp:logging',
         '<(AOS)/common/common.gyp:time',
-        '<(AOS)/common/sensors/sensors.gyp:sensor_receiver',
         '<(AOS)/common/glibusb/glibusb.gyp:glibusb',
         '<(AOS)/common/glibusb/glibusb.gyp:gbuffer',
       ],
