Friday, May 3, 2013

11. MoBee - Video rights belong to Havard

The Harvard Monolithic Bee is a millimeter-scale flapping wing robotic insect produced using Printed Circuit MEMS (PC-MEMS) techniques. This video describes the manufacturing process, including pop-up book inspired assembly. This work was funded by the NSF, the Wyss Institute, and the ASEE.







Thursday, May 2, 2013

10. Wow, this #UAV simulation is really testing our brains !

The problem of resetting G.P.S. is still persisting. We are trying to figure whats wrong. With the whole telemetry setup (Post 8. Simulation to confirm the U.A.V. telemetryour micro-controller resets the G.P.S. when we switch to the autopilot mode. We thought that this was happening as individual components on the board (like the transmitter) may also be deriving voltage from our supply and also since data had to be simultaneously sent to two programs (Happy-Killmore G.C.S. & X-Plane Demo 9), this process may also be consuming our voltage. 

Therefore, we built a separate power supply for our transmitter on the testing kit. We used a 9 volt DC adapter and 7805 voltage regulator with 100 micro-farad capacitor. But we are surprised that the problem is still persisting. 

We also changed the serial data transmission mode also in the options.h file of the Matrix-Pilot code (from SERIAL_NONE, SERIAL_ARDUSTATION, SERIAL_UDB to SERIAL_UDB_EXTRA) and changed the UDB Board (tried UDB3_BOARD and RED_BOARD), but there you go, no improvements. 

Maybe there is something wrong with the program or maybe we are overloading our CPU. We are still checking it out.

Wow, this #UAV  simulation is really testing our brains !

Wednesday, May 1, 2013

9. What more do I want to do?

  1. I am programming the U.A.V. with a couple of colleagues but I want to design a small robot on my own and,
  2. Try to build a 3D model of our drone in a designing software (I think Solid Work will be good).

8. Simulation to confirm the U.A.V. telemetry

Today me and my team tried to test the setup that we had planned to perform the experiments for confirming the telemetry (mentioned in the  7th post of this blog). We built this set up to get an aerial view of the U.A.V.'s path and also to confirm the programming.

We utilized our DSPIC testing kit and two FTDIs - 
  1. One to transmit the data from the DSPIC30F4011/4012 to Happy Kill-More Ground Control Station software (by enabling telemetry in options.h file) and 
  2. Second to transmit the program data from the PIC to the X-Plane 9 (demo), which is a flight simulating software.
The video showing our setup working is below:


Since the DSPIC had to send data simultaneously to two locations, therefore it needed more power and hence consumed more voltage. 
Due to this during the simulation our U.A.V. was switching, uncontrollably, between the three modes of 1. Manual, 2. Stable and 3. Autopilot.
We concluded that this was happening as the two capacitors - each of 10 micro-farad (which you can see on the DSPIC test kit) were enable to handle the troughs in the voltage supply effectively. Hence to solve this situation we have decided to use a capacitor of 100 or 1000 micro-farad (16 or 25 volts). 

I hope that this will work and we will be able to perform our experiment soon. Wish us luck!


Tuesday, April 30, 2013

7. Testing - Comparing the original and modified code

  1. First we will appropriately place (at 0,0 waypoint according to the runway of out topology in X- Plane 9) the U.A.V./drone both in gentlenav and gentlenav1 code (matrix pilot) and study the behavior of the U.A.V./drone.
  2. Second we place the U.A.V./drone both in gentlenav and gentlenav1 code (matrix pilot) at some inappropriate point (i.e a lot away from 0,0 waypoint) and again study the behavior of the U.A.V./drone.
  3. Then we will compare the results of the 4 flights and conclude which code is working better.
PS: Will try to get the videos uploaded of all the four flights in the next post (Post - 8).

Monday, April 29, 2013

6. How are we going to build a more stable Loiter program? - The Idea.

Whenever we wish our drone/U.A.V. to loiter we load a waypoint (x,y,z where z is height) and call the Loiter flag (F_LOITER) along with it. On the remote of our U.A.V. its in the auto mode. The Loiter flag has a program which guides the U.A.V. We are going to bring changes in this program.

The basic idea is that whenever a waypoint is loaded for loiter, 8 more waypoints are calculated around it and loaded one after another. to calculate the waypoints we use Switch case in C language with the following logic:


  1. We know - Sin of any angle = Perpendicular/Hypotenuse and Cos of any angle = Base/Hypotenuse
  2. Therefore, Sin45 = 1/1.414 and Cos45 = 1/1.414 (root of 2 = 1.414)
  3. Hence if we load a waypoint for eg (0,0) with waypoint/loiter radius 1000 meters then our code will look like this -
void loiter_routine()
{
struct relative3D myltrpnt;
loitercount++; //set_goal(GPSlocation, wp_to_relative(currentWaypointSet[waypointIndex]).loc)
switch(loitercount)
{
case 1:
myltrpnt.x= currentWaypointSet[waypointIndex].loc.x;
myltrpnt.y= currentWaypointSet[waypointIndex].loc.y + LOITER_RADIUS;
myltrpnt.z= currentWaypointSet[waypointIndex].loc.z;
break;

case 2:
myltrpnt.x= (currentWaypointSet[waypointIndex].loc.x)-(LOITER_RADIUS/(1.414));
myltrpnt.y= (currentWaypointSet[waypointIndex].loc.y)+(LOITER_RADIUS/(1.414));
myltrpnt.z= currentWaypointSet[waypointIndex].loc.z;
break;

case 3:
myltrpnt.x= currentWaypointSet[waypointIndex].loc.x - LOITER_RADIUS;
myltrpnt.y= (currentWaypointSet[waypointIndex].loc.y);
myltrpnt.z= currentWaypointSet[waypointIndex].loc.z;
break;

case 4:
myltrpnt.x= (currentWaypointSet[waypointIndex].loc.x)-(LOITER_RADIUS/(1.414));
myltrpnt.y= (currentWaypointSet[waypointIndex].loc.y)-(LOITER_RADIUS/(1.414));
myltrpnt.z= currentWaypointSet[waypointIndex].loc.z;
break;

case 5:
myltrpnt.x= (currentWaypointSet[waypointIndex].loc.x);
myltrpnt.y= currentWaypointSet[waypointIndex].loc.y - LOITER_RADIUS;
myltrpnt.z= currentWaypointSet[waypointIndex].loc.z;
break;

case 6:
myltrpnt.x= (currentWaypointSet[waypointIndex].loc.x)+(LOITER_RADIUS/(1.414));
myltrpnt.y= (currentWaypointSet[waypointIndex].loc.y)-(LOITER_RADIUS/(1.414));
myltrpnt.z= currentWaypointSet[waypointIndex].loc.z;
break;

case 7:
myltrpnt.x= (currentWaypointSet[waypointIndex].loc.x)+(LOITER_RADIUS/(1.414));
myltrpnt.y= currentWaypointSet[waypointIndex].loc.y;
myltrpnt.z= currentWaypointSet[waypointIndex].loc.z;
break;

case 8:
myltrpnt.x= (currentWaypointSet[waypointIndex].loc.x)+(LOITER_RADIUS/(1.414));
myltrpnt.y= (currentWaypointSet[waypointIndex].loc.y)+(LOITER_RADIUS/(1.414));
myltrpnt.z= currentWaypointSet[waypointIndex].loc.z;
loitercount =0;
break;

default:
break;

}
set_goal( GPSlocation, myltrpnt ) ;
}

5. First Test Flight of the U.A.V.

This was the first test flight of our U.A.V. it was done near the Temple of Saaketri (few minutes ahead of Sukhna Lake).

The fuselage of the bird is made of EPP foam. It has a wingspan of 1500 mm, we will use a 1200 MAH LIPO Battery (11.1 Volts and 120 grams) which will give us 15 minutes of flight (approx.). Attached to it is an Electronic Speed Controller (PWM) which controls the brush-less DC motor in the fuselage. The bird or the fuselage runs on four controls - 
  1. Aileron
  2. Elevator
  3. Rudder and
  4. Throttle
Check out the catch by our RC instructor (Daaman Joyia) in the end !!! Enjoy the flight !!!!