図1.M系列センサ処理アルゴリズム
┌─────────┐
│定期割込 │ ←1msに1度呼ばれる
├─────────┘
├┬───────┬┐
││受信処理 ││ ←A/D変換をする
├┴───────┴┘
├┬───────┬┐
││送信処理 ││ ←M系列の計算をする
├┴───────┴┘
├┬───────┬┐
││相関処理 ││ ←積分する
├┴───────┴┘
├┬───────┬┐
││ピーク判定 ││ ←どの距離の確率が高いか決定する
├┴───────┴┘
├─────────┐
│終了 │
└─────────┘
実際にM系列処理をする上でA/D変換の次に問題なのは相関処理です。
ここでは、送信した内容と受信した内容の相関を取りますが、この「相関を取
る」という処理は、実際には
「離散積分」を行わなくてはなりません。つまり、
送信した内容と受信した内容を掛け算し、その値の1周期分(今回は63回)の
総和を取らなければなりません(積和演算)。一般の組込用CPUでは掛け算が
出来ないか出来ても非常に遅いです。それを63回もやっていては、本来のロボ
ットの制御ができなくなりかねません。
しかし、実際に送信した内容と言うのは、実は+1(信号有り),−1(信号
無し)の2値なので、掛け算をしないですみます。また、テーブルを作ってちょ
っとした演算をしてやれば、送信した内容が+1か−1かの判断,条件分岐をし
ないですみます。まぁ、このあたりはプログラミングのちょっとした戦術,小手
先の技ですが。
まぁ、そんなこんなでM系列処理アルゴリズムをH8に搭載し、どの程度のC
PU負荷がかかり、ロボット制御にどの程度の影響が出るかを調べてみたところ、
全CPU処理能力の7%程度の負荷であり、ロボット制御そのものには全く影響
が無く、ロボット制御とM系列センサ処理を同時に行った場合、ロボットのモニ
ター用のシリアル通信(RS-232C,9600bps)に若干の影響(連続転送時、240byte
s に 1bytes 程度取りこぼす)が出る程度である事が分かりました。この程度な
らば、全く問題になりません。(ロボットのシリアル通信を利用している時は、
RS-232C ケーブルがつながっており、たまの連続転送時に、ロボット制御やM系
列センサ処理を止めてもかまわない)
したがって、H8を利用したロボットには(理論的には)搭載可能、と言う結
論を得ました。
つぎに、実際に設計どうりの測定結果が得られるかどうか測定してみました。
その測定結果が添付図面です(1周期毎に測定中断し、結果出力)。横軸が
距離(1が約17cmに相当)、縦軸がその距離に何か物体が有る確率(厳密に
はちょっと違う)です。まず、センサ回路での遅延,およびA/D変換での遅延
の為だと思われますが、のきなみ距離1〜2ぐらいずれています。しかしながら、
その補正をすれば一番のピークの位置がそのまま対照物体までの距離となってい
ます。また、距離8〜11のあたりにもう1つのピークが有りますが、これはちょ
うど測定した部屋の壁までの距離に相当します。測定結果の距離がふらついてい
ますが、センサの設計上の測定限界が2m前後なので問題有りません。
また、連続運転をした時の、相関のピークが出た距離とその時の相関値は図8
です。この時、時々手をかざしたり、距離を変えたりしています。この図から分
かる様に、手をかざしていない時は距離がばたばたふらついていますが、相関値
が小さくなっています。また、手をかざした時は、距離が安定し、相関値が大き
くなっています。(この時、手を近づけたり遠ざけたりしているのですが、時間
と距離を書き留めるのを忘れました)
以上の結果から、相関値のピークでかつ、相関値が500〜600以上の場合に、
測定成功とみなし、それ以下の場合は反応無しとすれば、重大な誤判定が無くロ
ボット制御に使える事が分かりました。ただし、この相関の値は今回使用した組
み合わせ(H8+Fire製回路)のみ有効であり、他の方法で実現した場合には大
きく変わります。
また、以上の測定時はロボットのモーターを回していませんが、ロボットのモ
ーターを回し、測定した時も良好な結果が得られました。(手抜きでデータは取
っていません)ただし、走らせてしまうとモニター出来ない(RS-232C の紐付き
だから……)ので、地面からは浮いています。したがって、もしかしたら実走行
時に問題が出るかもしれません。