source: flair-dev/trunk/include/FlairSensorActuator/ParrotNavBoard.h @ 4

Last change on this file since 4 was 4, checked in by Sanahuja Guillaume, 5 years ago

sensoractuator

File size: 4.5 KB
Line 
1// %flair:license{
2// This file is part of the Flair framework distributed under the
3// CECILL-C License, Version 1.0.
4// %flair:license}
5/*!
6 * \file ParrotNavBoard.h
7 * \brief Class for ArDrone 2 sensors
8 * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
9 * \date 2013/12/19
10 * \version 4.0
11 */
12
13//thanks to Paparazzi (https://wiki.paparazziuav.org) for the struct nav_struct
14
15#ifndef PARROTNAVBOARD_H
16#define PARROTNAVBOARD_H
17
18#include <Thread.h>
19
20namespace flair {
21    namespace core {
22        class FrameworkManager;
23        class cvmatrix;
24        class ImuData;
25        class SerialPort;
26    }
27}
28
29namespace flair { namespace sensor {
30    class Imu;
31    class UsRangeFinder;
32
33    /*! \class ParrotNavBoard
34    *
35    * \brief Class for ArDrone 2 sensors
36    */
37    class ParrotNavBoard : public core::Thread {
38        public:
39            /*!
40            * \brief Constructor
41            *
42            * Construct a ParrotNavBoard.
43            *
44            * \param parent parent
45            * \param name name
46            * \param serialport serialport
47            * \param priority priority of the Thread
48            */
49            ParrotNavBoard(const core::FrameworkManager* parent,std::string name,core::SerialPort* serialport,uint8_t priority);
50
51            /*!
52            * \brief Destructor
53            *
54            */
55            ~ParrotNavBoard();
56
57            /*!
58            * \brief Use default plot
59            *
60            */
61            void UseDefaultPlot(void);
62
63            /*!
64            * \brief Get Imu
65            *
66            * \return Associated Imu
67            */
68            Imu* GetImu(void) const;
69
70            /*!
71            * \brief Get UsRangeFinder
72            *
73            * \return Associated UsRangeFinder
74            */
75            UsRangeFinder* GetUsRangeFinder(void) const;
76
77        private:
78            typedef struct nav_struct
79            {
80                uint16_t size;                // +0x00 Size of the following data (always 0x3a)
81                uint16_t seq;                 // +0x02 Sequence number, increases every update
82                uint16_t acc[3];              // +0x04 Raw data (10-bit) of the accelerometers multiplied by 4
83                int16_t gyro[3];             // +0x0A Raw data for the gyros, 12-bit A/D converted voltage of the gyros. X,Y=IDG, Z=Epson
84                uint16_t acc_temp;            // +0x10 Accs temperature -- startup value 120 @ 25C, rising to 143
85                uint16_t gyro_temp;           // +0x12 XYGyro temperature (IDG), 12-bit A/D converted voltage of IDG's temperature sensor -- startup value 1532 @ 25C, rising to 1572
86                uint16_t us_echo;             // +0x14 bit15=1 echo pulse transmitted, bit14-0 first echo. Value 30 = 1cm. min value: 784 = 26cm
87                uint16_t us_echo_start;       // +0x16 Array with starts of echos (8 array values @ 25Hz, 9 values @ 22.22Hz)
88                uint16_t us_echo_end;         // +0x18 Array with ends of echos   (8 array values @ 25Hz, 9 values @ 22.22Hz)
89                uint16_t us_association_echo; // +0x1a Ultrasonic parameter -- echo number starting with 0. max value 3758. examples: 0,1,2,3,4,5,6,7  ; 0,1,2,3,4,86,6,9
90                uint16_t us_distance_echo;    // +0x1c Ultrasonic parameter -- no clear pattern
91                uint16_t us_courbe_temps;     // +0x1e Ultrasonic parameter -- counts up from 0 to approx 24346 in 192 sample cycles of which 12 cylces have value 0
92                uint16_t us_courbe_valeur;    // +0x20 Ultrasonic parameter -- value between 0 and 4000, no clear pattern. 192 sample cycles of which 12 cylces have value 0
93                uint16_t us_courbe_ref;       // +0x22 Ultrasonic parameter -- coutns down from 4000 to 0 in 192 sample cycles of which 12 cylces have value 0
94                uint16_t nb_echo;
95                uint32_t sum_echo;
96                int16_t gradient;
97                uint16_t flag_echo_ini;
98                int32_t pressure;
99                int16_t temprature_pressure;
100                int16_t mag[3];
101                uint16_t checksum;
102            } __attribute__ ((packed)) nav_struct;
103
104            /*!
105            * \brief Run function
106            *
107            * Reimplemented from Thread.
108            *
109            */
110            void Run(void);
111
112            uint16_t Checksum(const uint8_t *data) const;
113            void computeDatas(nav_struct* nav,core::Time time);
114
115            Imu* imu;
116            UsRangeFinder* us;
117            core::SerialPort* serialport;
118    };
119} // end namespace sensor
120} // end namespace flair
121
122#endif // PARROTNAVBOARD_H
Note: See TracBrowser for help on using the repository browser.