*

C言語でEV3開発(20)-超音波センサと安全状態

公開日: : マインドストーム/EV3, 開発

どもです。
前回は、BluetoothでPCとEv3を接続してコマンドの送受信について書きました。
今回は、超音波センサから前方障害物との距離を取得し、それを元に安全状態を判断する、という内容について書きます。

1.超音波センサ
超音波センサを設定、値を取得する際には、EV3RTのAPIを使用します。詳細は、コチラに記載されているので、省略します。必要に応じて、参照してください。

超音波センサのHWのスペックは、コチラからダウンロードできるので、それを参照してください。
また、超音波センサの特性については、コチラに実測情報が記載されていますので、併せて参考にして下さい。

2.値の処理
上に書いた情報から、超音波センサから取得する値には、ノイズが乗ることが予想されます。というか、絶対乗ります。そのため、このノイズを除去する方法を考えます。
ノイズ除去の方法はいくつかありますが、今回は実装が比較的?一番?簡単と考える「移動平均フィルター」を使用します。
…移動平均フィルターについては、これまた詳細の解説は省略します。必要に応じて、調べてください。
で、今回した移動平均フィルターは、以下の通りです。

上記コードの各変数の説明をしますと、
 ・distance_average_buf:移動平均フィルター用のバッファ。サイズは「3」。
 ・distance_sensor_value:超音波センサから読み出した、障害物との距離。
です。
また、以下にコードの内容を記載します。
 ・最初のforループ→バッファ内のデータを、1つ前に異動する。
 ・最初のforループの次→最新の超音波センサのデータをバッファに格納する。
 ・2つ目のforループ以降→バッファのデータの総和を求め、その後平均値を算出。
これで、移動平均フィルターは完了です。

3.安全状態
上で計算した障害物との距離を元に、安全状態を判定します。
状態としては、
 ・安全
 ・注意
 ・危険
 ・停止
の4つを設定します。
このとき、状態が変化する際には、「不感帯」を設けます。たとえば、「安全」から「注意」へ状態が変化する際の境界値と、「注意」から「安全」へ状態が変化する際の境界値を、異なる値に設定します。
このようにすることで、安全状態がめまぐるしく変化するような現象の発生を回避します。
距離センサーから取得した値と不感帯、および対応する安全状態の変化の関係を図にすると、以下のようになります。

距離と安全状態

この状態変化に対応した実装を、以下に示します。

このようにして、距離から安全状態を判定します。

今回のエントリーでは、超音波センサから取得した障害物との距離を元に、安全状態を判定する内容を記載しました。
これは、Ev3で組み立てていく車の安全制御に関わる部分になります。

ではっ!

関連記事

eclipse_4.3_kepler

elicpse/CDTでのgdbでのソースを追従したデバッグができない問題

どもです。 今回のエントリーは、Eclipse上でgdbを利用したデバッグ中に発生する問題について

記事を読む

python

Ev3開発サポートツール(4)-Pythonによるグラフ表示

どもです。 前回のエントリーで、VisualStudioCommunityでのPythonの開発環

記事を読む

no image

C言語でEV3開発(15)-TOPPERS/HRP2 EV3 で PID制御

どもです。 今回のエントリーは、コレまでのエントリーから内容を変えて、モーターの動作の制御をします

記事を読む

raspberry-pi

RaspberryPi3対応のタッチスクリーンを買いました

どもです。 ついに、念願のRaspberryPi3対応のタッチスクリーンを買いました。 今回のエ

記事を読む

RasPi_Qt

QtでRaspberryPi/GUI開発(5):pigpioを使ってみた

どもです。 RaspberryPiを購入して、LEDも手に入れたのでコレをチカらせてみようと思いま

記事を読む

no image

C言語でEV3開発(17)-コマンドによるTOPPERS/HRP2 EV3RT アプリケーションの制御(コントロール)

どもです。 今回は、TOPPERS/HRP2 EV3RT で作成したアプリをPC上から操作するため

記事を読む

no image

C言語でEV3開発(12)-opOUTPUT_TIME_POWERコマンド

どもです。 今回のエントリーでは、これまた前回に引き続き、モーターを動かすためのコマンドについて書

記事を読む

no image

C言語でEV3開発(11)-opOUTPUT_STEP_POWERコマンド

どもです。 今回のエントリーでは、再びモーターを動かすためのコマンドについて書きます。 コマンド

記事を読む

eclipse-juno-logo

C言語でEV3開発(2)

どもです。 今回のエントリーの内容は、前回に引き続き「EV3の開発環境の構築」の追記です。

記事を読む

toppers

C言語でEV3開発(18)-モードの遷移の設計-コマンド通信処理の準備

 どもです。  今回は、前回紹介したEv3とBluetoothで通信する機能を

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

no image
QtでRaspberryPi/GUI開発(8):pigpioを使用したチャタリング対策の問題の対策

どもです。 だいぶ、間が空いてしまいました。 久しぶりの更新です。

raspberry-pi
QtでRaspberryPi/GUI開発(7):pigpioを使用したチャタリング対策の問題

どもです。 前回のエントリーで、pigpioを使用したチャタリング対

RasPi_Qt
QtでRaspberryPi/GUI開発(6):pigpioを使用したチャタリング対策

どもです。 前回のエントリーで、pigpioを使用したボタンを使用し

RasPi_Qt
QtでRaspberryPi/GUI開発(5):pigpioを使ってみた

どもです。 RaspberryPiを購入して、LEDも手に入れたので

RasPi_Qt
QtでRaspberryPi/GUI開発(4):イベントハンドラの設定

どもです。 前回のエントリーで、「タッチスクリーンを買った」と書きま

→もっと見る

PAGE TOP ↑