TOPシステム開発> 第3回:ハードウェアとソフトウェアの協調設計 (2/3)




LEGOから学ぶ組み込みシステム開発のキホン

LEGOから学ぶ組み込みシステム開発のキホン

第3回:ハードウェアとソフトウェアの協調設計

著者:日本ビクター株式会社 山岸 亨

公開日:2008/04/02(水)

正確に曲がるためプログラム

前ページに書いたようなさまざまな問題の中で、回転の精度を上げる方法をFLL2006のスペースエレベータのミッションを例にして紹介しよう。

始めにスペースエレベータのミッションの走行図を図2(1)に示す。まずスタート位置からスタートする。目的物であるエレベータに対して、ロボットが正面から相対してクリアするように設計されており、その結果回転位置Aで正確に曲がることが重要になる。回転位置からさらに約10cm進んで、目的物と相対する。ここで相対したときの左右の許容誤差は約±1cmである。車幅6cmを使っての回転であるから、回転時点での許容誤差は距離で言うと以下のようになる。

±1cm×(6cm/10cm)=±0.6cm

回転半径6cmであるから角度で言うと以下のようになる。

360°÷(6cm×2×3.14÷(±0.6cm))=5.7°

実際に回転する角度は左に約60°なので、誤差は1割程度しか許されない。

図2(2)にこの位置Aで曲がるためのプログラムを示す。このプログラムは実際に中三のメンバーの作ったものである。

図2:エレベータミッションの走行図と補正を含んだ曲がるプログラム

(画像をクリックすると別ウィンドウに拡大図を表示します)

行き過ぎた部分を補正を行う

図2(2)の動作は大きく3つにわかれる。まず(a)〜(f)は最初に大きく回転を行う動作である。この回転は前ページに書いたように片方のモータ(ここでは右側のモーター(a))を大きく、逆側のモーター(ここでは左側のモーターC)を逆方向に弱く回して軸として機能するようにし、車幅分を回転半径として利用する方法である。それに対し、補正をするのが(g)〜(l)と(m)〜(r)の部分であり、まず(g)〜(l)において回転させる方のモーターに対する補正、(m)〜(r)が軸となる方のモーターの補正を行っているものである。

まず(a)ではモーターAについている回転センサ1とモーターCについている回転センサ3の初期化を行っている。次に(b)では赤いコンテナと呼ばれる変数を0に設定している。

そして(c)においてモーターAを正方向にレベル5で駆動し、モーターCを逆方向にレベル1.5で駆動し、回転を始める。回転は(d)で表現されるループの条件が満たされるまで続けられ、ここでは回転センサ1と3の双方の合計が12になるまで続けられる。理想的にはモーターA側の回転センサが12進み、モーターC側の回転センサ3は動かないことが目標である。

一旦ループの条件が満たされたなら、(e)でモーターを止め、(f)で300ms待って完全にモーターが停止するまで待つ。実際には(e)と(f)の間でも余分に進んでしまう。しかもこの量が電池電圧によって変化する。

(g)からはモーターA側の補正プログラムであり、本来の動くべき回転センサの量12を赤いコンテナの変数入れる。次に(h)においてこの理想の量である12と実際に動いた回転センサ1の量を減算して差を求める。(i)においてこれが正か負かを判定し、正ならばまだ回転が足りなかったということで(j)を実行し、負ならば行き過ぎたということで(k)へ行き、その差分だけ補正する。そして(l)ではその補正のモーターの止まるのを300ms待つ。

(m)からはモーターC側の補正プログラムである。C側を軸として回転するから、理想的には回転センサの動く量は0であるべきとなる。従ってこの理想の量0を青いコンテナの変数に代入する。次に(n)においてこの理想の量である0と実際に動いた回転センサ3の量を減算して差を求める。

そしてモーターAと同様に(o)において正か負かを判定し、それぞれに応じて逆方向に補正すべく(p)あるいは(q)にて逆方向にモーターを動かす。最後に(r)でモーターの止まるのを300ms待つ。

このようにして、動かす側、軸とする側双方の補正をすることにより、目的とする精度で曲がることができるようになった。なお、このプログラムは汎用的に使えるが、細かいパラメータはロボットの重さや重心によって当然細かなチューニングが必要になってくる。 次のページ


前のページ  1   2  3  次のページ


日本ビクター株式会社 山岸 亨
著者プロフィール
日本ビクター株式会社 山岸 亨
1983年東京大学工学部卒。同年日本ビクター(株)入社。以来光ディスク、テレビのICやソフトウェア開発など組込み系開発に携わる。現在技術本部ディビジョン技術開発センターにて国内液晶テレビのソフトウェアの開発に従事。FLLにはチーム「Edisons」のメンターとして参加。2005年度、2006年度と世界大会進出し、特に2006年度欧州世界大会では総合2位を獲得。


この記事の評価をお聞かせください
ボタンをクリックしますとウインドウが開きます。

INDEX
第3回:ハードウェアとソフトウェアの協調設計
  正確に回転するには
正確に曲がるためプログラム
  発想の転換:メカとの協調で正確に曲がる
LEGOから学ぶ組み込みシステム開発のキホン
第1回 これがLEGOのロボット競技会FLLだ!
第2回 環境をセンスし、その内容に基づいて制御
第3回 ハードウェアとソフトウェアの協調設計
第4回 リソース制約対応とプログラム開発管理
関連記事
最強ロボットを作れ!−FLL挑戦記
小さな日本代表が世界へ!−FLL実況レポート