沼津高専 電子制御工学科
標準プログラムでの走行制御中の衝突対応について
MIRSMG3D-MG3S-0023
改訂記録
版数 作成日 作成者 承認 改訂内容
A01 2015/07/23 牛丸 初版

目次

1. はじめに

このドキュメントは標準プログラムで走行制御中に壁などに衝突した場合のプログラミングについて述べたものである。

2. 衝突対応の方法

衝突時の対応のさせ方には次の2つがある。
  1. 操縦者モジュール(pilot, mirsak_patrol)が衝突を検知(タッチセンサを監視)し、検知したら走行制御スレッドを停止する。 そのあとに直進(後退)、回転(衝突しない方向へ)を行う。run_ctrl は変更しない。
  2. 走行制御モジュールに衝突対応動作を入れる。走行制御モジュール(run_ctrl) と距離計(distance)の変更を必要とする。
いずれの場合も、衝突があった際は、距離と方向が正しくなくなっている可能性が高いので、 一連の処理を終えたあと、正対補正動作を行ってそれらを補正した加えた方がよい。

3. 走行制御、距離計モジュールの変更点

上記の 2 で対応する場合の run_ctrl および distance モジュールの変更点を以下に示す。

run_ctrlの変更点

(以下は直進走行中に衝突を検知した場合を前提にしたものである。)
  1. スレッド処理の while ループ内で、タッチセンサ検知を行う。
  2. 衝突対応を定義した関数を呼び出す。

衝突対応関数の処理

  1. そのときの走行距離(x1)を記憶する。
  2. 距離計をゼロにリセットする。
  3. 指定距離(x2)下がる。
  4. 衝突を回避する方向に指定角度回転する。
  5. 距離計を x1 - x2 にセットする。

距離計の変更点

行開始時の距離値をセットできるように、距離計(distance)モジュールを変更する。
void distance_set(int 距離) を用意して、distance の値にこの距離を他すようにする。

関連文書