Example #1
0
        public void TestDoubleSensor()
        {
            var sensor = new DoubleSensor();

            var ex = Assert.Throws<Exception>(() => SensorTypes.GetConfig(sensor));
            Assert.True(ex.Message.Contains("Sensor Configuration Error: Simulator.Tests.Web.DoubleSensor"));
        }
Example #2
0
        public void TestEnumSensor()
        {
            var sensor  = new EnumSensor();
            var parameterCount = 2;
            var typeCount = 1;
            var valuesCount = 3;

            var config = SensorTypes.GetConfig(sensor);

            Assert.AreEqual("Enum", config.Name);
            Assert.AreEqual(typeCount, config.Types.Length);
            Assert.AreEqual("Simulator.Bridge.Data.ImageData", config.Types[0]);
            Assert.AreEqual(parameterCount, config.Parameters.Count);
            Assert.AreEqual("car", config.Parameters[0].Name);
            Assert.AreEqual("C", config.Parameters[0].DefaultValue);
            Assert.AreEqual("enum", config.Parameters[0].Type);
            Assert.AreEqual("truck", config.Parameters[1].Name);
            Assert.AreEqual("A", config.Parameters[1].DefaultValue);
            Assert.AreEqual("enum", config.Parameters[1].Type);
            Assert.AreEqual(valuesCount, config.Parameters[0].Values.Length);
            Assert.AreEqual("A", config.Parameters[0].Values[0]);
            Assert.AreEqual("B", config.Parameters[0].Values[1]);
            Assert.AreEqual("C", config.Parameters[0].Values[2]);
            Assert.False(config.Parameters.Exists(p => p.Name == "NotPresent"));
        }
Example #3
0
        public void TestMinMaxSensor()
        {
            var sensor = new MinMaxSensor();
            var parameterCount = 3;
            var typeCount = 1;

            var config = SensorTypes.GetConfig(sensor);

            Assert.AreEqual("MinMax", config.Name);
            Assert.AreEqual(typeCount, config.Types.Length);
            Assert.AreEqual("Simulator.Bridge.Data.ImageData", config.Types[0]);
            Assert.AreEqual(parameterCount, config.Parameters.Count);

            Assert.AreEqual("length", config.Parameters[0].Name);
            Assert.AreEqual(500, config.Parameters[0].DefaultValue);
            Assert.AreEqual(1f, config.Parameters[0].Min);
            Assert.AreEqual(1920f, config.Parameters[0].Max);

            Assert.AreEqual("distance", config.Parameters[1].Name);
            Assert.AreEqual(5f, config.Parameters[1].DefaultValue);
            Assert.AreEqual(0f, config.Parameters[1].Min);
            Assert.AreEqual(9f, config.Parameters[1].Max);

            Assert.AreEqual("sad", config.Parameters[2].Name);
            Assert.AreEqual(false, config.Parameters[2].DefaultValue);
            Assert.AreEqual(null, config.Parameters[2].Min);
            Assert.AreEqual(null, config.Parameters[2].Max);
        }
Example #4
0
        public void TestColorSensor()
        {
            var sensor = new ColorSensor();
            var parameterCount = 2;
            var typeCount = 1;

            var config = SensorTypes.GetConfig(sensor);

            Assert.AreEqual("Color", config.Name);
            Assert.AreEqual(typeCount, config.Types.Length);
            Assert.AreEqual("Simulator.Bridge.Data.ImageData", config.Types[0]);
            Assert.AreEqual(parameterCount, config.Parameters.Count);
            Assert.AreEqual("picture", config.Parameters[0].Name);
            Assert.AreEqual("#FF00FFFF", config.Parameters[0].DefaultValue);
            Assert.AreEqual("color", config.Parameters[0].Type);
            Assert.AreEqual("space", config.Parameters[1].Name);
            Assert.AreEqual("#00000000", config.Parameters[1].DefaultValue);
            Assert.AreEqual("color", config.Parameters[1].Type);
            Assert.False(config.Parameters.Exists(p => p.Name == "NotPresent"));
        }
Example #5
0
        public void TestBoolSensor()
        {
            var sensor = new BoolSensor();
            var parameterCount = 2;
            var typeCount = 1;

            var config = SensorTypes.GetConfig(sensor);

            Assert.AreEqual("Bool", config.Name);
            Assert.AreEqual(typeCount, config.Types.Length);
            Assert.AreEqual("Simulator.Bridge.Data.ImageData", config.Types[0]);
            Assert.AreEqual(parameterCount, config.Parameters.Count);
            Assert.AreEqual("happy", config.Parameters[0].Name);
            Assert.AreEqual(true, config.Parameters[0].DefaultValue);
            Assert.AreEqual("bool", config.Parameters[0].Type);
            Assert.AreEqual("duckie", config.Parameters[1].Name);
            Assert.AreEqual(false, config.Parameters[1].DefaultValue);
            Assert.AreEqual("bool", config.Parameters[1].Type);
            Assert.False(config.Parameters.Exists(p => p.Name == "NotPresent"));
        }
Example #6
0
        public void TestIntSensor()
        {
            var sensor = new IntSensor();
            var parameterCount = 2;
            var typeCount = 1;

            var config = SensorTypes.GetConfig(sensor);

            Assert.AreEqual("Int", config.Name);
            Assert.AreEqual(typeCount, config.Types.Length);
            Assert.AreEqual("Simulator.Bridge.Data.ImageData", config.Types[0]);
            Assert.AreEqual(parameterCount, config.Parameters.Count);
            Assert.AreEqual("year", config.Parameters[0].Name);
            Assert.AreEqual(2019, config.Parameters[0].DefaultValue);
            Assert.AreEqual("int", config.Parameters[0].Type);
            Assert.AreEqual("LG", config.Parameters[1].Name);
            Assert.AreEqual(0, config.Parameters[1].DefaultValue);
            Assert.AreEqual("int", config.Parameters[1].Type);
            Assert.False(config.Parameters.Exists(p => p.Name == "NotPresent"));
        }
Example #7
0
        public void TestStringSensor()
        {
            var sensor = new StringSensor();
            var parameterCount = 2;
            var typeCount = 1;

            var config = SensorTypes.GetConfig(sensor);

            Assert.AreEqual("String", config.Name);
            Assert.AreEqual(typeCount, config.Types.Length);
            Assert.AreEqual("Simulator.Bridge.Data.ImageData", config.Types[0]);
            Assert.AreEqual(parameterCount, config.Parameters.Count);
            Assert.AreEqual("Help", config.Parameters[0].Name);
            Assert.AreEqual("helping", config.Parameters[0].DefaultValue);
            Assert.AreEqual("string", config.Parameters[0].Type);
            Assert.AreEqual("LG", config.Parameters[1].Name);
            Assert.AreEqual(null, config.Parameters[1].DefaultValue);
            Assert.AreEqual("string", config.Parameters[1].Type);
            Assert.False(config.Parameters.Exists(p => p.Name == "NotPresent"));
        }
Example #8
0
        public void TestManyDataSensor()
        {
            var sensor = new ManyDataSensor();
            var parameterCount = 1;
            var expectedTypes = new []
            {
                typeof(ImageData),
                typeof(PointCloudData),
                typeof(Detected3DObjectArray),
                typeof(Detected3DObjectData),
            };

            var config = SensorTypes.GetConfig(sensor);

            Assert.AreEqual("ManyData", config.Name);
            Assert.AreEqual(expectedTypes.Length, config.Types.Length);
            for (int i=0; i<expectedTypes.Length; i++)
            {
                Assert.AreEqual(expectedTypes[i].ToString(), config.Types[i], $"Wrong type, expected {expectedTypes[i]}, got {config.Types[i]}");
            }
            Assert.AreEqual(parameterCount, config.Parameters.Count);
            Assert.AreEqual("data", config.Parameters[0].Name);
            Assert.AreEqual(2, config.Parameters[0].DefaultValue);
        }
Example #9
0
        public static void LoadSensorPlugin(Manifest manifest, VfsEntry dir)
        {
#if UNITY_EDITOR
            //if (SensorDebugModeEnabled == true) // TODO Why is this not working?
            if (EditorPrefs.GetBool("Simulator/Sensor Debug Mode", false) == true)
            {
                if (File.Exists(Path.Combine(BundleConfig.ExternalBase, "Sensors", manifest.assetName, $"{manifest.assetName}.prefab")))
                {
                    Debug.Log($"Loading {manifest.assetName} in Sensor Debug Mode. If you wish to use this sensor plugin from WISE, disable Sensor Debug Mode in Simulator->Sensor Debug Mode or remove the sensor from Assets/External/Sensors");
                    var prefab = (GameObject)AssetDatabase.LoadAssetAtPath(Path.Combine(BundleConfig.ExternalBase, "Sensors", manifest.assetName, $"{manifest.assetName}.prefab"), typeof(GameObject));
                    SensorPrefabs.Add(prefab.GetComponent <SensorBase>());
                    Sensors.Add(SensorTypes.GetConfig(prefab.GetComponent <SensorBase>()));
                    if (!SensorTypeLookup.ContainsKey(manifest.assetGuid))
                    {
                        SensorTypeLookup.Add(manifest.assetGuid, prefab.GetComponent <SensorBase>());
                    }

                    var pluginType = prefab.GetComponent <SensorBase>().GetDataBridgePlugin();
                    if (pluginType != null)
                    {
                        var sensorBridgePlugin = Activator.CreateInstance(pluginType) as ISensorBridgePlugin;
                        foreach (var kv in BridgePlugins.All)
                        {
                            sensorBridgePlugin.Register(kv.Value);
                        }
                    }

                    return;
                }
            }
#endif
            if (SensorTypeLookup.ContainsKey(manifest.assetGuid))
            {
                return;
            }

            if (manifest.assetFormat != BundleConfig.Versions[BundleConfig.BundleTypes.Sensor])
            {
                throw new Exception($"Manifest version mismatch, expected {BundleConfig.Versions[BundleConfig.BundleTypes.Sensor]}, got {manifest.assetFormat}");
            }

            if (Sensors.FirstOrDefault(s => s.Guid == manifest.assetGuid) != null)
            {
                return;
            }

            Assembly pluginSource = LoadAssembly(dir, $"{manifest.assetName}.dll");
            foreach (Type ty in pluginSource.GetTypes())
            {
                if (typeof(ISensorBridgePlugin).IsAssignableFrom(ty))
                {
                    var sensorBridgePlugin = Activator.CreateInstance(ty) as ISensorBridgePlugin;
                    foreach (var kv in BridgePlugins.All)
                    {
                        sensorBridgePlugin.Register(kv.Value);
                    }
                }
            }

            string      platform     = SystemInfo.operatingSystemFamily == OperatingSystemFamily.Windows ? "windows" : "linux";
            var         pluginStream = dir.Find($"{manifest.assetGuid}_sensor_main_{platform}").SeekableStream();
            AssetBundle pluginBundle = AssetBundle.LoadFromStream(pluginStream);
            var         pluginAssets = pluginBundle.GetAllAssetNames();

            var texDir = dir.Find($"{manifest.assetGuid}_sensor_textures");
            if (texDir != null)
            {
                var texStream     = dir.Find($"{manifest.assetGuid}_sensor_textures").SeekableStream();
                var textureBundle = AssetBundle.LoadFromStream(texStream, 0, 1 << 20);
                if (!AssetBundle.GetAllLoadedAssetBundles().Contains(textureBundle))
                {
                    textureBundle.LoadAllAssets();
                }
            }

            SensorBase   pluginBase = pluginBundle.LoadAsset <GameObject>(pluginAssets[0]).GetComponent <SensorBase>();
            SensorConfig config     = SensorTypes.GetConfig(pluginBase);
            config.Guid = manifest.assetGuid;
            Sensors.Add(config);
            SensorPrefabs.Add(pluginBase);
            if (!SensorTypeLookup.ContainsKey(manifest.assetGuid))
            {
                SensorTypeLookup.Add(manifest.assetGuid, pluginBase);
            }
        }