Tag Archives: GPS

Raspberry Pi Camera V2 & GPS

Last weekend I did some tests with a UBLOX Neo6 GPS running next to the V2 camera to see if it’s better than the V1 camera.

The GPS had a clear view of half of the sky with a building to one side so not necessarily ideal conditions. The GPS was powered from the Pi with the cable wrapped through a small ferrite bead.

Here is a picture of the setup:


Here is the graph showing the Satelite number, PDOP, Position accuracy and velocity accuracy reported by the GPS:

Screenshot from 2016-07-17 11-16-49.png

There is a clear jump when turning on the camera where PAcc goes from ~2 to ~3.2. With the V1 camera this jumped to 30-40.

The jamming indicator showed 15-20% regardless if the camera was off or on. With V1 the indicator jumped to 100% when turning the camera on.

The number of satellites is the same, as is the PDOP and VAcc.


The spectrum measured with the SDR was crystal clear even when the antenna was almost touching the camera ribbon cable – which btw is unshielded.


So my conclusion is that the V2 interferes with the GPS way less than the V1 and with a bit of (optional) ribbon cable shielding it should be ok for a multirotor.



GPS jamming

The Raspberry pi camera completely jams my Ublox Neo6 GPS.

I’m monitoring the jamming, ADC and noise values and whenever I turn on the camera and start capturing video, jamming goes up from 10 to 140, ADC goes down from 4600 to 1000 and the noise from 100 to 130.

This kills any fix the GPS has and it stops seeing any satellites. With the camera off I regularly get between 3-7 satellites indoors and this is with a passive antenna. With the camera on I get zero even outside.

I wrapped the entire camera in several layers of aluminum foil, same for the ribbon cable without noticing any improvement.

Only after placing a small ferrite bead on the RX/TX serial wires the ADC went up from 1000 to ~3600. So far it looks like the issue is electrical noise.

In the mean time I’m waiting for the new GPS I ordered from hobby king and also started working on supporting the NAVIO board as it has a newer GPS (the ublox 8).

This brings me to the next issue – the brain architecture is not ready to support multiple sensors of the same time.

Time to work on the software while I’m waiting for both the new GPS and the Navio board.

Robust sensors

Thanks to HobbyKings horrible shipping times, I’m forced to use my broken Crius UBLOX GPS to test the GPS code. I’m not sure what is broken but the symptoms vary from garbage data, wrong crc, loosing the fix every 2 minutes and random periods of complete silence.

To be able to continue working I had to add a watchdog that reinitializes the GPS if it’s silent for more than 5 seconds. However – my GPS::init function is blocking and takes a few seconds to do it’s work as it has to wait for the ACK messages and retry a few times if needed. So I moved it on the secondary thread using silk::async.

void GPS_UBLOX::process()
    if (!m_is_setup)
        if (!m_setup_future.valid() || //first time we're starting this
             m_setup_future.get_state() == boost::future_state::ready) //the previous async setup failed
            //start the async setup
            m_setup_future = silk::async([this]() { setup(); });

And the watchdog:

//check if we need to reset
if (q::Clock::now() - m_sample.last_complete_time_point >= REINIT_WATCHGOD_TIMEOUT)
    m_is_setup = false;

So if at any moment the GPS stops responding I’m firing the setup on the second thread – to avoid blocking the main control thread and keep doing it until the GPS responds again.

I’m thinking to add this king of hot restart to all sensors and in case something happens to trigger it from the GS.