2014 Eurobot fork

Dependencies:   mbed-rtos mbed QEI

Revision:
91:fdadfd883825
Parent:
90:e4164bb8c60e
diff -r e4164bb8c60e -r fdadfd883825 Processes/AI/ai.cpp
--- a/Processes/AI/ai.cpp	Wed Apr 17 23:16:25 2013 +0000
+++ b/Processes/AI/ai.cpp	Tue Oct 15 12:17:11 2013 +0000
@@ -1,296 +1,294 @@
-#include "ai.h"
-#include "rtos.h"
-#include "globals.h"
-#include "motion.h"
-#include "Colour.h"
-#include "supportfuncs.h"
-#include "Arm.h"
-#include "MotorControl.h"
-
-//TODO: after 2012/2013, kill entire AI layer as it is hacked together. Rest is fine-ish
-
-//#define HARDCODED_WAYPOINTS_HACK
-
-Colour c_upper(P_COLOR_SENSOR_BLUE_UPPER, P_COLOR_SENSOR_RED_UPPER, P_COLOR_SENSOR_IN_UPPER, UPPER);
-Colour c_lower(P_COLOR_SENSOR_BLUE_LOWER, P_COLOR_SENSOR_RED_LOWER, P_COLOR_SENSOR_IN_LOWER, LOWER);
-
-namespace AI
-{
-// starting position
-#ifdef TEAM_RED
-ColourEnum own_colour = RED;
-
-Waypoint home_wp = {2.7, 1.75, PI, 0.03, 0.05*PI, 32};
-#endif
-
-#ifdef TEAM_BLUE
-ColourEnum own_colour = BLUE;
-
-Waypoint home_wp = {0.3, 1, 0, 0.03, 0.05*PI, 32};
-#endif
-
-enum layer { top_layer, bot_layer };
-
-bool delayed_done = true; //TODO: kill
-
-struct delayed_struct //TODO: kill
-{
-    osThreadId tid; 
-    Waypoint *wpptr;
-};
-
-void raise_top_arm(const void *dummy);
-void raise_bottom_arm(const void *dummy);
-
-void delayed_setter(const void *tid_wpptr); //TODO: kill the hack
-
-#ifndef HARDCODED_WAYPOINTS_HACK
-void ailayer(void const *dummy)
-{
-    RtosTimer top_arm_up_timer(raise_top_arm, osTimerOnce);
-    RtosTimer bottom_arm_up_timer(raise_bottom_arm, osTimerOnce);
-    
-    //NB: reassign ds.wpptr before each invocation
-    //delayed_struct ds = {Thread::gettid(),NULL};
-    //RtosTimer delayed_wp_set(delayed_setter, osTimerOnce, (void *)&ds);
-
-    MotorControl::motorsenabled = true; 
-    motion::collavoiden = 1;
-    
-    motion::waypoint_flag_mutex.lock();
-    motion::setNewWaypoint(Thread::gettid(),&home_wp); //go to home
-    motion::waypoint_flag_mutex.unlock();
-    Thread::signal_wait(0x1); //wait until wp reached
-   
-    MotorControl::motorsenabled = false;
-    arm::upper_arm.go_up();
-    arm::lower_arm.go_down();
-    
-    Thread::signal_wait(0x2); //wait for cord
-    
-    // CORD PULLED
-    MotorControl::motorsenabled = true;
-    arm::lower_arm.go_up();
-    
-    #ifdef TEAM_BLUE
-
-    Waypoint mid_wp5 = {1.2, 1, 0, 0.10, 0.15*PI, 32};
-    motion::waypoint_flag_mutex.lock();
-    motion::setNewWaypoint(Thread::gettid(),&mid_wp5);
-    motion::waypoint_flag_mutex.unlock();
-    Thread::signal_wait(0x1); //wait until wp reached
-    Thread::wait(3000);
-
-    Waypoint mid_wp = {1.9, 1.1, (1.0/4.0)*PI, 0.03, 0.05*PI, 32};
-    motion::waypoint_flag_mutex.lock();
-    motion::setNewWaypoint(Thread::gettid(),&mid_wp);
-    motion::waypoint_flag_mutex.unlock();
-    Thread::signal_wait(0x1); //wait until wp reached
-    
-    Waypoint approach_wp = {2.24, 1.84/*1.85*/, (-3.0f/4.0f)*PI, 0.03, 0.05*PI, 32};
-    motion::waypoint_flag_mutex.lock();
-    motion::setNewWaypoint(Thread::gettid(),&approach_wp); 
-    motion::waypoint_flag_mutex.unlock();
-    Thread::signal_wait(0x1); //wait until wp reached
-    #endif
-    /*
-    Waypoint approach_wp2 = {2.2-0.05, 1.83, (-3.0f/4.0f)*PI, 0.03, 0.05*PI, 32};
-    motion::waypoint_flag_mutex.lock();
-    motion::setNewWaypoint(Thread::gettid(),&approach_wp2); 
-    motion::waypoint_flag_mutex.unlock();
-    Thread::signal_wait(0x1); //wait until wp reached*/
-    
-    Waypoint mutable_cake_wp = {0, 0, 0, 0.01, 0.01*PI, 512};
-    
-    float r = 0.26+0.35-0.0075;//-0.01; //second 0.01 for being less collisiony with sensors
-    
-    layer layer_to_push = top_layer;
-    
-    float top_target_phi = (180-(11.25/*+22.5*/))/180*PI;
-    float bot_target_phi = (180-(7.5+15))/180*PI;
-    
-    float phi = 0; // angle of vector (robot->center of cake)
-    
-    for(int i=0; i<18; ++i)
-    {
-        if (top_target_phi > bot_target_phi)
-        {
-            layer_to_push = top_layer;
-            phi = top_target_phi;
-            top_target_phi -= 22.5/180*PI;
-        }
-        else
-        {
-            layer_to_push = bot_layer;
-            phi = bot_target_phi;
-            bot_target_phi -= 15.0/180*PI;
-        }
-        
-        // hack
-        if (own_colour==BLUE && i==0)
-            continue;
-        
-        // set new wp
-        mutable_cake_wp.x = 1.5-r*cos(phi);
-        mutable_cake_wp.y = 2-r*sin(phi);
-        mutable_cake_wp.theta = constrainAngle(phi+PI/2);
-        
-        //arm offset
-        mutable_cake_wp.x += 0.0425*cos(mutable_cake_wp.theta);
-        mutable_cake_wp.y += 0.0425*sin(mutable_cake_wp.theta);
-        
-        
-        motion::waypoint_flag_mutex.lock();
-        motion::setNewWaypoint(Thread::gettid(),&mutable_cake_wp); 
-        motion::waypoint_flag_mutex.unlock();
-        Thread::signal_wait(0x1); //wait until wp reached
-        
-        if(layer_to_push == top_layer)
-        {
-            ColourEnum colour_read = c_upper.getColour();
-            if ((colour_read==own_colour || i==0) && MotorControl::motorsenabled)
-            {
-                arm::upper_arm.go_down();
-                top_arm_up_timer.start(1200);
-            }
-        }  
-        else
-        {
-            ColourEnum colour_read = c_lower.getColour();
-            if ((colour_read==own_colour || i==5+1 || i==7+1 || i==8+1 || i==10+1/*|| colour_read==WHITE*/) && MotorControl::motorsenabled)
-            {
-                arm::lower_arm.go_down();
-                bottom_arm_up_timer.start(1200);
-            }
-        }
-        Thread::wait(2100);
-    }
-    
-    ////////////////////
-    
-    while(1)
-        Thread::wait(1000);
-}
-#else
-enum action_t {top_push_colour, bot_push_colour, bot_push_white};
-
-void ailayer(void const *dummy)
-{
-    RtosTimer top_arm_up_timer(raise_top_arm, osTimerOnce);
-    RtosTimer bottom_arm_up_timer(raise_bottom_arm, osTimerOnce);
-    
-    ////////////////////////////////////
-    // put waypoints here
-    ////////////////////////////////////
-    const int wp_num = 3;
-    
-    float x_arr[wp_num] = {1.2,1.5,1.7}; //<--------------------------
-    float y_arr[wp_num] = {1,1.2,1.4}; //<--------------------------
-    float theta_arr[wp_num] = {0,PI, PI/2}; //<----------------------
-    action_t action[wp_num] = {top_push_colour, bot_push_colour, bot_push_white}; //<----------------------------
-    
-    Waypoint wp_arr[wp_num];
-
-    for(int i=0; i<wp_num; ++i)
-    {
-        wp_arr[i].x =x_arr[i];
-        wp_arr[i].y =y_arr[i];
-        wp_arr[i].theta =theta_arr[i];
-        
-        wp_arr[i].pos_threshold = 0.01;
-        wp_arr[i].angle_threshold = 0.01*PI;
-        wp_arr[i].angle_exponent = 512;  
-    }
-    
-    ////////////////////////////////////
-
-    MotorControl::motorsenabled = true; 
-    motion::collavoiden = 1;
-    
-    motion::waypoint_flag_mutex.lock();
-    motion::setNewWaypoint(Thread::gettid(),&home_wp); //go to home
-    motion::waypoint_flag_mutex.unlock();
-    Thread::signal_wait(0x1); //wait until wp reached
-   
-    MotorControl::motorsenabled = false;
-    arm::upper_arm.go_up();
-    arm::lower_arm.go_up();
-    
-    Thread::signal_wait(0x2); //wait for cord
-    
-    // CORD PULLED
-    MotorControl::motorsenabled = true;
-    
-    #ifdef TEAM_BLUE
-    Waypoint mid_wp = {1.8, 1, (1.0/4.0)*PI, 0.03, 0.05*PI, 32};
-    motion::waypoint_flag_mutex.lock();
-    motion::setNewWaypoint(Thread::gettid(),&mid_wp);
-    motion::waypoint_flag_mutex.unlock();
-    Thread::signal_wait(0x1); //wait until wp reached
-    #endif
-    
-    Waypoint approach_wp = {2.2, 1.85, (-3.0f/4.0f)*PI, 0.03, 0.05*PI, 32};
-    motion::waypoint_flag_mutex.lock();
-    motion::setNewWaypoint(Thread::gettid(),&approach_wp); 
-    motion::waypoint_flag_mutex.unlock();
-    Thread::signal_wait(0x1); //wait until wp reached
-    
-    
-    for(int i=0; i<wp_num; ++i)
-    {
-        motion::waypoint_flag_mutex.lock();
-        motion::setNewWaypoint(Thread::gettid(),&(wp_arr[i])); //go to home
-        motion::waypoint_flag_mutex.unlock();
-        Thread::signal_wait(0x1); //wait until wp reached
-        
-        switch(action[i])
-        {
-            case top_push_colour:
-                if ((c_upper.getColour()==own_colour) && MotorControl::motorsenabled)
-                {
-                    arm::upper_arm.go_down();
-                    top_arm_up_timer.start(1200);
-                }
-            break;
-            case bot_push_colour:
-                if ((c_lower.getColour()==own_colour) && MotorControl::motorsenabled)
-                {
-                    arm::lower_arm.go_down();
-                    bottom_arm_up_timer.start(1200);
-                }
-            break;
-            case bot_push_white:
-                if (MotorControl::motorsenabled)
-                {
-                    arm::lower_arm.go_down();
-                    bottom_arm_up_timer.start(1200);
-                }
-            break;            
-        }
-        
-        Thread::wait(2200);
-    }
-    
-    while(1)
-    Thread::wait(1000);
-}
-#endif
-
-void raise_top_arm(const void *dummy)
-{
-    arm::upper_arm.go_up();
-}
-
-void raise_bottom_arm(const void *dummy)
-{
-    arm::lower_arm.go_up();
-}
-
-void delayed_setter(const void *tid_wpptr) //TODO: kill the hack
-{
-    delayed_struct *dsptr = (delayed_struct *)tid_wpptr;
-    motion::setNewWaypoint(dsptr->tid,dsptr->wpptr);
-    delayed_done = true;
-}
-
-} //namespace
\ No newline at end of file
+//#include "ai.h"
+//#include "rtos.h"
+//#include "globals.h"
+//#include "motion.h"
+//#include "supportfuncs.h"
+//#include "MotorControl.h"
+//
+////TODO: after 2012/2013, kill entire AI layer as it is hacked together. Rest is fine-ish
+//
+////#define HARDCODED_WAYPOINTS_HACK
+//
+//Colour c_upper(P_COLOR_SENSOR_BLUE_UPPER, P_COLOR_SENSOR_RED_UPPER, P_COLOR_SENSOR_IN_UPPER, UPPER);
+//Colour c_lower(P_COLOR_SENSOR_BLUE_LOWER, P_COLOR_SENSOR_RED_LOWER, P_COLOR_SENSOR_IN_LOWER, LOWER);
+//
+//namespace AI
+//{
+//// starting position
+//#ifdef TEAM_RED
+//ColourEnum own_colour = RED;
+//
+//Waypoint home_wp = {2.7, 1.75, PI, 0.03, 0.05*PI, 32};
+//#endif
+//
+//#ifdef TEAM_BLUE
+//ColourEnum own_colour = BLUE;
+//
+//Waypoint home_wp = {0.3, 1, 0, 0.03, 0.05*PI, 32};
+//#endif
+//
+//enum layer { top_layer, bot_layer };
+//
+//bool delayed_done = true; //TODO: kill
+//
+//struct delayed_struct //TODO: kill
+//{
+//    osThreadId tid; 
+//    Waypoint *wpptr;
+//};
+//
+//void raise_top_arm(const void *dummy);
+//void raise_bottom_arm(const void *dummy);
+//
+//void delayed_setter(const void *tid_wpptr); //TODO: kill the hack
+//
+//#ifndef HARDCODED_WAYPOINTS_HACK
+//void ailayer(void const *dummy)
+//{
+//    RtosTimer top_arm_up_timer(raise_top_arm, osTimerOnce);
+//    RtosTimer bottom_arm_up_timer(raise_bottom_arm, osTimerOnce);
+//    
+//    //NB: reassign ds.wpptr before each invocation
+//    //delayed_struct ds = {Thread::gettid(),NULL};
+//    //RtosTimer delayed_wp_set(delayed_setter, osTimerOnce, (void *)&ds);
+//
+//    MotorControl::motorsenabled = true; 
+//    motion::collavoiden = 1;
+//    
+//    motion::waypoint_flag_mutex.lock();
+//    motion::setNewWaypoint(Thread::gettid(),&home_wp); //go to home
+//    motion::waypoint_flag_mutex.unlock();
+//    Thread::signal_wait(0x1); //wait until wp reached
+//   
+//    MotorControl::motorsenabled = false;
+//    arm::upper_arm.go_up();
+//    arm::lower_arm.go_down();
+//    
+//    Thread::signal_wait(0x2); //wait for cord
+//    
+//    // CORD PULLED
+//    MotorControl::motorsenabled = true;
+//    arm::lower_arm.go_up();
+//    
+//    #ifdef TEAM_BLUE
+//
+//    Waypoint mid_wp5 = {1.2, 1, 0, 0.10, 0.15*PI, 32};
+//    motion::waypoint_flag_mutex.lock();
+//    motion::setNewWaypoint(Thread::gettid(),&mid_wp5);
+//    motion::waypoint_flag_mutex.unlock();
+//    Thread::signal_wait(0x1); //wait until wp reached
+//    Thread::wait(3000);
+//
+//    Waypoint mid_wp = {1.9, 1.1, (1.0/4.0)*PI, 0.03, 0.05*PI, 32};
+//    motion::waypoint_flag_mutex.lock();
+//    motion::setNewWaypoint(Thread::gettid(),&mid_wp);
+//    motion::waypoint_flag_mutex.unlock();
+//    Thread::signal_wait(0x1); //wait until wp reached
+//    
+//    Waypoint approach_wp = {2.24, 1.84/*1.85*/, (-3.0f/4.0f)*PI, 0.03, 0.05*PI, 32};
+//    motion::waypoint_flag_mutex.lock();
+//    motion::setNewWaypoint(Thread::gettid(),&approach_wp); 
+//    motion::waypoint_flag_mutex.unlock();
+//    Thread::signal_wait(0x1); //wait until wp reached
+//    #endif
+//    /*
+//    Waypoint approach_wp2 = {2.2-0.05, 1.83, (-3.0f/4.0f)*PI, 0.03, 0.05*PI, 32};
+//    motion::waypoint_flag_mutex.lock();
+//    motion::setNewWaypoint(Thread::gettid(),&approach_wp2); 
+//    motion::waypoint_flag_mutex.unlock();
+//    Thread::signal_wait(0x1); //wait until wp reached*/
+//    
+//    Waypoint mutable_cake_wp = {0, 0, 0, 0.01, 0.01*PI, 512};
+//    
+//    float r = 0.26+0.35-0.0075;//-0.01; //second 0.01 for being less collisiony with sensors
+//    
+//    layer layer_to_push = top_layer;
+//    
+//    float top_target_phi = (180-(11.25/*+22.5*/))/180*PI;
+//    float bot_target_phi = (180-(7.5+15))/180*PI;
+//    
+//    float phi = 0; // angle of vector (robot->center of cake)
+//    
+//    for(int i=0; i<18; ++i)
+//    {
+//        if (top_target_phi > bot_target_phi)
+//        {
+//            layer_to_push = top_layer;
+//            phi = top_target_phi;
+//            top_target_phi -= 22.5/180*PI;
+//        }
+//        else
+//        {
+//            layer_to_push = bot_layer;
+//            phi = bot_target_phi;
+//            bot_target_phi -= 15.0/180*PI;
+//        }
+//        
+//        // hack
+//        if (own_colour==BLUE && i==0)
+//            continue;
+//        
+//        // set new wp
+//        mutable_cake_wp.x = 1.5-r*cos(phi);
+//        mutable_cake_wp.y = 2-r*sin(phi);
+//        mutable_cake_wp.theta = constrainAngle(phi+PI/2);
+//        
+//        //arm offset
+//        mutable_cake_wp.x += 0.0425*cos(mutable_cake_wp.theta);
+//        mutable_cake_wp.y += 0.0425*sin(mutable_cake_wp.theta);
+//        
+//        
+//        motion::waypoint_flag_mutex.lock();
+//        motion::setNewWaypoint(Thread::gettid(),&mutable_cake_wp); 
+//        motion::waypoint_flag_mutex.unlock();
+//        Thread::signal_wait(0x1); //wait until wp reached
+//        
+//        if(layer_to_push == top_layer)
+//        {
+//            ColourEnum colour_read = c_upper.getColour();
+//            if ((colour_read==own_colour || i==0) && MotorControl::motorsenabled)
+//            {
+//                arm::upper_arm.go_down();
+//                top_arm_up_timer.start(1200);
+//            }
+//        }  
+//        else
+//        {
+//            ColourEnum colour_read = c_lower.getColour();
+//            if ((colour_read==own_colour || i==5+1 || i==7+1 || i==8+1 || i==10+1/*|| colour_read==WHITE*/) && MotorControl::motorsenabled)
+//            {
+//                arm::lower_arm.go_down();
+//                bottom_arm_up_timer.start(1200);
+//            }
+//        }
+//        Thread::wait(2100);
+//    }
+//    
+//    ////////////////////
+//    
+//    while(1)
+//        Thread::wait(1000);
+//}
+//#else
+//enum action_t {top_push_colour, bot_push_colour, bot_push_white};
+//
+//void ailayer(void const *dummy)
+//{
+//    RtosTimer top_arm_up_timer(raise_top_arm, osTimerOnce);
+//    RtosTimer bottom_arm_up_timer(raise_bottom_arm, osTimerOnce);
+//    
+//    ////////////////////////////////////
+//    // put waypoints here
+//    ////////////////////////////////////
+//    const int wp_num = 3;
+//    
+//    float x_arr[wp_num] = {1.2,1.5,1.7}; //<--------------------------
+//    float y_arr[wp_num] = {1,1.2,1.4}; //<--------------------------
+//    float theta_arr[wp_num] = {0,PI, PI/2}; //<----------------------
+//    action_t action[wp_num] = {top_push_colour, bot_push_colour, bot_push_white}; //<----------------------------
+//    
+//    Waypoint wp_arr[wp_num];
+//
+//    for(int i=0; i<wp_num; ++i)
+//    {
+//        wp_arr[i].x =x_arr[i];
+//        wp_arr[i].y =y_arr[i];
+//        wp_arr[i].theta =theta_arr[i];
+//        
+//        wp_arr[i].pos_threshold = 0.01;
+//        wp_arr[i].angle_threshold = 0.01*PI;
+//        wp_arr[i].angle_exponent = 512;  
+//    }
+//    
+//    ////////////////////////////////////
+//
+//    MotorControl::motorsenabled = true; 
+//    motion::collavoiden = 1;
+//    
+//    motion::waypoint_flag_mutex.lock();
+//    motion::setNewWaypoint(Thread::gettid(),&home_wp); //go to home
+//    motion::waypoint_flag_mutex.unlock();
+//    Thread::signal_wait(0x1); //wait until wp reached
+//   
+//    MotorControl::motorsenabled = false;
+//    arm::upper_arm.go_up();
+//    arm::lower_arm.go_up();
+//    
+//    Thread::signal_wait(0x2); //wait for cord
+//    
+//    // CORD PULLED
+//    MotorControl::motorsenabled = true;
+//    
+//    #ifdef TEAM_BLUE
+//    Waypoint mid_wp = {1.8, 1, (1.0/4.0)*PI, 0.03, 0.05*PI, 32};
+//    motion::waypoint_flag_mutex.lock();
+//    motion::setNewWaypoint(Thread::gettid(),&mid_wp);
+//    motion::waypoint_flag_mutex.unlock();
+//    Thread::signal_wait(0x1); //wait until wp reached
+//    #endif
+//    
+//    Waypoint approach_wp = {2.2, 1.85, (-3.0f/4.0f)*PI, 0.03, 0.05*PI, 32};
+//    motion::waypoint_flag_mutex.lock();
+//    motion::setNewWaypoint(Thread::gettid(),&approach_wp); 
+//    motion::waypoint_flag_mutex.unlock();
+//    Thread::signal_wait(0x1); //wait until wp reached
+//    
+//    
+//    for(int i=0; i<wp_num; ++i)
+//    {
+//        motion::waypoint_flag_mutex.lock();
+//        motion::setNewWaypoint(Thread::gettid(),&(wp_arr[i])); //go to home
+//        motion::waypoint_flag_mutex.unlock();
+//        Thread::signal_wait(0x1); //wait until wp reached
+//        
+//        switch(action[i])
+//        {
+//            case top_push_colour:
+//                if ((c_upper.getColour()==own_colour) && MotorControl::motorsenabled)
+//                {
+//                    arm::upper_arm.go_down();
+//                    top_arm_up_timer.start(1200);
+//                }
+//            break;
+//            case bot_push_colour:
+//                if ((c_lower.getColour()==own_colour) && MotorControl::motorsenabled)
+//                {
+//                    arm::lower_arm.go_down();
+//                    bottom_arm_up_timer.start(1200);
+//                }
+//            break;
+//            case bot_push_white:
+//                if (MotorControl::motorsenabled)
+//                {
+//                    arm::lower_arm.go_down();
+//                    bottom_arm_up_timer.start(1200);
+//                }
+//            break;            
+//        }
+//        
+//        Thread::wait(2200);
+//    }
+//    
+//    while(1)
+//    Thread::wait(1000);
+//}
+//#endif
+//
+//void raise_top_arm(const void *dummy)
+//{
+//    arm::upper_arm.go_up();
+//}
+//
+//void raise_bottom_arm(const void *dummy)
+//{
+//    arm::lower_arm.go_up();
+//}
+//
+//void delayed_setter(const void *tid_wpptr) //TODO: kill the hack
+//{
+//    delayed_struct *dsptr = (delayed_struct *)tid_wpptr;
+//    motion::setNewWaypoint(dsptr->tid,dsptr->wpptr);
+//    delayed_done = true;
+//}
+//
+//} //namespace
\ No newline at end of file