自作マイクロマウス研修 (hayashi)

ソフトウェア開発の目標設定 – 自作マイクロマウス研修(hayashi)[11]

自作マイクロマウス研修 (hayashi)

こんにちは、hayashiです。
今回はソフトウェア開発の全体的な部分を大雑把にまとめました。

最終的なソフトウェア構成図

大まかなソフトウェア構成図です。それぞれのコンポーネントと変数の依存関係をまとめました。

大まかには、Pi:CoClassiceのサンプルプログラムのソフトウェア構成を念頭に置いて、設計を行いました。

今回のソフトの構成として使用しているクロックは3種類になります。
STMで準備されているメインクロックとtimer割り込みとして設定した、1ms、250nsのサブクロックになります。

メインクロックではモード選択を基本に、それぞれのモジュールを呼び出して何かしらの動作をします。サブクロックでは、速度や加速度の更新、センサの取得、モータ出力の計算等、周期的に処理することが求められるものが動作しています。

構成図にないものとして、壁制御や細かいリセット処理等がその他存在しています。

ちょっと解説

走行軌道生成周り

ここではメインクロックを上位層とし、サブクロックを下位層として走行軌道生成を行う際に躓いたことを書きます。

上位層では、走行計画用の変数(現在位置、速度)を参照して走行軌道を生成し、加速度として下位層に渡します。新しい走行軌道生成の開始タイミングで下位層で更新される各種変数をリセットします。
下位層では、目標の加速度と現在の車体情報を元に、目標速度を生成し、駆動系の制御入力として使用できます。

上位層で、微小時間(dt=一定)を使う計算を行うと、ループ毎の微小時間が測定できない場合は、速度等の計算が正しくできません。それに対して下位層は割り込みで周期処理がされるため、dtを使用した計算をある程度担保して計算することができます。

開発当初は目標速度の更新を上位層で行っていて、うまく走行軌道を生成できていませんでした。

横壁姿勢制御の符号

システムの構成図にはありませんが、下位層の駆動系寄りの部分で横壁を用いた姿勢の制御をしています。

計算した軌道に対して、実際に走行した軌道が十分に追従できていれば本来必要がない要素になります。
走行すると様々な要因により、計算した軌道から車体がずれていきます。

今回の横壁姿勢制御は走行中に横壁に寄りすぎた際に、迷路の中央に戻るように補正量を計算します。

実装時に左右同じ計算をして、そのままの補正量とすると、車体の旋回方向に対して、符号が一致しないので、挙動がおかしくなります。システムによって、どの方向が正しい入力かしっかり確認してから導入しましょう。

また、走行用PID制御のゲイン等を詰めきれていない段階で、横壁の姿勢制御を入れると何が原因で動いていないのか切り分けが難しくなります。

最終的な構成になるまでの段階的な目標

迷路を完走するのが目標とした時に必要な要素を考え、細かい要素を目標に段階的に開発しました。以下に自分が立てた目標を記載します。

  • 迷路走行
    • 迷路情報が正しいか
    • 最短経路の生成ができるか
    • 円弧軌道のスラロームで走行する
    • クロソイド軌道のスラロームで走行する
    • タイヤ系の調整

まとめ

マイクロマウスのソフトウェア開発の全体的な部分をまとめました。

結果こうなった部分が多い気もするので、今後は前もってこれぐらいは決めておきたい。と改めて感じました。

前回のブログでも書きましたが、大きい迷路で走行するとわかることもあるので使えるタイミングがあれば、試走させてみるのが良いと思います。

タイトルとURLをコピーしました