壁センサの線形化

この記事はマイクロマウス Advent Calendar 2025の2日目の記事です。1日目の記事は社畜博士によるロボトレース競技に使えるギヤ付きホイールの作り方の紹介でした。

マイクロマウス大会のスポンサーであるMathWorks社からMATLABのライセンスを提供してもらえているので、せっかくなのでMATLABを使って壁センサの線形化をやってみた。
ちなみに去年までは壁センサからの値の常用対数そのまま利用していて制御的には困っていなかったけれど、物理量(距離)への変換をしていないため、壁との距離を直観的に把握することができなかったことが少し不便だった。

ということでmatlabを使ってセンサの線形化をした手順の紹介
①治具を使って壁とロボットの距離を可変できるようにする

②壁との距離を変えながらセンサの値を取得する。今回はロボットの前後方向の中心が柱の位置にある場所を45mmとして、ロボットが区間の中心にある場所を90mmとした。L列に左前センサの値、R列に右前センサの値を記録する

③測定結果をテキストファイルに保存する

④matlabを立ち上げてデータのインポートボタンを押して、③で作ったテキストファイルを選択する

⑤インポートツールが立ち上がるので選択のインポートを押したのち、画面を閉じる

これで変数maekabeがmatlabにインポートされる

⑥matlabメイン画面のアプリのタブに移動して、アプリの一覧から曲線フィッターを選択して、曲線フィッターを立ち上げる
⑦データの選択を押して、X軸に変数maekabeのセンサの値の列を、Y軸に変数maekabeの壁との距離の列を選択する

⑧近似曲線から対数を選ぶとフィッティングされるので、右下の近似パラメーターの値a,bをメモする。

⑨マウスのソフトに組み込む
今回の実装では、自然対数の計算は遅いのでテーブルln_table[]を作成してそれを参照するようにし、
また、距離分解能が1mm刻みだと少し荒く感じたので、45mm=450になるように近似パラメーターa,bをそれぞれ10倍して反映させている

以上の手順によって、matlabを使うことで手早くセンサの線形化ができた

明日のAdvent Calendarはあこちゃんの誕生日です