0
$\begingroup$

I am trying to use Rtabmap with filtered odometry from ekf (robot_localization) I used the turtlebot demo, but changed the topics for my robot. It works, the map looks alright, but there is a constant error message:

[rtabmap-1] Error:   TF_SELF_TRANSFORM: Ignoring transform from authority "Authority undetectable" with frame_id and  child_frame_id "map" because they are the same
[rtabmap-1]          at line 209 in ./src/buffer_core.cpp
[rviz2-3] Error:   TF_SELF_TRANSFORM: Ignoring transform from authority "Authority undetectable" with frame_id and  child_frame_id "map" because they are the same
[rviz2-3]          at line 209 in ./src/buffer_core.cpp
[rtabmap_viz-2] Error:   TF_SELF_TRANSFORM: Ignoring transform from authority "Authority undetectable" with frame_id and  child_frame_id "map" because they are the same
[rtabmap_viz-2]          at line 209 in ./src/buffer_core.cpp

There is also a similar error message from the EKF node and navsat transform node:

[ekf_node-5] Error:   TF_SELF_TRANSFORM: Ignoring transform from authority "Authority undetectable" with frame_id and  child_frame_id "map" because they are the same
[ekf_node-5]          at line 209 in ./src/buffer_core.cpp
[navsat_transform_node-6] Error:   TF_SELF_TRANSFORM: Ignoring transform from authority "Authority undetectable" with frame_id and  child_frame_id "map" because they are the same
[navsat_transform_node-6]          at line 209 in ./src/buffer_core.cpp

I launched rtabmap with:

ros2 launch rtabmap_launch rtabmap.launch.py visual_odometry:=false frame_id:=base_link odom_topic:=/odometry/filtered args:="-d" use_sim_time:=true rgb_topic:=/camera/image_raw depth_topic:=/camera/depth/image_raw camera_info_topic:=/camera/camera_info approx_sync:=true qos:=2 rviz:=true

There are no error messages when I launch it with odom_topic:=odom.

Rtabmap is not publishing to /odometry/filtered as far as I can tell.

ros2 topic info /odometry/filtered
Type: nav_msgs/msg/Odometry
Publisher count: 1
Subscription count: 3

view frames doesn't show anything unusual either, though the same error appeared on trying to run it.

Error:   TF_SELF_TRANSFORM: Ignoring transform from authority "default_authority" with frame_id and  child_frame_id "map" because they are the same
         at line 209 in ./src/buffer_core.cpp

It still works, but I'd like to know where this error is coming from if possible.

Thanks.

Edit: Config files, EKF:

    ### ekf config file ###
ekf_filter_node:
    ros__parameters:
# The frequency, in Hz, at which the filter will output a position estimate. Note that the filter will not begin
# computation until it receives at least one message from one of theinputs. It will then run continuously at the
# frequency specified here, regardless of whether it receives more measurements. Defaults to 30 if unspecified.
        frequency: 30.0

# ekf_localization_node and ukf_localization_node both use a 3D omnidirectional motion model. If this parameter is
# set to true, no 3D information will be used in your state estimate. Use this if you are operating in a planar
# environment and want to ignore the effect of small variations in the ground plane that might otherwise be detected
# by, for example, an IMU. Defaults to false if unspecified.
        two_d_mode: false

# Whether to publish the acceleration state. Defaults to false if unspecified.
        publish_acceleration: true

# Whether to broadcast the transformation over the /tf topic. Defaults to true if unspecified.
        publish_tf: true

# 1. Set the map_frame, odom_frame, and base_link frames to the appropriate frame names for your system.
#     1a. If your system does not have a map_frame, just remove it, and make sure "world_frame" is set to the value of odom_frame.
# 2. If you are fusing continuous position data such as wheel encoder odometry, visual odometry, or IMU data, set "world_frame"
#    to your odom_frame value. This is the default behavior for robot_localization's state estimation nodes.
# 3. If you are fusing global absolute position data that is subject to discrete jumps (e.g., GPS or position updates from landmark
#    observations) then:
#     3a. Set your "world_frame" to your map_frame value
#     3b. MAKE SURE something else is generating the odom->base_link transform. Note that this can even be another state estimation node
#         from robot_localization! However, that instance should *not* fuse the global data.
        map_frame: map              # Defaults to "map" if unspecified
        odom_frame: odom            # Defaults to "odom" if unspecified
        base_link_frame: base_link  # Defaults to "base_link" ifunspecified
        world_frame: map           # Defaults to the value ofodom_frame if unspecified

        odom0: /odom
        odom0_config: [false, false, false,
                       false, false, false,
                       true,  true,  false,
                       false, false, false,
                       false, false, false]

        imu0: /imu_plugin/out
        imu0_config: [false, false, false,
                      true,  true,  true,
                      false, false, false,
                      false, false, false,
                      false, false, false]

I'm not using a config file for Rtabmap. I'm launching it through:

ros2 launch rtabmap_launch rtabmap.launch.py visual_odometry:=false frame_id:=base_link odom_topic:=/odometry/filtered args:="-d" use_sim_time:=true rgb_topic:=/camera/image_raw depth_topic:=/camera/depth/image_raw camera_info_topic:=/camera/camera_info approx_sync:=true qos:=2 rviz:=true
$\endgroup$
1
  • $\begingroup$ Can you include your config files? $\endgroup$
    – automatom
    Feb 15 at 15:42

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.