Giter Club home page Giter Club logo

taulabs's Introduction

Tau Labs

Goals

The goal of Tau Labs is to focus on writing high quality open source code for autopilots that can easily provide the basis for research projects or further development by anyone. The project focuses on high quality code, robust testing, and ease of use. Our target audience is professionals, researchers, and students, but we want to make those more advanced techniques easy and accessible for anyone.

By “research”, we mean not only universities or institutions focused on research on UAVs, but any group who might have use for UAVs for their research purpose. Examples include UAVs used for agricultural surveys, air quality logging. By “students” we mean aiming the use of our project in the classroom, especially thanks to the availability of an entry-level reference platform (see below).

The Tau Labs software is released under the GPL and will be treated in that spirit. The code was forked from the OpenPilot project in November of 2012. Porting the software to new boards is encouraged and fun. The project will also maintain a set of reference platforms which the code will be more frequently tested against and will be expected to perform optimally. As it was put, these will receive “A+ development support.” As Lilvinz put it, with open source you can only give and create and we want to continue doing that.

Open source hardware information (where available) lives in this repository at flight/hardware/*/hw.

Getting involved

Click that big fork button on github and start coding! We use pull requests as reviews so expect a lot of constructive feedback!

In addition check out http://forums.taulabs.org for more discussion

Chat on freenode.net #taulabs

Code Layout

Here is a quick breakdown of the main directories to get you oriented

  • flight - contains the firmware components of the code
  • flight/target - the location of the board targets (e.g. flight/targets/freedom)
  • flight/PiOS - contains the drivers
  • flight/Modules - the flight control logic, broken into modules that communicate via UAVObjects
  • flight/tests - unit tests for some components of the flight code
  • ground - contains the GCS code
  • shared - contains UAV Object definitions shared between the GCS and the flight firmware
  • androidgcs - contains the ground control software for android

taulabs's People

Contributors

alessiomorale avatar corvuscorax avatar dankers avatar dustin avatar ekaszubski avatar elafargue avatar ernieift avatar guilhermito avatar janfietz avatar janhurst avatar jihlein avatar kipk avatar kubark42 avatar lilvinz avatar m-thread avatar mathieur avatar metropt avatar mike928 avatar mluessi avatar mlyle avatar pdima avatar peabody124 avatar peter-gunnarsson avatar ptdreamer avatar sambas avatar solidgoldbomb avatar tracernz avatar trex4git avatar webbbn avatar xdandys 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  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

taulabs's Issues

Check uart interrupt priorities

When doing the f3 port i noticed uart overrun errors if the usart interrupt priority was not set to PIOS_IRQ_PRIO_HIGHEST. I suspect that this may as well be a problem on other targes and probably being silently ignored.

Airspeed module consumes 100% CPU

When any baro airspeed module is compiled in, the Airspeed module consumes 100% of available CPU. This may only happen when the AirspeedSettings.AirspeedSensorType is also set to one of the baro sensors.

This is due the module only ever blocking in the code path for GPS airspeed.

The Airspeed module is a mess of #ifdefs which makes it very hard to read. Fixing that at the same time as the 100% CPU issue would be a significant improvement.

Rebrand GCS

For our sake and OP we should make sure our GCS is clearly different than theirs and people aren't confused. We should keep attribution to the code base but make sure the application is clearly recognizable as our fork.

So this is a big reorganization fun

  • change ground/openpilotgcs to ground/gcs
  • rename the app
  • create logo
  • update the logo / icon present in the app
  • make sure to keep copyright to OP but also add ours when appropriate (e.g. in the About GCS dialog)
  • change the news feed location
  • update the doxygen headers and have a big doxygen cleanup

please add any other things I'm missing. Also while we are reorganizing files I think the UAVO generator templates should move to shared/

Do we want to update the vendor on the plugin spec files since we are sourcing these plugins with our distributions?

Watchdog variables into pios_wdg.h

All the

#define PIOS_WDG_ACTUATOR        0x0001
#define PIOS_WDG_STABILIZATION   0x0002
#define PIOS_WDG_ATTITUDE        0x0004
#define PIOS_WDG_MANUAL          0x0008
#define PIOS_WDG_SENSORS         0x0010
#define PIOS_WDG_AUTOTUNE        0x0020
#define PIOS_WDG_SYSTEM          0x0040

should go to a common directory

Generic hw configuration page

Now that we #121 has split up the hwsettings appropriately we can use #79 to get the appropriate HwSettings object and then have a generic configuration page which just lists those options.

Release build for androidgcs

Currently it looks like there only comes debug binaries out of it.
Please provide a way to trigger a release build from the main Makefile for integration into
automated builds.

Add installing the android apk to Makefile

So it would nice to be able to do

make androidgcs_install

and have it call

adb install -r build/androidgcs/bin/androidgcs-{release,debug}.apk

based on the debug/release build selection.

Add UAVO information to logfiles

Currently, logfiles only have a small amount of information about the GCS and UAVO structure that was used to generate the log. It would be nice to include all the UAVO information required to read the file into a header.

Probably the fastest and easiest way to do this is to structure the logfile like an xml file, where the UAVOs are in the beginning and then the data section is just the binary UAVTalk stream.

We could also consider some approach like with kml/kmz, where the entire file is generated as an xml file, where every UAVTalk packet is exported into an XML entry.

Remove all branches from main repo

I think we should remove all branches except "next" from the main repo and encourage all to use the github fork mechanism. Currently someon who forks gets all the branch clutter from the main repo in his fork "for free".

Update or deprecate the wizard

Currently there is a nice setup wizard written by m-thread but it is already broken on CopterControl since the introduction of 6 point calibration. It doesn't work at all for any of the other platforms. We should either find someone willing to maintain this and keep it functional for the majority of targets or remove it from the welcome screen by default.

So speak up if you are interested.

refactor pios_dsm

Currently each PiOS port has its own implementation of pios_dsm which shares like 99% of the code.
Than can easily be refactured into PiOS/Common.

Support chars in UAVO

Currently, uavos support only uint8 and int8 types. The addition of a char type would be nice, as it allows for signaling to the UAVO browser that a scalar or an array of scalars should be displayed as characters, and not the decimal ASCII value. For instance, the FirmwareIAPObj displays a long string of numbers, which in reality should resolve to a long string of characters.

UAVO struct field

Currently, there is no struct field concept in UAVOs (aside from the UAVO itself). It would be handy to be able to define arrays of structs. This will come in particularly handy for geofencing (and possibly waypoints), where memory overhead considerations force us to define multiple points per UAVO.

More specifically extend the UAVO XML representation like this;


<struct_field name='"X" type="int16_t"/>
<struct_field name="Y" type="int16_t"/>
<struct_field name="Z" type="int16_t"/>

This would then need to generate a sub structure in the C code
struct geofence_point {
int16_t x;
int16_t y;
int16_t z;
};
struct Geofence {
struct geofence_point[40];
}

This would also be very useful for the mixer where we could have


<struct_field name='"curve1" type="uint8"/>
<struct_field name='"curve2" type="uint8"/>
<struct_field name="roll" type="int16_t"/>
<struct_field name="pitch" type="int16_t"/>
<struct_field name="yaw" type="int16_t"/>

PIOS_I2C Transfer ending checks seem a bit redundant.

As discussed here http://www.rcgroups.com/forums/showpost.php?p=23475295&postcount=9

PIOS_I2C seems to be a little overambitious on checking conditions to end. For FreeRTOS

semaphore_success &= (xSemaphoreTake(i2c_adapter->sem_ready, timeout) == pdTRUE);

checks that it has terminated but then teh non FreeRTOS check

while (!i2c_adapter_fsm_terminated(i2c_adapter)) ;

runs too.

While at it all the differences between the F1/F4 implementation should be reconciled.

Windows portable build

Lilvinz said he uses a portable build for windows for his discovery work which sounds like an improvement.

discoveryf3: Find a clean solution to save settings on the main chip

This is required to have the DiscoveryF3 port run standalone.
There is working code for internal settings but it still has problems:
a) very slow
b) seems to halt the core or something similar which can lead to unwanted side effects
like ESC misbehavior because of PWM output spikes

Dynamic registration of boards

It would be good to extend Edouard's board plugin mechanism with a dynamic plugin that generates as much of the board specific information as possible at run time. These should also be pulled from a common location whenever possible. Some things this should be easy

  • Board ID / type
  • VID / PID
  • Board name
  • Image of the board

some might be harder

Summary alarm indicator and floating overlay

The ability to easily know when an alarm is set for the GCS is critical. To make it more obvious two things should be added:

  1. an option for a reduced gadget display that can be put on all the workspaces which has a color/label indicating the highest warning label
  2. if Qt can support it, an option to make the alarms float over GCS semi-transparently where there is an alarm

Change UAVO Browser to use different colors to indicate how a UAVO has been changed

Currently, if a UAVO is changed but only in the UAVO browser, the background turns green. When the user clicks send or save the background turns white. It would be a nice feature if the background turned white only when the user clicked save, and turned another color when the send button was used.

Note, this should not be seen as an attempt to know if the flight controller has saved, or otherwise received the UAVO change request. The goal of this is a to be a purely visual feedback to remind the user what state s/he has requested.

UAVTalk crash

In uavtalk.cpp this check

if (rxObj == NULL && rxType != TYPE_OBJ_REQ)

can result in a crash if the object is null but it is not that transaction type. In this case

rxObj->isSingleInstance()

triggers an exception error.

Replacing it with just the null check fixes the crash, but I'm thinking in the case where the object is null we want to send a NAK back through telemetry to the FC. This needs testing to make sure it is safe on the hardware side.

GCS Sensor noise measurement

... does not work if there is any sensor missing. So e.g. on the FlyingF3 board we
cant measure sensore noise because it doesnt have a baro.

Support for multiple telemetry protocols

The GCS should be able to support multiple telemetry protocols, as long as those protocols can be nicely mapped to our UAVObject paradigm since it is central to the PhoenixPilot architecture.

This support can be built on top of the recent work on multiple board support, by extending it to mention what board model suports what protocol(s).

This also means that we need to implement a mechanism to tell the GCS explicitly what protocol to use when opening a hardware device - or to have protocol plugins provide an "autodetect" function to make the process automated. Please comment on this...

Allow enumeration of list of VID/PID pairs

Currently the USB Monitor can only monitor one address. This should be extended to handle a QList of addresses (or some other mechanism) so Quantom can use it's own addresses (for example).

Verify proper attribution to OpenPilot is maintained

This issue is a component of https://github.com/PhoenixPilot/PhoenixPilot/issues/91
and also https://github.com/PhoenixPilot/PhoenixPilot/pull/122

We need to make sure that while rebranding the GCS all copyright is properly maintained. There's also one place in the about dialog where it should list both above ground labs and openpilot and didn't. Please list any other similar bugs here.

Here are the test builds: https://groups.google.com/forum/?pli=1#!topic/phoenixpilot/mfwikNUZ5-I

Extend OpenOCD+FreeRTOS support to deal with lazy FPU register stacking

This really doesn't belong here but I want to capture some notes in case @lilvinz wants to help with this.

This affects the F3 and F4 CPUs only. The F1 doesn't have an FPU.

Summary

  • OpenOCD does not currently provide proper register decode of threads that have used the FPU.
  • FreeRTOS uses a feature of the M4 CPU to allow it to use lazy stacking of FPU registers only when absolutely necessary. This is a huge win for efficiency.
  • Threads that use the FPU often show up as having a PC of 0x00000000 (or possibly any other random PC depending on the contents of floating-point register s22.
  • Backtraces don't work for the threads using the FPU which makes debugging difficult.

Stack when FPU is NOT active:

SP -> r4
+ 4   r5
+ 8   r6
...   r7
      r8
      r9
      r10
      r11
      LR_svc == 0xfffffffd
      r0
      r1
      r2
      r3
      r12
      LR
      RA (PC)
      xSPR

Stack when FPU is active:

SP -> r4
+ 4   r5
+ 8   r6
...   r7
      r8
      r9
      r10
      r11
      LR_svc == 0xffffffed  (the 0x10 bit being cleared indicates FPU active)
      s16
      s17
      s18
      s19
      s20
      s21
      s22
      s23
      s24
      s25
      s26
      s27
      s28
      s29
      s30
      s31
      r0
      r1
      r2
      r3
      r12
      LR
      RA (PC)
      xSPR

Notes

  • The LR register is banked. There is a different LR depending on which CPU mode you are in [http://en.wikipedia.org/wiki/ARM_architecture#Registers]
  • When in SVC mode, the LR holds the EXC_RETURN value. The 0x10 bit tracks whether the FPU is active.
  • OpenOCD uses a fixed stack definition for each CPU.
    • See: rtos_standard_stackings.c::rtos_standard_Cortex_M3_stack_offsets[]
  • FreeRTOS decoding in OpenOCD chooses a single stacking.
    • See FreeRTOS.c::FreeRTOS_params_list[]
  • OpenOCD FreeRTOS code would have to change to use one of two possible stack decodes.
    • Changes would be in: FreeRTOS.c::FreeRTOS_get_thread_reg_list()

References

flyingf3: Change the pinout to final

As this will be one of the reference platforms the pinout has to be chosen wisely.
After this has been done, the pinout.txt has to be changed as well as the hardware definitions file.
Thats what this task is.

ST StdPeriph GPIO functions used in PiOS/Common

There are a number of drivers in PiOS/Common which use the StdPeriph functions for GPIO access.

PIOS_GPIO exists but possibly(?) isn't used and the little that's there was built for a different purpose. If it's not being used it could be replaced and given a new API, one to be used by the PiOS/Common drivers rather than modules in userspace.

Thoughts on replacing pios_gpio?

Affected drivers are:

  • pios_bmp085
  • pios_hcsr04
  • pios_hmc5843
  • pios_hmc5883
  • pios_sbus
  • pios_video
  • pios_wavplay
  • pios_dsm (once it is re-factored into PiOS/Common)

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.