{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Module 1: Hands-On Quadrotors\n", "\n", "## Unit 0: Introductions\n", "\n", "__Goal:__ Introduce instructors & students, objectives for the course, assign teams, and understand individual responsibilities\n", "\n", "__Lectures:__\n", "\n", " 1. [Course Introduction](https://docs.google.com/presentation/d/1Gfr472InI9QH1eIWXN7DdQv2LDH1NdkR0HbT7idqoF8/edit?usp=sharing)\n", " 2. [Team Roles and Responsibilities](https://bwsi-uav.github.io/website/team_roles.html)\n", " 3. [Intro to Unix/Bash](https://docs.google.com/presentation/d/1oHvgSuEw-JCodptHiPUNJVaFFAIavAKGWx73SvviHc4/edit?usp=sharing)\n", " 4. [Intro to Version Control](https://docs.google.com/presentation/d/1M-5IOTDlP4XkRy8c_6W5KSo7d45keXrfQQf4F43HNbc/edit?usp=sharing)\n", " \n", "__Practicals:__\n", "\n", " 1. [Project Workflow](project_workflow.html)\n", "\n", "\n", "__Advanced Topics:__\n", "\n", " 1. [In-Depth: Linux & Bash](https://ryanstutorials.net/linuxtutorial/)\n", " 1. [In-Depth: Vim](vim_tutorial.html)\n", " 1. [In-Depth: git & GitHub](https://bwsix.mit.edu/courses/course-v1:BWSI+BWSI220+Winter_2019/about)\n", " 1. [Accelerating your workflow](https://docs.google.com/presentation/d/1lQbGswr5zfgNSDWEZrB0XDS2OhUR0DQDh_ea32vMGyg/edit#slide=id.p3) - A tutorial on SSH multiplexing, `tmux`, `~/.ssh/authorized_keys`, and VSCode Remote usage" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Unit 1: Quadrotor Hands-On\n", "\n", "__Goal:__ Understand the constituent hardware components of a quadrotor by constructing an Intel Ready To Fly Drone (Intel RTF) from parts and perform RC-controlled flight\n", "\n", "__Practicals:__\n", "\n", " 1. [Drone Setup](student_drone_setup.html)\n", " 2. [Sensor Calibration](calibration.html)\n", " 3. [Preflight Safety](safety_checklist.html#Flight-Prep)\n", " 4. [Manual Flight Demo](safety_checklist.html#Manual-Flight)\n", " 5. [Battery Charging](safety_checklist.html#Battery-Handling-&-Charging)\n", " 2. [Flight Log Data Review](flight_log_analysis.html)\n", " \n", "__Advanced Topics:__\n", "\n", " 1. [ACRO Flight Mode]\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Unit 2: Embedded Drone Architecture\n", "\n", "__Goal:__ Each student will have high-level, cursory understanding of the hardware and software involved with communication, sensing, flight control, high-level processing and how these components interact. We will understand how communication is passed between processes running on the drone by practicing use of ROS and MAVROS messages. We will see how to access and inspect streams of information from the embedded cameras and sensors.\n", "\n", "__Lectures:__\n", "\n", " 1. [Embedded Architecture](https://docs.google.com/presentation/d/1NM_zhKeS3VZPtb2EkU6StyMRoMKa0-0_welNjtJ7g70/edit?usp=sharing)\n", " 2. [Intro to ROS](ros_introduction.html)\n", "\n", "__Practicals:__\n", "\n", " 1. [Intel RTF Drone Architecture Review](intel_rtf_architecture.html)\n", " 2. [Communication Pipeline](communication_pipeline.html)\n", " 3. [Accessing Video Streams](accessing_video_streams.html)\n", " 4. [Inspecting Sensor Feeds](internal_sensor_testing.html)\n", " \n", " \n", "__Advanced Topics:__\n", "\n", " 1. [In-Depth: Robot Operating System (ROS)]\n", " 2. [Exploring PX4 Firmware](exploring_px4_firmware.html)\n", " 3. [3D Imaging with RealSense]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Unit 3: Localization\n", "\n", "__Goal:__ Understand the various localization strategies that autonomous systems can employ to estimate their position in the world: GPS, SLAM, visual fiducials. Get hands-on experience with localization by developing a rosnode that uses an AR tag to estimate pose of quadrotor relative to the tag.\n", "\n", "__Lectures:__\n", "\n", " 1. [Localization & Reference Frames](https://drive.google.com/open?id=1rK3u_lXTh7Ll2Ary081B60LEh27l5DQsIuK4U0Yw1JM)\n", "\n", "__Practicals:__\n", "\n", " 1. [Hovering with Optical Flow](https://bwsi-uav.github.io/website/enable_optical_flow.html)\n", " 2. [ARTag Localization](ar_localization.html)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## _Challenge 1:_ Position Control Navigation\n", "\n", "### _Basic Challenge:_ Flight Operations Race\n", "\n", "__Goal:__ Develop the fastest, most efficient set of team operations for conducting test flights. Each team will be timed while performing a flight test that involves the following:\n", "\n", " 1. Start from the classroom area with drone powered off and laptops shut\n", " 2. Enter the flight space, observing all safety requirements, and prep your drone for position control flight\n", " 3. Execute a position-controlled loop around the flight space and perform a soft landing.\n", " 4. Safely extract the UAV from the flight space\n", " 5. Generate plots from the flight log\n", " \n", "Any team running, \"scrambling\", or using other unsafe practices will be disqualified. This race tests organization, not simply moving fast. \n", " \n", "### _Intermediate Challenge:_ ARTag Sequence Race\n", "\n", "__Goal:__ All teams' UAVs are capable of a stable, autonomous hover using optical flow, even when disturbed by a bump or wind. With this capability, teams will compete to see who can execute a small circuit as quickly and accurately as possible while remotely operating the drone in position control mode.\n", "\n", "The circuit will consist of a set of AR tags on the walls that must be visited in a certain order. A tag is considered visited once a ROS message is passed that contains the tag ID. Score is a weighted combination of time to visit all tags and accuracy of passing directly in front of the marker at a specified distance\n", "\n", "__Assignments:__\n", "\n", " 1. Challenge Report: Create 2-3 slides describing what your team did for the challenge. Highlight your sequence of operations and any challenges/roadblocks you encountered\n", " \n", "### _Advanced Challenge:_ Traveling ARTag Salesmen\n", "\n", "__Goal:__ A quasi-random array of ARTags will be assembled along one wall of the flight space. The challenge consists of \n", "\n", " 1. Taking off and observing the tag array\n", " 2. Calculate the shortest route through all tags that does not revisit any tag (Note: this is a 2D path)\n", " 3. In `POSITION CONTROL` mode approach the first tag of the calculated route and hold at the desired offset distance\n", " 4. In `POSITION CONTROL` mode, pilot the calculated route as fast as possible. Failure if you crash or if you observe a previously visited tag" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.5" } }, "nbformat": 4, "nbformat_minor": 2 }