壁センサの線形化

この記事はマイクロマウス 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はあこちゃんによる誰でも作れる、シリコンタイヤ !です

ライントレーサーロボットキットTypeRをMATLABにつなぐ


ライントレーサーロボットキットTypeRをMATLABに繋いだ備忘録
このキットにはArduino Nanoの互換品が搭載されているが、MATLABのハードウェアセットアップから自動で認識されない。ボードとポート番号を手動でセットアップすると接続確認とテストファームの書き込みはできるが、その後の目的のファームをSimulinkから書きこむところでエラーになる。
互換品でも例えばArduino Megaの互換品では書き込みもできるため、何かしらオリジナルのArduinoとの差が原因かもしれない。問題の互換品とオリジナルのArduino NanoではUSBシリアルICがFDTIとCH340とで異なる点が問題なのかもしれない
そうはいってもArduino NANOは古い設計であるしMCUのパワーも低いため改めてオリジナルを購入するのは気が引ける。そこで最新のR4世代のボードに乗せ換えた。最新のArduino NANO R4はまだMATLABが対応していないためR4 minimaに入れ替えるとハードウェアセットアップから自動で認識して問題なく書き込むことができた。

次にぶつかった課題は今度はI2C接続のジャイロセンサが反応しないこと、調べるとこちらArduino UNO R4でI2Cモジュールが使えない!?原因と解決事例紹介の症状のようで、ジャイロをレベルシフタ付きのBNO055使用 9軸センサーフュージョンモジュールキットに交換することで対処した

MATLAB始め

この記事は12月11日のアドベンドカレンダーです。

 個人用ライセンスもあるけれどマイクロマウス競技に参加予定のチームはMathWorks社よりMATLAB, Simulinkを含むライセンスを提供してもらえる。これは学生だけでなく社会人も個人も申請可能なので申請してみた。
 申請フォームは「 学生コンテストのソフトウェア」と書いてあって社会人が申し込んでいいのか不安に思うけれど(何度かニューテクノロジー振興財団に相談して)個人のメールアドレスと所属企業名の申請でライセンスを付与してもらうことができた。

 インストールしたもののMATLABは初めてなのでテキストにArduinoとMATLABで制御系設計をはじめよう! 第2版を買って勉強をはじめてみた。今は第3章まで終わってArduinoをMATLABやSimulinkで動かしている。
 来年度はSimulinkで作った制御でロボトレース競技に参加してみたい