public Controller()
 {
     Roomba     = new Roomba();
     Lidar      = new Lidar();
     Navigation = new Navigation();
     Analysis   = new LidarAnalysis();
 }
        public void Dispose()
        {
            Roomba.Close();
            Lidar.Close();

            IsEnabled = false;
        }
        /// <summary>
        /// Initializes the Roomba and LIDAR
        /// </summary>
        /// <param name="roombaPortId">Serial device ID for the Roomba</param>
        /// <param name="lidarPortId">Serial device ID for the LIDAR</param>
        /// <returns></returns>
        public async Task InitializeAsync(string roombaDeviceId = Roomba.DEFAULT_DEVICE_ID, string lidarDeviceId = Lidar.DEFAULT_DEVICE_ID)
        {
            Debug.WriteLine("Initializing Controller...");
            OnControllerMessageReceived("Initializing controller...");

            // Initialize the Roomba
            await Roomba.InitializeAsync(roombaDeviceId, 20);

            Roomba.Stopped += Roomba_Stopped;
            OnControllerMessageReceived("Roomba successfully initialized.");

            // Initialize the LIDAR
            await Lidar.InitializeAsync(lidarDeviceId);

            Lidar.ScanComplete += Lidar_ScanComplete;
            Lidar.StartScan();
            OnControllerMessageReceived("LIDAR successfully initialized.");

            Analysis.AnalysisChanged += Analysis_AnalysisChanged;

            Debug.WriteLine("Controller initialization completed.");

            IsEnabled = true;
        }