fixes to make the new sensor stuff work
diff --git a/aos/crio/controls/ControlsManager.cpp b/aos/crio/controls/ControlsManager.cpp
index 906394f..762e8b6 100644
--- a/aos/crio/controls/ControlsManager.cpp
+++ b/aos/crio/controls/ControlsManager.cpp
@@ -13,6 +13,10 @@
 namespace aos {
 namespace crio {
 
+ControlsManager::ControlsManager() {
+  printf("aos::ControlsManager constructor done\n");
+}
+
 // Everything gets an explicit Start call here before calling all of the init
 // functions because it means that all static variables will be initialized
 // before anything actually starts running. It also means that everything will
@@ -35,6 +39,9 @@
   aos_call_init_functions();
   LOG(INFO, "initialized\n");
 
+  CreateObjects();
+  LOG(INFO, "created objects\n");
+
   RegisterControlLoops();
   LOG(INFO, "registered control loops\n");
 
diff --git a/aos/crio/controls/ControlsManager.h b/aos/crio/controls/ControlsManager.h
index aa78587..5971f46 100644
--- a/aos/crio/controls/ControlsManager.h
+++ b/aos/crio/controls/ControlsManager.h
@@ -8,6 +8,8 @@
 // to be passed to START_ROBOT_CLASS (a WPILib macro) to start all of the code.
 class ControlsManager : public RobotBase {
  public:
+  ControlsManager();
+
   virtual void StartCompetition();
 
   static ControlsManager &GetInstance() {
@@ -20,6 +22,7 @@
  private:
   // Hooks that subclasses have to implement to do the correct things at the
   // correct times.
+  virtual void CreateObjects() = 0;
   virtual void RegisterControlLoops() = 0;
   virtual void StartSensorBroadcasters() = 0;
 };