地図製作者のマッピングと純粋な位置決め

(1) ros での Cartographer インストール参照:

必要とする:

64-bit, modern CPU (e.g. 3rd generation i7)
16 GB RAM
Ubuntu 18.04 (Bionic), 20.04 (Focal)
gcc version 6.3.0, 7.5.0, 9.3.0

インストール ガイドを参照してください:https://google-cartographer-ros.readthedocs.io/en/latest/compilation.html

1. 2 つのファイルをダウンロードします。

地図製作者
地図製作者_ros

2. ワークスペースをセットアップする

cartographer_ws/src を作成し、上記の 2 つのファイルを src の下に置きます。

3. ninja をインストールしてコンパイルする

sudo apt-get update
sudo apt-get install -y python-wstool python-rosdep ninja-build stow

4. 依存関係をインストールする

sudo rosdep init
rosdep update
rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y

失敗した場合は、Ubuntu での複数バージョンの sophus および opencv の使用: 3. Yuxiang ROS ワンクリック インストール パッケージの依存関係を参照してください。

wget http://fishros.com/install -O fishros && . fishros
rosdepc install -y --from-paths src --ignore-src --rosdistro $ROS_DISTRO

5.abseil-cppをインストールする

src/cartographer/scripts/install_abseil.sh

同時にアンインストールする方法は次のとおりです。

sudo apt-get remove ros-${ROS_DISTRO}-abseil-cpp

6.コンパイル

catkin_make_isolated --install --use-ninja

7. 公式データセットのダウンロードリンク

2D データ セット
3D データ セット

8.公式デモ

建图
2D

roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=${HOME}/Downloads/cartographer_paper_deutsches_museum.bag

3D:

roslaunch cartographer_ros demo_backpack_3d.launch bag_filename:=${HOME}/Downloads/b3-2016-04-05-14-14-00.bag

純粋な位置決め
2D データセットをダウンロード:

wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_2d/b2-2016-04-05-14-44-52.bag
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_2d/b2-2016-04-27-12-31-41.bag

1 つは測位に使用され、もう 1 つはマップの構築に使用されます。

roslaunch cartographer_ros offline_backpack_2d.launch bag_filenames:=${HOME}/Downloads/b2-2016-04-05-14-44-52.bag
roslaunch cartographer_ros demo_backpack_2d_localization.launch \
   load_state_filename:=${HOME}/Downloads/b2-2016-04-05-14-44-52.bag.pbstream \
   bag_filename:=${HOME}/Downloads/b2-2016-04-27-12-31-41.bag

3D データセットをダウンロードする場合も、操作は同じです。

wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_3d/b3-2016-04-05-13-54-42.bag
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_3d/b3-2016-04-05-15-52-20.bag
roslaunch cartographer_ros offline_backpack_3d.launch bag_filenames:=${HOME}/Downloads/b3-2016-04-05-13-54-42.bag
roslaunch cartographer_ros demo_backpack_3d_localization.launch \
   load_state_filename:=${HOME}/Downloads/b3-2016-04-05-13-54-42.bag.pbstream \
   bag_filename:=${HOME}/Downloads/b3-2016-04-05-15-52-20.bag

(2) 2D 地図作成者は、地図作成者の純粋な位置の問題を解決します。

1. 使用されるトピックのタイプはpointcloud2、です。

バックパック_2d.起動:

2.luaファイルの修正

backpack_2d.lua:
修改以下几句:

  num_laser_scans = 0,
  num_multi_echo_laser_scans = 0,
  num_subdivisions_per_laser_scan = 1,
  num_point_clouds = 1,

いくつかの文を追加します。

MAP_BUILDER.use_trajectory_builder_2d = true
TRAJECTORY_BUILDER_2D.use_imu_data = false
TRAJECTORY_BUILDER_2D.num_accumulated_range_data = 1
TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching = true

参照:https://www.codeleading.com/article/77834618087/
完全な Backpack_2d.lua:

include "map_builder.lua"
include "trajectory_builder.lua"

options = {
    
    
  map_builder = MAP_BUILDER,
  trajectory_builder = TRAJECTORY_BUILDER,
  map_frame = "map",
  tracking_frame = "base_link",
  published_frame = "base_link",
  odom_frame = "odom",
  provide_odom_frame = true,
  publish_frame_projected_to_2d = false,
  use_pose_extrapolator = true,
  use_odometry = false,
  use_nav_sat = false,
  use_landmarks = false,
  num_laser_scans = 0,
  num_multi_echo_laser_scans = 0,
  num_subdivisions_per_laser_scan = 1,
  num_point_clouds = 1,
  lookup_transform_timeout_sec = 0.2,
  submap_publish_period_sec = 0.3,
  pose_publish_period_sec = 5e-3,
  trajectory_publish_period_sec = 30e-3,
  rangefinder_sampling_ratio = 1.,
  odometry_sampling_ratio = 1.,
  fixed_frame_pose_sampling_ratio = 1.,
  imu_sampling_ratio = 1.,
  landmarks_sampling_ratio = 1.,
}

MAP_BUILDER.use_trajectory_builder_2d = true
TRAJECTORY_BUILDER_2D.use_imu_data = false
TRAJECTORY_BUILDER_2D.num_accumulated_range_data = 1
TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching = true

return options

3.urdf の変更:

backpack_2d.urdf: は LIDAR の Frame_id です。imu は今のところ無視します

  <joint name="velodyne_joint" type="fixed">   与base_link链接情况,暂且理解base_link为车体坐标系
    <parent link="base_link" />
    <child link="velodyne" />
    <origin xyz="0.1007 0 0.0558" />
  </joint>

完整的backpack_2d.urdf

<robot name="cartographer_backpack_2d">
  <material name="orange">
    <color rgba="1.0 0.5 0.2 1" />
  </material>
  <material name="gray">
    <color rgba="0.2 0.2 0.2 1" />
  </material>

  <link name="imu_link">
    <visual>
      <origin xyz="0 0 0" />
      <geometry>
        <box size="0.06 0.04 0.02" />
      </geometry>
      <material name="orange" />
    </visual>
  </link>

  <link name="velodyne">
    <visual>
      <origin xyz="0 0 0" />
      <geometry>
        <cylinder length="0.05" radius="0.03" />
      </geometry>
      <material name="gray" />
    </visual>
  </link>

  <link name="base_link" />

  <joint name="imu_link_joint" type="fixed">
    <parent link="base_link" />
    <child link="imu_link" />
    <origin xyz="0 0 0" />
  </joint>

  <joint name="velodyne_joint" type="fixed">
    <parent link="base_link" />
    <child link="velodyne" />
    <origin xyz="0.1007 0 0.0558" />
  </joint>
  
</robot>

4. 変更が完了したら、マッピング ノードを開始します。

roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=/home/xxx/a.bag

5. マップを保存します。

軌跡を完了します。これ以上のデータは受け入れられません:
新しいターミナルを開きます:
ソースを使用する必要があることに注意してください。そうしないと、rosservice は使用できません。有効

source  ~/cartographer/devel_isolated/setup.bash
rosservice call /finish_trajectory 0

シリアル化により現在の状態が保存されます

rosservice call /write_state "{filename: '${HOME}/Downloads/mymap.pbstream'}"

pbstream を pgm および yaml に変換する

rosrun cartographer_ros cartographer_pbstream_to_ros_map -map_filestem=${
    
    HOME}/Downloads/mymap -pbstream_filename=${
    
    HOME}/Downloads/mymap.pbstream -resolution=0.05

または

roslaunch cartographer_ros assets_writer_ros_map.launch bag_filenames:=/home/xxxxx/a.bag pose_graph_filename:=/home/xxxx/a.bag.pbstream -resolution=0.05

6.純粋な位置決め機能(バッグは任意の時点から開始する機能を解決しており、実車でテストする必要があります)

demo_backpack_2d_localization.launch:
追加:

<remap from="points2" to="/velodyne_points" />    

注記:

  <!-- <node name="playbag" pkg="rosbag" type="play"
</launch> -->改由手动rosbag play xx.bag -s 50

7. 測位ノードを開始します (センサーからの直接入力が完了しました)。

roslaunch cartographer_ros demo_backpack_2d_localization.launch load_state_filename:=/home/xxxx/a.bag.pbstream

バッグを開始します。

rosbag play xx.bag -s 50

-s 50 は、50 秒目にバッグを開始することを意味します

8.地図製作者の編集

catkin_make_isolated --install --use-ninja

9. 純粋な測位、地図部分の更新をキャンセル

occupancy_grid_node_main.ccoccupancy_grid_publisher_.publish(*msg_ptr); をコメントアウトします。

10. IMUデータと修正が必要な部分を追加します

backpack_2d.launchdemo_backpack_2d_localization.launch添加: <remap from="imu" to="/pa_gs02/imu/data" />
backpack_2d.lua:修改为TRAJECTORY_BUILDER_2D.use_imu_data = true

(3)関連運用ブログ

特定の操作シリーズ:

Cartographer はロボットの純粋な位置決めに使用されます

Cartographer は、メッセージ構造 nav_msgs::Odometry を使用して odom トピックを構築、再配置、公開します。

ROS車記録シリーズ(2) IMU収集、フィルタリング、odomデータとの融合、新しいodomトピックの公開

ROSカート記録シリーズ(8) Raspberry Pi 4bにcartographerをインストールして公式バッグを使ってマッピングをテストする

cartographer_ros 測位関数のポーズ取得と再配置の設定

cartographer pure_localization 純粋な位置変更 + 位置の初期化

ROS カー、LeTV 深度カメラ + 地図作成者 + move_base でナビゲーションを最初から構成する

cartographer+move_base はガゼボの px4 に LIDAR を追加し、SLAM 自動ナビゲーションと障害物回避のために ROS に接続します。

講義 1 [ROS-SLAM] 2D LIDAR 地図製作者が地図を構築する

講座2 【地図製作者】Ubuntu16.04 kinetic 最新版地図製作者のインストール

講義 3 [地図作成者] 純粋なローカリゼーション モード用に RVIZ から初期ポーズを設定する機能を追加する

講義 4 [地図作成者] 純粋な位置決め 純粋な位置特定 pure_localization

講義 5 [地図製作者] シミュレーション環境におけるマッピングと純粋な位置決め

講義 6 [地図作成者] 純粋な位置決めパラメータの最適化 (基礎)

Cartographer のマジック修正により、Cartographer 位置決めモードで開始ポーズが設定されます - 素早い位置変更

おすすめ

転載: blog.csdn.net/weixin_47552638/article/details/125249468