]> git.llucax.com Git - z.facultad/75.68/celdas.git/blobdiff - trunk/src/main.cpp
Arreglo bug horrible. El get-sensor-value era una especie de random (lo que no
[z.facultad/75.68/celdas.git] / trunk / src / main.cpp
index 648505ac83c9789efe44714f78862d6ed80cb656..a2598050905229e5d04c67105d56d18485dc2fd0 100644 (file)
@@ -1,34 +1,36 @@
+
 #include "main.h"
+#include <iostream>
 
 //
-double CMiEntorno::AvanzarX()
+double AvanzarX(CEntorno& e)
 {
        avanzo_en_x = true ;
        return 0 ;
 }
 
 
-double CMiEntorno::AvanzarY()
+double AvanzarY(CEntorno& e)
 {
        avanzo_en_y = true ;
        return 0 ;
 }
 
 
-double CMiEntorno::AvanzarZ()
+double AvanzarZ(CEntorno& e)
 {
        avanzo_en_z = true ;
        return 0 ;
 }
 
 
-CMiEntorno::CMiEntorno():
-       avanzo_en_x(true), avanzo_en_y(true), avanzo_en_z(true)
+//
+void CMiEntorno::inicializar()
 {
        // Inicializo el Entorno
-       datos.add("robot.avanzo_en_x", 1) ;
-       datos.add("robot.avanzo_en_y", 1) ;
-       datos.add("robot.avanzo_en_z", 1) ;
+       datos.add("robot.avanzo_en_x", 0) ;
+       datos.add("robot.avanzo_en_y", 0) ;
+       datos.add("robot.avanzo_en_z", 0) ;
 
        datos.add("robot.sensor_1", 0) ;
        datos.add("robot.sensor_2", 0) ;
@@ -49,76 +51,84 @@ void CMiEntorno::actualizar()
        
 }
 
-struct CMiTeoria1: CTeoria< CMiEntorno >
-{
-       CMiTeoria1(CMiEntorno& e):
-               CTeoria< CMiEntorno >("Avanzar_X_1", 1, 1, e)
-       {
-               datos_iniciales.add ("robot.sensor_1", 0) ;
-               datos_finales.add ("robot.avanzo_en_x", 1) ;
-       }
-       double funcion()
-       {
-               entorno.avanzo_en_x = true ;
-               return 0 ;
-       }
-};
-
-struct CMiTeoria2: CTeoria< CMiEntorno >
-{
-       CMiTeoria2(CMiEntorno& e):
-               CTeoria< CMiEntorno >("Avanzar_Y_1", 1, 1, e)
-       {
-               datos_iniciales.add ("robot.sensor_2", 0) ;
-               datos_finales.add ("robot.avanzo_en_y", 1) ;
-       }
-       double funcion()
-       {
-               entorno.avanzo_en_y = true ;
-               return 0 ;
-       }
-};
-
-struct CMiTeoria3: CTeoria< CMiEntorno >
-{
-       CMiTeoria3(CMiEntorno& e):
-               CTeoria< CMiEntorno >("Avanzar_Z_1", 1, 1, e)
-       {
-               datos_iniciales.add ("robot.sensor_3", 0) ;
-               datos_finales.add ("robot.avanzo_en_z", 1) ;
-       }
-       double funcion()
-       {
-               entorno.avanzo_en_z = true ;
-               return 0 ;
-       }
-};
+
 
 //
 int main(int argc, char** argv)
 {
        //
-       CMiEntorno                     e ;
-       CSistemaAutonomo< CMiEntorno > a(e) ;
+       CMiEntorno                              e ;
+       CSistemaAutonomo                a ;
 
+       e.inicializar() ;
 
        // Inicializo las teorias
-       a.teorias.add("teoria1", new CMiTeoria1(e)) ;
-       a.teorias.add("teoria2", new CMiTeoria2(e)) ;
-       a.teorias.add("teoria3", new CMiTeoria3(e)) ;
+       CTeoria t1("Avanzar_X_1", &AvanzarX, 1, 1) ;
+       t1.datos_iniciales.add ("robot.sensor_1", 0) ;
+       t1.datos_iniciales.add ("robot.sensor_2", ANY) ;
+       t1.datos_iniciales.add ("robot.sensor_3", ANY) ;
+       t1.datos_iniciales.add ("robot.avanzo_en_x", ANY) ;
+       t1.datos_iniciales.add ("robot.avanzo_en_y", ANY) ;
+       t1.datos_iniciales.add ("robot.avanzo_en_z", ANY) ;
+       t1.datos_finales.add ("robot.avanzo_en_x", 1) ;
+       t1.datos_finales.add ("robot.avanzo_en_y", 0) ;
+       t1.datos_finales.add ("robot.avanzo_en_z", 0) ;
+       t1.datos_finales.add ("robot.sensor_1", ANY) ;
+       t1.datos_finales.add ("robot.sensor_2", ANY) ;
+       t1.datos_finales.add ("robot.sensor_3", ANY) ;
+
+       CTeoria t2("Avanzar_Y_1", &AvanzarY, 1, 1) ;
+       t2.datos_iniciales.add ("robot.sensor_1", ANY) ;
+       t2.datos_iniciales.add ("robot.sensor_2", 0) ;
+       t2.datos_iniciales.add ("robot.sensor_3", ANY) ;
+       t2.datos_iniciales.add ("robot.avanzo_en_x", ANY) ;
+       t2.datos_iniciales.add ("robot.avanzo_en_y", ANY) ;
+       t2.datos_iniciales.add ("robot.avanzo_en_z", ANY) ;
+       t2.datos_finales.add ("robot.avanzo_en_x", 0) ;
+       t2.datos_finales.add ("robot.avanzo_en_y", 1) ;
+       t2.datos_finales.add ("robot.avanzo_en_z", 0) ;
+       t2.datos_finales.add ("robot.sensor_1", ANY) ;
+       t2.datos_finales.add ("robot.sensor_2", ANY) ;
+       t2.datos_finales.add ("robot.sensor_3", ANY) ;
+
+       CTeoria t3("Avanzar_Z_1", &AvanzarZ, 1, 1) ;
+       t3.datos_iniciales.add ("robot.sensor_1", ANY) ;
+       t3.datos_iniciales.add ("robot.sensor_2", ANY) ;
+       t3.datos_iniciales.add ("robot.sensor_3", 0) ;
+       t3.datos_iniciales.add ("robot.avanzo_en_x", ANY) ;
+       t3.datos_iniciales.add ("robot.avanzo_en_y", ANY) ;
+       t3.datos_iniciales.add ("robot.avanzo_en_z", ANY) ;
+       t3.datos_finales.add ("robot.avanzo_en_x", 0) ;
+       t3.datos_finales.add ("robot.avanzo_en_y", 0) ;
+       t3.datos_finales.add ("robot.avanzo_en_z", 1) ;
+       t3.datos_finales.add ("robot.sensor_1", ANY) ;
+       t3.datos_finales.add ("robot.sensor_2", ANY) ;
+       t3.datos_finales.add ("robot.sensor_3", ANY) ;
+
+       a.teorias.add(t1.nombre.c_str(), t1) ;
+       a.teorias.add(t2.nombre.c_str(), t2) ;
+       a.teorias.add(t3.nombre.c_str(), t3) ;
+
+       
+       // Inicializo el SA
+       a.p_entorno = (CEntorno*)(&e) ;
 
 
        // Obtengo un plan
        double p = 1 ;
-       CIndiceMagico<CTeoria< CMiEntorno >* >* p_plan ;
+       CIndiceMagico<CTeoriaplan ;
        CIndiceMagico<t_dato> datos_finales ;
+       datos_finales.add ("robot.avanzo_en_y", 1) ;
+
+       a.planificar (a.p_entorno->datos, datos_finales, plan, p) ;
 
-       datos_finales.add ("robot.avanzo_en_x", 1) ;
+       for (unsigned i=0; i<plan.count(); i++)
+               std::cout << plan[i].nombre.c_str() << std::endl ;
 
-       p_plan = a.new_plan(datos_finales, p) ;
 
-       for (int i=0; i<p_plan->count(); i++)
-               std::cout << (*p_plan)[i]->nombre << std::endl ;
+       // Ejecuto el plan
+       a.ejecutar(plan) ;
 
 
        return 0 ;