ロボットがマップを作成するために必要なものは何ですか?



繰り返しになりますが、Todのブログはあなたと一緒です。今日も、ROSロボットのオペレーティングシステムのナビゲーションスタックの紹介を続けます。 前の記事でナビゲーションスタックの一般的な説明が行われたこと、ロボットでの使用に必要な要件が特定されたこと、ロボットの動きを制御すること、感覚オドメトリーおよびソナーデータを取得することを考慮したことを思い出してください。 この記事では、ナビゲーションスタックの最も「おいしい」可能性について説明します。ロボットの進路で遭遇する障害を考慮して、地図を作成し、移動の軌跡を計画します。 カットの下では、とりわけ、アパート内のTodロボットのナビゲーションを含むビデオがあります。



Kinect



ロボットで地図を作成するには、プロのレーザー距離計または安価な深度カメラ(KinectまたはASUS Xtion)を使用できます。 おそらく皆さんは、Xbox 360のゲームコントローラーとしてKinectを知っており、そのインタラクティブな機能を拡張していますが、Kinectのおかげでプロのロボット工学がより使いやすくなったことを誰もが知っているわけではありません。 エントリーレベルのレーザー距離計の価格は約1,000ドルですが、Kinectを購入すると150〜200ドルかかります。



上の写真からわかるように、Kinectにはいくつかのタイプのセンサーが装備されており、ロボット工学の分野でいくつかのタスクを一度に解決するのに役立ちます。



ROSでは、Kinectとの通信は、関連するトピックでいくつかのタイプのメッセージを公開することにより、openni_launchパッケージノードを通じて行われます。 まず、次のトピックに注意を払う必要があります。



ナビゲーションスタックでKinectを使用するには、点群データを偽のレーザー2D距離計データに変換する必要があります。つまり、元の点群の水平カットを取得する必要があります。 この問題を解決するために、Turtlebotロボットのスタックにあるパッケージpointcloud_to_laserscanを使用しました。 これは、Kinectタッチデータスライスがsensor_msgs / LaserScanメッセージ形式でどのように見えるかです。



ただし、Kinectには高価なレーザー距離計と比較して、いくつかの欠点があります。 ロボット上のKinectの位置を決定する際には、まずこれらを考慮する必要があります。 主な欠点の1つは、大きなブラインドゾーン(約50 cm)です。 この問題に関する以前の記事でのambikonturからのコメントといくつかの議論の後、Kinectをロボットの背面に近づけることにしました。 これにより、ケース内のほとんどの不感帯を「隠す」ことができました。



したがって、この段階で、Todロボットはナビゲーションに関連する次のタスクを既に実行できます。



このようなシステムに基づいて、より高いレベルのナビゲーションタスクを解決できます。 まず、SLAM(同時ローカリゼーションとマッピング)は、このようなタスクに起因する可能性があります。 SLAMは「鶏と卵」の問題を解決します。一方で、宇宙でのロボットの位置の信頼できる推定には、正確に構築されたマップが必要です。 別の同様に重要なナビゲーションタスクは、移動の軌跡を計画することです。

ROSナビゲーションスタックは、高度なナビゲーションタスクを解決するために設計された3つの主要なパッケージを提供します。



次に、各パッケージの機能を詳しく見てみましょう。



マッピング


まず、ROSのマップはPGM形式の通常の画像ファイルであり、各ピクセルは次のようになります。





gmappingパッケージの一部としてのslam_gmappingノードは、マップの構築を目的としています。 収集された感覚データに基づいて、パッケージで使用されるSLAMアルゴリズムは、各セルに障害物を見つける特定の確率が与えられたグリッドマップを形成します。 新しい感覚データが到着すると、各セルの確率が調整され、その結果、マップの最も信頼性の高い表現が得られます。 gmappingはセンサーデータとして、TodロボットのソースがKinectであるレーザー距離計データと走行距離計データを使用します。

マップを作成するには、キーボードまたはジョイスティックからロボットを制御し、部屋を歩き回り、結果のマップをファイルに保存する必要があります。 使用するレンジファインダーの機能を考慮に入れながら、部屋をあまり速く移動しない方が良いです。 たとえば、Kinectの前には不感帯があります。そのため、地図を作成するときは、壁に近づきすぎないようにしてください。

自宅での戦闘でgmappingパッケージとTodロボットをテストしましたが、これがその結果です。





amcl



amclノードアルゴリズム(Adaptive Monte Carlo Localization)は、たとえばgmappingパッケージを使用して作成された既製のマップで機能します。 このアルゴリズムは、モンテカルロ法と粒子フィルターに基づいてロボットの位置を確率的に決定するために設計されています。

Todロボットは、amclノードへの入力としてレーザー距離計と走行距離計センシングデータを使用します。 開始後、ノードはロボットの初期位置を設定することを想定しています。 これは、たとえばドックからロボットを起動するときに便利です。 ただし、初期位置が指定されていない場合は、マップ座標系の先頭にポイントが割り当てられます。

下の写真でわかるように、地図にはレーザー距離計の現在のデータが壁や障害物に赤い点の形で表示され、ロボット自体は緑の矢印の雲の中にあります。 これらの矢印は、amclノードによって形成された、現時点でのロボットの可能な位置の配列を示しています。 ロボットがマップ内を移動し、新しい感覚データを受信すると、ロボットの位置の不確実性が減少し、このクラウドは小さくなります。



amclノードでは、アルゴリズムの多くのパラメーターを設定できます。 たとえば、パーティクル(パーティクル)の最大数を増やすと、ロボットの位置を決定する精度が向上しますが、同時にCPUの負荷が増加します。



move_base



キーボードからロボットを制御することで、ロボットをマップ上で動かすことができますが、ROSナビゲーションスタックで利用可能なmove_baseパッケージは、ロボットの自律的な移動も可能にします。 地図上にポイントを設定するだけで十分です。ロボットは、ターゲットへの最適なルートを独自に設定します。 タスクの実行中に、ロボットは現在の位置を報告し、ターゲットが何らかの理由で利用できない場合、システムに影響を与えることなくそれをキャンセルします。

グローバルルートは、現在既知の障害を考慮して、目標を設定した直後に構築されます。 ゴールに移動する間、グローバルルートはローカルルートというセグメントに分割されます。 各ローカルルートは、ロボットの適切な直線速度と角速度を設定することにより、着信感覚データを考慮して構築されます。

ターゲットへのロボットの移動経路の性質は、2つのコンポーネントによって決定されます。



コストマップは、現在のルートを正常に完了するために必要なナビゲーション情報を提供します。 コストマップの構成ファイルでは、ロボットの寸法、ルートに沿ったロボットの速度、セグメントの長さ、ルートの更新頻度などが設定されます。





これで、ROSナビゲーションスタックの紹介を終了します。 次の投稿でトッドにロシア語を理解するように教えます。 ブログを購読-最新情報を入手してください。



All Articles