Robot Agent  1.0
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
task.c
Go to the documentation of this file.
1 
11 /* -- Includes -- */
12 /* system libraries */
13 
14 /* project libraries */
15 #include "task.h"
16 
17 /* -- Defines -- */
18 
19 
20 /* -- Global Variables -- */
21 
22 /* System structures */
23 enviroment_t *g_envs; // Enviroment definition
24 openinterface_t *g_ois; // Open Interface
25 rfid_t *g_rfids; // RFID Reader
26 pf_t *g_pfs; // Particle filter
27 robot_t *g_robot; // Estimated robot pose
28 pheromone_t *g_phs; // Pheromones
29 udp_t *g_udps; // UDP sockets connection
30 
31 /* Data lists */
32 doublylinkedlist_t *g_list_send; // Queue for data to be sent away (communication)
33 
34 /* Data queues */
35 queue_t *g_queue_mission; // Queue for data to mission task (commands, victims)
36 queue_t *g_queue_navigate; // Queue for data to navigate task (pheromones)
37 
38 /* Task structures */
39 task_t g_task_mission; // Control for the mission task
40 task_t g_task_navigate; // Control for the navigate task
41 task_t g_task_control; // Control for the control task
42 task_t g_task_refine; // Control for the refine task
43 task_t g_task_report; // Control for the report task
44 task_t g_task_communicate; // Control for the communicate task
45 task_t g_task_avoid; //Control for the collision detection task
46 
47 /* Specific task related structure */
48 task_mission_t g_task_mission_data; // Structure that holds found victims and mission related things
49 task_control_t g_task_control_data; // Structure that holds control task related variables
50 
51 /* Task pipes */
55 
56 /* Communication information */
59 
61 
62 
63 /* -- Functions -- */
64 
69 void task_init(int enable)
70 {
71  // Init enviroment
74  // Init open interface
76  // Init RFID
78  // Init Particle filter
80  g_envs,
86  // Init Robot
87  g_robot = robot_init( g_config.robot_init_x,
90  0, 0, 0, 0,
92  // Init Pheromones
93  g_phs = pheromone_init( g_envs,
100  // Init UDP
104 
105 
106  // Init Queues
107  // for communication
108  g_list_send = doublylinkedlist_init();
109  // for mission
110  g_queue_mission = queue_init();
111  // for navigate
112  g_queue_navigate = queue_init();
113 
114 
115  // Init task
116  if(enable > 0)
117  {
118  g_task_mission.enabled = s_TRUE;
119  g_task_navigate.enabled = s_TRUE;
120  g_task_control.enabled = s_TRUE;
121  g_task_refine.enabled = s_TRUE;
122  g_task_report.enabled = s_TRUE;
123  g_task_communicate.enabled = s_TRUE;
124  g_task_avoid.enabled = s_TRUE;
125  }
126  else
127  {
128  g_task_mission.enabled = s_TRUE;
129  g_task_navigate.enabled = s_FALSE;
130  g_task_control.enabled = s_FALSE;
131  g_task_avoid.enabled = s_FALSE;
132  g_task_refine.enabled = s_FALSE;
133  g_task_report.enabled = s_FALSE;
134  g_task_communicate.enabled = s_TRUE;
135  }
136 
137 
138  // Init mission data
139  g_task_mission_data.victim_count = 0;
140  // Init the data stream counter and timer
141  g_task_mission_data.stream_counter = 0;
142  timelib_timer_set(&g_task_mission_data.stream_timer);
143  // Init "go ahead" timer
144  timelib_timer_set(&g_task_mission_data.go_ahead_timer);
145 
146  // Init control data
147  // Init openinterface request timer
148  timelib_timer_set(&g_task_control_data.request_timer);
149 
150  //Init the message sequence id.
152 
153  //TODO:load the slot from a config file
155 
156  g_go_ahead = 1;
157 }
158 
162 void task_destroy(void)
163 {
164  // Deinit enviroment
165  enviroment_destroy(g_envs);
166  // Deinit open interface
167  openinterface_close(g_ois);
168  // Deinit RFID
169  rfid_close(g_rfids);
170  // Deinit Particle filter
171  pf_destroy(g_pfs);
172  // Deinit robot
173  robot_destroy(g_robot);
174  // Deinit Pheromones
175  pheromone_destroy(g_phs);
176  // Deinit UDP
177  udp_close(g_udps);
178 
179  // Deinit queues
180  doublylinkedlist_destroy(g_list_send);
181  queue_destroy(g_queue_mission);
182  queue_destroy(g_queue_navigate);
183 }
void task_destroy(void)
Definition: task.c:162
int openinterface_close(openinterface_t *ois)
Definition: openinterface.c:63
int pheromone_sector_max_size
Definition: config.h:58
int robot_init_x
Definition: config.h:47
int udp_close(udp_t *udp)
Definition: udp.c:130
queue_t * g_queue_navigate
Definition: task.c:36
int robot_radius
Definition: config.h:46
Pheromone structure.
Definition: pheromone.h:27
rfid_t * rfid_open(char *device_path)
Definition: rfid.c:35
char serialport_rfid_port_path[256]
Definition: config.h:29
void doublylinkedlist_destroy(doublylinkedlist_t *dlls)
robot_t * robot_init(int x, int y, int a, int move_noise, float turn_noise, int sense_tag_noise, int sense_wall_noise, int radius)
Definition: robot.c:38
char enviroment_tags_def_path[256]
Definition: config.h:34
int g_message_sequence_id
Definition: task.c:57
doublylinkedlist_t * doublylinkedlist_init(void)
struct timeval request_timer
Definition: task.h:74
task_t g_task_communicate
Definition: task.c:44
int enabled
Definition: task.h:46
int robot_init_angle
Definition: config.h:49
config_t g_config
Definition: config.c:22
taskpipe_refine_report_t g_tp_refine_report
Definition: task.c:52
robot_t * g_robot
Definition: task.c:27
int udp_packet_size
Definition: config.h:62
void task_init(int enable)
Definition: task.c:69
int g_tdma_slot
Definition: task.c:58
Open Interface structure.
Particle filter structure.
Definition: pf.h:24
queue_t * queue_init(void)
Definition: queue.c:29
doublylinkedlist_t * g_list_send
Definition: task.c:32
int pf_noise_move
Definition: config.h:38
UDP structure.
Definition: udp.h:28
task_t g_task_report
Definition: task.c:43
openinterface_t * openinterface_open(char *device_path)
Definition: openinterface.c:35
int pf_particles_num
Definition: config.h:37
task_t g_task_control
Definition: task.c:41
taskpipe_report_mission_t g_tp_report_mission
Definition: task.c:53
taskpipe_navigate_control_t g_tp_navigate_control
Definition: task.c:54
int pheromone_width
Definition: config.h:53
int timelib_timer_set(struct timeval *tv)
Definition: timelib.c:28
char serialport_openinterface_port_path[256]
Definition: config.h:30
void pf_destroy(pf_t *pfs)
Definition: pf.c:84
void queue_destroy(queue_t *qs)
Definition: queue.c:47
int pf_noise_tag
Definition: config.h:40
rfid_t * g_rfids
Definition: task.c:25
task_t g_task_mission
Definition: task.c:39
int pheromone_eval_dist
Definition: config.h:57
int g_go_ahead
Definition: task.c:60
enviroment_t * g_envs
Definition: task.c:23
struct timeval go_ahead_timer
Definition: task.h:64
int pf_noise_wall
Definition: config.h:41
char udp_broadcast_ip[16]
Definition: config.h:63
udp_t * g_udps
Definition: task.c:29
task_mission_t g_task_mission_data
Definition: task.c:48
pheromone_t * g_phs
Definition: task.c:28
int robot_init_y
Definition: config.h:48
void robot_destroy(robot_t *robot)
Definition: robot.c:70
Robot structure.
Definition: robot.h:25
RFID structure.
Definition: rfid.h:24
queue_t * g_queue_mission
Definition: task.c:35
int robot_id
Definition: config.h:44
#define s_FALSE
Definition: def.h:61
void enviroment_destroy(enviroment_t *env)
Definition: enviroment.c:50
Doubly linked list structure.
openinterface_t * g_ois
Definition: task.c:24
Task pipe: navigate -> control.
Definition: task.h:101
Queue structure.
Definition: queue.h:34
enviroment_t * enviroment_load(char *room_def_path, char *tags_def_path)
Definition: enviroment.c:31
int pheromone_eval_radius
Definition: config.h:56
char enviroment_room_def_path[256]
Definition: config.h:33
task_t g_task_refine
Definition: task.c:42
pheromone_t * pheromone_init(enviroment_t *env, int width, int lifetime, int pheromone_radius, int eval_radius, int eval_dist, int sector_max_size)
Definition: pheromone.c:40
task_t g_task_avoid
Definition: task.c:45
#define s_TRUE
Definition: def.h:60
struct timeval stream_timer
Definition: task.h:61
Task structure.
Definition: task.h:44
pf_t * pf_init(int num, enviroment_t *envs, int move_noise, float turn_noise, int sense_tag_noise, int sense_wall_noise, int radius)
Definition: pf.c:38
int pheromone_pheromone_radius
Definition: config.h:55
Task mission structure.
Definition: task.h:53
task_t g_task_navigate
Definition: task.c:40
Task pipe: report -> mission.
Definition: task.h:91
int udp_port
Definition: config.h:61
int pf_noise_turn
Definition: config.h:39
void pheromone_destroy(pheromone_t *ph)
Definition: pheromone.c:109
udp_t * udp_open(char *broadcast_ip, int port, int packet_size)
Definition: udp.c:105
int rfid_close(rfid_t *rfids)
Definition: rfid.c:53
task_control_t g_task_control_data
Definition: task.c:49
int pheromone_lifetime
Definition: config.h:54
pf_t * g_pfs
Definition: task.c:26
Task pipe: refine -> report.
Definition: task.h:81
Task control structure.
Definition: task.h:71
long stream_counter
Definition: task.h:60
Enviroment Structure - room points, tags, room point number, tag number.
Definition: enviroment.h:49