0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Qiita全国学生対抗戦Advent Calendar 2024

Day 7

ROS2のrobot localizationが実機でodomを出力しない

Posted at

状況

環境:ros2 humble
Navigating Using GPS Localizationを試していた.
※githubにあるnavigation2 tutorialのhumbleブランチではnav2_gps_waypoint_follower_demoパッケージは準備されていないので,rollingブランチから直接持ってきた.

「2- Setup Navigation system」の

ros2 launch nav2_gps_waypoint_follower_demo gps_waypoint_follower.launch.py use_rviz:=True

まで実行するとシミュレーションが立ち上がり,robot_localizationにより,
base_footprint->odom
odom->map
のtfをパブリッシュさせることができた.

nav2のhumbleバージョンではfollowGpsWaypoints(wps)メソッドがまだ実装されていないので,「3- Interactive GPS Waypoint Follower」以降は実行できない.

これを実機のセンサデータでlocalizationしてみたい.
しかしなぜかtfがパブリッシュされなかった.

原因

nav2_gps_waypoint_follower_demoのlauchファイルを書き換えたため,parameterの{"use_sim_time": True}を消し忘れていた.
上手くいかなかったrobot_localizationを立ち上げるlaunchファイルの中身

dual_ekf_navsat.launch.py
---(省略)
    return LaunchDescription(
        [
            launch_ros.actions.Node(
                package="robot_localization",
                executable="ekf_node",
                name="ekf_filter_node_odom",
                output="screen",
                parameters=[rl_params_file,{"use_sim_time": True}],<--こいつ
                remappings=[("odometry/filtered", "odometry/local")],
            ),
            launch_ros.actions.Node(
                package="robot_localization",
                executable="ekf_node",
                name="ekf_filter_node_map",
                output="screen",
                parameters=[rl_params_file,{"use_sim_time": True}],<--こいつ
                remappings=[("odometry/filtered", "odometry/global")],
            ),
            launch_ros.actions.Node(
                package="robot_localization",
                executable="navsat_transform_node",
                name="navsat_transform",
                output="screen",
                parameters=[rl_params_file,{"use_sim_time": True}],<--こいつ
                remappings=[
                    ("imu/data", "imu/data"),
                    ("gps/fix", "gps/fix"),
                    ("gps/filtered", "gps/filtered"),
                    ("odometry/gps", "odometry/gps"),
                    ("odometry/filtered", "odometry/global"),
                ],
            ),
        ]
    )

robot localizationはセンサデータのトピックのtime stampを見る.
今回はセンサデータのtime stampは現実の時間になっている.
しかしuse_sim_time=Trueにしたせいでrobot_localizationはシミュレーションの時間を使うことになり,センサデータはlocalizationの考慮に入れられなかった.
よってtfがパブリッシュされなかったと考えられる.

反省

robot_localizationに関する情報がほぼ英語で理解が薄かったため,どこが悪いのか探すのにとても時間がかかってしまった.
シミュレーションでは動くのに実機のデータでは動かない場合,
time stamp関連
サブスクライブするトピック名
などをチェックしてみてほしい.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?