部屋掃除ロボットをプログラムするには、どのアルゴリズムを実装する必要がありますか?


25

この質問では、次のことが不明であると想定しています。

  • 部屋の大きさと形
  • ロボットの場所
  • 障害物の存在

また、次のものが一定であると仮定します。

  • 部屋の大きさと形
  • すべての(存在する場合)障害物の数、形状、および場所

また、ロボットには次のプロパティがあると仮定します。

  • 絶対単位の増分でのみ前進し、度単位で回転できます。また、移動する操作は、成功した場合はtrueを返し、障害のため移動に失敗した場合はfalseを返します。
  • 合理的に無制限の動力源(それは、天井のない常時太陽に面している宇宙ステーションに置かれた太陽動力ロボットであるとしましょう)
  • すべての移動と回転は毎回絶対精度で実行されます(信頼できないデータについて心配する必要はありません)

最後に、ロボットの環境の以下の特性を考慮してください。

  • 天井のない宇宙ステーション上にあるため、部屋は安全ですが、通過する彗星にイライラするほど近いため、ほこり(および氷)が常に環境を散らかしています。

私はこの質問のはるかに簡単なバージョンを求められました(部屋は長方形であり、障害はありません、どのように移動すると、少なくとも一度はすべての部分を超えることができることを保証します)障害物の形状や存在を保証するものではありません。私はダイクストラのアルゴリズムでこれを調べ始めましたが、他の人がこれにどのようにアプローチするのか(またはこれに対するよく受け入れられた答えがある場合はどうですか?)


+ algorithmや+ theoryのようなタグはこのような質問に役立ちますが、私はまだそれらを追加する評判がありません
ジェイソンSperske

間違いなくルンバより良いもの
タコ

面白い。私はボブスウィープを持っていますが、それは完璧にプログラムされていますmomblogsociety.com/meet-newest-addition-family-bobsweep私はそれをみんなに提案します。ご挨拶!

1
これは広告ですか?そうでない場合は、リンクだけでなく、ロボットがどのように振る舞うのか、なぜ完璧なのかを説明する情報を投稿することをお勧めします。
シャーバズ14年

回答:


18

私の知る限り、この問題は「解決」されていません。

正式には、これはオンラインカバレッジの問題です。カバレッジ。フロア上の各ポイントをカバーする必要があるため、マップにオフラインでアクセスできないため、オンライン。最新の結果に興味がある場合は、おそらくGoogle奨学生で「ロボットオンラインカバレッジアルゴリズム」を検索することをお勧めします(多くの素晴らしい結果があります)。@ embedded.kyleの非常にカラフルな(再)投稿に加えて、いくつかの詳細を追加します(いくつかの簡単な結果をすばやく見つけようとします)。

  • ダイクストラはパスを取得しますが、必ずしもカバレッジではありません。たとえば、できるだけ早く1つのポイントにアクセスするのではなく、グラフ内のポイントにアクセスする必要があることを、ダイクストラにどのように指定しますか?すべてのペアの最短パスを実行できますが、ポイントは何ですか?あなたは地図を持っていません。

  • このようなオンラインアルゴリズムは、多くの場合「バグ」アルゴリズムと呼ばれます。これは、エリア内をさまよい、何かにぶつかり、少し歩き回るバグのように見える傾向があるためです。

  • 障害物がなく、長方形の部屋があり、境界から開始すると仮定すると、Boustrophedon(牛の道)パスが最適です。 ここに画像の説明を入力してください

農家がこれを永遠にやってきたというのはおかしいですよね?http://en.wikipedia.org/wiki/Boustrophedon。これは、障害物のないほぼ長方形の領域を見つけることにより、障害物のある部屋に拡張できます。Howie Chosetはこれに少し取り組みました

  • πd2d
  • これは巨大で魅力的なエリアです。申し訳ありませんが、より良い要約を提供できません!

最大の問題は、マップがないことです。マップがなければ、境界線の追跡やパスに沿った移動(前述のスパイラルのような)などの単純なアクションに制限されます。そのため、実際に掃除しながらマップを作成し、マップアウトされた領域をシェイプに分解し、各シェイプをカバーしてカバレッジを確保するロボットがいくつか存在します。参照:http : //mintcleaner.com/


9

ルンバは、何かにぶつかるまでらせん状に始まり、周囲を一掃します。その後、ただ跳ね返ります。ルンバは家庭用ロボット掃除機の事実上の標準であり、「受け入れられた解決策」と呼ぶことができると思います。しかし、個人的な経験から(私は2人所有しています)、間違いなく改善の余地があります。

スタッフの仕組みから:

アルゴリズム

iRobotのマーケティングコミュニケーション担当副社長、ナンシーダッソースミスとのインタビューから:

開始すると、らせんパターンに気づくでしょう。オブジェクトにぶつかるまで、ますます大きな領域にわたってらせん状になります。オブジェクトを見つけると、そのオブジェクトのエッジに沿って一定時間続き、その後、クリスクロスを開始し、別のオブジェクトにぶつかることなく移動できる最大距離を把握しようとします。スペースがどれほど大きいかを確認しますが、壁にぶつからずに時間が長すぎると、それは再び螺旋状になり始めます。なぜなら、それはそれが広いオープンスペースにあると認識し、常にそれを計算して把握しているからです

下の汚れセンサーと似ていますが、これらのセンサーの1つが作動すると、その領域をカバーするように動作を変更します。その後、まっすぐな道で別の汚れた領域を探して消えます。これらの異なるパターンが互いに重なり合っている方法は、それが部屋をカバーする最も効果的な方法であることを知っています。

私たちが選んだパターンとアルゴリズムの元々の開発方法は、動物を研究するMITから生まれた行動ベースのアルゴリズムと、食物を探してエリアを探索する方法に基づいていました。アリとミツバチがどのように外に出てエリアを検索するかを見ると、こうした種類のカバレッジとそのすべてを把握することは、その調査から得られます。私たちがミツバチだと言っているわけではありませんが、明らかに正確ではありませんが、私たちの適応技術がどのように開発されているかの基礎となる自然界の探索方法の理解です。

ルームバスのLED付きの長時間露光写真は、実際の動作を示しています。

ここに画像の説明を入力してください ここに画像の説明を入力してください ここに画像の説明を入力してください


これはリンクからのコピーアンドペーストコンテンツですか?
ジョシュヴァンダーフック

@Josh質問に回答する関連資料は、リンクの腐敗を防ぐために、リンクされたサイトからコピーされ、ブロック引用符で囲まれています。
embedded.kyle

7

ネイトは組織的なアプローチを採用しています。SLAMとバンパーを使用して、最初に周囲の「現在の」部屋をマッピングし、その後、可能な限り効率的に清掃するためのアルゴリズムを適用します。私はルンバを所有したことはありませんが、そのアルゴリズムについて読んだことを考えると、ネイトから切り替えることはありません。

ネイトのレーザーレンジファインダーは、SLAMアルゴリズム用の費用対効果の高いセンサーであるため、多くの場合、ロボット工学用にカネライジング可能です。

あなたのタスクが与えられた場合、まず私が持っていたハードウェアに基づいて適切なSLAM実装を見つけます。

次に、CNC ISLAND Motion計画アルゴリズムを使用します。私の経験では、最小の動きで任意のエリアをカバーするのに非常に効率的である傾向があります。


SLAMは、位置決めに不確実性がないシミュレーションであるため、この問題にはあまり適していません。実際のロボットの場合、あなたは絶対に正しいです。
イアン

私はそれを見逃しました(もしあれば)。実際には、次のことは不明です。ロボットの場所。
Spiked3

場所は不明として始まったと思っていましたが、部屋のトポロジーが作成されると、それが知られるようになるかもしれません。
ジェイソンスパースケ

これは、単純化が奇妙な意味合いを生み出す奇妙な学問的問題の1つです。マップ、開始位置、完璧な位置決め、および調整する外部エンティティがないため、絶対位置は無関係です。(0,0)が出発点であると任意に決定し、そのポイントを基準にしてマップを構築します。これは現実の世界では実際には実用的ではありませんが、カバレッジアルゴリズムの練習を行うことができます。
イアン

あなたの答えは、システムの観点からは良いです。しかし、この質問はより良い理論/アルゴリズムの質問だと思います。
ジョシュヴァンダーフック

6

最初に確立する必要があるのは、ロボットの目標です-あなたの質問からは明確ではありません。ロボットが達成しなければならない2つの主なタスクがあります:掃除可能な領域の形状を発見し、それを掃除します。

しかし、汚れの量は一定ですか?汚れは常に追加されていますか?床に汚れが残る平均時間を最小にするのが目標ですか、それとも中央値ですか?床を同様に清潔に保つことが目標ですか?それとも、できるだけ早く一度だけ掃除するだけですか?目標を達成する上で有利に測定および使用できる汚れの蓄積のパターンはありますか?

これらの質問に対する答えは、選択するアルゴリズムのガイドに役立ちます。ルンバのロボットの場合、家具(テーブルの周りの椅子など)、人、その他の障害物は非常に頻繁に移動するため、部屋の正確なレイアウトを学習しても意味がありません。ただし、完全なマップ(芝刈り機パターンとエッジ検出の組み合わせ)を構築するためにスペースを探索し、そのマップを使用してスペースを通る最短経路を計算する方がよい場合があります(用語は「カバレッジ」、そしてそれを例えば行うには、いくつかの方法がありますスパニングツリーアルゴリズムが)。

心配する必要があるもう1つのことは、現在の空間をどのように離散化するかです。整数度の量や距離の整数単位でも、任意の方向に移動できるため、X位置とY位置は分数を持つことができます値。障害物を無数のデータポイントに増やすことなく、その地図上に障害物を表示する方法を決定する必要があります。


さて、私はサディスティックにインタビューの質問を自分で難しくしているので、さらに情報を得ることができると思います。私はあなたが上げているポイントが好きです:)
ジェイソン・スパースケ

2

まだ必要かどうかはわかりませんが、このスレッドでgoogleを見つけた人のために、アルゴリズムの簡単なバージョンを1つ作成しました。

基本的に、掃除中にエリアの地図を作成しようとし、その地図を使用して、最も近くの未訪問のノード(部屋の一部)を見つけます。見つからない場合、それは部屋が掃除されていることを意味します(または掃除されていない部分はロボットによってアクセスできません)。

他のアルゴリズムよりも遅いかもしれませんが、開始位置、方向、障害物に関係なくカバレッジを保証できます。

https://github.com/dungba88/cleaner_robot

更新:ここでデモを作成し、バックトラッキングDFSと比較しました。したがって、私のアルゴリズムはO(N ^ 2)ですが、移動とターンの数の点ではるかに最適化されています。

http://jenova.dungba.org/cleaner/showdown


興味深いので、それは部屋を2Dグリッドに分割します、私はまだあなたのコードを読んでいます。ダイクストラ?
ジェイソンスパースケ

私はBFSを使用して、最も近い未クリーニングの位置を見つけました。
アンディンビー

-1

あなたが尋ねられたより単純な問題を見てください-障害物のない長方形の部屋で、少なくとも一度はすべての部品掃除してください。

解決策は部屋の隅を見つけることであり、隅を見つけることは大きな問題にはなりません。それが達成されたら、部屋の中心へのらせん状の経路をたどるだけです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.