public override bool configure(ResourceFinder rf) { Time.turboBoost(); Console.WriteLine("----------------------------------"); Console.WriteLine("Convergence Divergence Zone Module"); Console.WriteLine("----------------------------------"); bool loadingFromWeights = rf.check("load"); period = rf.check("period", new Value(100)).asInt(); broadcastDisplay = !rf.check("noDisplay"); Console.Write("Running every " + period + " ms"); if (loadingFromWeights) { Console.Write("Loading MMCM from weights file..."); string weightFile = rf.find("load").asString().c_str(); string path = rf.findFile(weightFile).c_str(); Console.WriteLine(path); cvz = CVZFactory.Create(path); } else { cvz = CVZFactory.Create(rf); } //Open the RPC communication rpc.open("/" + cvz.name + "/rpc"); attach(rpc); return(true); }
public override bool configure(ResourceFinder rf) { if (base.configure(rf)) { broadcastDisplay = !rf.check("noDisplay"); //Open ports for visualizing the activity CVZ_TPC ctpc = cvz as CVZ_TPC; activity = new BufferedPortImageRgb(); activity.open("/" + ctpc.name + "/activity:o"); return(true); } else { return(false); } }
public static IConvergenceZone Create(ResourceFinder rf) { IConvergenceZone cvz = null; string mapType = rf.check("mapType", new Value("MMCM")).asString().c_str(); string mapName = rf.check("mapName", new Value("defaultMap")).asString().c_str(); switch (mapType) { case "MMCM": { bool hSynch = rf.check("hsync"); int w = rf.check("width", new Value(10)).asInt(); int h = rf.check("height", new Value(10)).asInt(); int l = rf.check("layers", new Value(4)).asInt(); Console.WriteLine("Map " + mapName + " (" + mapType + ")"); Console.WriteLine("Shape " + l + "x(" + w + "x" + h + ")"); Console.WriteLine("HSynch= " + hSynch); cvz = new CVZ_MMCM(mapName, h, w, l, hSynch); float learningRate = (float)rf.check("learningRate", new Value(0.07f)).asDouble(); float sigma = (float)rf.check("sigma", new Value((float)((1 / 4.0) * (w + h) / 2.0))).asDouble(); Console.WriteLine("Learning Rate: " + learningRate); Console.WriteLine("Sigma: " + sigma); (cvz as CVZ_MMCM).Sigma = sigma; (cvz as CVZ_MMCM).LearningRate = learningRate; break; } case "CTPC": { bool hSynch = rf.check("hsync"); int w = rf.check("width", new Value(10)).asInt(); int h = rf.check("height", new Value(10)).asInt(); double neighborRadius = rf.check("radius", new Value(7.0)).asDouble(); Console.WriteLine("Radius= " + neighborRadius); Console.WriteLine("Map " + mapName + " (" + mapType + ")"); Console.WriteLine("HSynch= " + hSynch); cvz = new CVZ_TPC(mapName, w, h, neighborRadius, hSynch); break; } //case "MMCM_GPU": // { // cvz = new CVZ_MMCM_GPU(mapName, h, w, l); // float learningRate = (float)rf.check("learningRate", new Value(0.07f)).asDouble(); // float sigma = (float)rf.check("sigma", new Value((float)((1 / 4.0) * (w + h) / 2.0))).asDouble(); // Console.WriteLine("Learning Rate: " + learningRate); // Console.WriteLine("Sigma: " + sigma); // break; // } } //Unknown map type if (cvz == null) { Console.WriteLine("Unknown map type: " + mapType); return(null); } else { Console.WriteLine("Map created. Adding modalities..."); } int modalityCount = rf.check("modalityCount", new Value(0)).asInt(); for (int i = 0; i < modalityCount; i++) { IModality mod = null; Bottle modalityGroup = rf.findGroup("modality_" + i); string name = modalityGroup.check("name", new Value("defaultModality" + i)).asString().c_str(); string type = modalityGroup.check("type", new Value("random")).asString().c_str(); float influence = (float)modalityGroup.check("influence", new Value(1.0)).asDouble(); Console.WriteLine("Modality: " + name + " (" + type + ")"); Console.WriteLine("Influence: " + influence); switch (type) { case "random": { int size = modalityGroup.check("size", new Value(1)).asInt(); mod = new RandomModality(mapName, name, size); break; } case "yarpVector": { int size = modalityGroup.check("size", new Value(1)).asInt(); float[] minBounds = null; float[] maxBounds = null; bool isBlocking = modalityGroup.check("isBlocking"); string autoconnect = null; if (modalityGroup.check("autoconnect")) { autoconnect = modalityGroup.find("autoconnect").asString().c_str(); } Console.WriteLine("isBlocking: " + isBlocking); if (modalityGroup.check("minBounds")) { minBounds = new float[size]; Bottle minBot = modalityGroup.find("minBounds").asList(); for (int c = 0; c < minBot.size(); c++) { minBounds[c] = (float)minBot.get(c).asDouble(); } } if (modalityGroup.check("maxBounds")) { maxBounds = new float[size]; Bottle maxBot = modalityGroup.find("maxBounds").asList(); for (int c = 0; c < maxBot.size(); c++) { maxBounds[c] = (float)maxBot.get(c).asDouble(); } } mod = new YarpModalityVector(mapName, name, size, minBounds, maxBounds, isBlocking, autoconnect); //if (modalityGroup.check("autoconnect")) //{ // string sourceConnection = modalityGroup.find("autoconnect").asString().c_str(); // while (!Network.connect(sourceConnection, YarpModalityVector.getRealPortName(mapName, name))) // { // Console.WriteLine("Waiting for..." + sourceConnection); // Time.delay(1.0); // } //} break; } case "yarpString": { bool isBlocking = modalityGroup.check("isBlocking"); string autoconnect = null; if (modalityGroup.check("autoconnect")) { autoconnect = modalityGroup.find("autoconnect").asString().c_str(); } mod = new YarpModalityString(mapName, name, isBlocking, autoconnect); Console.WriteLine("isBlocking: " + isBlocking); //if (modalityGroup.check("autoconnect")) //{ // string sourceConnection = modalityGroup.find("autoconnect").asString().c_str(); // Network.connect(sourceConnection, YarpModalityVector.getRealPortName(mapName, name)); //} break; } case "yarpImageRgb": { bool isBlocking = modalityGroup.check("isBlocking"); Console.WriteLine("isBlocking: " + isBlocking); int wImg = modalityGroup.check("width", new Value(32)).asInt(); int hImg = modalityGroup.check("height", new Value(32)).asInt(); string autoconnect = null; if (modalityGroup.check("autoconnect")) { autoconnect = modalityGroup.find("autoconnect").asString().c_str(); } mod = new YarpModalityImageRgb(mapName, name, wImg, hImg, isBlocking, autoconnect); Console.WriteLine("Resolution: " + wImg + "x" + hImg); //if (modalityGroup.check("autoconnect")) //{ // string sourceConnection = modalityGroup.find("autoconnect").asString().c_str(); // Network.connect(sourceConnection, YarpModalityVector.getRealPortName(mapName, name)); //} break; } case "yarpImageFloat": { bool isBlocking = modalityGroup.check("isBlocking"); Console.WriteLine("isBlocking: " + isBlocking); int wImg = modalityGroup.check("width", new Value(32)).asInt(); int hImg = modalityGroup.check("height", new Value(32)).asInt(); int padding = modalityGroup.check("padding", new Value(0)).asInt(); string autoconnect = null; if (modalityGroup.check("autoconnect")) { autoconnect = modalityGroup.find("autoconnect").asString().c_str(); } mod = new YarpModalityImageFloat(mapName, name, wImg, hImg, padding, isBlocking, autoconnect); Console.WriteLine("Resolution: " + wImg + "x" + hImg); //if (modalityGroup.check("autoconnect")) //{ // string sourceConnection = modalityGroup.find("autoconnect").asString().c_str(); // Network.connect(sourceConnection, YarpModalityVector.getRealPortName(mapName, name)); //} break; } case "yarpSound": { bool isBlocking = modalityGroup.check("isBlocking"); Console.WriteLine("isBlocking: " + isBlocking); int size = modalityGroup.check("size", new Value(512)).asInt(); string autoconnect = null; if (modalityGroup.check("autoconnect")) { autoconnect = modalityGroup.find("autoconnect").asString().c_str(); } mod = new YarpModalitySound(mapName, name, size, isBlocking, autoconnect); Console.WriteLine("Buffer: " + size); //if (modalityGroup.check("autoconnect")) //{ // string sourceConnection = modalityGroup.find("autoconnect").asString().c_str(); // Network.connect(sourceConnection, YarpModalityVector.getRealPortName(mapName, name)); //} break; } } Console.WriteLine(); //Unknown modality type if (mod == null) { return(null); } cvz.AddModality(mod, influence); } return(cvz); }
public static string GetCvzType(ResourceFinder rf) { string mapType = rf.check("mapType", new Value("MMCM")).asString().c_str(); return(mapType); }