"Interface" Jan.2010
「外部センサのデータにより、モータの回転を自律制御するアルゴリズムを考えよう!(間瀬順一、吉村悠)」より。
さっと作ると、かなり落とし穴のある制御のモデルになってしまった。
上手いこと制御のアルゴリズムを考えて私に教えてください。
/* ライントレーサーの制御 ライントレーサーは、光センサーから入ってくる情報を元に、黒のラインの上を走る。 ライントレーサーは3つの光センサーと2つの車輪用モータを持つ 3つの光センサーは、左、中央、右の順に並ぶ。 2つの車輪用モーターは、それぞれ、左の車輪と右の車輪を回す。 */ abstract sig LightState {} one sig White, Black extends LightState {} abstract sig MotorState {} one sig High,Low extends MotorState {} sig LineTracer { leftLS,centerLS,rightLS:one LightState, leftM,rightM: MotorState } pred handle[lt,lt':LineTracer] { lt.centerLS = Black => lt'.leftM = High and lt'.rightM = High else lt.leftLS = Black => lt'.leftM = Low and lt'.rightM = High else lt.rightLS = Black => lt'.leftM = High and lt'.rightM = Low } run { some disj lt,lt':LineTracer | lt.leftLS = Black and lt.centerLS = White and handle[lt,lt'] } for 4 but exactly 2 LineTracer