From 9377154ec66848759806d0fe924ded961c9f392b Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Mon, 23 May 2011 22:56:02 +0200 Subject: digital/io-hub: add stub path module --- digital/io-hub/src/robospierre/Makefile | 2 +- digital/io-hub/src/robospierre/avrconfig.h | 8 +++ digital/io-hub/src/robospierre/main.c | 3 ++ digital/io-hub/src/robospierre/path.c | 83 ++++++++++++++++++++++++++++++ digital/io-hub/src/robospierre/path.h | 78 ++++++++++++++++++++++++++++ 5 files changed, 173 insertions(+), 1 deletion(-) create mode 100644 digital/io-hub/src/robospierre/path.c create mode 100644 digital/io-hub/src/robospierre/path.h (limited to 'digital/io-hub') diff --git a/digital/io-hub/src/robospierre/Makefile b/digital/io-hub/src/robospierre/Makefile index fe2b318e..dd4bfe5c 100644 --- a/digital/io-hub/src/robospierre/Makefile +++ b/digital/io-hub/src/robospierre/Makefile @@ -5,7 +5,7 @@ PROGS = io_hub # Sources to compile. io_hub_SOURCES = main.c \ clamp.c logistic.c \ - radar_defs.c radar.c \ + radar_defs.c radar.c path.c \ init.c fsm.host.c fsm_AI_gen.avr.c fsm_queue.c \ pwm.avr.c pwm.host.c \ contact.avr.c contact.host.c \ diff --git a/digital/io-hub/src/robospierre/avrconfig.h b/digital/io-hub/src/robospierre/avrconfig.h index 53e36ccf..c3f107c5 100644 --- a/digital/io-hub/src/robospierre/avrconfig.h +++ b/digital/io-hub/src/robospierre/avrconfig.h @@ -112,6 +112,14 @@ USDIST_SENSOR (2, A, 2) \ USDIST_SENSOR (3, A, 3) +/* path - Path finding module. */ +/** Report path found for debug. */ +#define AC_PATH_REPORT defined (HOST) +/** Report function name. */ +#define AC_PATH_REPORT_CALLBACK simu_send_path +/** Number of possible obstacles. */ +#define AC_PATH_OBSTACLES_NB 2 + /* io-hub - io/ai board. */ /** TWI address of the io board. */ #define AC_IO_TWI_ADDRESS 10 diff --git a/digital/io-hub/src/robospierre/main.c b/digital/io-hub/src/robospierre/main.c index 36a1c157..b1abfd8a 100644 --- a/digital/io-hub/src/robospierre/main.c +++ b/digital/io-hub/src/robospierre/main.c @@ -51,6 +51,7 @@ #include "clamp.h" #include "logistic.h" +#include "path.h" #include "bot.h" @@ -105,6 +106,7 @@ main_init (void) /* AI modules. */ clamp_init (); logistic_init (); + path_init (); /* Initialization done. */ proto_send0 ('z'); } @@ -194,6 +196,7 @@ main_loop (void) } /* Update AI modules. */ logistic_update (); + path_decay (); /* Only manage events if slaves are synchronised. */ if (twi_master_sync ()) main_event_to_fsm (); diff --git a/digital/io-hub/src/robospierre/path.c b/digital/io-hub/src/robospierre/path.c new file mode 100644 index 00000000..b3c91ac8 --- /dev/null +++ b/digital/io-hub/src/robospierre/path.c @@ -0,0 +1,83 @@ +/* path.c */ +/* robospierre - Eurobot 2011 AI. {{{ + * + * Copyright (C) 2011 Nicolas Schodet + * + * APBTeam: + * Web: http://apbteam.org/ + * Email: team AT apbteam DOT org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * }}} */ +#include "common.h" +#include "path.h" + +/** Context. */ +struct path_t +{ + /** Position of end points. */ + vect_t endpoints[2]; + /** Whether the last update was a success. */ + uint8_t found; +}; +static struct path_t path; + +void +path_init (void) +{ +} + +void +path_endpoints (vect_t s, vect_t d) +{ + path.endpoints[0] = d; + path.endpoints[1] = s; +} + +void +path_escape (uint8_t factor) +{ +} + +void +path_obstacle (uint8_t i, vect_t c, uint16_t r, uint8_t factor, + uint16_t valid) +{ +} + +void +path_decay (void) +{ +} + +void +path_update (void) +{ + path.found = 1; +} + +uint8_t +path_get_next (vect_t *p) +{ + if (path.found) + { + *p = path.endpoints[0]; + return 1; + } + else + return 0; +} + diff --git a/digital/io-hub/src/robospierre/path.h b/digital/io-hub/src/robospierre/path.h new file mode 100644 index 00000000..22a8ead8 --- /dev/null +++ b/digital/io-hub/src/robospierre/path.h @@ -0,0 +1,78 @@ +#ifndef path_h +#define path_h +/* path.h */ +/* robospierre - Eurobot 2011 AI. {{{ + * + * Copyright (C) 2011 Nicolas Schodet + * + * APBTeam: + * Web: http://apbteam.org/ + * Email: team AT apbteam DOT org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * }}} */ +#include "defs.h" + +/** This implement a interface similar to the path module, but adapted for the + * special grid of Eurobot 2011. See real path modules for interface comments. */ + +/** Infinite validity for an obstacle. */ +#define PATH_OBSTACLE_VALID_ALWAYS 0xffff + +/** Obstacle. */ +struct path_obstacle_t +{ + /** Center. */ + vect_t c; + /** Radius. */ + uint16_t r; + /** Validity counter, when this is zero, the obstacle is ignored. */ + uint16_t valid; +}; + +void +path_init (void); + +void +path_endpoints (vect_t s, vect_t d); + +void +path_escape (uint8_t factor); + +void +path_obstacle (uint8_t i, vect_t c, uint16_t r, uint8_t factor, + uint16_t valid); + +void +path_decay (void); + +void +path_update (void); + +uint8_t +path_get_next (vect_t *p); + +#if AC_PATH_REPORT + +/** Report computed path. */ +void +AC_PATH_REPORT_CALLBACK (vect_t *points, uint8_t len, + struct path_obstacle_t *obstacles, + uint8_t obstacles_nb); + +#endif + +#endif /* path_h */ -- cgit v1.2.3