ITRONでマイクロマウス
ある先生から要望があり,ITRONでマイクロマウスを動かしてくれ, とのことでやってみることにしました.まったく素人なので,探したらよさそうな本が2冊が見つかり,早速購入して読ん でみました.
図解μITRONによる組込みシステム入門
本の通りに試してみようと思ったら本で紹介されているリアルタイムOS smalightは有償でした.
教育用途ということで問い合わせ,学校価格で購入しました.
もう一冊は,
ITRONとプログラミング入門
紹介されているHOSは無償なので早速ダウンロード,本やWebで調べながら サンプルを動かしたらすんなり動いたので,HOSを使ってマイクロマウスを動か してみることにしました.
あれこれ試したメモ書きはこちら.
目的は,ITRONで動かすことで完走や入賞することではないので,教材用に 必要最小限の機能に絞ることにしました.
特に,プログラムの不慣れな学生に何ページにもわたるソースを見せるとそれだけ で思考停止してしまうので,短いことには意味があります. まず,以前に作ったマウスのソースコード約350行,コメント約100行まで 削りました.
バージョン1完成.
まずは最小限の書き換えでITRONにのせて,なんとなく動き始めました. 現時点のプログラムでも,パラメータを調整すれば最低限は走りそうです.1)左右モータを別々のタスクとして作成
無限ループ中で励磁パターンを進めて回転させ,ディレイ時間を壁との距離など に応じて変化させることで左右の回転速度を独立に制御した.
2)センサは周期ハンドラで起動
前を読み取って25msのディレイ,左右を読み取って終わり,を50ms周期で 起動させた.
3)上記より低い優先度でこれまでのメインプログラムをスイッチ入力タスクとした. 1)2)はそれぞれディレイが入るのでその間に3)を監視しにいきスイッチ入力 があれば各種処理ルーチンに飛んで終わったら帰ってくる.
今のところITRON(HOS)を使わない場合とそう大きく変わらないですが, これまでTimerAのタイマー割込みの中に更にカウンタを仕込んでモータや センサのタイミングを処理していたのと比べると,処理が分離された分は分かりや すいかもしれません.
ITRONの学習を兼ねるため,ほかの機能をもう少し織り交ぜて改変してみます.
タスクに分けだだけのプログラム,micromouse.c
そのヘッダー micromouse.h と system.cfg
の圧縮.uITRON_micromouse_v1.zip
バージョン2改変
ITRONの他の機能を使うため,フラグを使ってタスク間で壁情報の通信をする プログラムを作成しました.本には載ってなかったref_flgを使って壁の 有無を他のタスクから参照することにして,仕様書とソースを見ながらやっと やり取りを確認して,実装.
まず, センサの値をフラグ化した.突き詰めるとセンサの値は, 左右壁との距離を一定に保つためにスピード調整する以外には, 壁の有無とか,基準距離にあるかどうかが分かればいい.
次に, モータのモード(フリー・前進・バック・ブレーキ)をフラグ化した. 指定距離進んだかどうかのフラグを立てることで, モータのカウント数を直接参照することなくタスク間の連携.
という観点からフラグを使って最小限の情報のやり取りでタスク間連携をしました.
フラグの定義
FID_SENSOR 0: 前壁の有無,なし(0)/あり(1) 1: 前壁の距離,遠い(0)/近い(1) 2: 左右前センサ値の大小関係,右が大きい(1)/左が大きい(0) 3: 左右前センサの差の許容値,差が大きい(0)/許容差内(1) 4: 右壁の有無,なし(0)/あり(1) 5: 右壁の距離,遠い(0)/近い(1) 6: 左壁の有無,なし(0)/あり(1) 7: 左壁の距離,遠い(0)/近い(1) 8: センサ値のLED表示,しない(0)/する(1) FID_MOTOR 0,1: 動作モード,フリー(0)/前進(1)/後退(2)/ブレーキ(3) 2: 未使用 3: 速度切り替え,低速(0)/高速(1) 4,5: 動作モード,フリー(0)/前進(1)/後退(2)/ブレーキ(3) 6: 未使用 7: 速度切り替え,低速(0)/高速(1) 8: 直進モード,低速走行で壁との距離調整なし(0)/高速走行で 壁との距離調整あり(1) 9: 走行距離フラグ,90度ターンの歩数進んだらフラグセット 10: 走行距離フラグ,1区画の歩数進んだらフラグセット 11: カウント開始フラグ,カウンタリセット・カウント開始(0)/カウント 中(1)ここまでのソースをアップします(まだバグあるかもしれません)
micromouse.c そのヘッダー,micromouse.h と,
system.cfg の圧縮.
uITRON_micromouse_v2.zip
せっかく作ったのに自分で中身を忘れてしまわないように,というより忘れて しまっても思い出せるようにまとめました.語句の使い方など適当な部分が ありますが,おいおい直すと言うことでご容赦ください.誤りのご指摘は 大歓迎です.
リアルタイムOSでマイクロマウスを動かしてみよう
参考書↓
ITRONとプログラミング入門
図解μITRONによる組込みシステム入門
ESP32 Wifi Bluetooth開発ボード |
Arduino Nano Every |
Raspberry Pi pico |
FPGA XILINX Artix-7 |