altb_pmic / Mbed 2 deprecated Test_optical_flow_PX4

Dependencies:   mbed

Committer:
altb2
Date:
Wed Aug 21 13:21:41 2019 +0000
Revision:
1:562a583eb77c
Parent:
0:4b02060af95b
Child:
3:e03714326b83
Just log data

Who changed what in which revision?

UserRevisionLine numberNew contents of line
altb2 0:4b02060af95b 1 #ifndef _PX4FLOW_MBED_H
altb2 0:4b02060af95b 2 #define _PX4FLOW_MBED_H
altb2 0:4b02060af95b 3
altb2 0:4b02060af95b 4 # include <stdint.h>
altb2 0:4b02060af95b 5 # include "mbed.h"
altb2 0:4b02060af95b 6
altb2 0:4b02060af95b 7 // 7 Bit I2C Address of the Flow Module: Default 0x42 (user selectable bits 0,1,2)
altb2 0:4b02060af95b 8 #define PX4FLOW_ADDRESS 0x42<<1
altb2 0:4b02060af95b 9
altb2 0:4b02060af95b 10 // Commands
altb2 0:4b02060af95b 11 #define FRAME 0x00
altb2 0:4b02060af95b 12 #define INTEGRAL_FRAME 0x16
altb2 0:4b02060af95b 13
altb2 0:4b02060af95b 14 // define buffer indicees
altb2 0:4b02060af95b 15 // simple frame
altb2 0:4b02060af95b 16 #define FRAME_COUNT 0
altb2 0:4b02060af95b 17 #define PIXEL_FLOW_X_SUM 2
altb2 0:4b02060af95b 18 #define PIXEL_FLOW_Y_SUM 4
altb2 0:4b02060af95b 19 #define FLOW_COMP_M_X 6
altb2 0:4b02060af95b 20 #define FLOW_COMP_M_Y 8
altb2 0:4b02060af95b 21 #define QUAL 10
altb2 0:4b02060af95b 22 #define GYRO_X_RATE 12
altb2 0:4b02060af95b 23 #define GYRO_Y_RATE 14
altb2 0:4b02060af95b 24 #define GYRO_Z_RATE 16
altb2 0:4b02060af95b 25 #define GYRO_RANGE 18
altb2 0:4b02060af95b 26 #define SONAR_TIMESTAMP 19
altb2 0:4b02060af95b 27 #define GROUND_DISTANCE 20
altb2 0:4b02060af95b 28
altb2 0:4b02060af95b 29 // integral frame
altb2 0:4b02060af95b 30 #define FRAME_COUNT_SINCE_LAST_READOUT 0
altb2 0:4b02060af95b 31 #define PIXEL_FLOW_X_INTEGRAL 2
altb2 0:4b02060af95b 32 #define PIXEL_FLOW_Y_INTEGRAL 4
altb2 0:4b02060af95b 33 #define GYRO_X_RATE_INTEGRAL 6
altb2 0:4b02060af95b 34 #define GYRO_Y_RATE_INTEGRAL 8
altb2 0:4b02060af95b 35 #define GYRO_Z_RATE_INTEGRAL 10
altb2 0:4b02060af95b 36 #define INTEGRATION_TIMESPAN 12
altb2 0:4b02060af95b 37 #define SONAR_TIMESTAMP_INTEGRAL 16
altb2 0:4b02060af95b 38 #define GROUND_DISTANCE_INTEGRAL 20
altb2 0:4b02060af95b 39 #define GYRO_TEMPERATURE 22
altb2 0:4b02060af95b 40 #define QUALITY_INTEGRAL 24
altb2 0:4b02060af95b 41
altb2 1:562a583eb77c 42 typedef struct i2c_frame {
altb2 0:4b02060af95b 43 uint16_t frame_count; // counts created I2C frames 0
altb2 0:4b02060af95b 44 int16_t pixel_flow_x_sum; // accumulated x flow in pixels*10 since last I2C frame 2
altb2 0:4b02060af95b 45 int16_t pixel_flow_y_sum; // accumulated y flow in pixels*10 since last I2C frame 4
altb2 0:4b02060af95b 46 int16_t flow_comp_m_x; // x velocity*1000 in meters / timestep 6
altb2 0:4b02060af95b 47 int16_t flow_comp_m_y; // y velocity*1000 in meters / timestep 8
altb2 0:4b02060af95b 48 int16_t qual; // Optical flow quality / confidence 0: bad, 255: maximum quality 10
altb2 0:4b02060af95b 49 int16_t gyro_x_rate; //gyro x rate 12
altb2 0:4b02060af95b 50 int16_t gyro_y_rate; //gyro y rate 14
altb2 0:4b02060af95b 51 int16_t gyro_z_rate; //gyro z rate 16
altb2 0:4b02060af95b 52 uint8_t gyro_range; // gyro range 18
altb2 0:4b02060af95b 53 uint8_t sonar_timestamp; // timestep in milliseconds between I2C frames 19
altb2 0:4b02060af95b 54 int16_t ground_distance; // Ground distance in meters*1000. Positive value: distance known. Negative value: Unknown distance 20
altb2 0:4b02060af95b 55 } i2c_frame;
altb2 0:4b02060af95b 56
altb2 0:4b02060af95b 57 typedef struct i2c_integral_frame {
altb2 0:4b02060af95b 58 uint16_t frame_count_since_last_readout;//number of flow measurements since last I2C readout [#frames] 22
altb2 0:4b02060af95b 59 int16_t pixel_flow_x_integral; //accumulated flow in radians*10000 around x axis since last I2C readout [rad*10000] 24
altb2 0:4b02060af95b 60 int16_t pixel_flow_y_integral; //accumulated flow in radians*10000 around y axis since last I2C readout [rad*10000] 26
altb2 0:4b02060af95b 61 int16_t gyro_x_rate_integral; //accumulated gyro x rates in radians*10000 since last I2C readout [rad*10000] 28
altb2 0:4b02060af95b 62 int16_t gyro_y_rate_integral; //accumulated gyro y rates in radians*10000 since last I2C readout [rad*10000] 30
altb2 0:4b02060af95b 63 int16_t gyro_z_rate_integral; //accumulated gyro z rates in radians*10000 since last I2C readout [rad*10000] 32
altb2 0:4b02060af95b 64 uint32_t integration_timespan; //accumulation timespan in microseconds since last I2C readout [microseconds] 34
altb2 0:4b02060af95b 65 uint32_t sonar_timestamp; // time since last sonar update [microseconds] 38
altb2 0:4b02060af95b 66 int16_t ground_distance; // Ground distance in meters*1000 [meters*1000] 42
altb2 0:4b02060af95b 67 int16_t gyro_temperature; // Temperature * 100 in centi-degrees Celsius [degcelsius*100] 44
altb2 0:4b02060af95b 68 uint8_t quality; // averaged quality of accumulated flow values [0:bad quality;255: max quality] 46
altb2 0:4b02060af95b 69 } i2c_integral_frame;
altb2 0:4b02060af95b 70
altb2 0:4b02060af95b 71
altb2 0:4b02060af95b 72 class PX4Flow
altb2 0:4b02060af95b 73 {
altb2 0:4b02060af95b 74 public:
altb2 0:4b02060af95b 75 // Constructor
altb2 0:4b02060af95b 76 PX4Flow(I2C& i2c, Serial& pc);
altb2 0:4b02060af95b 77 // Deconstructor
altb2 0:4b02060af95b 78 virtual ~PX4Flow();
altb2 0:4b02060af95b 79
altb2 0:4b02060af95b 80 // Methods
altb2 0:4b02060af95b 81 bool update();
altb2 0:4b02060af95b 82 bool update_integral();
altb2 0:4b02060af95b 83
altb2 0:4b02060af95b 84 // Simple frame
altb2 0:4b02060af95b 85 uint16_t frame_count();
altb2 0:4b02060af95b 86 int16_t pixel_flow_x_sum();
altb2 0:4b02060af95b 87 int16_t pixel_flow_y_sum();
altb2 0:4b02060af95b 88 int16_t flow_comp_m_x();
altb2 0:4b02060af95b 89 int16_t flow_comp_m_y();
altb2 0:4b02060af95b 90 int16_t qual();
altb2 0:4b02060af95b 91 int16_t gyro_x_rate();
altb2 0:4b02060af95b 92 int16_t gyro_y_rate();
altb2 0:4b02060af95b 93 int16_t gyro_z_rate();
altb2 0:4b02060af95b 94 uint8_t gyro_range();
altb2 0:4b02060af95b 95 uint8_t sonar_timestamp();
altb2 0:4b02060af95b 96 int16_t ground_distance();
altb2 0:4b02060af95b 97
altb2 0:4b02060af95b 98 // Integral frame
altb2 0:4b02060af95b 99 uint16_t frame_count_since_last_readout();
altb2 0:4b02060af95b 100 int16_t pixel_flow_x_integral();
altb2 0:4b02060af95b 101 int16_t pixel_flow_y_integral();
altb2 0:4b02060af95b 102 int16_t gyro_x_rate_integral();
altb2 0:4b02060af95b 103 int16_t gyro_y_rate_integral();
altb2 0:4b02060af95b 104 int16_t gyro_z_rate_integral();
altb2 0:4b02060af95b 105 uint32_t integration_timespan();
altb2 0:4b02060af95b 106 uint32_t sonar_timestamp_integral();
altb2 0:4b02060af95b 107 int16_t ground_distance_integral();
altb2 0:4b02060af95b 108 int16_t gyro_temperature();
altb2 0:4b02060af95b 109 uint8_t quality_integral();
altb2 0:4b02060af95b 110
altb2 0:4b02060af95b 111
altb2 0:4b02060af95b 112 protected:
altb2 0:4b02060af95b 113 I2C i2c;
altb2 0:4b02060af95b 114 Serial pc;
altb2 0:4b02060af95b 115
altb2 0:4b02060af95b 116 // Buffer to read in the sensordata
altb2 0:4b02060af95b 117 char bufferS[22];
altb2 0:4b02060af95b 118 char bufferI[26];
altb2 0:4b02060af95b 119
altb2 0:4b02060af95b 120 char i2c_commands[2];
altb2 0:4b02060af95b 121
altb2 0:4b02060af95b 122 struct i2c_frame frame;
altb2 0:4b02060af95b 123 struct i2c_integral_frame iframe;
altb2 0:4b02060af95b 124
altb2 0:4b02060af95b 125 uint8_t read8(char *buffer, const unsigned int& idx = 0);
altb2 0:4b02060af95b 126 uint16_t read16(char *buffer, const unsigned int& idx = 0);
altb2 0:4b02060af95b 127 uint32_t read32(char *buffer, const unsigned int& idx = 0);
altb2 0:4b02060af95b 128 };
altb2 0:4b02060af95b 129
altb2 0:4b02060af95b 130 #endif