50

マイクロコントローラー (Arduino) で制御する掃除機ロボットをハッキングしています。部屋の掃除をもっと効率的にしたい。今のところ、直進して何かに当たると曲がるだけです。

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

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

  • 1 つの Web カメラ
  • 3 つの近接センサー (約 1 メートルの範囲)
  • コンパス(現在は使用していません)
  • Wi-Fi
  • バッテリーが満充電またはほぼ空になると、速度が変化する可能性があります
  • ネットブックEee PCがロボットに組み込まれています

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

注: この質問が別の Web サイトにある場合は、移動してください。スタック オーバーフローより適切な場所が見つかりませんでした。

4

10 に答える 10

36

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

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

  1. 一連のパーティクルを追跡し、それぞれが環境内の 1 つの可能な場所を表します。
  2. また、各粒子には関連する確率があり、その粒子が環境内の実際の位置を実際に表しているという確信がどれだけあるかを示します。
  3. 最初は、これらすべての粒子が環境全体に均一に分布し、等しい確率が与えられている可能性があります。ここでは、ロボットは灰色で、パーティクルは緑色です。初期粒子フィルター
  4. ロボットが動くと、各粒子が動きます。また、各粒子の確率を低下させて、モーターが実際にロボットを動かす方法の不確実性を表すこともできます。移動後のパーティクル
  5. ロボットが何かを観察すると (例: ウェブカメラで見たランドマーク、Wi-Fi 信号など) 、その観察に一致する粒子の確率を高めることができます。観察後の粒子
  6. また、観測に基づいて、確率が最も低い粒子を新しい粒子に定期的に置き換えることもできます。
  7. ロボットが実際にどこにいるかを判断するには、確率が最も高い粒子、確率が最も高いクラスター、すべての粒子の加重平均などを使用できます。

少し調べてみると、たくさんの例が見つかります。たとえば、粒子フィルタリングを使用して小さな部屋でロボットの位置を特定するロボットのビデオなどです。

パーティクル フィルタリングは非常に理解しやすいため、優れています。これにより、実装と調整が少し難しくなります。間違いなく理論的にはより健全であるが、理解するのが難しい他の同様の手法 (カルマン フィルターなど) があります。

于 2011-06-29T14:09:28.723 に答える
8

QRコード

各部屋のQRコードポスターは、面白い現代アート作品を作るだけでなく、カメラで比較的簡単に見つけることができます!

于 2011-06-29T14:02:29.323 に答える
6

部屋にいくつかのマーカーを配置できる場合は、カメラを使用することもできます。2つの既知のマーカーに角変位(左から右)がある場合、カメラとマーカーは、半径がマーカー間の測定角度に関連する円上にあります。数式をすぐに思い出せませんが、マーカー間の円弧セグメント(その円上)は、表示される角度の2倍になります。既知の高さにマーカーがあり、カメラが固定の傾斜角度にある場合は、マーカーまでの距離を計算できます。これらの方法のいずれかだけで、十分なマーカーが与えられた場合にあなたの位置を特定することができます。両方を使用すると、より少ないマーカーでそれを行うのに役立ちます。

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

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

数学のバックグラウンドをまだ持っているかどうかはわかりませんが本は次のとおりです:http: //books.google.com/books/about/Applied_optimal_estimation.html? id=KlFrn8lpPP0C

于 2011-06-29T13:58:37.370 に答える
5

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

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


とにかく、受け入れられた答えは、視野内のランドマークを選択する方法に実際には対処しておらず、単にできると仮定しています。Kinect ドライバーには既に機能検出が含まれている可能性がありますが (よくわかりません)、画像内の機能を検出するために OpenCV を使用することもできます。

于 2011-06-30T11:37:42.250 に答える
3

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

于 2011-06-29T12:50:57.693 に答える
3

1つの解決策は、「フラッドフィル」(ウィキペディア)と同様の戦略を使用することです。コントローラにスイープを正確に実行させるには、距離感が必要です。近接センサーを使用してボットを調整できます。たとえば、モーターを1秒間実行し、近接でxx回変更します。その情報を使用して、ボットを正確な距離だけ移動し、フラッドフィルを使用して部屋を掃除し続けることができます。

于 2011-06-29T12:35:45.777 に答える
1

GPSを検討したことがありますか?地球上のすべての位置には、1〜3メートルの解像度の固有のGPS座標があり、ディファレンシャルGPSを実行すると、10cm未満の範囲まで下げることができます。詳細はこちらをご覧ください。

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=100

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

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

于 2011-07-01T00:56:52.740 に答える
1

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

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

于 2013-05-22T11:55:09.123 に答える
1

超音波センサー HC-SR04 などをご使用ください。上記のように、センサーでロボットから壁の距離を感知し、QRコードで部屋の部分を感知します。

壁の近くにいるときは、90 度回転してロボットの幅に合わせて移動し、再び 90 度回転 (つまり 90 度左回転) し、再びロボットを動かします。

于 2014-10-30T13:34:19.930 に答える