こんにちは、hayashiです。
今回はソフトウェア開発の全体的な部分を大雑把にまとめました。
最終的なソフトウェア構成図
大まかなソフトウェア構成図です。それぞれのコンポーネントと変数の依存関係をまとめました。
大まかには、Pi:CoClassiceのサンプルプログラムのソフトウェア構成を念頭に置いて、設計を行いました。
今回のソフトの構成として使用しているクロックは3種類になります。
STMで準備されているメインクロックとtimer割り込みとして設定した、1ms、250nsのサブクロックになります。
メインクロックではモード選択を基本に、それぞれのモジュールを呼び出して何かしらの動作をします。サブクロックでは、速度や加速度の更新、センサの取得、モータ出力の計算等、周期的に処理することが求められるものが動作しています。
構成図にないものとして、壁制御や細かいリセット処理等がその他存在しています。
ちょっと解説
走行軌道生成周り
ここではメインクロックを上位層とし、サブクロックを下位層として走行軌道生成を行う際に躓いたことを書きます。
上位層では、走行計画用の変数(現在位置、速度)を参照して走行軌道を生成し、加速度として下位層に渡します。新しい走行軌道生成の開始タイミングで下位層で更新される各種変数をリセットします。
下位層では、目標の加速度と現在の車体情報を元に、目標速度を生成し、駆動系の制御入力として使用できます。
上位層で、微小時間(dt=一定)を使う計算を行うと、ループ毎の微小時間が測定できない場合は、速度等の計算が正しくできません。それに対して下位層は割り込みで周期処理がされるため、dtを使用した計算をある程度担保して計算することができます。
開発当初は目標速度の更新を上位層で行っていて、うまく走行軌道を生成できていませんでした。
横壁姿勢制御の符号
システムの構成図にはありませんが、下位層の駆動系寄りの部分で横壁を用いた姿勢の制御をしています。
計算した軌道に対して、実際に走行した軌道が十分に追従できていれば本来必要がない要素になります。
走行すると様々な要因により、計算した軌道から車体がずれていきます。
今回の横壁姿勢制御は走行中に横壁に寄りすぎた際に、迷路の中央に戻るように補正量を計算します。
実装時に左右同じ計算をして、そのままの補正量とすると、車体の旋回方向に対して、符号が一致しないので、挙動がおかしくなります。システムによって、どの方向が正しい入力かしっかり確認してから導入しましょう。
また、走行用PID制御のゲイン等を詰めきれていない段階で、横壁の姿勢制御を入れると何が原因で動いていないのか切り分けが難しくなります。
最終的な構成になるまでの段階的な目標
迷路を完走するのが目標とした時に必要な要素を考え、細かい要素を目標に段階的に開発しました。以下に自分が立てた目標を記載します。
- 速度、加速度の制御系を実装する
- モータを回す
PWMのdutyを調整して、色んな速度が出ることを確認 - エンコーダを読む
車輪の速度を得る
STM32 +HALでエンコーダモードを使用してみる | Sora's Activity RecordSTM32マイコンのペリフェラル関連記事を一覧にまとめました。 STM32のタイマーにはエンコーダモードがあります。使用例として挙げると、距離速度を計測するために使用されているモー... - PID制御をする
目標の速度に追従できるか
割り込みの実装
マイクロマウス研修(のり)[41]STM32F446 STEP8 定期割り込み処理記事一覧 のり マイクロマウス研修 回路の動作確認ができたので、ここからマイクロマウスプログラムの準備に入ります。次は定期割り込み処理を行います。LEDでチカチカするようにしてみます。 参考URLです。 タイマー 割り込みに使うタイマーをど... - 姿勢の修正
角速度系の処理にIMUのデータを使用する
宴会芸の実装
- モータを回す
- 指定区間(距離)走れる
- 壁で止まって曲がる
- 壁センサの値を取得する
4chのセンサをADCで取る
走行系と並列して動作できるか確認
ショウのマイクロマウス制作-Part28こんにちはショウです。前回に引き続き、動作確認をしていきます。 今回はAD変換の確認をしていきます。 Part9、10をベースにプログラムを作成していきます。 UART設定 AD変換の前にprintfを使って変換値を表示するためにUARTを... - 壁の情報を作る
壁のあるなし判定と迷路走行で使用できるように整える - 壁で止まる
左手法の導入 - 壁制御
(ログ用のグラフプロットの対応)
- 壁センサの値を取得する
- 迷路走行
- 迷路情報が正しいか
- 最短経路の生成ができるか
- 円弧軌道のスラロームで走行する
- クロソイド軌道のスラロームで走行する
- タイヤ系の調整
まとめ
マイクロマウスのソフトウェア開発の全体的な部分をまとめました。
結果こうなった部分が多い気もするので、今後は前もってこれぐらいは決めておきたい。と改めて感じました。
前回のブログでも書きましたが、大きい迷路で走行するとわかることもあるので使えるタイミングがあれば、試走させてみるのが良いと思います。