1
0

More than 1 year has passed since last update.

クラシックマウス 作ってみた その6  プログラム方針

Last updated at Posted at 2023-02-08

はじめに

  • 作成したクラシックマウスの解説。
  • 今回はプログラミングの大まかな流れの話です。具体的なスケッチなどは次回以降です。
  • 機体写真、動画などは「その1」をご参照。

プログラム:大まかな方針

初めてのクラシックマウスで、キットを使わずに製作しているので、高度な動きは狙えない。以下の方針で製作しています。

  • 完走が目標
    • とにかく完走が目標。時間内を目標としたいが、まずは時間がかかっても良いので完走が目標。
    • 最短経路での走行などは考えない。2回も走るような時間もない。
  • できるだけ自分でプログラムする。
    • ライブラリは利用するが、機体の制御、探索などは自分でコードを書く。
    • マイコンもそれほど経験がないので、高度なプログラミングは難しい。割込みは使わない形になっています。
  • 壁にぶつからないように
    • 壁にぶつかるとリカバリーが難しいので、なるべく車体が区画の中心になるようにしたい。

プログラムの流れ

ちゃんとしたフローチャートは書けないのですが、以下のような流れにしています。

  • ある区画に到着する
  • 前方に壁があれば、前後位置を調節する。
  • 左、前、右の壁までの距離を測定する。
  • 現区画の壁の有無を判定する。さらにもう一つ先の壁も判定する。
  • 壁情報をもとに足立法を用いて、ゴールまでのステップ数を更新する。
  • 進むべき方向を決定する。優先順位は直進→左折→右折→Uターンの順。
  • 左右にターンする場合は、ターン後に前後位置を調整する。
  • 車体の向きを(Gyroセンサーで)調整する。
  • 次の区画に移動する。
    • 左右の壁までの距離を測る。
    • 左右に壁があり、壁に近いOR壁から遠い場合は、次の区画の中央に向かうように車体の向きを調整する。
    • 左右に壁がない場合は、そのまま。
    • 加速→減速しなから18cm前進する。
    • 移動後に車体の向きを調整する。

センサー情報

  • VL53L0Xは連続計測モードとしていますので、30ms毎に勝手に距離を測定してくれます。距離を計測したい場合はセンサーから計測結果を入手して利用しています。シングル計測を用いる場合に比べて、静止時間が短くなっているように思います。
  • 30msの時間が気になりましたが、本機の移動速度はそれほど早くないので、大きな影響はないようです。
  • MPU6050も、DMPが連続的に計測を行ってくれるようで、必要な時に情報を取れば、その時点での機体の向きが入手できます。
  • Arduinoのコアは一つですが、各センサーがマイコンを持っているので、ある種の並行処理ができている感じでしょうか。どちらのセンサーも安価なのに、小型で相応の性能があって感心します。

割込みについて

  • 本プログラムでは、作者の不慣れもあって、割込み処理は用いていません。距離センサーが30ms毎に距離を測定しているので、タイマー割込みで車体の制御を行えるような気もするのですが。
  • また、DMPも割込み用のピンがあるので、こちらを用いても車体の制御ができるような気がします。
  • 次の製作では、ここらへんにも挑戦したいと思っています。

以上

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0