Code Monkey home page Code Monkey logo

piksi_firmware's Introduction

piksi_firmware - ARCHIVED

Build status

Firmware for the Swift Navigation Piksi v2.3.1 GPS receiver. This firmware is not compatible with Piksi Multi or Duro.

Documentation available online at http://docs.swift-nav.com/piksi_firmware

Checking Out Submodules

ChibiOS, libopencm3, libsbp and libswiftnav are submodules of this git repository. Check them out using:

git submodule update --init

Remember to run git submodule update after pulling in the latest changes to ensure all the submodules are in sync.

Installation

There are a few options:

  • Normal usage. If you're only using the Piksi console, binary installers (Windows and OS X) are here and source for the console can be found in piksi_tools.

  • Development (native). To install dependencies for the development tools on your platform (OS X, Ubuntu, or Debian), run the setup script in this repository via bash setup.sh -x install. If you're also building the firmware, you'll need to checkout the submodules as well.

  • Development (VM). The Vagrant file is currently used for testing installation setup.sh, but can also be used to provision a development VM. To do so, you will need to download VirtualBox and Vagrant, and then run vagrant up trusty in this repository.

For additional details about the toolchain installation, please see http://docs.swift-nav.com/wiki/Piksi_Developer_Getting_Started_Guide .

piksi_firmware's People

Contributors

akleeman avatar axlan avatar benjamin0 avatar cbeighley avatar cturvey avatar denniszollo avatar dt-exafore avatar fnoble avatar gsmcmullin avatar henryhallam avatar imh avatar jacobmcnamee avatar jkretzmer avatar kovach avatar ljbade avatar meee1 avatar mfine avatar mookerji avatar njoubert avatar pmiettinen avatar rai-swiftnav avatar rgezikov avatar scottswift avatar soulcmdc avatar switanis avatar ungureanuvladvictor avatar wltr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

piksi_firmware's Issues

Stack Overflow

While testing Differential Positioning (following the User Getting Started Guide) the system worked fine for a few minutes. Once I started to slowly move one Piksi both consoles reported "Error: Stack Overflow". Afterwards no further position estimate could be obtained.

Multipath mitigation / Narrow correlator spacing

The simplest multipath mitigation technique is to narrow the early / late correlator spacing. This should be easy to implement. We probably need to start with wide correlators for greater pull-in range and then narrow them once we have achieved a good lock. Programmable spacing would be nice.

  • Add variable correlator spacing to Peregrine
  • Test tracking loops still work in Peregrine
  • A/B test to compare multipath in Peregrine
  • Add variable correlator spacing to NAP
  • Enable narrow correlator spacing in piksi_firmware

Shouldn't keep tracking unhealthy satellites

PRN 30 (SVN 35) is on the fritz and is currently marked as unhealthy. Piksi correctly detects this, and doesn't use it in the navigation solution. But it keeps tracking the satellite, wasting a channel.

Maybe this could be a configurable option as some users might be interested in the tracking data for unhealthy sats.

Settings subsystem

Changing settings.c and recompiling isn't very user friendly.

@gsmcmullin has started porting minini which will provide a good solution but this needs to be integrated and a general system for reading and writing to the filesystem created.

USART DMA locking could be improved

I don't have the hardware, I was looking for an example and reading your code....

I thought I saw a "bug", but apparently you guys found that as well:

In src/peripherals/usart_tx.c

  • Note that this function is not reentrant and does not guard against DMA IRQs
  • running at the same time which will also cause spurious behaviours. Ensure
  • that the calling function prevents this from happening.

This bug that has now been solved "ugly" by requiring the calling function to disable interrupts can be solved much more elegantly:

Instead of updating the "wr" pointer before the copy-into-the-buffer, do so only AFTER copying. Thus a potential DMA interrupt will not think there is new data if it happens before the memcpy is finished.

I've written a patch for you, but I'm not sure if I can attach it. I'll try. (uncompiled, untested!) (but I've done this construct countless times before).

No solution calculated if Channel 00 is Disabled

Even when tracking satellites on all the other channels, no solution is calculated if channel 0 is disabled. If channel 0 is enabled, even if it isn't acquiring a satellite, a solution is successfully calculated.

Global ephemeris struct is not thread safe

Currently we CPSID before writing but that doesn't help if we were in the process of reading and is quite heavy handed anyway.

Use a mutex to properly lock around reads and writes of the ephemeris struct.

Lock count indicator in observation format

If the radio link goes down, the base loses and regains a satellite and then the radio link comes back up then the ambiguity has changed but the rover currently has no way to know that.

Better error detection for Flash files

Currently the almanac will be used from the Flash so long as the valid bit is set. We really should have the almanac (and any other important files) checksum'd to check for corruption.

Perhaps this could even be added at the Coffee FS layer to provide this protection to all files automatically. The checksum of each block could be written into its header.

NaN barriers

Put up the blast shields!

Check for NaNs between filter iterations and reset if necessary.

Switch Mode from Fixed RTK to Float

While testing Piksi (following the User Getting Started Guide) the system changed modes by itself (no user input). Originally the mode was Fixed and the distance estimate was reasonable (~0.08m). Then for no apparent reason the devices switched mode to Float and the distance estimate was way off (~7.5m). During the entire test both receivers were not moved.

Easy way to set USB USART back into SBP mode

Users have been setting the USB USART into NMEA or RTCM mode without realizing the consequences of this. USB USART should either always start in SBP or there should be some really obvious way to set it back into SBP in the Console.

Propagation / Low Latency Mode

Currently differential position solutions are calculated from time matched observations between the base station and rover.

In order to increase the solution rate beyond the limitations of observation throughput over the radio and to reduce the latency of the solutions we can "propagate" the low rate base station observations to match the high rate locally generated observations.

The solution code is already structured so the low latency filter can be hooked in:

https://github.com/swift-nav/piksi_firmware/blob/4a5f1bac07591af17b641c52c360b563429350f6/src/solution.c#L355-358

Accuracy fields not filled out in SBP messages

These fields should be filled in with the position covariance. This is really important for integrating Piksi with other systems' filters.

Would require calculation of position covariance from properly transformed measurement and ambiguity covariances. The ambiguity covariances are estimated in the float filter but would need to be properly exposed to the baseline computation.

Writing a setting with integer parameter with send_message needs encode('ascii')

In Python Console, the command:
self.link.send_message(sbp_piksi.SETTINGS, 'uart_ftdi\0baudrate\01000000\0')
Results in Piksi output:
Error in settings read message

Can be fixed by doing:
self.link.send_message(sbp_piksi.SETTINGS, 'uart_ftdi\0baudrate\0%s\0' % ('1000000'.encode('ascii')))

Do we want to change link.send_message to support the former?

other code worth looking at...?

I'd like to point out to you guys that Andrew Tridgell recently ( in the last year) wrote a functional DGPS system in python ( using two uBlox recievers). It's solution isn't a 100% RTK solution, but it does use the cycle-count of the carrier phase data, which is a long way toward what you are looking to implement, yes? He is doing this over RTCMv2 messages, and with a uBlox LEA-6T and LEA-6H. ( if I remember correctly ).
details:
https://canberrauav.readthedocs.org/en/latest/in-progres/DGPS.html
repository/code:
https://github.com/tridge/pyUblox

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.