(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 つのファイルをダウンロードします。
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. 公式データセットのダウンロードリンク
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.cc の occupancy_grid_publisher_.publish(*msg_ptr);
をコメントアウトします。
10. IMUデータと修正が必要な部分を追加します
backpack_2d.launch和demo_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 位置決めモードで開始ポーズが設定されます - 素早い位置変更