Your browser doesn't support the features required by impress.js, so you are presented with a simplified version of this presentation.

For the best experience please use the latest Chrome, Safari or Firefox browser.

Beag     e Copter
An Open Source Project
A Quadcopter using BeagleBone Black as the Flight Controller
Objective
  • To build a quadcopter using BeagleBone Black as Flight Controller

  •  Write the PRU Assembly code to read PPM value from Rx.

  • Write C++  Flight controller program for BBB.

  • To make use of conventional 6 Channel Transmitter and Receiver 
     Module as remote control. 

  • Design the BBB Cape circuit using Fritzing
overview
  • Quadcopter - Introduction
  • Why a Quadcopter ?
  • Quadcopter Movement
  • Hardware Implementation
  • Software Implementation

  • Testing Results
  • Conclusion

Introduction
  • The Quadcopter is one of the most complex flying machines.

  • Equipped with a four rotors of equal sized at  the end of four 
    equal length rods. 

  •  Sensors provide information such as relative position (e.g., 
     height, velocity and orientation) 

  • Use of Quadcopters are constantly increasing in surveillance by 
    military and law enforcement agencies, as well as in search and
    rescue missions.


Why A Quadcopter ?
  • Quadrotor has many benefits :
    - Reliable
    - Compact
    - Low Maintenance

  • Applications of Quadcopters :
    - Monitoring , Surveillance , Exploration
    - Videography and Photography
    - Disaster Management
    - Entertainment & Hobbyists
Block Diagram
Quadcopter Movement
  • Roll is rotation of quadrotor around front-to-back axis 
  • Pitch is rotation of quadrotor around left-to-right axis 
  • Yaw is rotation of quadrotor around vertical axis 
Yaw Rotation

Each of the rotors on the quad-copter produces both thrust and torque. Given that the
front-left and rear-right motors both rotate counter-clockwise and the other two rotate
 clockwise, the net aerodynamic torque will be zero.


Hovering

For hovering a balance of forces is needed. If we want the quad-copter to hover, SUM(Fi)
must be equal m•g. To move the quad-copter climb/decline the speed of every motor is
increased/decreased .





SUM(Fi) > m•g <=> climb
SUM(Fi) = m•g <=> hover
SUM(Fi) < m•g <=> decline


Tilting

Now let us take a look on what is happening when we tilt the quad-copter. For
simplification only two of the four rotors are shown. We see that the force is
divided in two different parts. FL1 and FL2 are the part of the force used to lift
the quad-copter. FT1and FT2 represents the part used for the translation. It is
obvious that the lift part becomes smaller with increasing φ.

Hardware Implementation
  • Schematic Diagram
  • PCB Design
  • Quadcopter Components
- BeagleBone Black
- ESC
- IMU
- Brushless DC Motors
- Propellers
- 6 Channel Tx-Rx Module
- 3S Li-po Battery
- Quadcopter 400mm Frame

Schematic Diagram
PCB Design
Quadcopter Components
1) BEAGLEBONE BLACK
2) ESC (Electronic Speed Control)
3) 6DOF IMU Sensor (MPU 6050)
  • 3-axis Accelerometer

  • 3-axis gyroscope

  • Contains Inbuilt Digital Motion 
    processor (DMP)

  • Works in Voltage range of 3-5V

  • Uses I2C protocol

  • Gyroscopes range: ± 250 500 1000 2000 ° / s

  • Acceleration range: ± 2 ± 4 ± 8 ± 16g
4) Brushless DC Outrunner Motor
• Rotational Speed: 920 RPM/V
• Input Voltage: 8 - 22V
• Max. Efficiency: 97%
• No Load Current: 0.9A
• Internal Resistance: 85m ohm
• Motor Dimensions
     (Diameter x Length): 37mm x 48.1mm
• Shaft Dimensions (Diameter x Length): 5.95mm x 18.6mm
• Input Battery Types: NiCd/ Nimh/ Li-po Battery

5)  Propellers
  • 4 x 8.2 inch propellers 
  • 1 pair consists of an Anticlockwise & a clockwise
    propellers.
  • A 8.2 inch diameter propeller can lift upto 600g
  • 4 x 8.2 inch can lift 2400g (2.4 Kg)
  • Maneuverability increases and thrust decreases as 
   propellers diameters shorten and vice versa. 
6) 2.4 GHZ 6-CHANNEL Tx & Rx
  • Range of upto 1km
  • 6 channels
  • RF Power: Less than 20db
  • PPM signal at 50Hz from Rx
7) Li-Po Battery
  • 12V, 2200mah lithium-polymer rechargeable
    type battery.

  • Approximately 15-20 Minutes flight Time

  • Large Storage capacity

8) 400 mm Quadcopter Frame
  • light weight readymade plastic.

  • in-built power distribution 
   board for direct ESC wiring &
   motor placing slots

  • frame weighs approximately 200g. 
9) Voltage Regulator Circuit
  • Provides constant output voltage
  • 7805 IC for 5V regulation
  • LM3940 IC for 3V regulation
Software Implementation
1) PCB Designing using Fritzing
2) PRU programming (1/2)
a) PRU Reading the PWM input (Algorithm)
Check the ReadPWM Assembly code from here
1) Initialize the timer
2) Start the timer
2) Copy the input value from GPIO pins to the Registers.
3) Select the Pin to calculate the input PWM
4) Check if the signal is high, if yes then copy the current timer value
      to a register(R1) and continue to step 5 else repeat step 4
5) If signal is high continue until the signal becomes low and copy 
      the current timer to a register(R2) & store the difference(R2-R1)
      to shared data memory
6) Select the next pin and go through step 4 and 5 until all the pins are
      Read.
7) Stop
b) PRU PWM output generation (Algorithm)
1) Initialize the timer
2) Start the timer
2) Copy the data from shared data memory to register(R4).
3) Load the Pulse width and Frame width from Register(R4)
4) Copy the Elapsed time to another register R3.
5) Substract R3 and R4 to check whether it is 0, if yes goto step 6
     else goto step 7.
6) Load the output Pin value as 0 and goto step 8.
7) Load the output pin value as 1 and goto step 4.
8) Copy the data from next shared memory to R4 until all output
     values are read and go through steps 3 to 7.
9) stop
Check the WritePWM Assembly code from here
2) PRU programming (2/2)
3) C++ Program Algorithm
frontMotors = throttle - error*Kp
rearMotors = throttle + error*Kp
Motor Control
MOTOR_FL = rcthr - roll_output - pitch_output - yaw_output ;
MOTOR_BL = rcthr - roll_output + pitch_output + yaw_output ;
MOTOR_FR = rcthr + roll_output - pitch_output + yaw_output;
MOTOR_BR = rcthr + roll_output + pitch_output - yaw_output ;
  • rcthr -> Throttle value from Receiver 
  • roll_output -> Roll output from 2nd PID controller
  • pitch_output -> Pitch output from 2nd PID controller
  • yaw_output -> Yaw output from 2nd PID controller
Problems Faced
  • Could not Read the Real Time PWM values 
     using ARM Linux.

  • Problems mapping address using Python

  • BeagleBone Black got cooked up during testing

  • Current and voltage limiting Circuit
Problems Resolved
  • Read PWM values from Rx using Beaglebone 
    Black's inbuilt PRU.

  • Mapping Problem Resolved by using c++ instead
    of python.

  • Current and voltage protection circuit was added.

  • Redesign of PCB
Future Scope
  • Camera
  • GPS navigation & Magnetometer
  • Autonomous Flightcontrol
  • Mission Plans
Reference
  • Xu Shirui - Beagle - fly Project

  • Getting Started with BeagleBone - Matt Richardson


  • IRC Community - #beagle #beagle-pilot #arducopter

  • Beaglebone Black Google Group
Thank You For Listening !!!
Project Mentor :     Cyriac M Odackal
Contributors    :      Anto Dominic
                                           Dalbin Jose
                                           Vishak Baby
   

Use a spacebar or arrow keys to navigate