NGOS-0.59
Release Notes
NGOS version 0.59
Added missing behaviors 30-40 to default settings. Fixed typo in behavior description.
Using signed fixpoint datatype for gps positions on the SBC. Implemented binary fixpoint value for longitude/latitude. Cleanup in SBC print position command. Bug fix in speed parsing on the SBC. Green LED on the SBC represents hearth-beat.
Enabled ACC validation. Always validating if aN or aR are < 100. atan2() is near zero anyway in that case. Lowered ACC.valid to 125 which represents 0.125g.
Applied Nabil’s patch: We are now checking the timer value and we mark the rcsum receiver as disappeared when we do not receive any irqs within 200ms.
Stefan added position fields to NGPP and fixed/extended NGPGG debug commands to 32bit
Implemented prelimary ACT S3D DSL support. Status and signal packets are
understood now (except for the 0x1E packet type which is TL812 encoded,
does someone know what TL812 could mean?). A new command ‘debug dsl’ has
been implemented and shows the last commands and last signal data. Extended
the device table with ACT S3D devices on uart0/1 and on dsl0/1. Extended
device table with nmea gps on SBC which has been made working by Stefan.
Implemented behavior action rc.clear.bearing() for Darkriver and similar minded folks who want to reset their bearing calibration before each start
Fixed version on the RCC which was truncated by a float/preprocessor problem.
Fixed 32bit NGPP transfers. Code cleanup in ngpp_values(): now using one
memcpy() instad of several in a loop. Implemented a NGPP calibrate register
on the SBC. Implemented a new shell command called ‘calibrate compass’ which
uses NGPP to issue a calibrate command to the SBC. We do not yet display the
calibrated limits. NGPP initiated compass calibration works and correctly
signals calibrated/not-calibrated state using the leds and the device table.
Implemented distinct devices for calibrated/uncalibrated compass.
Removed MM3 spike handling for now.
Implemented HW.uart0.bootmsg and HW.uart1.bootmsg global parameters. Implemented behavior action ctrl.set.bat.minimum(x).
Re-factored compass_calibration_task() and moved stop condition independent
code to compass_calibration_step(pid, end). Created a second task called
compass_ngpp_calibration_task() which uses the same compass_calibration_step()
function with a different stop condition.
Fixed device table indexes.
Updated cs.in structure for efficient gps data format. Now copying GPS data from SBC to cs.in structure. The command ‘print position’ command supports the new fields. Fixed gps action to work with GPS connected at the SBC.
Implemented ‘print time’ and ‘print date’ showing GPS date and time. Enabled gps track for sensorboard gps. Implemented a ’loop position’ command.
Moved device activation from fsm_busscan to calling user space context for I2C0 and I2C1.
Implemented ACT S3D DSL in rc-dsl.c with polling commands and a new parser
for the new protocol called s3d-parser.pl. Implemented ACT S3D DSL on
the RCC.
Ported kalman1d-float3232.c to kalman1dpos-float3232.c. Tried to change
the single integrating Kalman filter to a double integrating filter by
analyzing it’s internal workings and substituting dt by dt2 everywhere.
No idea if this is mathematical sound… ;)
Implemented a prelimary GPS controller: Now using a two kalman1dpos Kalman
filters to filter latitude and longitude and fuse it with the two times
integrated acceleration values. Implemented “debug amir-gps pos”,
“debug amir-gps ph”, “debug amir-gps kalman-long” and
“debug amir-gps kalman-lat”.
Improved position Kalman filters. Implemented cs.in.gps_new (signals when
new GPS data is available) and ctrl_gps_position_tick. Introduced 3 new
controller variables for the position Kalman filters.
Implemented the command “reboot” and extended kalman1dpos_float3232_dump() to show the Kalman gains.
Extended ngctrl dump protocol with GPS lat/long and guessed lat/long.
Now parsing NMEA sentence to temporary variables to avoid transmission of unfinished parsed data. Now useing predict time delta for position Kalmann dt which works a lot better.
Implemented new ngctrl dumping in libng and extended qngctrl with a position tab for GPS debugging. Now sending position in > [cm] precision. Extended the ngctrl protocol with a checksum
Changed crt.s to point IRQ and FIQ handlers to abort slots. This should
make the system reboot instad of hang should the IRQ or FIQ interrupt
vector be called. Introduced 2 new abort types to mark these cases.
Improved the output of the commandz “abort regs”.
Implemented new Makefile target called ‘fc-debug-jtag’ and ‘debug-jtag’.
Re-enabled IRQ_Routing() and changed it to return immediately. This
should get rid of our spurious interrupt problem as the VIC will generate
a non-vectored interrupt when he receives a vectored one exactly in that
moment when the interrupt gets disabled.
Implemented spurious interrupts statistics in “show stats”. The command “reset stats” now also resets the spurious irq counters.
Implemented GPS spike filter. We do not allow more than 5m/s change which
is aequivalent to 200km/h. Made GPS data fetching dependant an
dev_detected_byidx(DEV_IDX_SBCTRL_GPS).
Changed ctrl_input() to use ngpp_values() instad of ngpp_value() which is faster. Activated all SBC tests.
Fixed led readout bug (position/compass led toggle each other now). Implemented new field “newdata” to announce new gps data. Copy data only if all sentence are parsed. Lock position data to avoid race conditions with ngpp.
Eliminated several possible race conditions for uart0 and uart1.
Fixed “debug ngppslots” to correctly display unknown NGPP slot status. Implemented “debug nggppusage” which counts the NGPP slots usage in the last 100ms.
Splitted ngpp_register_read() for lat/lon into two single ngpp_register_read() for lat and lon separately. Splitted 10 byte DSL NGPP requests to RCC into two 5 bytes requests.
Revamped ctrl_dump(): it no longer uses the NEWLIB layer’s write() function to dump data, but outputs directly into the buffers of the respective monitor.
Enabled GPS altitude parsing, announce new data if new RMC sentence data are available. Update position filter when new position data are available. Expanded “debug amir-gps pos” command.
Found the integral problem: Our kalman initialization fix was - trough
correct - also the problem. Initializing the diagonal elements of P with
a real float3232(1) instad of 1 results in the problem. Reverted the
change for now, until we understand what’s going on. This way we have
our precision back.
Implemented ‘debug amir-kalman kalman-[NRY]’ to debug the Kalman initialization problem.
Fixed DSL0/DSL1 problem Ralf found. Now using the defines SC_MONITOR_UART0 and SC_MONITOR_UART1 to identify the monitors. DSL data part 1 and part 2 get read in different cycles now.
Implemented a global cycle counter in cs.in.cycle. It counts from 0 to 999. This will allow us to get rid of all those local cycle counters used.
Added ubuntu qwt support for qngctrl.
Added debug command for exact float3232 multiplication.
Revamped uart.c: Now using makros to disable/enable the uart’s TX IRQ.
Removed dead code. Removed non working baudrates.
Removed the branch to 0x00000000 in abort_reboot_callback() and let the watchdog do the reset. For some reason the inline assembler command does not work with Mario’s toolchains. Regarding a Keil doc. a reset via the watchdog should therefore be favored.
Implemented gps movements simulation hack. It’s dirty code, don’t puke.
Avoiding a 64-bit division (long long), it wasn’t needed on the SBC in compass.c (32-bit was enouth). Found a solution with bitshift was possible for GPS position. Fixed small bugs in SBC’s configure.ac, we now generate a map file.
Fixed servo settings description.
Improved SBC locking by disabling interrupts. Implemented configuration of UART on SB-Controller (solves ticket 180).
Moved all functions from armVIC.c to armVIC.h as “static inline”. This will speedup the disable/enable-interrupt calls.
Rewrote UART0 support to use a ring buffer without disabling ANY interrupts. Hopefully the new code is race free now, please test extensivly!
Fixed usbfifo_put() by reordering ringbuffer code. Rewrote uart1 similar to uart0. We no longer enable/disable interrupts but correctly use a ringbuffer and two pointers.
Added NGcon and NGusb pdf documentation.
Reordered output of “show stats”: first [ticks] then [bytes].
Changed i2c0_ngpp_register_write() and i2c0_ngpp_register_read() not to
output errors using iprintf() via NEWLIB layer, which fails anyway, but
instad return -1 and count errors in the ngpp layer. We now output
ngpp_register_read() and ngpp_register_write() error counters in
“show stats”. We still will output an error using iprintf() when no more
ngpp slots are available… we will have to change this later.
Improved output of ‘debug ngppslots’ and made it more consistent by copying the slot before starting to output it’s content.
Adapted compass tick statistics to NGPP compass queries.
Axel fixed the USB stack’s overflow problem by implemented usb_putch(), usb_putch_blocking() and usb_getch() with same interface as uart functions and using the blocking versions in syscalls.c like we do for the UARTs.
Tim added an initial commit of qngctrl2.
Implemented a global parameter called hw_use_gps and changed all code paths to use it.
Ralf improved S3D DSL parsing, added a scan cmd and added correct device detection.
Fixed a lot of warnings found by gcc-4.5.0. Except for -pedantic we are clean now.
Timo added preliminary debian packages for qngctrl. The packages are not yet debian-compliant, have no manpages and install pictures into /usr/bin.
Volker added a first schematics and layout of the mini-NG hw-0.22-r1-mini.
Extended lpc2148-rom.ld with a .ARM.extab* .gnu.linkonce.armextab.* section which is needed for eabi support according to Tim.
Markus added 5.8GHz ng-video display brd and sch.
Stefan added arm-none-eabi gcc target support (new arm abi).
Timo fixed some whitespace problems in source files.
Amir implemented a new controller called amir-ng. It’s implements a DCM (direction cosine matrix) based SO(3) integration and uses it in a Kalman predict to integrate orientation changes in the linear SO(3) manifold. The controller implements a 3x 2-state Kalman filter for drift compensation. Implemented the debug command ‘debug amir-ng’.
We now show GCC and NEWLIB version in show version.
Added stk500 flash targets for rc controller, added –with-stk500-port option for SBC and RCC.
Moved PT1 compensation and DTC to HAL, added CTRL.use.acc, CTRL.use.compass and CTRL.use.gps (this allows us to enable the hardware and don’t let it use by the controller).
Ralf optimized the JTAG config file for the OPENOCD-USB adapter.
Changed stack size for abort stack to 4 bytes (abort handler don’t use any stack), removed old unused interrupt handler.
Renamed “show [rc|rcsum|dsl]” to “print [rc|rcsum|dsl]”.
Updated sensor mean calculation to a power of 2 (optimizes division).
Stefan implemented a new 2 state Kalman for position estimation.
Implemented a new PID controller for controller amir-ng. Don’t use it yet, it does not yet work as expected.
Stefan implemented compass calibration as settings (allows dumping and set configuration by hand). Increased SBC buffer size for uart to allow several set commands without overflow. Now marking compass as calibrated as soon as we set our configuration.
Amir implemented not yet working yaw correction using raw compass magnetic field measurement in controller amir-ng.
Fixed a bug in ctrl_input, compass data is now fetched without gps too.
Fixed when.rc.landed.stick.* behavior condition which also triggered while flying even trough it should only trigger in flight state landed.
Stefan fixed ctrl-amir not to use position information when position controller is disabled.
Install qngctrl resources to /usr/share/qngctrl.
Fixed a bug in ctrl-amir-ng which stored the correction as integer instad of the matrix data type. The new controller should stabilize correctly now.
Implemented more debug output into “debug amir-ng kalman”.
Implemented new behavior conditions while.rc.flying.signal.lost() and when.rc.flying.signal.lost().
Scaled acc measurement to [1g] instad of [1milli-g] in ctrl-amir-ng and fixed a bug in inovation calculation as well as in covarance calculation. Bias guessing now seems to work. We need to find good kalman parameters now. Extended debug commands to doubles.
Fixed a sign problems in DCM integration in controller amir-ng.
Switched back from double to float. Ajusted default parameters for DCM kalman. Fixed small conversation problems and float3232 defines. All filter parameters should now have an impact.
Fixed yaw bug which hit Taarek. Correctly rolling over yaw now in amir-ng.
Disabled GPS support in controller amir as it’s not yet flight-ready.