前の記事はこちら いまさらながらRCXを動かしてみるプロジェクト!? その14
さて、一通りライントレース関係をこなしたところで・・・
今度は、救助ゾーンのプログラムでもしてみましょうかねぇ。
と、始めたものの、このレスキュー日本リーグの救助ゾーンは意外と難解であることがわかりました。
M&Yが現役だった頃は、プレマッピングが禁止されていなかったので、最後の部屋(レッドゾーンと言われていました)の入口や部屋の大きさ、形などを考えてプログラミングをしていました。
しかし、今のレスキューはプレマッピング禁止なので、汎用的な作戦を考えるのが難しいです。
とりあえず、入口の銀色を検知したら、右側の壁を探知して、壁を見つけたらロボットの前方を壁に押し付けてから、50cm程バックします。そのバックの最中に銀色を検知したら被災者発見になります。再び前進して、壁にまで来たら、20cm程バック、45度左に向く、壁まで前進、ロボットを壁に押し付けてから50cm程バック・・・を繰り返します。こうやって、壁を一周して救助ゾーンのすべての被災者を発見する作戦です。
で・・・作戦は良いのですが・・・部屋の壁を一周するのに6分を超えました。これでは、ライントレース部分を入れると、競技時間オーバーとなってしまいそうです。
ということで、作戦を見直さないとダメなようです。
真面目に、「被災者発見+脱出」を考えるとすると、ランダム走行+タイマーで残りxx秒になったら、LINK方式で壁をつたって脱出・・・しか無いのでしょうかねぇ!?
(プレマッピングしないで、レスキュー日本リーグの救助ゾーンのプログラムを考えるのは、結構大変であると認識! 笑)
まあ、とりあえず、デモ的に動かせるまでになったので、本日はここまでにしました。
NQCをやっていて、さすがにこれは使いにくい・・・と思ったのは、サブルーチンに引数が渡せないことと、サブルーチンからサブルーチンを呼べないことです。
引数が渡せないのは、大域変数(グルーバル変数)などを使ってなんとかできるのですが・・・サブルーチンからサブルーチンを呼べないのは困りました。メインルーチンからサブルーチンを呼ぶことしかできないので、ほとんどの処理をメインルーチンに詰め込むしかなさそうです。
まあ、RCXは十ウン年前のハードだから・・・仕方が無いのですかねぇ。
続きの記事はこちら いまさらながらRCXを動かしてみるプロジェクト!? その16