te0036
February 20, 2019, 7:20pm
1
お世話になります。
下記環境で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フォルダ内にあることは確認済みです。
本件のエラー原因として考えられることをご教示いただけますと幸いです。
gbiggs
February 21, 2019, 12:04am
2
A. に関して、原因はセンサーの位置情報が"laser"タスクフレームとして定義されていないことです。Launchファイルにレーザーセンサーの位置は定義されていますか。
te0036
February 21, 2019, 7:20am
3
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ファイルにて定義する必要があるのでしょうか。
gbiggs
February 21, 2019, 7:23am
4
URDFはlaser_link
を定義しています。Cartographerはlaser
を探しています。
te0036
March 12, 2019, 3:37am
5
お世話になります。
遅くなりましたが、その後の経過報告と新たな質問があります。
ご教示いただけますと幸いです。
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設定などの影響でしょうか。それともパラメータをデフォルトのままで使用していることが原因でしょうか。
te0036
April 23, 2019, 4:22am
6
お世話になります。
本件ですが以下に修正したことで解決しました。
ご協力いただいた方、ありがとうございました。
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パッケージが壁を認識できるようになり正常動作できました。