web-dev-qa-db-ja.com

ロボットが家の中で自分自身を見つける方法を探しています

掃除機ロボットをハッキングして、マイクロコントローラー(Arduino)で制御しています。部屋を掃除するときより効率的にしたい。とりあえず、直進して何かにぶつかったときに曲がります。

しかし、私は最適なアルゴリズムまたはメソッドを見つけるのに苦労しています(-===-)部屋での位置を知る。安く(100ドル未満)、複雑ではない(コンピュータービジョンの博士論文を必要としない)アイデアを探しています。必要に応じて、部屋に個別のマーカーを追加できます。

現在、私のロボットには次の機能があります。

  • 1台のウェブカメラ
  • 3つの近接センサー(約1メートルの範囲)
  • コンパス(現在は使用されていません)
  • Wi-Fi
  • バッテリーがいっぱいか、ほとんど空の場合、その速度は変化する
  • ネットブック Eee PC がロボットに埋め込まれています

これを行うためのアイデアはありますか?これらの種類の問題に対する標準的な方法はありますか?

注:この質問が別のウェブサイトに属している場合は、移動してください。StackOverflowよりも良い場所を見つけることができませんでした。

47
Matthieu Napoli

環境におけるロボットの位置を把握する問題は、ローカリゼーションと呼ばれます。コンピュータサイエンスの研究者はこの問題を長年解決しようとしてきましたが、成功は限られていました。 1つの問題は、自分がどこにいるかを把握するために適度に優れた感覚入力が必要であり、Webカメラからの感覚入力(つまりコンピュータービジョン)が解決された問題とはほど遠いことです。

それがあなたを怖がらせなかった場合:私が理解するのが最も簡単であると思うローカリゼーションへのアプローチの1つは粒子フィルタリングです。アイデアは次のようになります。

  1. 一連のパーティクルを追跡します。各パーティクルは、環境内の1つの可能な場所を表します。
  2. 各パーティクルには、関連する確率も関連付けられています。これは、パーティクルが環境内の実際の位置を実際に表していることの信頼度を示します。
  3. 開始すると、これらのすべての粒子が環境全体に均一に分布し、同等の確率が与えられる可能性があります。ここでは、ロボットは灰色で、粒子は緑色です。 initial particle filter
  4. ロボットが動くと、各粒子を動かします。また、各粒子の確率を下げて、モーターが実際にロボットを動かす方法の不確実性を表すこともできます。 particles after movement
  5. ロボットが何か(たとえば、ウェブカメラで見られるランドマーク、wifi信号など)を観察する場合、その観察に一致する粒子の確率を増やすことができます。 particles after observation
  6. また、観察に基づいて、確率が最も低い粒子を定期的に新しい粒子に置き換えることもできます。
  7. ロボットが実際にどこにいるかを判断するには、確率が最も高い粒子、確率が最も高いクラスター、すべての粒子の加重平均などを使用できます。

少し検索すると、次のような例がたくさん見つかります。 パーティクルフィルタリングを使用して小さな部屋での位置を特定するロボットのビデオ

パーティクルフィルタリングは理解しやすいのでいいです。これにより、実装と調整が少し難しくなります。他の同様のテクニック( カルマンフィルター など)は、理論的には確かに健全ですが、頭を動かすのが難しい場合があります。

32
Nate Kohl

QR Code

各部屋のQRコードポスターは、興味深いモダンアート作品を作るだけでなく、カメラで比較的簡単に見つけることができます。

8
Peaches491

部屋にマーカーを配置できる場合は、カメラを使用することもできます。 2つの既知のマーカーにangular変位(左から右))がある場合、カメラとマーカーは、半径がマーカー間の測定角度に関連する円上にあります。計算式は正しいですが、マーカー間の円弧セグメント(その円上)は、表示される角度の2倍になります。マーカーが既知の高さにあり、カメラが一定の傾斜角にある場合、距離までの距離を計算できますマーカー。これらの方法のいずれかを単独で使用すると、十分なマーカーがあれば自分の位置を特定できます。両方を使用すると、より少ないマーカーでそれを行うことができます。

残念ながら、これらの方法は測定誤差のため不完全です。これを回避するには、カルマン推定器を使用して複数のノイズの多い測定値を組み込み、適切な位置推定値に到達します。次に、推測航法情報(これも不完全です)を入力して、さらに詳細化できます。この部分は数学のかなり深いところにありますが、あなたが試みていることで素晴らしい仕事をするための要件だと思います。それなしでOKを実行できますが、(与えられた入力の最良の位置推定に関して)最適なソリューションが必要な場合は、これ以上の方法はありません。あなたが自律ロボット工学のキャリアを実際に望んでいるなら、これはあなたの将来に大きな役割を果たすでしょう。 (

自分の位置を特定できたら、好きなパターンで部屋を覆うことができます。バンプセンサーを引き続き使用して障害物のマップを作成し、障害物を組み込んでスキャンする方法を考案する必要があります。

数学の背景をまだ持っているかどうかはわかりませんが、ここにtheの本があります: http://books.google.com/ books/about/Applied_optimal_estimation.html?id = KlFrn8lpPP0C

6
phkahler

これは受け入れられた回答に代わるものではありません(これはすばらしいことです!)。ただし、最近リリースされたMicrosoftの公式ドライバーから、またはEeePCにハッキングされたドライバーを使用して、Kinectを入手してWebカメラの代わりに使用することをお勧めします。 Windows 7(おそらくそうではない)。

そうすれば、3Dビジョンによってポジショニングが改善されます。ランドマークを観察すると、ランドマークがどこにあるかだけでなく、ランドマークがどれだけ離れているかがわかります。


とにかく、受け入れられた答えは、実際に視野内のランドマークを選択する方法を扱っておらず、単に可能であることを前提としています。 Kinectドライバーには既に機能検出が含まれている場合がありますが(わかりません)、OpenCVを使用してイメージ内の機能を検出することもできます。

4
jhocking

一般的な解決策を探していないと仮定すると、実際には知っている部屋の形状、サイズ、潜在的な障害物の位置などです。ボットが工場に存在する場合、その将来の動作環境に関する情報はありません。最初から非効率であるように強制します。その場合は、その情報をハードコーディングしてから、基本的な測定値(つまり、ホイールの回転エンコーダー+コンパス)を使用して、部屋/家の中の位置を正確に把握できます。私の意見では、wifi三角測量やクレイジーセンサーの設定は必要ありません。少なくとも最初は。

3
tmslnz

1つの解決策は、「フラッドフィル」( wikipedia )と同様の戦略を使用することです。コントローラーでスイープを正確に実行するには、距離感が必要です。近接センサーを使用してボットを調整できます。モーターを1秒間運転します= xxの変化は近接しています。その情報を使用して、ボットを正確な距離だけ移動し、塗りつぶしを使用して部屋を掃除し続けることができます。

3
odrm

GPSを検討したことがありますか?地球上のすべての位置には固有のGPS座標があり、1〜3メートルの解像度で、差分GPSを実行すると、10 cm未満の範囲に到達できます。詳細はこちら:

http://en.wikipedia.org/wiki/Global_Positioning_System

そして、ArduinoはGPSモジュールの多くのオプションを持っています:

http://www.arduino.cc/playground/Tutorials/GPS

家のすべての主要な座標ポイントを収集したら、(上記で収集したように)arduinoがロボットをポイントからポイントに移動するルーチンを記述できます-障害物を回避するものをすべて実行すると仮定します。

詳細はここにあります:

http://www.google.com/search?q=GPS+localization+robots&num=1

そしてリストの中で私はこれを見つけました-特にあなたのケースのために:Arduino + GPS +ローカリゼーション:

http://www.youtube.com/watch?v=u7evnfTAVyM

1
Peter Teoh

私もこの問題について考えていました。しかし、なぜ三角測量ができないのかわかりません。サーボに2つまたは3つのビーコン(周波数の異なるIR LEDなど)とIR回転センサーの「目」を配置します。その後、自分の位置をほぼ一定に修正できます。精度は低cm範囲にあり、安価になると思います。次に、ぶつかったものを簡単にマッピングできます。

ビーコンビームの中断を使用して、ロボットからかなり離れているオブジェクトをプロットすることもできます。

1
user1671687

あなたが言ったカメラを持っていますか?天井を見てみましたか? 2つの部屋の寸法が同じである可能性はほとんどないため、どの部屋にいるかを特定できます。部屋の位置は、angularから計算できます。天井の境界までの距離と方向はおそらくドアの位置によって抽出されます。

これにはいくつかの画像処理が必要ですが、効率的に掃除するためにゆっくりと掃除機を動かすと、計算するのに十分な時間がかかります。

幸運を !

1
MAC

ウルトラソニックセンサーHC-SR04などを使用してください。上記のように、センサーを備えたロボットとQRコードを備えた部屋のパーツから壁までの距離を感知します。

壁の近くにいる場合は、90度回転させてロボットの幅に合わせて移動し、再び90度回転させて(つまり、左に90度回転)、ロボットを再び移動させてください:)

1
Ravinder Payal

私はRaspberry Piに取り組んでいますpythonコンピュータービジョンプロジェクトで、エンコーダーなしのロボットがカメラトラッキングを使用してより正確にナビゲートできるようにします。これは部屋のナビゲーションの問題を解決しません(これも興味があります) ROSとLIDARを使用した良い例がいくつかあります。とにかく、興味がある場合はこれが私の小さな貢献です(進行中の作業)。詳細は以下を参照してください https://github.com/pageauc/motion-track/tree/マスター/カムトラック

0
Claude Pageau