protected void setupSubscribers(ConnectedNode connectedNode) {
   DRCRobotSensorInformation sensorInforamtion = robotModel.getSensorInformation();
   DRCRobotLidarParameters lidarParameters = sensorInforamtion.getLidarParameters(0);
   if (lidarParameters != null && lidarParameters.getLidarSpindleJointTopic() != null) {
     jointSubscriber =
         connectedNode.newSubscriber(
             lidarParameters.getLidarSpindleJointTopic(), sensor_msgs.JointState._TYPE);
   }
 }
 @Override
 public void connect() throws IOException {
   sensorSuitePacketCommunicator.connect();
   if (sensorInformation.getLidarParameters().length > 0) {
     pointCloudDataReceiver.start();
   }
 }
  @Override
  public void initializeSimulatedSensors(ObjectCommunicator scsSensorsCommunicator) {
    sensorSuitePacketCommunicator.attachListener(
        RobotConfigurationData.class, robotConfigurationDataBuffer);

    SCSCameraDataReceiver cameraDataReceiver =
        new SCSCameraDataReceiver(
            sensorInformation.getCameraParameters(0).getRobotSide(),
            modelFactory,
            sensorInformation.getCameraParameters(0).getSensorNameInSdf(),
            robotConfigurationDataBuffer,
            scsSensorsCommunicator,
            sensorSuitePacketCommunicator,
            ppsTimestampOffsetProvider);
    cameraDataReceiver.start();

    //      if (sensorInformation.getPointCloudParameters().length > 0)
    //      {
    //         new SCSPointCloudDataReceiver(depthDataProcessor, robotPoseBuffer, scsCommunicator);
    //      }

    if (sensorInformation.getLidarParameters().length > 0) {
      new SCSPointCloudLidarReceiver(
          sensorInformation.getLidarParameters(0).getSensorNameInSdf(),
          scsSensorsCommunicator,
          pointCloudDataReceiver);
    }

    //      if (DRCConfigParameters.CALIBRATE_ARM_MODE)
    //      {
    //         ArmCalibrationHelper armCalibrationHelper = new
    // ArmCalibrationHelper(sensorSuitePacketCommunicator, jointMap);
    //         cameraReceiver.registerCameraListener(armCalibrationHelper);
    //      }

    //      IMUBasedHeadPoseCalculatorFactory.create(sensorSuitePacketCommunicator,
    // sensorInformation);

    VisionPoseEstimator visionPoseEstimator =
        new VisionPoseEstimator(
            sensorSuitePacketCommunicator,
            pointCloudDataReceiver,
            modelFactory,
            robotConfigurationDataBuffer,
            false);
    cameraDataReceiver.registerCameraListener(visionPoseEstimator);
  }
  @Override
  public void initializePhysicalSensors(URI rosCoreURI) {
    if (rosCoreURI == null)
      throw new RuntimeException(
          getClass().getSimpleName()
              + " Physical sensor requires rosURI to be set in "
              + NetworkParameters.defaultParameterFile);

    sensorSuitePacketCommunicator.attachListener(
        RobotConfigurationData.class, robotConfigurationDataBuffer);

    ForceSensorNoiseEstimator forceSensorNoiseEstimator =
        new ForceSensorNoiseEstimator(sensorSuitePacketCommunicator);
    sensorSuitePacketCommunicator.attachListener(
        RobotConfigurationData.class, forceSensorNoiseEstimator);

    RosMainNode rosMainNode = new RosMainNode(rosCoreURI, "atlas/sensorSuiteManager", true);

    DRCRobotCameraParameters multisenseLeftEyeCameraParameters =
        sensorInformation.getCameraParameters(AtlasSensorInformation.MULTISENSE_SL_LEFT_CAMERA_ID);
    DRCRobotLidarParameters multisenseLidarParameters =
        sensorInformation.getLidarParameters(AtlasSensorInformation.MULTISENSE_LIDAR_ID);
    DRCRobotPointCloudParameters multisenseStereoParameters =
        sensorInformation.getPointCloudParameters(AtlasSensorInformation.MULTISENSE_STEREO_ID);

    MultiSenseSensorManager multiSenseSensorManager =
        new MultiSenseSensorManager(
            modelFactory,
            pointCloudDataReceiver,
            robotConfigurationDataBuffer,
            rosMainNode,
            sensorSuitePacketCommunicator,
            ppsTimestampOffsetProvider,
            rosCoreURI,
            multisenseLeftEyeCameraParameters,
            multisenseLidarParameters,
            multisenseStereoParameters,
            sensorInformation.setupROSParameterSetters());

    DRCRobotCameraParameters leftFishEyeCameraParameters =
        sensorInformation.getCameraParameters(AtlasSensorInformation.BLACKFLY_LEFT_CAMERA_ID);
    DRCRobotCameraParameters rightFishEyeCameraParameters =
        sensorInformation.getCameraParameters(AtlasSensorInformation.BLACKFLY_RIGHT_CAMERA_ID);

    FisheyeCameraReceiver leftFishEyeCameraReceiver =
        new FisheyeCameraReceiver(
            modelFactory,
            leftFishEyeCameraParameters,
            robotConfigurationDataBuffer,
            sensorSuitePacketCommunicator,
            ppsTimestampOffsetProvider,
            rosMainNode);
    FisheyeCameraReceiver rightFishEyeCameraReceiver =
        new FisheyeCameraReceiver(
            modelFactory,
            rightFishEyeCameraParameters,
            robotConfigurationDataBuffer,
            sensorSuitePacketCommunicator,
            ppsTimestampOffsetProvider,
            rosMainNode);

    leftFishEyeCameraReceiver.start();
    rightFishEyeCameraReceiver.start();

    VisionPoseEstimator visionPoseEstimator =
        new VisionPoseEstimator(
            sensorSuitePacketCommunicator,
            pointCloudDataReceiver,
            modelFactory,
            robotConfigurationDataBuffer,
            true);
    multiSenseSensorManager.registerCameraListener(visionPoseEstimator);

    blackFlyParameterSetters = new SideDependentList<BlackFlyParameterSetter>();
    for (RobotSide side : RobotSide.values)
      blackFlyParameterSetters.put(
          side,
          new BlackFlyParameterSetter(
              rosMainNode,
              side,
              "/" + side.getLowerCaseName() + "/camera/camera_nodelet",
              sensorSuitePacketCommunicator));

    ppsTimestampOffsetProvider.attachToRosMainNode(rosMainNode);

    //      if (DRCConfigParameters.CALIBRATE_ARM_MODE)
    //      {
    //         ArmCalibrationHelper armCalibrationHelper = new
    // ArmCalibrationHelper(sensorSuitePacketCommunicator, jointMap);
    //         multiSenseSensorManager.registerCameraListener(armCalibrationHelper);
    //      }

    multiSenseSensorManager.initializeParameterListeners();

    //      IMUBasedHeadPoseCalculatorFactory.create(sensorSuitePacketCommunicator,
    // sensorInformation, rosMainNode);
    rosMainNode.execute();
  }