【RTK23】円運動でのBN055のYAW角誤差<誤差がドリフト>

ようやく、基礎評価1回目でました。
円回転治具で、ゆっくりと数回転まわして、RTK M0vingBase法のHeading角を基準とした誤差計算しました。MovingBase法の解説記事
誤差が傾斜していて、何か原因がありそうです。レンジで12度ありますが、傾斜がなければ
レンジで4度以内におさまります。
今までスキーで計測してきた結果でも5度前後ずれている場合とぴったり合っている場合が混在してました。

●方法
ロードバイクのホイールにRTKシステムを搭載させて、アンテナを180度対向で設置して
アンテナ軸線上にBNO055を設置しました。
円運動しては、ホイールの精度が±2mm程度に収まっているので、今回の計測精度としては
十分な精度がでているはずです。RTKの角度誤差は1度以内です。

●結果
0度と360度での折り返し点付近は、RTKの周期が遅い分誤差が大きくなってしまうので、
その大きな誤差は、省いて計算してあります。
手でまわしているので最初の1回転目が一番速くてだんだん遅くなっていきます。
誤差もだんだん小さくなってます。これがBNO単独の影響かRTKがらみかは、以後の基礎実験で明らかにしていきます。

●データ処理方法
3年ぶりのEXCEL VBAでプログラムを作りました。
VisualStudioに慣れていると、VBAは、使いにくいです。変数の定義があいまいなのが
かえって、混乱をまねくので、もう、VBAは結構という感じでした。
工夫した点1:120msecのRTK周期と40msecのBNO055なので、RTKの周期を
直線補間して、BNO055の測定タイミング40msecプラス3-9msec遅延も
含めた値を計算して、それをBNO055のデータと差し引いた値を誤差としました。
EXCELマクロファイルです。
BN-mHead同期マクロkawara1_変換 (2)

VBAソース

Private Sub CommandButton1_Click()
Dim R As Long
Dim C As Long
R = ActiveCell.Row
C = ActiveCell.Column
TextBox1.Text = R
TextBox2.Text = C
End SubPrivate Sub CommandButton2_Click()
Dim R As Long
Dim C As Long
R = ActiveCell.Row
C = ActiveCell.Column
TextBox3.Text = R
TextBox4.Text = C
End SubPrivate Sub CommandButton3_Click()
Dim R As Long
Dim C As Long
R = ActiveCell.Row
C = ActiveCell.Column
TextBox5.Text = R
TextBox6.Text = C
hokan
End Sub

Private Sub TextBox7_Change()

End Sub

Private Sub TextBox8_Change()

End Sub

Private Sub UserForm_Click()

End Sub
Private Sub UserForm_Initialize()
UserForm1.Caption = “BNO mHEAD 補間 指定列の左列にitow列”

End Sub
Sub Form_Show()
UserForm1.Show 0 ‘vbModelessにする
End Sub

Sub hokan()
Dim Rm As Long: Rm = TextBox1.Value
Dim Cm As Long: Cm = TextBox2.Value
Dim Rmst As Long
Dim Rmi As Long: Rmi = Rm
Dim Cmi As Long: Cmi = Cm – 1
Dim itowM As Long:
Dim Rb As Long: Rb = TextBox3.Value
Dim Cb As Long: Cb = TextBox4.Value
Dim Rbi As Long: Rbi = Rb
Dim Cbi As Long: Cbi = Cb – 1
Dim Rh As Long: Rh = TextBox5.Value
Dim Ch As Long: Ch = TextBox6.Value
Dim mHeadst, mHeadlast As Single
Dim mItowst, mItowlast As Long
Dim Bnyaw As Single
Dim i, j, k As Integer
Dim mFlag As Integer
While Cells(Rm, Cm).Value <> “”
TextBox8.Value = Rm
Rm = Rm + 1
Wend

While Cells(Rbi, Cbi).Value <> “”
‘BNO itow列
Dim Bndiv As Single: Bndiv = Cells(Rbi, Cbi).Value Mod 120
Dim itowBf As Long: itowBf = Cells(Rbi, Cbi).Value / 10
Dim itowB As Long: itowB = 10 * Application.WorksheetFunction.RoundDown(itowBf, 0)
Dim itowBmod As Long: itowBmod = itowB – itowB Mod 120
Cells(Rbi, Ch).Value = itowBmod
Cells(Rbi, Ch + 1).Value = Cells(Rbi, Cbi).Value
TextBox9.Value = Rbi
Rbi = Rbi + 1
Wend
Rbi = TextBox3.Value
For i = Rbi To TextBox9.Value ‘BNO列のループ
Bndiv = Cells(i, Cbi).Value Mod 120
itowBmod = Cells(i, Ch)
Bnyaw = Cells(i, Cb)
While mFlag = 0 ‘ itowBmodが一致するものがでるまで探す
For j = Rmi To TextBox8.Value ‘mHead列のloop
itowM = Cells(j, Cmi).Value
‘======================================================

If itowM = itowBmod Then ‘itowBmodと一致するitowM探す
Rmst = j
Cells(i, Ch + 2).Value = Cells(Rmst, Cmi)
Cells(i, Ch + 3).Value = Cells(Rmst, Cm)
Cells(i, Ch + 4).Value = Cells(Rmst + 1, Cmi)
Cells(i, Ch + 5).Value = Cells(Rmst + 1, Cm)
mItowst = Cells(Rmst, Cmi)
mItowlast = Cells(Rmst + 1, Cmi)
mHeadst = Cells(Rmst, Cm).Value
mHeadlast = Cells(Rmst + 1, Cm).Value
If mHeadlast < mHeadst And mHeadst – mHeadlast > 180 Then
mHeadlast = mHeadlast + 360
End If

Dim mHdiv As Single: mHdiv = (mHeadlast – mHeadst) / (mItowlast – mItowst)
Dim mHeadh As Single: mHeadh = Bndiv * mHdiv + mHeadst
Cells(i, Ch + 6).Value = mHdiv
Cells(i, Ch + 7).Value = Bndiv
Cells(i, Ch + 8).Value = mHeadh
Cells(i, Ch + 9).Value = Bnyaw – mHeadh
Cells(i, Ch + 10).Value = i
Cells(i, Ch + 11).Value = j
Cells(i, Ch + 12).Value = mFlag
mFlag = 1
Exit For
End If

‘========================================================
Next j ‘mHead列ループエンド
If mFlag = 0 Then ‘itowが合ってないときは、1個戻す
itowBmod = itowBmod – 120

End If

Wend ‘mFlag=1になるまでWhile続ける

mFlag = 0
Next i

TextBox7.Value = Rbi

End Sub

 

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です