家庭用ロボットバージョン0.3.1のテスト



赤外線、超音波距離計、エンコーダーからのデータに基づいて、ホームロボットの自動移動モードをテストします。



この記事は、以前のホームロボットver 0.3のレビューの続きです。

このアイデアは、人間の介入なしに、ロボットが家の周りを独立して移動できるようにすることです。 選択したシャーシプラットフォームについては、以前の記事で説明しています。 実装とテストのプロセスで、多かれ少なかれ受け入れられる障害物検出システムが見つかりました。これについては、以下で説明します。



それは、いわばロケーターに基づいています-マイクロサーボで回転する距離計です。





赤外線距離計SHARP GP2Y0A41SKOF、4xから30センチメートルの距離で測定することが述べられています。 実際には、さらに測定できますが、より大きな誤差があります。 障害物が最大4センチメートルの場合、障害物が遠くにあるかのように、データに歪みが生じます。 ビームセクターは小さいです。





次のグラフから、信号の距離依存性を大まかに理解できます。





SHARP GP2Y0A41SKOF距離計のテストコード。



#define pin A1 void setup () { Serial.begin (9600); pinMode(pin, INPUT); } void loop () { uint16_t value = analogRead (pin); double distance = get_ GP2Y0A41SKOF (value); //        Serial.println (value); Serial.print (distance); Serial.println (" cm"); Serial.println (); delay (500); } //return distance (cm) double get_ GP2Y0A41SKOF (uint16_t value) { if (value < 16) value = 16; return 2076.0 / (value - 11.0); }
      
      







超音波距離計HC-SR04は、2〜450センチの距離で測定すると述べられています。 測定セクターは大きく、側面にもよりますが、30〜60度の範囲です。 距離の計算は線形であり、反射音の時間は音速で除算されます。





HC-SR04距離計のサンプルコード。

 digitalWrite(Trig, HIGH); //      delayMicroseconds(10); //  10  digitalWrite(Trig, LOW); //   time_us=pulseIn(Echo, HIGH); //    distance_sm=time_us/58; //    Serial.println(distance_sm); //   
      
      







また、pulseIn関数では、最大信号待機時間を設定できます。そうしないと、反射音波がない場合、長時間待機することができ、プログラムの実行がブロックされます。実験的に次の値を設定します。

 time_us=pulseIn(Echo, HIGH,50000);
      
      







また、障害物の表面と反射の角度によっては、距離計が大きく横たわることもあると言わなければなりません。 一方向に異なるタイプの2つの距離計を使用すると、測定精度が向上します。 現時点では、私は主に赤外線距離計からのデータに導かれていますが、それが失敗すると、超音波からデータを取得します。



Servaは、30度単位でレンジファインダーを30〜150度回転させます。数値は、速度測定と単純化のために経験的に取得されます。 測定値は配列に保存され、要求に応じて、いつでもロボットの前の長方形領域にある障害物をチェックできます。



ロボットは何らかの理由で障害物を検出しなかったことが多いため、ホイールシャフトに取り付けられたエンコーダーのデータに従って、ロボットがクラッシュし、移動を継続できないと判断することにしました。



こちらがエンコーダーです。









それらの動作のメカニズムは単純です;ディスクの穴のクリアランスのために光学センサーがそこにインストールされます。 arduino割り込みに対するセンサーの変更をハングアップしました。以下にサンプルコードを示します。

 void LwheelSpeed() { coderLeft++; //count the left wheel encoder interrupts } void setup() { attachInterrupt(LEFT, LwheelSpeed, CHANGE); }
      
      







約200ミリ秒に1回、ホイール速度が計算されます。 したがって、移動中に車輪の速度が大幅に低下した場合、ロボットが障害物に衝突したと考えられます。 その後、彼は引き戻して振り向きます。



このようなunningなセンサーシステムは、障害物の検出をほぼ100%保証します。 ビデオでは、ロボットがこれらすべての状況をどのように満たすかを見ることができます。



今、私はマイクロスイッチを待って3Dプリンターを完成させています。ロボットをバンパーにします。 それから私はそれがほとんどすべての可能な状況を解決すると思います。



さまざまな角度から見たロボットの写真。





















多かれ少なかれ健全な状態にロボットを仕上げるとき、私はこのロボットのオープンソースプロジェクトを開きます。誰かが今PMで書く必要があるなら、構築スキームとソースコードをレイアウトします。



詳細、ニュース、写真、ビデオについては、このプロジェクトのVKontakteグループを参照してください-vk.com/club23358759



次の記事を書くトピックに関するコメントを書き、ビデオを撮影します。



All Articles