掃除機ロボットをハッキングして、マイクロコントローラー(Arduino)で制御しています。部屋を掃除するときより効率的にしたい。とりあえず、直進して何かにぶつかったときに曲がります。
しかし、私は最適なアルゴリズムまたはメソッドを見つけるのに苦労しています(-===-)部屋での位置を知る。安く(100ドル未満)、複雑ではない(コンピュータービジョンの博士論文を必要としない)アイデアを探しています。必要に応じて、部屋に個別のマーカーを追加できます。
現在、私のロボットには次の機能があります。
これを行うためのアイデアはありますか?これらの種類の問題に対する標準的な方法はありますか?
注:この質問が別のウェブサイトに属している場合は、移動してください。StackOverflowよりも良い場所を見つけることができませんでした。
環境におけるロボットの位置を把握する問題は、ローカリゼーションと呼ばれます。コンピュータサイエンスの研究者はこの問題を長年解決しようとしてきましたが、成功は限られていました。 1つの問題は、自分がどこにいるかを把握するために適度に優れた感覚入力が必要であり、Webカメラからの感覚入力(つまりコンピュータービジョン)が解決された問題とはほど遠いことです。
それがあなたを怖がらせなかった場合:私が理解するのが最も簡単であると思うローカリゼーションへのアプローチの1つは粒子フィルタリングです。アイデアは次のようになります。
少し検索すると、次のような例がたくさん見つかります。 パーティクルフィルタリングを使用して小さな部屋での位置を特定するロボットのビデオ 。
パーティクルフィルタリングは理解しやすいのでいいです。これにより、実装と調整が少し難しくなります。他の同様のテクニック( カルマンフィルター など)は、理論的には確かに健全ですが、頭を動かすのが難しい場合があります。
各部屋のQRコードポスターは、興味深いモダンアート作品を作るだけでなく、カメラで比較的簡単に見つけることができます。
部屋にマーカーを配置できる場合は、カメラを使用することもできます。 2つの既知のマーカーにangular変位(左から右))がある場合、カメラとマーカーは、半径がマーカー間の測定角度に関連する円上にあります。計算式は正しいですが、マーカー間の円弧セグメント(その円上)は、表示される角度の2倍になります。マーカーが既知の高さにあり、カメラが一定の傾斜角にある場合、距離までの距離を計算できますマーカー。これらの方法のいずれかを単独で使用すると、十分なマーカーがあれば自分の位置を特定できます。両方を使用すると、より少ないマーカーでそれを行うことができます。
残念ながら、これらの方法は測定誤差のため不完全です。これを回避するには、カルマン推定器を使用して複数のノイズの多い測定値を組み込み、適切な位置推定値に到達します。次に、推測航法情報(これも不完全です)を入力して、さらに詳細化できます。この部分は数学のかなり深いところにありますが、あなたが試みていることで素晴らしい仕事をするための要件だと思います。それなしでOKを実行できますが、(与えられた入力の最良の位置推定に関して)最適なソリューションが必要な場合は、これ以上の方法はありません。あなたが自律ロボット工学のキャリアを実際に望んでいるなら、これはあなたの将来に大きな役割を果たすでしょう。 (
自分の位置を特定できたら、好きなパターンで部屋を覆うことができます。バンプセンサーを引き続き使用して障害物のマップを作成し、障害物を組み込んでスキャンする方法を考案する必要があります。
数学の背景をまだ持っているかどうかはわかりませんが、ここにtheの本があります: http://books.google.com/ books/about/Applied_optimal_estimation.html?id = KlFrn8lpPP0C
これは受け入れられた回答に代わるものではありません(これはすばらしいことです!)。ただし、最近リリースされたMicrosoftの公式ドライバーから、またはEeePCにハッキングされたドライバーを使用して、Kinectを入手してWebカメラの代わりに使用することをお勧めします。 Windows 7(おそらくそうではない)。
そうすれば、3Dビジョンによってポジショニングが改善されます。ランドマークを観察すると、ランドマークがどこにあるかだけでなく、ランドマークがどれだけ離れているかがわかります。
とにかく、受け入れられた答えは、実際に視野内のランドマークを選択する方法を扱っておらず、単に可能であることを前提としています。 Kinectドライバーには既に機能検出が含まれている場合がありますが(わかりません)、OpenCVを使用してイメージ内の機能を検出することもできます。
一般的な解決策を探していないと仮定すると、実際には知っている部屋の形状、サイズ、潜在的な障害物の位置などです。ボットが工場に存在する場合、その将来の動作環境に関する情報はありません。最初から非効率であるように強制します。その場合は、その情報をハードコーディングしてから、基本的な測定値(つまり、ホイールの回転エンコーダー+コンパス)を使用して、部屋/家の中の位置を正確に把握できます。私の意見では、wifi三角測量やクレイジーセンサーの設定は必要ありません。少なくとも最初は。
1つの解決策は、「フラッドフィル」( wikipedia )と同様の戦略を使用することです。コントローラーでスイープを正確に実行するには、距離感が必要です。近接センサーを使用してボットを調整できます。モーターを1秒間運転します= xxの変化は近接しています。その情報を使用して、ボットを正確な距離だけ移動し、塗りつぶしを使用して部屋を掃除し続けることができます。
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 +ローカリゼーション:
私もこの問題について考えていました。しかし、なぜ三角測量ができないのかわかりません。サーボに2つまたは3つのビーコン(周波数の異なるIR LEDなど)とIR回転センサーの「目」を配置します。その後、自分の位置をほぼ一定に修正できます。精度は低cm範囲にあり、安価になると思います。次に、ぶつかったものを簡単にマッピングできます。
ビーコンビームの中断を使用して、ロボットからかなり離れているオブジェクトをプロットすることもできます。
あなたが言ったカメラを持っていますか?天井を見てみましたか? 2つの部屋の寸法が同じである可能性はほとんどないため、どの部屋にいるかを特定できます。部屋の位置は、angularから計算できます。天井の境界までの距離と方向はおそらくドアの位置によって抽出されます。
これにはいくつかの画像処理が必要ですが、効率的に掃除するためにゆっくりと掃除機を動かすと、計算するのに十分な時間がかかります。
幸運を !
ウルトラソニックセンサーHC-SR04などを使用してください。上記のように、センサーを備えたロボットとQRコードを備えた部屋のパーツから壁までの距離を感知します。
壁の近くにいる場合は、90度回転させてロボットの幅に合わせて移動し、再び90度回転させて(つまり、左に90度回転)、ロボットを再び移動させてください:)
私はRaspberry Piに取り組んでいますpythonコンピュータービジョンプロジェクトで、エンコーダーなしのロボットがカメラトラッキングを使用してより正確にナビゲートできるようにします。これは部屋のナビゲーションの問題を解決しません(これも興味があります) ROSとLIDARを使用した良い例がいくつかあります。とにかく、興味がある場合はこれが私の小さな貢献です(進行中の作業)。詳細は以下を参照してください https://github.com/pageauc/motion-track/tree/マスター/カムトラック