+
#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) ;
}
-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<CTeoria> plan ;
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 ;