ROS研究ノート(6):ROSレーザーSLAM

ディレクトリ

7 ROSレーザーSLAM

7.1マップ

7.2一般的に使用されるレーザーSLAMアルゴリズムの比較

7.2.1マッピングSLAM計算チャート

7.2.2 Karto SLAM計算表

7.2.3ヘクターSLAM計算表


7 ROSレーザーSLAM

ロボットのナビゲーションの主な問題は、マッピング、ローカリゼーション、経路計画の3つの部分に分けることができます。同時配置とマッピング(SLAM)の問題は、配置とマッピングの交差点にあります。SLAMでは、ロボットが未知の環境で徐々に地図を作成し、さらに地図に基づいて自身の位置を特定してさらに特定する必要があります。

SLAMは、レーザー、ビジョン、レーザー+ビジョンの3つのカテゴリに分類できます。この章では、主にレーザーSLAMアルゴリズムについて説明します。

7.1マップ

ROSのマップは通常のpgm形式の通常のグレースケール画像です。この画像の黒いピクセルは障害物を示し、白いピクセルは実行可能な領域を示し、灰色は探索されていない領域を示します。以下に示すように:

 

マップは維持され、ROSのトピックの形式で表示されます。トピック名は/マップで、そのメッセージタイプはnav_msgs / OccupancyGridです。

メッセージのフォーマットは、rosmsg show nav_msgs / OccupancyGridで確認できます。

std_msgs/Header header #消息的报头
    uint32 seq
    time stamp
    string frame_id #地图消息绑定在TF的哪个frame上,一般为map
nav_msgs/MapMetaData info #地图相关信息
    time map_load_time #加载时间
    float32 resolution #分辨率 单位:m/pixel
    uint32 width #宽 单位:pixel
    uint32 height #高 单位:pixel
    geometry_msgs/Pose origin #原点
    geometry_msgs/Point position
        float64 x
        float64 y
        float64 z
    geometry_msgs/Quaternion orientation
        float64 x
        float64 y
        float64 z
        float64 w
int8[] data #地图具体信息

 

上記は/マップトピックのデータ構造を定義します。これには、ヘッダー、情報、データの3つの主要な部分が含まれます。ヘッダーはメッセージのヘッダーであり、シーケンス番号、タイムスタンプ、フレームなどの一般的な情報を格納します。infoはマップの構成情報であり、マップの属性を反映します。dataは実際にマップデータを格納する部分であり、可変長配列です、[] int8の後に追加されます。これは、このマップの各ピクセルである幅*高さのint8タイプのデータを格納するベクターのようなコンテナーとして理解できます。

未知の領域のマップの場合、SLAMアルゴリズムを使用してロボットを動的に構築できます。

既知のエリアのマップの場合、最初にSLAMアルゴリズムノードを起動し、ロボットを移動して周囲の環境をスキャンしてマップを作成し、次にmap_server($ rosrun map_server map_saver -f map)を使用してマップを保存します。保存したマップを今後のナビゲーションに使用します。

7.2一般的に使用されるレーザーSLAMアルゴリズムの比較

ROSで一般的に使用されるレーザーSLAMアルゴリズムは、Gmapping、Karto、Hector、およびその他のアルゴリズムです。

具体的な比較を次の表に示します。

 

マッピング

カルト

ヘクター

必要なセンサー

ライダー

走行距離計

ライダー

走行距離計

ライダー(高周波レーダーが必要)

トピックを入力してください

  • / tfおよび/ tf_static:座標変換、tf / tfMessageまたはtf2_msgs / TFMessage。2つのtfを指定する必要があります。1つはbase_frameとlaser_frameの間のtf、つまりロボットシャーシとライダー間の変換です。もう1つはbase_frameとodom_frameの間のtf、つまりシャーシとオドメーターの原点間の座標です。変革。odom_frameは、走行距離計の原点が位置する座標系として理解できます。
  • / scan:Lidar data、type sensor_msgs / LaserScan
  • / tfおよび/ tf_static:座標変換、tf / tfMessageまたはtf2_msgs / TFMessage。2つのtfを指定する必要があります。1つはbase_frameとlaser_frameの間のtf、つまりロボットシャーシとライダー間の変換です。もう1つはbase_frameとodom_frameの間のtf、つまりシャーシとオドメーターの原点間の座標です。変革。odom_frameは、走行距離計の原点が位置する座標系として理解できます。
  • / scan:Lidar data、type sensor_msgs / LaserScan
  • / tfおよび/ tf_static:座標変換、tf / tfMessageまたはtf2_msgs / TFMessage。2つのtfを指定する必要があります。1つはbase_frameとlaser_frameの間のtf、つまりロボットシャーシとライダー間の変換です。もう1つはbase_frameとodom_frameの間のtf、つまりシャーシとオドメーターの原点間の座標です。変革。odom_frameは、走行距離計の原点が位置する座標系として理解できます。
  • / scan:Lidar data、type sensor_msgs / LaserScan
  • / syscommand:リセットメッセージを受信すると、マップとロボットの位置が元の位置に初期化されます。

出力トピック

  • / tf:主にmap_frameとodom_frameの間の変換を出力します
  • / slam_gmapping / entropy:std_msgs / Float64タイプ、ロボットの姿勢推定の分散の程度を反映
  • /マップ:slam_gmappingによって作成されたマップ
  • / map_metadata:地図に関する情報
  • / tf:主にmap_frameとodom_frameの間の変換を出力します
  • /マップ:slam_gmappingによって作成されたマップ
  • / map_metadata:地図に関する情報
  • / tf:主にmap_frameとodom_frameの間の変換を出力します
  • /マップ:slam_gmappingによって作成されたマップ
  • / map_metadata:地図に関する情報
  • / poseupdate:共分散によるロボットの姿勢推定
  • / slam_out_pose:共分散なしのポーズ推定。

提供されたサービス

/ dynamic_map:タイプはnav_msgs / GetMapで、現在のマップを取得するために使用されます。

/ dynamic_map:タイプはnav_msgs / GetMapで、現在のマップを取得するために使用されます

/ dynamic_map:タイプはnav_msgs / GetMapで、現在のマップを取得するために使用されます

技術的実現

粒子フィルター

グラフベースの最適化

スキャンマッチング(ガウス-ニュートン方程式)

効果

成熟した、信頼性の高い、安定したエフェクトである多くのROSベースのロボットは、gmapping_slamを実行します

gmappingに似ており、大規模なマップ環境により適しています

LIDAR情報のみを使用するため、効果はGmappingおよびKartoほど良くありません。

      (1)オドメーターには、ホイール上の光電コードホイール、慣性ナビゲーションユニット(IMU)、および視覚オドメーターが含まれます。1つだけをオドムに使用したり、複数を選択してデータを融合したり、融合結果をオドムとして使用したりできます。

      (2)https://blog.csdn.net/dddxxxx/article/details/78460636

      (3)《ロボット操作システムで利用可能な2D SLAM技術の評価》を参照

7.2.1マッピングSLAM計算チャート

7.2.2 Karto SLAM計算表

7.2.3ヘクターSLAM計算表

 

31件の元の記事を公開 いいね3 2028訪問

おすすめ

転載: blog.csdn.net/lclfans1983/article/details/105399567