* [imu] convert imu subsystems to modules
Also
- get rid of explicit imu init|event|periodic calls in main
- each imu implementation has their own imu_x_init/event/periodic
* [imu] fix some imu modules
* [imu] fix bad paths
* [imu] add imu_common module that every implementation autoloads
and put body_to_imu settings in imu_common module
* [imu] fix imu_ardrone2
* [conf] add imu_common settings module in conf_example and conf_tests
Possibility to run vision processing in a separate thread
- using cv_add_to_device_async will run the vision function in a separate thread
- set nice level for each separate video processing thread
- possibility to limit the max fps of a vision function (for synchronous and async video processing)
- added capability of toggling a cv listener
This pull request is for the guidance algorithms used to control hybrid drones like the Quadshot and MavShot. It supports autonomous waypoint navigation as well as "forward-flight". The code was flight tested in autonomous waypoint navigation mode, including autonomous landing (using sonar).
* Fix motor order bebop firmware 3.2, and check for firmware version during upload
* Also apply to other TUDelft airframes
* Give user feedback in case of problems during upload to bebop
This pull request allows you to use both the front camera and the bottom camera on the bebop, and to run optical flow on the bottom camera while running something else on the front camera.
- modules can call cv_add_to_device(&camera, fun) to register the callback fun for the specified camera with the video thread
- use a linked list with listeners for the video
- saving jpeg encoded shots is now in a separate video_capture module
IMU, mag, baro and telemetry tested.
Positive x-axis of the IMU is indicated by the arrows on the board, the side with LEDS and F4 is up (negative z-axis).
Still missing support for the modem and the external flash...
To get the axes correct also extended the imu_mpu600_hmc5883 driver to allow different axes/channel assignments.
Currently gains from rate control do not carry over to attitude stabilization, because there is a factor 2 in the rate control and prescaler values (factor 3 for rate) in the attitude control. I searched through the airframes, and there are not many that use rate control. I doubled all the gains and removed rate control for bebop, as rate control over datalink is very difficult due to lag.
The prescaler values should also be default 1 for stabilization quat_int, as they already are for float_quat. However, this will mean updating a large amount of airframes, which will require some scripting. I might have time for this later.
Refactor xsens
Factor out the common code and convert the subsystems to modules.
This is NOT tested with real hardware so far (not many people have a XSens).
- `XSENS_OUTPUT_MODE` might be wrong (or set it to output more than needed) in some cases (like for pure IMU mode)
- The different signs (IMU/sensor orientation) between the different xsens types is also weird and unclear.
See also related #924
support for multiple GPS
To e.g. use piksi as a secondary GPS:
```
<subsystem name="gps" type="ubx">
<configure name="UBX_GPS_PORT" value="UART2"/>
</subsystem>
<subsystem name="gps" type="piksi">
<configure name="PIKSI_GPS_PORT" value="UART3"/>
<configure name="SECONDARY_GPS" value="piksi"/>
</subsystem>
```
- Elle0 V1.2 is the release version of the hardware, the UART
assignement is bit different than the V1.0 preproduction version.
- Adding one more UART for Spektrum usage
- Moved all the board header settings to a common file
- Added aliases for the Elle0 V1.0 and V1.2 versions
- Added makefile for V1.2 version
"pleasent" rate control without reference model
- updated airframes with removal of rate control reference model
- removed everything related to rate reference
Each "board" (e.g. ARDrone2 or Bebop) defines a video_config_t for each camera,
then you only need to specify 'front_camera' or 'bottom_camera' instead of setting all parameters