00001 // File: HawkVisionDrive.C 00002 // Author: Josh Villbrandt <josh.villbrandt@usc.edu> 00003 // Kevin, Chris, Justin 00004 // Date: April 2010 00005 00006 #include "Robots/BeoHawk/computer/HawkVisionDrive.H" 00007 00008 // ###################################################################### 00009 HawkVisionDrive::HawkVisionDrive(std::string myName, int argc, char* argv[]) 00010 : HawkAgent(myName, argc, argv) { 00011 state = INIT; 00012 } 00013 00014 // ###################################################################### 00015 void HawkVisionDrive::registerTopics() { 00016 registerPublisher("DriveFinder"); 00017 registerSubscription("ControlDriveVision"); 00018 registerSubscription("CameraImage"); 00019 } 00020 00021 // ###################################################################### 00022 bool HawkVisionDrive::scheduler() { 00023 if(state == INIT) { 00024 //sendExampleMessageOne(); 00025 return true; 00026 } 00027 else if(state == IDLE) { 00028 //sendExampleMessageTwo(); 00029 return true; 00030 }else if(state == PROCESSING){ 00031 doDriveSearch(); 00032 return true; 00033 } 00034 00035 return false; 00036 } 00037 00038 // ###################################################################### 00039 void HawkVisionDrive::catchMessage(const HawkMessages::MessagePtr& hawkMessage, const Ice::Current&) { 00040 if(hawkMessage->ice_isA("::HawkMessages::ControlDriveVision")) 00041 { 00042 HawkMessages::ControlDriveVisionMessage msg = HawkMessages::ControlDriveVisionMessage::dynamicCast(hawkMessage); 00043 std::cout << "driveVisionOn" << std::endl; 00044 00045 // Update State / Wake Up Agent 00046 if(msg->driveVisionOn) { 00047 state = IDLE; 00048 wakeUp(); 00049 } 00050 } 00051 if(hawkMessage->is_A("::HawkMessages::CameraImageMessage") && state != PROCESSING) 00052 { 00053 HawkMessages::CameraImageMessage msg = HawkMessages::ControlDriveVisionMessage::dynamicCast(hawkMessage); 00054 std::cout<<"Got camera msg!"<<std::endl; 00055 //Update state 00056 if(msg->cameraID == "down"/*I'm not sure what the downward camera id is*/){ 00057 state = PROCESSING; 00058 } 00059 } 00060 } 00061 00062 /** 00063 * Tries to find a flash drive in the image 00064 **/ 00065 void HawkVisionDrive::doDriveSearch(){ 00066 00067 } 00068 00069 // ###################################################################### 00070 /* 00071 void HawkVisionDrive::sendExampleMessageOne() { 00072 // Create Message 00073 HawkMessages::ExampleMessagePtr msg = new HawkMessages::ExampleMessage; 00074 msg->name = itsName; 00075 msg->chatter = "Hello?"; 00076 00077 // Send Message 00078 publish("ExampleMessage", msg); 00079 00080 // Update State 00081 state = WAITING; 00082 }*/ 00083 00084 // ###################################################################### 00085 /* 00086 void HawkVisionDrive::sendExampleMessageTwo() { 00087 // Create Message 00088 HawkMessages::ExampleMessagePtr msg = new HawkMessages::ExampleMessage; 00089 msg->name = itsName; 00090 msg->chatter = "O hai! ^_^"; 00091 00092 // Send Message 00093 publish("ExampleMessage", msg); 00094 00095 // Update State 00096 state = WAITING; 00097 } 00098 */ 00099 00100 // ###################################################################### 00101 int main (int argc, char* argv[]) { 00102 std::cout << "HawkVisionDrive: starting..." << std::endl; 00103 00104 HawkVisionDrive agent("HawkVisionDrive", argc, argv); 00105 agent.start(); 00106 00107 std::cout << "HawkVisionDrive: all done!" << std::endl; 00108 }