From 63d44a6098878e8c6e82b61cdce202d54fae6a07 Mon Sep 17 00:00:00 2001 From: kim-mishra <121991867+kim-mishra@users.noreply.github.com> Date: Thu, 17 Aug 2023 10:15:54 -0400 Subject: [PATCH] RSDK-2262 - use config to determine slam mode during validation (#249) --- config/config.go | 28 +++++++++++++++++++++++++--- config/config_test.go | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 3 deletions(-) diff --git a/config/config.go b/config/config.go index 74916cb1..ee8160d5 100644 --- a/config/config.go +++ b/config/config.go @@ -43,8 +43,10 @@ type OptionalConfigParams struct { } var ( - errCameraMustHaveName = errors.New("\"camera[name]\" is required") - errSensorsMustNotBeEmpty = errors.New("\"sensors\" must not be empty") + errCameraMustHaveName = errors.New("\"camera[name]\" is required") + errSensorsMustNotBeEmpty = errors.New("\"sensors\" must not be empty") + errLocalizationInOfflineMode = newError("data_rate_msec = 0 and enable_mapping = false. localization in offline mode not supported.") + errLocalizationInOfflineModeIMU = newError("camera[data_freq_hz] and enable_mapping = false. localization in offline mode not supported.") ) // Validate creates the list of implicit dependencies. @@ -161,8 +163,13 @@ func GetOptionalParameters(config *Config, defaultLidarDataRateMsec, defaultIMUD if config.EnableMapping == nil { logger.Debug("no enable_mapping given, setting to default value of false") } else { - optionalConfigParams.EnableMapping = config.CloudStoryEnabled + optionalConfigParams.EnableMapping = *config.EnableMapping } + + if err := validateModes(optionalConfigParams, config.IMUIntegrationEnabled); err != nil { + return OptionalConfigParams{}, err + } + return optionalConfigParams, nil } @@ -179,3 +186,18 @@ func GetOptionalParameters(config *Config, defaultLidarDataRateMsec, defaultIMUD return optionalConfigParams, nil } + +func validateModes( + optionalConfigParams OptionalConfigParams, + imuEnabled bool, +) error { + offlineMode := optionalConfigParams.LidarDataRateMsec == 0 + localizationMode := !optionalConfigParams.EnableMapping + if localizationMode && offlineMode { + if imuEnabled { + return errLocalizationInOfflineModeIMU + } + return errLocalizationInOfflineMode + } + return nil +} diff --git a/config/config_test.go b/config/config_test.go index 22bccb64..35d783e8 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -297,6 +297,40 @@ func getOptionalParametersTestHelper( } }) + t.Run(fmt.Sprintf("config that puts cartographer in offline mode and in localization mode %s", suffix), func(t *testing.T) { + cfgService := makeCfgService(imuIntegrationEnabled, cloudStoryEnabled) + cfgService.Attributes["existing_map"] = "test-file.pbstream" + cfgService.Attributes["enable_mapping"] = false + if imuIntegrationEnabled { + cfgService.Attributes["camera"] = map[string]string{ + "name": "testcam", + "data_frequency_hz": "0", + } + } else { + cfgService.Attributes["data_rate_msec"] = 0 + } + cfg, err := newConfig(cfgService) + test.That(t, err, test.ShouldBeNil) + optionalConfigParams, err := GetOptionalParameters( + cfg, + 1000, + 1000, + 1002, + logger) + if cloudStoryEnabled { + if imuIntegrationEnabled { + test.That(t, err, test.ShouldBeError, errLocalizationInOfflineModeIMU) + } else { + test.That(t, err, test.ShouldBeError, errLocalizationInOfflineMode) + } + } else { + test.That(t, err, test.ShouldBeNil) + test.That(t, optionalConfigParams.LidarDataRateMsec, test.ShouldEqual, 0) + test.That(t, optionalConfigParams.EnableMapping, test.ShouldBeFalse) + test.That(t, optionalConfigParams.MapRateSec, test.ShouldEqual, 1002) + } + }) + if imuIntegrationEnabled { sensorAttributeTestHelper(t, logger, imuIntegrationEnabled, cloudStoryEnabled) }