Skip to main content

Building Autonomous Drone with Raspberry Pi and APM 2.8


I am a total newbie to hardware and was pushing my limits to see how far I can reach on with hardware projects (which sparked my interest lately). I have set out on a very ambitions mission to control a drone from raspberry pi.I began the research for this around 2 months ago and had brought a raspberry pi, drone body kit and apm flight controller. The key difference of this project from common drone projects is that I'm trying to avoid the use of and RC and instead use the raspberry pi to control it. 


Hardware Installation Setup:


  • I am using APM 2.8 and Mission Planner.
  • I am using RPi 3 to control the APM 2.8 via Telem port of APM
  • I am planning to power the apm via the battery to ESC (Electronic Speed Controllers)


Now, documenting my steps below:

Day 1

Watch Tutorial

To get started with APM flight controller, I watched this video tutorial [1] which gives a gentle introduction about APM board. 

Setup APM board and Calibrate Sensors

I downloaded the APM Mission Planner software for mac and installed the firmware for quadcoper. Then, the accelerometer and compass were calibrated. It was easier than what is explained in [1] may be because I'm using the latest version of mission planner.

Read Tutorial

After going through numerous forum discussions and other videos. I was a bit confused about the connection link between APM and RPi. Finally I bumped into a good tutorial [2]. 


APM after calibration

Day 2

I'm currently wasting time on deciding if I should proceed with raspbian OS [3] or ROS [2] to be installed in raspberry.

Day 5

I decided to go ahead with raspbian but was finding no success with connection to raspberry using mavlink when I do the steps in [2] i.e.

  1. Install dependency softwares in raspbian
  2. Change params via Mission Control
  3. Run 'arm throttle' from rpi

Revelation 1: Power APM via Battery from ESC (not via USB)

Finally after 2 days of trial and error I noticed a slide in [2] saying that the Telem/UART connection won't work if I am powering APM using usb cable. So I started trying to run the APM on battery power. For this you have to connect battery to ESC and connect the ESC to the APM output pins. But the APM was not turning on no matter what I do I just get a message like "Waiting for heartbeat from /dev/ttyAMA0" 

Revelation 2: Connect the JP Circuit in APM when you power via OUTPUTS

After spending another day trying to fix it I came across a blogpost [4] with the power line path highlighted. You can notice that the OUTPUTS line is independent of the other links. So in order to power the full APM I may have to connect the JP1 pins together. And yes I remember getting a connector that fits exactly there when I purchased the APM. I gave it a try and yes! it works!





Now lets try the messaging again!
It works, I'm getting the heartbeat. yay!

But the param set ARMING_CHECK command doesn't seem to work. :(

Revelation 3 : Downgrade mavproxy version to 1.5.2

Now as per [5] & [6] I am running 'sudo pip install -I MAVProxy==1.5.2'
Waiting...... YES! THIS DID THE TRICK! 

Posting my very success log printing below at the bottom of this page [log]

References:

[1] https://www.youtube.com/watch?v=30cCs4aHdB0

[2] http://www.ryugakujapan.com/blog/quadcopter-up-and-flying
[3] http://ardupilot.org/dev/docs/raspberry-pi-via-mavlink.html
[4] http://ardupilot.org/copter/docs/common-powering-the-apm2.html
[5] http://forum.erlerobotics.com/t/mavproxy-issues-in-sitl-ros-gazebo/1744
[6] http://forum.erlerobotics.com/t/tutorial-1-erle-copter-launch-mode-does-not-change/1722/11
[5] http://diydrones.com/group/arducopterusergroup/forum/topics/only-3-motors-spinning-at-any-one-time

[log]

root@raspberrypi:/home/pi# mavproxy.py --master=/dev/ttyAMA0 --baudrate 57600 --aircraft MyCopter
Connect /dev/ttyAMA0 source_system=255
no script MyCopter/mavinit.scr
Log Directory: MyCopter/logs/2017-07-03/flight4
Telemetry log: MyCopter/logs/2017-07-03/flight4/flight.tlog
MAV> Waiting for heartbeat from /dev/ttyAMA0
/_IY)!aDo2Fs
LDX

y to FLY online system 1
STABILIZE> Mode STABILIZE
APM: ArduCopter V3.2.1 (36b405fb)
APM: Frame: QUAD
APM: PreArm: RC not calibrated
APM: PreArm: RC not calibrated
APM: PreArm: RC not calibrated
APM: PreArm: RC not calibrated
APM: PreArm: RC not calibrated
Received 306 parameters
Saved 306 parameters to MyCopter/logs/2017-07-03/flight4/mav.parm
fence breach
APM: PreArm: RC not calibrated
APM: PreArm: RC not calibrated
APM: PreArm: RC not calibrated
APM: PreArm: RC not calibrated
APM: PreArm: RC not calibrated
param show APM: PreArm: RC not calibrated
APM: PreArm: RC not calibrated
ARMING_APM: PreArm: RC not calibrated
CHECK
STABILIZE> ARMING_CHECK     1.000000
parAPM: PreArm: RC not calibrated
STABILIZE> Unknown command 'pa'
APM: PreArm: RC not calibrated
param set ARMING_CHECK 0
STABILIZE> APM: GROUND START
Init GyroAPM: Initialising APM...
**APM: Calibrating barometer
APM: barometer calibration complete
ARMED
arm throttle
STABILIZE> Got MAVLink msg: COMMAND_ACK {command : 400, result : 0}
APM: Initialising APM...
DISARMED


Comments

Popular posts from this blog

Hadoop The Definitive Guide [Book] - Study Notes

Chap-1- Meet Hadoop Requirement and adoption in yahoo. A framework that can scale to the web. Map and Reduce acitivity and features like data locality. Can be applied with a variety of algorithms Huge data processing can beat good algorithms Chap-2 - MapReduce The Map Java class and Reducer Java class The Job java class Jobtracker and tasktracker Hadoop reduces the input to input splits or just splits Map tasks write the intermediate output to local disks, so that they can be discarded after use. Outputs of Reduce tasks are stored in HDFS Combiner function can be run on map output, and the combiner functions output forms the input to the reduce function Hadoop streaming proivide hadoop apis in languages other than Java Chap-3 - The Hadoop Distributed Filesystem Fault tolerant solution. Same data written at multiple places. Filesystems that manage the storage across a network of machines are called distributed filesystems. Blocks - a block size is the minim

Adafruit GFX - How to change line spacing in text?

  You may want to update the line spacing to be a little lower than default due to small screen size on IoT devices. I faced this challenge while working on a Watchy hobby project. You may have used a font generator or just using the default fonts and got a *.h file that has the details of the font. In that case just change the last integer value in the PROGMEM variable.