【android12-linux-5.1】【STチップ】ドライバー、HAL移植後のデータ方向が異常

ST のセンサー ドライバーと HAL が成功すると、データを取得できますが、デバイスは横向きになっており、システムはデフォルトで縦向きになります。端末を横に持つと縦方向に表示され、縦に持つと横方向に画面が自動的に回転して表示される場合があります。

これは、PCB 上で設計されたセンサー パッチの方向と水平画面の間の不一致が原因で発生するため、HAL レイヤー上のマトリックスを回転するだけで済みます。地球の重力加速度が9.8gであることを利用し、携帯電話と端末を横置き、縦置き、横置きの状態で同期比較することで、必要な回転行列を計算できます。

ファイル パスを/hardware/STMicroelectronics/SensorHAL_IIO/configuration.h に変更します。

変更前のデフォルトのデータは次のとおりです。

#define CONFIG_ST_HAL_ACCEL_ROT_MATRIX 1,0,0,0,1,0,0,0,1
#define CONFIG_ST_HAL_MAGN_ROT_MATRIX 1,0,0,0,1,0,0,0,1
#define CONFIG_ST_HAL_GYRO_ROT_MATRIX 1,0,0,0,1,0,0,0,1

変更されたデータは次のとおりです。

#define CONFIG_ST_HAL_ACCEL_ROT_MATRIX 0,1,0,-1,0,0,0,0,1
#define CONFIG_ST_HAL_MAGN_ROT_MATRIX 0,1,0,-1,0,0,0,0,1
#define CONFIG_ST_HAL_GYRO_ROT_MATRIX 0,1,0,-1,0,0,0,0,1

 

 

名前の定義から簡単に理解すると、加速度回転行列、磁気回転行列、ジャイロ回転行列です。この段落は、基本的な数学があれば簡単に理解できます。[x,y,z] は元のサンプリング データ、[X,Y,Z] は最終的にアプリに送信されるデータ、回転行列データは [a1,a2,a3,a4,a5,a6,a7, a8,a9 ] 次に、次のとおりです。

\begin{bmatrix} X \\ Y \\ Z \end{bmatrix} = \begin{bmatrix} x \\ y \\ z \end{bmatrix}\begin{bmatrix} a1 &a2 &a3 \\ a4 &a5 &a6 \\ a7&a8 &a9 \end{bmatrix}=\begin{bmatrix} x*a1+y*a2+z*a3 \\ x*a4+y*a5+z*a6 \\ x*a7+y*a8+z*a9 \end{bmatrix}

—>

\left\{\begin{行列} X = x*a1+y*a2+z*a3 \\ Y=x*a4+y*a5+z*a6 \\ Z=x*a7+y*a8+z *a9 \end{行列}\右。

元のデータを取り込むと: [a1,a2,a3,a4,a5,a6,a7,a8,a9] = [1,0,0,0,1,0,0,0,1] となります。

\left\{\begin{行列} X=x \\ Y=y \\ Z=z \end{行列}\right。

つまり、データが送信されます。

変更されたデータ [a1,a2,a3,a4,a5,a6,a7,a8,a9] = [0,1,0,-1,0,0,0,0,1] を取り込むと、次のようになります。

\left\{\begin{行列} X=y \\ Y=-x \\ Z=z \end{行列}\right。

これにより、座標系が 90 度回転し、デフォルトの垂直画面がデフォルトの水平画面に変更されます。理解できない場合は、紙にXY座標系を描いて回転させ、練習して本当の知識を身につけてください。

この段落は readme で紹介されています。ここに自分のメモを書いてください。批判しないでください。

業界初心者の方、経験を共有してください。間違いがあればご指摘ください~

 著作権はShenzhen Qizhi Technology Co., Ltd.-Huahuaに属します。

おすすめ

転載: blog.csdn.net/lsh670660992/article/details/132503031