01-24-12¶
Go over Behavior Code¶
- Discuss abstract class
- Hides all the ROS stuff
- Initializes ROS
- Creates wrappers for ROS functions
- Declares all the library control objects
class Behavior { public: // Initializes ROS for behavior Behavior(std::string scoutname); /// Extended by subclasses to actually run the behavior. virtual void run() = 0; protected: ros::NodeHandle node; ros::Rate *loop_rate; // Declare all used library controls MotorControl * motors; ButtonControl * buttons; SonarControl * sonar; // Wrappers for ROS functions bool ok(); void spin(); void spinOnce(); };
- Discuss BehaviorList and BehaviorProcess
- BehaviorList
- Behavior list instantiates all the behaviors.
- Initialized with scoutname.
- Destructs behavior objects when deconstructor is called (no mem leaks!)
- BehaviorProcess
- contains main function
- initializes BehaviorList for each scout
- Assigns each scout a behavior.
class BehaviorList { public: std::vector<Behavior*> behavior_list; //Constructor. Initializes behavior_list BehaviorList(std::string scoutname); //Destructor. Frees behavior_list; ~BehaviorList(); };
int main (int argc, char **argv) { string scoutname = ""; int behavior_num; // Running with no arguments only supports one scout. Check in case // the user meant to specify a scout in the arguments. if (argc != 3) { cout << "You have started this behavior in hardware mode." << endl << "To start in software mode, use: " << argv[0] << " <scoutname> <behavior#>" << endl; } else { // Use the provided scoutname for simulator messages scoutname = argv[1]; behavior_num = atoi(argv[2]); ros::init(argc, argv, "priya_behavior"); BehaviorList* list = new BehaviorList(scoutname); vector<Behavior*> behavior_list = list->behavior_list; if (behavior_num < (int)behavior_list.size()) { (behavior_list[behavior_num])->run(); } else { cout << "There is no behavior number" << behavior_num << ". There are only " << (int)behavior_list.size() << "behaviors." << endl; } delete list; } return 0; }
- Discuss How to Create new Behavior
- Create new.cpp and new.h file in /scout/libscout/src/behaviors
Goals for This Semester¶
Robot Planner (Driving Robots)- Follow a preset path (line following?)
- Intersection Behavior?
- Creating/Representing/Storing Map of world
- Path Planning (Shortest Path)
- Interfacing with Scheduler
- Determining Method for Scheduling Tasks
- Write Scheduler (assume fixed robots and fixed tasks)
- Find "optimal" way to assign tasks to robots
- Find "optimal" order to do tasks
- Interface with robots
- Growing/changing list of tasks
Assign tasks for next week¶
Week | Robot Planner | Scheduler |
1 | Port over linefollowing and intersection behavior code(low-level) | Determine Scheduler Algorithm. |
2 | Higher level intersection code and map representation | Write Easy PQ implementation |
3 | Finish code if not finished. Define robot-scheduler interface. | Expand to include stack A to stack B (does not go back home case). Define robot-scheduler interface. |
4 | Path planning (A* or wavefront) | Expand to multiple palates? |
Week 1:
Robot Planner Assignees: Dan, Leon, Jon, Priya, Lalitha, James, Ben. Meeting Sunday @3
Scheduler Assignees: Dan, Jeff, Prashant, Priya(ish). Meeting on own time. Meeting Monday to fix scheduler algorithm.