Posted on Leave a comment

3 Days of the PixRacer with ArduPilot

I spent my 3 day long weekend getting the Pixracer to work. For some reason it made me think of the classic Robert Redford movie “3 Days of the Condor”, where a CIA research analyst who “just reads books” had to figure out a complex conspiracy in 3 days.

Ok, so this is not that, but I was under the pump, I really thought it would be easy, I was planning to get the Pixracer wired up and flashed on Saturday, then work on my Sopwith Camel build for the rest of the weekend. It didn’t work out like that.

But, in the end – I got it working, 3 long days later!

I recorded the whole saga, so come along for the ride! (please Subscribe to Tim the Planman on YouTube for updates). These are the links to the videos:

Maybe my problems are partly because I use a Mac. Why is the Mac “second fiddle” for things like this? Mission Planner has no official version available for Mac. The new release (thanks ArduPilot), still has this caveat: 

Native MacOS and iOS support is experimental and not recommended for inexperienced users. For MacOS users it is recommended to use Mission Planner for Windows via Boot Camp or Parallels (or equivalent).

Mission Planner does run on the Mac, but

  • It looks horrible, the fonts are too small to be readable on my laptop screen (I put it on an external monitor when I’m at home, but this won’t work in the field)
  • None of the panes are resizable
  • It doesn’t seem to be able to flash the Pixracer. I had to use QGroundControl to do this (worked great).
  • I don’t know why I should have to use BootCamp or Parallels

But my challenges getting it all working were not just about the Mac. 

There is a lot of folklore about flight controllers and how to get them to work, and not a lot of useful documentation. Most of the best information came from getting tidbits of information here and there, from various videos from people like Painless360Joshua Bardwell and Andrew Newton. But even then – I had to pay attention, it was one 2 second soundbite from one of Painless360’s videos that gave me the hint about why the servos didn’t work while I was running the Pixracer off the power from the USB.

That said there is some useful information out there. Here are some useful links:

Posted on Leave a comment

ArduPlane – first flight in my Bixler 2

I’ve set up ArduPlane on a PixRacer R15 in a Bixler 2. You can see the videos “Three days of the Pixracer” on Youtube. 

Then I put the PixRacer in a Bixler 2 and created “The Bixinator” and I did my first flight, including having Return to Home fly the Bixinator into a tree. After I rescued it, I completed Arduplane autotuning. I’ve also put a PixHawk (Version 1 – original) into my Bixler – so I’m calling this one the BixHawk.

I’ve flown the Bixinator several times, including several autonomous missions with auto takeoff and auto landing (without flying into any trees). This post has been updated with some of the things I’ve learned. Unfortunately the Bixinator has crashed one too many times and is now officially retired. However the BixHawk (Bixler 1 + PixHawk) is taking over.

Initial Setup

There are a few things you need to do with AutoPilot when you first connect it in a plane. There is also a getting started guild on the ArduPlane wiki that you might fine helpful.

Warnings: Do not put any rates or trimming into the radio. You do this all on the autopilot

  1. Connect the autopilot to the computer using USB
  2. Flash the firmware with the right model, e.g. plane, and latest version
  3. Calibrate the Accelerometer
  4. Calibrate the Compass
  5. Create the model in your transmitter. 
  6. Setup inputs and mixes channels including Flight Mode channel. 
  7. Plug everything in to the flight controller (not in the plane yet)
  8. Bind the receiver and calibrate the radio
  9. Install the Flight Controller in the model
  10. Calibrate the Surfaces
  11. Maiden flight – FBWA
  12. Autotune
  13. TECS Tuning (initial)
  14. Tune any special parameters such as auto takeoff/landing
  15. Ready for first Autonomous mission

1. Plug it in

The very first thing you need to do is plug the autopilot into the computer. Because I’m not interested in soldering, I have only tried flight controllers that come with the connectors already soldered on the board, so PixRacer, PixHawk and Duraldal. You can do up to step 7 by just plugging the flight controller in with a USB cable

2. Flash the firmware

I use QGroundContol to flash the firmware. It’s very easy.

  1. Click the QG icon at the top left of the main window
  2. Click Vehicle Setup
  3. Click Firmware
  4. Follow the instructions in Red – first unplug the USB cable 
  5. Then reconnect the USB cable
  6. Pick your board, and the version of Ardupilot you want (I use Plane and usually the latest Stable version)
  7. Click Ok – it will automatically flash and reboot
  8. If it doesn’t work check your selections. For example I had a problem flashing my PixHawk 1. There are 2 of them listed, so I tried the other one (1M version) and it worked.

3. Calibrate the Accelerometer

You can do this in QGroundControl or Mission Planner. I like QGroundControl for this step. 

  1. Click “Sensors:”
  2. Click “Accelerometer”
  3. Click :”Ok” and follow the instructions

4. Calibrate the Compass

If possible do this outside and away from any sources of interference or sheilding. You can do it as part of your initial setup, but I’d recommend you do it again when you are out at the field for your Maiden flight.

5. Create the model in your transmitter

If you are using OpenTX or EdgeTX – use the wizard to create a simple plane. Use the channel order default for your transmitter. Never override it. If you need to change anything later you can do it on the Flight Controller. I like to set up my inputs to represent what I use the sticks for. 

6. Create Inputs/Mixes

Warning: Don’t change rates, add expo or add any trim (or if you have these remove them all). All of this except maybe expo will be done in the Flight Controller later on.

Mode 1: OpenTX will assume Rudder and Elevator on the left stick and Throttle and Ailerons on the right stick. 

Mode2: OpenTX will assume Rudder and Elevator on the right stick and Throttle and Ailerons on the left stick. 

This actually switches Rudder and Ailerons from the way everyone flies. So what I do is go into the “Inputs” after the wizard creates the model and set the up as Roll, Yaw and Pitch – which is what they actually are – and map them to control surface channels in the Mixes.

Mode 1 sticksMode 2 sticksInputChannel
Left Left/RighjtRight Left/RightAil -> RollRoll -> #1
Left Up/DownRight Up/DownEle -> PtchPitch -> #2
Right Left/RightLeft Left/RightRud -> YawYaw -> #4
Right Up/DownLeft Up/DownThr -> ThrThr -> #3

Sticks -> Inputs -> Channel maps (OpenTx/EdgeTX)

7. Plug everything in

Connect all the wires. Yes do it all at once. I made the mistake of thinking I could gradually plug a few things in and gradually get things working. It doesn’t work that way. Plug in at least:

  1. Power Management Board into the “power” socket
  2. GPS into the GPS socket and external compass into I2C socket
  3. Buzzer and Safety switch 
  4. EPS wifi board in PixRacer or Telemetry radio transmitter (PixHawk)
  5. Receiver SBUS output into RCIN on the flight controller

8. Bind the receiver

You can connected the receiver to the “RCIN” port on your flight controller using SBUS or PPM, and the receiver will be powered by the flight controller. There are other advanced options for connecting the receiver. 

Power on the Flight Controller and bind the receiver to the new model on your transmitter.

Binding will depend on your receiver, so I won’t explain it here. You will need to look this up in the instructions/manual for your particular receiver.

Once the receiver is bound, go to the “Radio” tab in QGroundControl – you should see an option to calibrate your radio. If you have this option, it means that the flight controller is connected to the receiver and it is bound. If you don’t see this then you have a problem. Either your receiver isn’t bound or the connection isn’t good. e.g. WIth FlySky receivers you need to make sure to select “PPM/SBUS” when binding to make sure to get an SBUS output. There are many other possible issues here – google is your friend.

9. Install in the model

Now it’s time to put the flight controller and receiver into the model. When you do this connect the servos to the flight controller.

On a PixHawk1 this will be: Ailerons into Output#1, Elevator into Output #2, Throttle into Output #3 and Rudder into Output# 4

10. Calibrate the surfaces

This is a procedure all to itself. I have a YouTube video specifically about this process and there is a very good page on the ArduPlane wiki that explains it very well. 

In a nutshell – set up the control directions and rates on the Flight Controller, not on the transmitter.

Here’s how:

11. Maiden flight in FBWA

It’s time to maiden the plane. This will be a flight in FBWA mode but fully controlled by you using your transmitter. The most important thing to get out of this flight is the logs. You will use the logs to do further tuning, especially TECS tuning.

12. Autotune

If the maiden went ok. it’s time to autotune. There is lots of information and videos about this step. Its actually pretty simple.

  1. Takeoff in FBWA and fly to a comfortable “3 mistakes” height.
  2. Switch to Autodune mode
  3. slowly move the aileron/roll stick left and right (about 2 seconds from end to end) and back as you fly in a straight line. Do this about 20 times.
  4. Slowly move the elevator/pitch stick up and down ( about 2 seconds from end to 3nd) and back as you fly in a straight line. Do this about 20 times.
  5. Fly for at least another 15 or 20 seconds in autotune. 
  6. Switch to FBWA mode. You should notice the plane flies much better than before.
  7. Bring the plane in to land

13. Auto Takeoff/landing

Next you can tune for auto takeoff and landing. This will be different if you have a plane with wheels or something like a wing or Bixler style (which I have) that takes off by throwing the plane.

13.1 Bixler/Wing style – no wheels

TKOFF_THR_MAX – max throttle for takeoff. On my Bixler 90% is good, so I’m using that.

TKOFF_THR_MINACC – Minimum acceleration for hand launches. 15 is recommended – I’m sticking with the recommendation.

TKOFF_THR_DELAY – a bit of a problem on the Bixler, change to 1 (from default 2).

TKOFF_THR_MINSPD – using the recommended 4 m/s for hand launch.

TKOFF_ALT – altitude to get to after takeoff. I takeoff over the edge of a hill, so 20m doesn’t sound like much, but will actually be close to 50m above the ground by then.

TKOFF_DIST – The distance from the takeoff where the plane will loiter. Set to 100m because of my small flying field.

TKOFF_PITCH – Default is 15 degrees – this is good.

TECS_PITCH_MAX – setting to the recommended 20 degrees, although on the Bixinator I think that might be a bit of a struggle for it, but the BixHawk will handle it no problem.

13.2 Normal plane with wheels

I haven’t done this yet – follow the Ardupilot Wiki.

14. TECS Tuning

When I first started setting up my first ArduPlane model I didn’t even know this is a thing. It’s a thing! 

Actually there are several tuning step s required. You can find them documented in detail on the Arduplane wiki. You will need to do some flights 

Setting Parameters

The ArduPlane auto-takeoff and auto-land wiki pages are extremely good and you might find it just as helpful to go and read them. I’m just going to include here the things that are relevant to the Bixinator and BixHawk.



WP_LOITER_RAD – The Radius of a Loiter. The default is 50m which is a bit too wide for my small flying field, so I’m setting it to -40 (negative is counter clockwise).

ALT_HOLD_RTL – the altitude for RTL. Be very careful with this – it’s set in cm (yes centimetres) very strange, and easy to screw up. 50 meters is 5000cm!

RTL_RADIUS – The radius of the “loiter” at home. If not set it uses WP_LOITER_RAD – so I’m going to set it to zero.

WP_RADIUS – How close to a waypoint the plane needs to get to consider it ‘done’. On my small field the default of 90 m is a bit ridiculous. I’d probably want to make it 10m, but until I understand this better, setting it to 25m.


LAND_FLARE_ALT – 3 meters – going with the default.

LAND_FLARE_SEC – 3 seconds – just a guess (I have no LIDAR)

LAND_PITCH_CD – no change, default to 0.

TECS_LAND_ARSPD – not used (left at default -1) because I don’t have an airspeed sensor.

TECS_LAND_THR – no airspeed sensor but not really clear what this should be so leaving the default of -1.

TECS_LAND_SPDWGT – set to -1 the “special” recommended value for a dynamically adjusted landing (WGT=height? weird)

Loading Terrain

its a manual process because of no network at the field. Neither Mission Planner, not QGround Control want to download terrain if there is no GPS. I live in a a concrete building so I don’t have a GPS lock when I’m setting up the plane, so I had to download the Terrain manually and load the files onto the SD Card /TERRAIN folder manually. Surely there is a better way? (apparently not).

Creating the Mission in Mission Planner or QGroundControl

I’m still using both Mission Planner and QGroundControl. QGroundControl is best for flashing new firmware. It’s simple and clear and “just works”, The UI in Mission Planner is horrible, but it has everything if you can find it or if you can read it. I do a lot of squinting while using Mission Planner.

This is the mission in a nutshell

NAV_TAKEOFF – to takeoff facing North ( usually the wind is from the North) at 15 degrees to 20 meters.

LOITER_ALT – to move away from the trees (there are a lot of trees around) and gain some altitude targeting 50m.

a simple elliptical flight path of WAYPOINTs around the field s maintaining 50m altitude, just to see how it works.

LOITER_ALT – to lose altitude in preparation for landing



That’s it. I’ll have my finger by the FBWA button the whole way – wish me luck!