read acceleration and angler ratio from mpu6050 and estimate pitch and roll angle

Dependencies:   mbed

Committer:
ojan
Date:
Thu Apr 16 08:51:04 2015 +0000
Revision:
1:2eca9b376580
Child:
2:4a6b46653abf
???????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ojan 1:2eca9b376580 1 #pragma once
ojan 1:2eca9b376580 2 #include "ErrorLogger.h"
ojan 1:2eca9b376580 3
ojan 1:2eca9b376580 4 class Matrix
ojan 1:2eca9b376580 5 {
ojan 1:2eca9b376580 6 public:
ojan 1:2eca9b376580 7 /********** コンストラクタ デストラクタ **********/
ojan 1:2eca9b376580 8 Matrix(int row, int col);
ojan 1:2eca9b376580 9 Matrix(int row, int col, float* comps);
ojan 1:2eca9b376580 10 ~Matrix();
ojan 1:2eca9b376580 11 Matrix(const Matrix& m);
ojan 1:2eca9b376580 12
ojan 1:2eca9b376580 13 /********** メンバ演算子 **********/
ojan 1:2eca9b376580 14 Matrix& operator=(const Matrix& m);
ojan 1:2eca9b376580 15 Matrix& operator+=(const Matrix& m);
ojan 1:2eca9b376580 16 Matrix& operator-=(const Matrix& m);
ojan 1:2eca9b376580 17 Matrix& operator*=(const Matrix& m);
ojan 1:2eca9b376580 18 Matrix& operator*=(float c);
ojan 1:2eca9b376580 19 Matrix& operator/=(float c);
ojan 1:2eca9b376580 20
ojan 1:2eca9b376580 21 /********** その他関数 **********/
ojan 1:2eca9b376580 22 /*
ojan 1:2eca9b376580 23 行列の成分を設定
ojan 1:2eca9b376580 24 引数:rowNo 行番号
ojan 1:2eca9b376580 25 colNo 列番号
ojan 1:2eca9b376580 26 val 設定値
ojan 1:2eca9b376580 27 */
ojan 1:2eca9b376580 28 void SetComp(int rowNo, int colNo, float val);
ojan 1:2eca9b376580 29
ojan 1:2eca9b376580 30 /*
ojan 1:2eca9b376580 31 行列の成分を全て設定。全成分を一度に指定する必要がある。
ojan 1:2eca9b376580 32 引数:pComps 設定値の入ったfloat配列。
ojan 1:2eca9b376580 33 */
ojan 1:2eca9b376580 34 void SetComps(float* pComps);
ojan 1:2eca9b376580 35 /*
ojan 1:2eca9b376580 36 行列式を計算する。行列が正方行列で無い場合にはエラー。
ojan 1:2eca9b376580 37 */
ojan 1:2eca9b376580 38 float Determinant() const;
ojan 1:2eca9b376580 39
ojan 1:2eca9b376580 40 /*
ojan 1:2eca9b376580 41 行列をLU分解する
ojan 1:2eca9b376580 42 引数:sign (省略可)置換操作の符号を格納するポインタ
ojan 1:2eca9b376580 43 p (省略可)置換行列を格納する行列のポインタ。(分解する行列と同じ列数の正方行列)
ojan 1:2eca9b376580 44 返り値:LU分解後の行列。下三角要素がL、対角・上三角要素がUに対応する。
ojan 1:2eca9b376580 45 */
ojan 1:2eca9b376580 46 Matrix LU_Decompose(int* sign = 0, Matrix * p = 0) const;
ojan 1:2eca9b376580 47
ojan 1:2eca9b376580 48 /*
ojan 1:2eca9b376580 49 逆行列を生成する
ojan 1:2eca9b376580 50 返り値で逆行列が存在するか否かを判断
ojan 1:2eca9b376580 51 引数:逆行列を格納する行列
ojan 1:2eca9b376580 52 返り値:逆行列が存在するか否か
ojan 1:2eca9b376580 53 */
ojan 1:2eca9b376580 54 bool Inverse(Matrix& invm) const;
ojan 1:2eca9b376580 55
ojan 1:2eca9b376580 56 /*
ojan 1:2eca9b376580 57 転置行列を生成する
ojan 1:2eca9b376580 58 返り値:転置行列
ojan 1:2eca9b376580 59 */
ojan 1:2eca9b376580 60 Matrix Transpose() const;
ojan 1:2eca9b376580 61
ojan 1:2eca9b376580 62 /*
ojan 1:2eca9b376580 63 行列の行の入れ替えを行う
ojan 1:2eca9b376580 64 引数:rowNo1 行番号1
ojan 1:2eca9b376580 65 rowNo2 行番号2
ojan 1:2eca9b376580 66 */
ojan 1:2eca9b376580 67 void SwapRow(int rowNo1, int rowNo2);
ojan 1:2eca9b376580 68
ojan 1:2eca9b376580 69 /********** インライン関数 **********/
ojan 1:2eca9b376580 70 inline int GetRow() const {
ojan 1:2eca9b376580 71 return row;
ojan 1:2eca9b376580 72 }
ojan 1:2eca9b376580 73
ojan 1:2eca9b376580 74 inline int GetCol() const {
ojan 1:2eca9b376580 75 return col;
ojan 1:2eca9b376580 76 }
ojan 1:2eca9b376580 77
ojan 1:2eca9b376580 78 inline const float* GetpComponents() const {
ojan 1:2eca9b376580 79 return (const float*)components;
ojan 1:2eca9b376580 80 }
ojan 1:2eca9b376580 81
ojan 1:2eca9b376580 82 inline float GetComp(int rowNo, int colNo) const {
ojan 1:2eca9b376580 83 if (rowNo > row || colNo > col) AbortWithMsg("Index Out of Bounds Error !!");
ojan 1:2eca9b376580 84 return components[(rowNo-1)*col + (colNo-1)];
ojan 1:2eca9b376580 85 }
ojan 1:2eca9b376580 86
ojan 1:2eca9b376580 87 private:
ojan 1:2eca9b376580 88 int row;
ojan 1:2eca9b376580 89 int col;
ojan 1:2eca9b376580 90 float* components;
ojan 1:2eca9b376580 91
ojan 1:2eca9b376580 92 /*
ojan 1:2eca9b376580 93 行列の成分の中で無視できるほど小さい値を0と置き換える(掃除する)
ojan 1:2eca9b376580 94 */
ojan 1:2eca9b376580 95 void CleanUp();
ojan 1:2eca9b376580 96
ojan 1:2eca9b376580 97 };
ojan 1:2eca9b376580 98
ojan 1:2eca9b376580 99 // グローバル演算子
ojan 1:2eca9b376580 100 Matrix operator+(const Matrix& lhm, const Matrix& rhm);
ojan 1:2eca9b376580 101 Matrix operator-(const Matrix& lhm, const Matrix& rhm);
ojan 1:2eca9b376580 102 Matrix operator*(const Matrix& lhm, const Matrix& rhm);
ojan 1:2eca9b376580 103