scale sonar readings correctly
diff --git a/frc971/input/sensor_receiver.cc b/frc971/input/sensor_receiver.cc
index 7d12b48..f63d13d 100644
--- a/frc971/input/sensor_receiver.cc
+++ b/frc971/input/sensor_receiver.cc
@@ -64,6 +64,10 @@
   return adc_translate(in) * kDividerBig / kDividerSmall;
 }
 
+double sonar_translate(uint32_t in) {
+  return static_cast<double>(in) / 1000.0;
+}
+
 double hall_translate(const constants::ShifterHallEffect &k, uint16_t in_low,
                       uint16_t in_high) {
   const double low_ratio =
@@ -129,9 +133,10 @@
                     State *state) {
   ::frc971::logging_structs::CapeReading reading_to_log(
       cape_timestamp.sec(), cape_timestamp.nsec(),
-      data->main.ultrasonic_pulse_length, sizeof(*data));
+      sizeof(*data), sonar_translate(data->main.ultrasonic_pulse_length));
   LOG_STRUCT(DEBUG, "cape reading", reading_to_log);
   bool bad_gyro;
+  // TODO(brians): Switch to LogInterval for these things.
   if (data->uninitialized_gyro) {
     LOG(DEBUG, "uninitialized gyro\n");
     bad_gyro = true;
@@ -141,10 +146,6 @@
   } else if (data->bad_gyro) {
     LOG(ERROR, "bad gyro\n");
     bad_gyro = true;
-    othersensors.MakeWithBuilder()
-        .gyro_angle(0)
-        .sonar_distance(data->main.ultrasonic_pulse_length)
-        .Send();
   } else if (data->old_gyro_reading) {
     LOG(WARNING, "old/bad gyro reading\n");
     bad_gyro = true;
@@ -155,7 +156,8 @@
   if (!bad_gyro) {
     othersensors.MakeWithBuilder()
         .gyro_angle(gyro_translate(data->gyro_angle))
-        .sonar_distance(data->main.ultrasonic_pulse_length)
+        .sonar_distance(
+            sonar_translate(data->main.ultrasonic_pulse_length))
         .Send();
   }
 
diff --git a/frc971/queues/to_log.q b/frc971/queues/to_log.q
index a8bee3f..77e87e3 100644
--- a/frc971/queues/to_log.q
+++ b/frc971/queues/to_log.q
@@ -3,6 +3,6 @@
 struct CapeReading {
   uint32_t sec;
   uint32_t nsec;
-  uint32_t sonar;
   uint64_t struct_size;
+  double sonar;
 };