Monday, December 19, 2016

Progress Report 12/19

We were able to run the file from last year, the code without the input. (Drone Control No-Control.js) We tried to understand the code and took some notes on the code. We are currently in progress of taking more notes and understanding more of the code. We took notes on the first half and some of the image processing. We tried to understand what blobs are and what las year did. Last year they used something called morphological operations. We also found that last year tried to find blue and light orange, and they are trying to detect the colors and move the drone away. Please go into their code and read the readme.md. We are also in the process of making a new blog and porting everything over. Slow progress.

Sunday, December 11, 2016

Thursday, December 8, 2016

Progress Report

We were able to make more progress this week. Mr. Lin said that we have to recap what we did this week and take notes so that we won't forget what we did. This week, we were able to get image stream from the drone by using ar-drone modules. If you want, here is a link that will bring you a bunch of ar-drone modules: http://www.nodecopter.com/modules. Heres's the link to the ar-drone png module: https://github.com/Soarez/ar-drone-png-stream. Follow the instructions in the readme.md to install. We had some trouble installing the module at first, but through research we have found that the module needs to be in the folder where you installed felixge's ar-drone module. Open up terminal, then enter /Users. Go to STEM, or whatever local account you logged in. You need to place the ar-drone-png-stream module that you downloaded in there. Then, enter npm install ar-drone-png-stream-master -g. (There is a space between master and -g). It should theoretically install. When installing in terminal, do not follow the instructions. There is also some lag (about 1 second) in the image stream. Remember to connect to the drone's wifi.

Anyways, for the time now, we have also made a program which will run a whole bunch of commands at once, instead of running each command in terminal, which is what we have been doing. We followed the instructions on instructables (how to hack ar-drone). We pasted in the code into sublime text and were able to make a javascript file. To run it, go to terminal and type node, then drag the javascript file in. Make sure to press enter after this and not before node... This will make the drone follow the instructions in the script. In the meantime, we are making the powerpoint presentation and trying to improve the code and stuff.

Good luck!

Thursday, December 1, 2016

Progress Report

We have managed to make the drone fly on one of the computers, A1. We are able to send simple commands to the drone, and we are able to make it take off and land, and we are also able to make the drone hover about 3 feet off the ground. Sometimes the drone doesn't work because of connection errors, and the drone would work 1 day and not the next. However, we think that it doesn't work sometimes actually because of battery issues. We are working on making autonomous programs that will run in Text Wrangler instead of typing lines of code in Terminal, which is what we are currently doing. We will also test other commands and try to remove the altitude limit.

This is what we are able to do so far.

*Don't type the quotation marks!
Steps to make the drone take off and land:
*Connect the computer to the drone WiFi before following the steps!*
1. In terminal, type "node" in order to send javascript commands to the drone.  An icon on the screen should change to ">"
2. After that, type "var arDrone = require('ar-drone');"
There should be a return value "undefined".


3. After that, type "var client = arDrone.createClient();"
There should be another return value "undefined". 
4. You can now start sending commands to the drone. This command will make the drone take off and hover at about 3 feet. Type "client.takeoff();"
There should be another return value "true". 
5. This command will make the drone land. Type "client.land();"
There should be another return value "true". 

6. You can also make the drone spin clockwise and counterclockwise using "client.clockwise(1);" and "client.counterClockwise(1);". You can change the speed in which it rotates by changing the values in the parentheses from 0 to 1. 



Thursday, November 17, 2016

Prior Art for Drone Delivery and Image Processing Code

I did some research from last year's blog posts and also their code and presentations. Below are a few links and screenshots of their code.

This is their pseudocode in the beginning.
Here's their powerpoint which includes their code for image processing and a brief description.
Presentation 3

Here's their powerpoint which includes their code for drone delivery and a brief description.
Presentation 4

Most importantly, here's their final product. They coded this in JavaScript and I was able to open it using Adobe Dreamweaver. However, I was not able to understand most of this because I don't know Javascript. I am also unsure how we will apply MatLab image processing to this either. Really confused.

Final Product

Wednesday, November 16, 2016

Progress Report - November 16th, 2016

Today, I was able to master most of the MatLab tutorial. I was able to finish sections 8-12 today, and should it should be finished by tomorrow. I also looked at some image processing commands given in Matlab that we could possibly use for our drone experiment. They are listed below.
- imread = reads image from graphics file
- imwrite = write image to graphics file
- tonemap = render high dynamic range image (HDR) for viewing
- makehdr = create high dymanic range (HDR) image
- hdrread = read high dynamic range (HDR) image
- restwrite = create reduced resolution data set from image file
- rgb2gray = convert RGB image or colormap to grayscale
- imbinarize = binarize image by thresholding
- gray2ind = convert grayscale or binary image to indexed image
- rgb2ntsc = convert RGB color values to NTSC color space
- iccread = read ICC profile

There are many more commands that I still have to look into.

Questions I have:
1) When looking through the commands, I noticed that some mentioned using the Otsu method. What is the Otsu's method? How is it used in image processing?


Sunday, November 13, 2016

Progress Report - November 13th, 2016 (Part 2)

Today, I was able to do some research on Matlab's tools, and also master another part of the tutorial they had given. Here are the notes from the tutorial:
- x = A(5,7); - this code if typed will basically retrieve data from an array from a specific area, in this sample, it will retrieve it from data set A, in row 5, column 7. Could be very useful.
- a colon specifies all elements in that dimension, for example, x = A(2,:) creates a row vector that contains all the elements from row 2 of data set A.
- x = v(3:end) refers to the elements from 3 to the end
-You can multiply or divide all of the elements of an array, subtract, add, and much more.
- You can also apply the special commands given by Matlab, like sqrt() on all elements of an array with ease as well
- you can learn more about functions that you don't know by using the "Help" button, and using that, you can browse content - learn about syntaxes and examples

I will be conducting more research and hope to finish more of the tutorial tomorrow.

Progress Report - November 13th, 2016 (Part 1)

After our presentation on our literature survey, it was suggested that we should understand the main components of what makes the drone function, and conduct more research on the things we don't understand yet. For example, some things we didn't fully understand are Kalman filtering, visual perception, and more. In all reason, we must continue to work forward and build our understanding on the past projects researchers have made. Therefore, we will continue to read these works and build our understanding on these past projects. Also, it was suggested that we should continue to master Matlab, considering the great importance it might play in our project. As a result, we will be continuing on mastering our skills and understanding of Matlab to be prepared for our research project.

Monday, October 31, 2016

Sunday, October 30, 2016

Monday, October 24, 2016

Progress Report - October 24th, 2016

We were able to make some progress on the basics of Matlab. Using the trial of Matlab, a tutorial course is provided, and we are currently in the process of using this tutorial course. This will allow us to understand the basic infrastructure of Matlabs, the commands Matlab has for us to use, and just a basic familiarity with the Matlab program itself. Here are the things were accomplished in the course, and some possible/useful notes for later.

Mastered:
- Entering Commands
- Storing Data in Variables
- Using Built-In Functions and Constants
- Manually Entering Arrays
- Creating Evenly-Spaced Vectors
- Array Creation Functions
- and others

Useful Notes:
- the clear function will clear the data in the Workspace (where data variables are stored)
- the clc function will clear the Command Window
- you can name your Matlab variables anything as long as they start with a letter and are only made of letters, numbers, and underscores (_)
- you can set your variables equal to values, for example, m = 20, and it will be stored in the Workspace for later use
- to use such variables, use the "up" button on your computer to look at past functions and commands
- there are many built-in functions and values like pi, sin, and abs.
- All Matlab variables are arrays, each variable can contain multiple elements, a single number is called a scalar.
- using the rand function, you can create matrices with random values

Wednesday, October 12, 2016

Updated Gantt Chart

For Gantt Chart, click Here

Dissertations

http://www.sciencedirect.com/science/article/pii/S1474667016438188
http://dare.uva.nl/document/2/108159
http://mav.sagepub.com/content/3/4/183.full.pdf+html
http://www.nickd.nl/dl/thesis_Nick_Dijkshoorn.pdf

We will add more resources over time. Also, notes on these research papers will be posted, mostly explaining the most useful aspects of these past experiments that can help us for our work.

We will most likely post notes on these articles during the weekend of October 15 - 16.

Thursday, September 29, 2016

Thursday, September 22, 2016

Initial Project Planning

  1. Project Description and Merits

The project is to build a program that will allow a drone to navigate by itself by detecting obstacles or following a set of instructions or signals, such as colored lines. This project will advance STEM because it allows for further advancements in drones and can lead to autonomous drone tracking and it will allow the drone to think and make decisions, as well as corrections, itself. This can decrease drone accidents and make the controller’s lives easier, and will be more precise and is faster than a human input. Not just that, since the drone will be operating in an indoor environment, it will be essential for the drone to be able to "sense" or "map" the environment around itself. This could help our worldwide community in many ways, provide possible methods of deliveries into warehouses/factories/offices, rescue, and just overall, evaluating the environment around itself, especially if it is dangerous.

  1. Group/Team Communication
The only members of our group are me and Ayoush. We may need to work with group 2 (Jacob, Alan, and Ryan) because they are also working with drones, and coding as well. We will communicate with each other via Facebook Messenger, Hangouts, and other methods.

  1. Prior Work/Resource Inventory
  • Node.js - Node.js is a programming language that is essential for the coding of our drone. It will allow us to give the drone commands, control the drone, etc.
  • AR.Flight 2.4.10 - This app will allow us to experiment with the drone, especially its movements. Understanding the movements of the drone will be essential to how we code commands for the drone. 
  • Robot Operating System (ROS) - This website will provide us powerful programming tools that could help us program our drone. 
  • Line following code - This database will allow us to analyze the code used by the group from last year, and make improvements in the code, to make the drone operate with a better performance and efficiency. 
  • How to use Git and GitHub - We must learn how to use GitHub if we are to make improvements and corrections to our code and store our files safely for further use at home or school. 
  • There are many other tools that we can use in our Project Resource page, and more will later be specified. 

  1. Technology Analysis
We need coding and engineering. We need coding in order to code the drone to follow lines and other commands, and we also need to write a script for the drone to follow. We also need to program the drone to interpret the data. We need engineering in case something goes wrong or we need to fix something physically. We will also need to be able to navigate the drone, and as a result, we will need to use the camera of the drone to help with navigation. Since our main objective is to make the drone follow a colored line, it is essential that we use the camera, and develop code for image processing. This will allow the drone to process images and then follow the colored line. The drone should also be able to dodge obstacles or redirect its route based on the objects it sees ahead, or on its way. As a result, a code will be necessary for the drone to recognize a 3D entity, the object, and then redirect a route around it. As a result, there is still much we need to do, and many tasks ahead of us.

Examples of the technology we need are...
- Javascript
- Node.js module
- Felixge’s AR Drone module
- An IDE, one that can run programs too


  1. Competence
Again, the skill sets that we need are coding and engineering for the same reasons. We also need to be patient and accept failure and are persistent. We also need to be precise and run many trials.
Skill Sets: 
- advanced knowledge of Microsoft Word, and Powerpoint
- knowledge of Microsoft Excel (possible to become better through practice)
- knowledge of commands and modules in node.js
- advanced knowledge of computer
- basic skill in controlling drone through applications

More skills will be added over time. 

  1. Safety
Safety is not a concern, however there are possible safety issues such as:
- getting cut by the drone blades.
- getting hit by the drone
- the drone hitting a classmate, or student

To keep our fellow peers and ourselves safe, we will most likely conduct drone experiments far away from the drone but close enough for the drone to be in sight to observe any errors in the drone control. Also, we will most likely conduct these experiments in an open-enviornment like the corridors at times where students are not walking through the corridor often, such as afterschool, and in the morning. We could also possibly conduct experiments in the gym too, if empty, due to its extensive space. 

  1. Equipment, Materials & Budget
We will need the FreeFlight AR Drone, a Windows Laptop, and a Mac. There should be no software costs because we will be using free, open-source software. We will need to download Node.js, Felixge’s AR Drone module, and Sublime Text 3.

  1. Schedule
Our goals for next week is to continue experimenting with the code and trying different actions, like flips, rotating, revolving, etc. We will investigate deeper and look at last year’s code and blogs to see what trouble we may run into and how to resolve them. We will do more research and maybe try to do something with the sensors.

RE: Initial Project Planning

1) Missing title of the post.
2) In part 1, you can highlight the "indoor environment" aspect of your project. Since there is GPS support for outdoor environment, it is actually more difficult for drones to navigate autonomously in the indoor environment. You can also point out the potential indoor applications such mapping, evaluating dangerous environment, rescue, warehouse/factory/office indoor delivery, etc.
3) In prat 1, Javascript, Node.js module, and Felixge’s AR Drone module are implementation details. Normally, we don't put them in the project description.
4) In part 2, great to point out the collaboration with Team 2!
5) In part 3, "Prior Work/Resource Inventory" is NOT your personal experience. It is the inventory of what other people have done relevant to your topic. You need to do some preliminary search online to get the idea about this field, and record the links and valuable information through this exercise. You can start this exercise from your Project Resource page, and add new info to the page throughout the process. 
6) In part 4, you can add things like:
  • video acquisition
  • image processing (e.g., color space conversion, thresholding, line/circle detection, etc.)
  • drone navigation (distance/direction control)
  • path planning
  • obstacle avoidance
In other word, you need to identify technology in much more details. This is also the location for you to put those "Javascript, Node.js module, and Felixge’s AR Drone module", and any other languages/platforms.
7) In part 5, take an inventory of all the relevant technical skills in your group and put them into a list. You can also list possible/accessible skills in the class. 
8) In part 6, once listing the possible safety issues, develop a plan to address the issue.

Wednesday, September 21, 2016

Goal Overview

  1. Project Description and Merits


The project is to build a program using certain modules from Javascript utilising the Node.js module and Felixge’s AR Drone module. We will get the drone to navigate by itself by detecting obstacles or following a set of instructions or signals, such as colored lines. This project will advance STEM because it allows for further advancements in drones and can lead to autonomous drone tracking and it will allow the drone to think and make decisions, as well as corrections, itself. This can decrease drone accidents and make the controller’s lives easier, and will be more precise and is faster than human input.  


  1. Group/Team Communication
The only members in our group are me and Ayoush. We may need to work with group 2 (Jacob, Alan, and Ryan) because they are also working with drones. We will communicate with each other via Facebook Messenger.


  1. Prior Work/Resource Inventory
We have absolutely no experience with this. Our project resources are the web, youtube, and previous group’s work.


  1. Technology Analysis
We need coding and engineering. We need coding in order to code the drone to follow lines and other commands, and we also need to write a script for the drone to follow. We also need to program the drone to interpret the data. We need engineering in case something goes wrong or we need to fix something physically.


  1. Competence
Again, the skill sets that we need are coding and engineering for the same reasons. We also need to be patient and accept failure and are persistent. We also need to be precise and run many trials.


  1. Safety
Safety is not a concern, except maybe getting cut by the drone blades.


  1. Equipment, Materials & Budget
We will need the FreeFlight AR Drone, a Windows Laptop, and a Mac. There should be no software costs because we will be using free, open-source software. We will need to download Node.js, Felixge’s AR Drone module, and Sublime Text 3.


  1. Schedule
Our goals for next week is to continue experimenting with the code and trying different actions, like flips, rotating, revolving, etc. We will investigate deeper and look at last year’s code and blogs to see what trouble we may run into and how to resolve them. We will do more research and maybe try to do something with the sensors.

Monday, September 12, 2016

Notes on Video #15

Video Notes:

Video 15 of Node JS Tutorial, thenewboston
Video Name: Connect

- a server framework called "connect" - already contains many tools we can use to handle user requests
- to install the "connect" framework, type "npm install connect" into the terminal
- when you connect to the website, it will look to the code for how to handle the request
- the code that handles user requests is called "middleware", place that in the "use" method/command
- the function of "connect" is that you can stack the middleware
- whenever you have a stack of middleware, these functions can be executed one by one
- doFirst has a special third parameter called next where whenever the user makes a request, you can make the function next (called doSecond) happen, basically calls for the next function - could be a very useful function in the future
- eventually, we can inspect paths, what user requests are they making, etc.

var connect = require('connect');
var http = require('http');

var app = connect();

function doFirst(request, response, next){
    console.log("bacon")
    next();
}

function doSecond(request, response, next){
    console.log("tuna")
    next();
}

app.use(doFirst);
    app.use(doSecond);


    http.createServer(app).listen(8888);
console.log('Sever is now running.');
Code used above.

Sunday, September 11, 2016

Notes on Video # 14

Video Notes:

Video 14 of Node JS Tutorial, thenewboston
Video Name: Simple Web File Server

- instead of sending data back, we need to send files back
- function onRequest = a function that will listen for functions
- you should make an if statement, saying request.method
- get = standard method of connecting to a website
- request.url, if equal to a /, you are connecting to the home page
- use the command "response.writeHand (200, ("Content-Type": "text/html"});" to send a html file back
- we need to send back a readable stream
- the file could be any size, want to send it back as a stream - used for better performance
- the command "fs.createReadStream("./index.html").pipe(response);
- the pipe function is to write it out, for feed it out

I am having trouble finding a suitable program to use for writing code. For some reason, my node.js file does not work running on these programs like Atom and Webstorm. If there are any suggestions, please do tell me. 

Wednesday, September 7, 2016

Notes on Video # 13

Video Notes:

Video 13 of Node JS Tutorial, thenewboston
Video Name: Creating a Basic Server

- an http server
- javascript was made for the web browser
- node js = code that will be on a server, will make a request for information from the database, the server will look at the request, and send information back in response to the request
- call the http core module (built into nodejs)
- then write "http.createServer"
- server has to be listening for request
- whenever a user uses the server, we need to call a function such as "onRequest", therefore, you have to build this function
- needs two parameters
- one parameter is the request object - information about user's request, what info were they trying to get, etc.
- second parameter is response - object/data we can send back to them
- there are different status codes that signify whether the request was successful or not, etc.
- use "request.writeHead", has two parameters, status code, and header information = what type of data you are sending back to them
- whenever a user connects to your server, the browser sends a request looking for the page, and makes another request for the favicon

Code created by tutorial maker:
var http = require('http');

function onRequest(request, response){
  console.log("A user made a request" + request.url);
  response.writeHead(200, [Context-Type]: "text/plain");
  response.write("Here is some data");
  response.end();
}

http.createServer(onRequest).listen(8888);
console.log("Server is now running....");


Tuesday, September 6, 2016

Notes on Videos # 10, 11, 12

Video Notes:

Video 10 of Node JS Tutorial, thenewboston
Video Name: Shared State of Modules

- shared objects/modules
- whenever you use modules, the default behavior is to share the module among every other file that imports it

Video 11 of Node JS Tutorial, thenewboston
Video Name: Object Factories

- you need to export a function to create a new object
- object factory = object that creates another object
- can have their own custom copy

Video 12 of Node JS Tutorial, thenewboston
Video Name: Core Modules

- core modules are the modules already built into node.js
- there are a lot of them
- fs = file system module
- you don't use the /. in core modules, only custom modules, use only the name (node knows its a core module)
- allows you to read and write files, and delete them
- file system module has 3 parameters
- path module, works with paths, normalizes slashes,
- "setInterval" - can have a bit of code to run, runs repeatedly, similar to the process of "setTimeout" but repeats unlike "setTimeout"
- "dirname" - give directory name (full path)
- "filename" -give file name of whatever file is currently calling the code

Notes on Videos #5, 6, 7, 8, 9

Video Notes:

Video 5 of Node JS Tutorial, thenewboston
Video Name: Understanding References to Objects

- in node, everything is a reference
- everything is interconnected, as a reference
- == means it only compares the value
- === means it only compares type and value

Video 6 of Node JS Tutorial, thenewboston
Video Name: this

- "this" is a keyword
- used to refer to the thing that called it (can be an explicit object)
- a true or false situation
- if you make a function that does not belong to any object, it is global
- your entire program will then call it - refers to global

Video 7 of Node JS Tutorial, thenewboston
Video Name: Prototype

- can add cool methods or properties to objects in classes (a hierarchy system?)
- can add additional functions onto a user object
- every instance has access to new function
- use the command called "prototype"

Video 8 of Node JS Tutorial, thenewboston
Video Name: Modules

- files often can contain thousands of lines, as a result, it can get really messy, and unorganized
- code can be broken up into different files
- these files are called modules
- to make modules, you group similar code together
- ex: a streaming service like Netflix offers movies, TV shows, and more, the code could be broken up into modules, there would a module for movie-related code, and a module for TV show-related code
- modules, therefore, are more specific
- to do this, you would make a new file
- code can be specifically exported into the main app file
- "module.exports" is the command that determines what code will be exported, and when you type this keyword, you can tag on any variable in the code
- to import another module, you set it equal to a variable
- use the keyword "require" to simply state: we are requiring a module, or code from a file
- ex: ./movies - look in the same directory looking for the movies.js

Video 9 of Node JS Tutorial, thenewboston
Video Name: More on Modules

- there are more efficient ways to export code
- a default module.exports is always running behind the scenes, when you type an edited module.exports, it will look for the code you referenced, and then export it
- you can write your functions directly in this object, so all the code is directly and simultaneously exported

Sunday, July 31, 2016

Summer Research Week 5 (08/01 - 08/05)

Software/Tools

  • How to use Git and GitHub, Udacity.  Sign up the Udacity for accessing to some of the free materials. Start this free course at your own pace to pick up the Git and GitHub. You are going to use them to handle your software projects.
Based on your notes, it seems to me that you haven't move too far on your last assignments yet. I suggest that you can continue watching the Node.js tutorials (finish at least 6 videos) and go through and take notes of the Prior Art of last year. These will prepare you to read and understand the code from last year.

Tuesday, July 26, 2016

Notes on Video #4 Tutorial by thenewboston

Watching this video, there were many confusing aspects but the video mainly involved the handling of multiple requests. Watching the video, it was simple to understand that the increased use of "NodeJS" code is mainly because of its efficiency and speed. This type of code is used mainly in real-time web applications and social networking applications for handling multiple requests. In the video, some key points were...

  • the setTimeout command - this command basically tells and scheduling a bit of code to run in 5 seconds. This command is usually instantaneous. 
  • console.log is a function mainly used to print a certain text, and usually can be linked to a specific function, if specified.
  • you can also place functions in the process of another function, and run a bit of code

Simply think of this as a situation involving a waitress, a cook, and the customers. The customers are requesting for some data from the database, and the database basically represents the cook. The waitress will take the request, give it to the chef and individually do this to each customer. This would however, take a long period of time. Instead, using this type of code, including the setTimeout command, the waiter which practically represents the node.js code, will take all the requests simultaneously and then return the orders back from the database in a set period of time from the setTimeout command. Basically instead of taking one order at a time and waiting in between to return the order, it will instead take each request and give it to the chef to satisfy each request. This makes the code quicker and more efficient. 

Note: This example is based of the example the tutorial gave. 

Notes on Video #3 Tutorial by thenewboston

  • Basics of Javascript - concepts that are really important to understand

  • When you make objects in javascript, exact same as in node js
  • Console.log = prints out the properties
  • Javascript code is usually run only once, however, this node js code will run on your server and therefore run continuously
  • Any function without an explicit return statement, always return undefined
  • We usually give names to functions so we can reference them, however, we don’t need to that in node js
  • The function “setTimeout” will tell when will the code run, or when to send the results back from the database

Sunday, July 17, 2016

Summer Research Week 3 (07/18 - 07/22)

Prior Art
  • Final Presentation:  Start with the final presentation in details from last year. Pay attention to the problems they have encountered in each stage, and the solutions they have tried. Also pay attention to the "Resource" slide. You might want to include many useful links and update your "Project Resource" page.
  • Blog: Browse through the team blog from last year. Pick up anything useful to you.
Nodecopter
  • Node.js: Download and install Node.js from nodejs.org.
  • AR Drone Module: Get the ar-drone module from GitHub.
  • Nodecopter: Use the code in Nodecopter to program the drone. 
Node.js
  • Node.js Tutorials: You may start watching some  tutorials of node.js at your own pace from YouTube channels such as thenewboston, Learning NodeJs, etc.
Code 
  • Download the code from last year. Try to understand the high-level structure and function of the code.

Special Moves


  • Enable flips and double tap to enable an automatic flip. 

AR Drone Developer Guide Notes


  • Each pair of opposite rotors is turning the same way. One pair is turning clockwise and the other is turning anti-clockwise. 
  • Varying left and right rotor speeds the opposite way yields roll.
  • Varying front and rear rotor speeds the opposite way yields pitch. 
  • Varying each rotor pair speed the opposite way yields yaw. 
  • Drone can be set in light and low wind drag config. 
  • Tags can be added to the external hull to allow several drones to easily detect each others via their cameras. 
  • If a propeller encounters any obstacle, the drone will detect if any propeller is blocked and stop all engines immediately. 
  • The drone has many sensors are are used for stabilization and assisted tilting control, VS control, hovering, and trimming. 
  • All manoeuvres are completely assisted. 
  • Alt limit, yaw limit, vs limit, tilt limit can all be tuned. 
  • The front camera is a CMOS sensor with a 90 degrees angle lens. 
  • Connect to drone via Wifi network.
  • Drone contains a 3 axis magnetometer sensor and pressure sensor. It also measures ultrasound performance. 
  • Drone uses a standard USB-A connector. 
  • Drone library contains high level API's to access the drone. 

Sunday, July 3, 2016

Summer Research Week 1 (07/04 - 07/08)

AR Drone 2.0
  • Read AR Drone Developer Guide, Parrot [chap. 1-3, 17 pages]. This guide will give you an overview of the structure, operations, hardware, software, and communication of AR Drone 2.0. Take notes on what you have learned.
  • Download the FreeFlight app from the App Store (for iPhone/iPad) or from the Play Store (for Android). Watch AR Drone video Tutorials #1 and #2, and learn how to fly the drone. Identify the features and app options you want to try out later.
  • Fly the drone! First, pay attention to all the safety concerns about yourself, the bystanders, the drone, and the surrounding environment before you fly. You can grab the drone while flying and turn it up-side-down which will cause it to enter an emergency mode which shuts down the motors. This is great for self-defense, as well as stopping a drone that is out of control. It's better to fly it in an open field. Start at low speed and limited height before you are trying more advanced movements. Go through all the basic movements (e.g., forward, backward, left, right, clockwise, counter-clockwise, up, down, etc) that the drone can do, and try to combine some of them to create more complex movements (e.g., forward and up, U-turn, spiral-up, etc.) Create various complex movements yourselves, and take notes on what are them and how to create them. These exercises will give you first-hand experience and understanding of the drone navigation. Latter on, your are going to make the drone perform these tasks autonomously. So, it's crucial for you to understand them thoroughly before you can program it.