== Control Systems/ Software Training Curriculum === Guiding Principles * Students hate lecture style teaching. Better to be hands on. Avoid powerpoint lectures. * Students have a wide variety of skill levels. Take care not to cater to any one particular level. * Many students do not attend every meeting (due to conflicts with sports, band, family obligations, etc). * Make sure to coordinate/ review with software leads === The Plan There are three technical skill levels that build on their predecessors. Not all students start at level one. ''Idea: If we come up with 3-5 activities at each level we can mix and match.'' === Immediate needs * Identify the challenges and activities for the first 4 weeks. === BoB/IROC competition preparation (experienced students) === Skill Level 1: Students new or beginners at Java programming ([http://robocode.sourceforge.net/ Robocode]) * Software fundamentals. * Java Programming Basics * Computer focused. * Individual Challenges/ Competition * Learn to compile and run Java * Eclipse Basics * For while loops,if statements, functions. * Emphasis on Individual Challenges/ Competition. * Supplement with online training resources (on student's own time) * '''Zhaozhou/Jill running point on this skill level.''' * Action: Talk to dev lead, identify dependencies (machines?), create a few exercises on Robocode. See something working, change it, create something new. * Set up robocode environment. * Show idea/walk them through it. * Have them make changes. * Custom activity/challenge: Battle Royale? * ([wiki:Setting_Up_Robocode]) === Skill Level 2: Familiar with simple programming, no embedded/io/robot experience ([wiki:PiBotHardware Minibots]) * Pibots * Bots are fully built up front with OS installed. A bit of risk given timeline. * Basic bot / hardware familiarization (This is power, this is control, different parts) * Basic IO manipulation with Java * Drive manipulation/autonomous without sensors with Java * Sensor manipulation with Java * Integration Challenges * Small Team * '''Alan running point on this skill level (Chris D helping).''' * Action: Build minibot. Come up with exercises like above. === Skill Level 3: Familiar with embedded java/simple robots (Midbots/ peanut/ roborio/ wpilib) * Roborio * Frcsim * Wpilib * '''Jason running point on this skill level.''' * Action: Get simulator running, figure out what there is to teach from Student Software Lead. * Challenges: * Autonomous navigation (navigate an increasingly difficult course) * PID control (balancing something e.g. on an arm, constant speed despite terrain, etc.) * Vision/targeting * Shooting/grabbing/lifting/driving === Safety * All students take safety class. === Software Development * "Bob taking point on this" * Git * Peer reviews * Testing (Blackbox/ Clearbox) * Phases of Software Development * Basic Design * Problem Solving/ Debugging * Teambuilding * All students should take this? * Student to teach git? * Block diagrams flow charting * OOA&D * Problem Solving/ Broken Code (Fix some code?) === Sensor Deep-Dive * Can we mesh in the Ardinuo stuff? * Encoders * Switches * IR reflectors/interrupters * Ultrasonic * LIDAR * Accelerometer/9DOF * Cameras/vision ** == ** Student Training/ Activity Ideas ** ==== Level 0: Basic Java * http://www.sololearn.com/Play/Java/# ==== Level 1: Robocode * Battle Royale: Design own bot to win! ==== Level 2: Minibots * Wheres my dinner? Have the minibot transport me a bag lunch in the next room. * King of the Hill! Stop a robot on a landing on a top of a ramp at specific point. ==== Level 3: Midbots * Develop wpilib like interface for midbots * Go through code of current bot, discuss design * Figure out FRCSim * Mobile app to control minibot via Bluetooth ==== Software Engineering * Classic OOA&D decomposition * Find the error. Take turns breaking the code, using git toolset to figure out what happened * Mock peer review ==== Sensor Crosstraining * Study/ Try out common sensors * Apply minibot ultasonic sensor * Apply install minibot 9DOF sensor ==== Electrical Crosstraining ==== Mechanical Crosstraing * design and 3D print a carry / table assembly for the minibot * design and make a simple gripper/manipulator for the minibot (can be done with a single servo motor)