ROS Resources: Documentation | Support | Discussion Forum | Service Status | Q&A answers.ros.org

Google cartographerでのマップ作成

お世話になります。

下記環境でGoogle cartographerでのマップ作成を検討しております。
■ロボット環境
・車輪エンコーダからオドメトリ情報 (nav_msgs/Odometry)
・2D LIDERからスキャン情報 (sensor_msgs/LaserScan)
■PC動作環境
・ubuntu16.04
・ROS Kinetic

〇これまでの検討結果
A.ソースビルドにてcartographerパッケージ作成
A-1. 公式ドキュメント手順通りインストールし、デモlaunchファイル(IMUとマルチエコーLIDER)にてマップ作成が成功
A-2.上記で使用したlaunch、lua、urdfファイルを当方環境にあわせて改造
その結果、下記エラーメッセージが発生しマップ作成がされない
エラーメッセージ:[ WARN] [1550040294.226928229, 1549262134.107981875]: W0213 15:44:54.000000 4135 tf_bridge.cc:52] “laser” passed to lookupTransform argument source_frame does not exist.

B.バイナリインストールしてcartographerパッケージ作成
ソースビルドすると正常動作せず、バイナリインストールすると解決したとの情報を得たため、
ソースビルドしたパッケージを削除して、cartographer、cartographer_ros、cartographer_ros_msgs、cartographer_rvizをインストール

B-1.デモlaunchファイル(IMUとマルチエコーLIDER)を起動するが、下記エラーメッセージが発生しマップ作成がされない
エラーメッセージ:File “map_builder.lua” was not found.
ただmap_builder.luaは、cartographer/configration_filesフォルダ内にあることは確認済みです。

本件のエラー原因として考えられることをご教示いただけますと幸いです。

A. に関して、原因はセンサーの位置情報が"laser"タスクフレームとして定義されていないことです。Launchファイルにレーザーセンサーの位置は定義されていますか。

gbiggs様
回答ありがとうございます。

laserですがlaunchファイルではなく、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=“laser_link”
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=“laser_link_joint” type=“fixed”
parent link=“base_link”
child link=“laser_link”
origin xyz=“0.1007 0 0.0558”
joint

robot

上記で間違いがあれば、ご教示いただけますか。
またlaunchファイルにて定義する必要があるのでしょうか。

URDFはlaser_linkを定義しています。Cartographerはlaserを探しています。

お世話になります。
遅くなりましたが、その後の経過報告と新たな質問があります。
ご教示いただけますと幸いです。

1.取得したrosbagに何か不足があるかと想定し、rosbagではなく実機動作させながらマップ作成
2.エラー(Check failed: data.time > std::prev(trajectory.end())->first)が発生したため下記URL情報に従って、ソースコード変更。(CHECK_GTをCHECK_GEに変更)

その結果マップ作成できましたが、以下の懸念点が残ります。
A.tf treeに"map"がない。“odom”-“base_link”-"laser"となります。
ちなみにgmapping、cartographerデモプログラムでは” odom” の上に”map”が存在します。
これは何かの設定ミスがあるということでしょうか。その場合どこで設定すべきでしょうか。

B.同環境でgmappingで作成したマップと比較して精度が悪いです。(定量的に表現できないですが、明らかに歪んでいます)
上記tf設定などの影響でしょうか。それともパラメータをデフォルトのままで使用していることが原因でしょうか。

お世話になります。
本件ですが以下に修正したことで解決しました。
ご協力いただいた方、ありがとうございました。

A.tf設定を下記に変更

■backpack_2d.luaファイル
map_frame = “map”,
tracking_frame = “base_link”,
published_frame = “odom”,

■launchファイル
pkg=“tf”
type=“static_transform_publisher”
name=“base_link_connect”
args=“0 0 0 0 0 0 /base_link /laser_link 100”

B.cartographerで作製したマップデータにて、navigationパッケージを動作させるとすぐに自己位置を見失いエラーとなっていましたが、cartographerで作製したセル内データを0/100の2値化することでnavigationパッケージが壁を認識できるようになり正常動作できました。