Rosanswers logo


I am looking at the hector_mapping package of the hector_slam stack and I have an issue.

If I visit this page at the bottom of the page I can see the required tf transforms for the node to run. Which is a tf from lidar frame -> base_link. I provide this transform fine to the node via the robot_state_publisher.

I have the following launch file for the node:

<?xml version="1.0"?>

  <arg name="tf_map_scanmatch_transform_frame_name" default="scanmatcher_frame"/>
  <arg name="base_frame" default="base_footprint"/>
  <arg name="odom_frame" default="base_footprint"/>
  <arg name="pub_map_odom_transform" default="true"/>
  <arg name="scan_subscriber_queue_size" default="5"/>
  <arg name="scan_topic" default="/labrob/laser/scan"/>
  <arg name="map_size" default="2048"/>
  <node pkg="hector_mapping" type="hector_mapping" name="hector_mapping" output="screen">
    <!-- Frame names -->
    <param name="map_frame" value="map" />
    <param name="base_frame" value="$(arg base_frame)" />
    <param name="odom_frame" value="$(arg odom_frame)" />
    <!-- Tf use -->
    <param name="use_tf_scan_transformation" value="true"/>
    <param name="use_tf_pose_start_estimate" value="false"/>
    <param name="pub_map_odom_transform" value="$(arg pub_map_odom_transform)"/>
    <!-- Map size / start point -->
    <param name="map_resolution" value="0.050"/>
    <param name="map_size" value="$(arg map_size)"/>
    <param name="map_start_x" value="0.5"/>
    <param name="map_start_y" value="0.5" />
    <param name="map_multi_res_levels" value="2" />
    <!-- Map update parameters -->
    <param name="update_factor_free" value="0.4"/>
    <param name="update_factor_occupied" value="0.9" />    
    <param name="map_update_distance_thresh" value="0.01"/>
    <param name="map_update_angle_thresh" value="0.001" />
    <param name="laser_z_min_value" value = "-1.0" />
    <param name="laser_z_max_value" value = "1.0" />
    <!-- Advertising config --> 
    <param name="advertise_map_service" value="true"/>
    <param name="scan_subscriber_queue_size" value="$(arg scan_subscriber_queue_size)"/>
    <param name="scan_topic" value="$(arg scan_topic)"/>
    <!-- Debug parameters -->
      <param name="output_timing" value="false"/>
      <param name="pub_drawings" value="true"/>
      <param name="pub_debug_output" value="true"/>
    <param name="tf_map_scanmatch_transform_frame_name" value="$(arg tf_map_scanmatch_transform_frame_name)" />
  <!--<node pkg="tf" type="static_transform_publisher" name="map_nav_broadcaster" args="0 0 0 0 0 0 map nav 100"/>-->

When I test the node in rviz, I get good map results. However, when I rosrun tf view_frames I see the following tree :

image description

I ran roswtf and I get the following errors:

Found 2 error(s).

ERROR TF re-parenting contention:
 * reparenting of [base_footprint] to [map] by [/hector_mapping]
 * reparenting of [base_footprint] to [odom] by [/gazebo]

ERROR TF multiple authority contention:
 * node [/hector_mapping] publishing transform [base_footprint] with parent [map] already published by node [/gazebo]
 * node [/gazebo] publishing transform [base_footprint] with parent [odom] already published by node [/hector_mapping]

The cause of this is that the existence of 2 parents for the base_footprint frame, correctly? I have the following plugin in my urdf model as a gazebo element, which automatically broadcasts the connection odom -> base_footprint:

   <plugin name="differential_drive_controller" filename="libgazebo_ros_diff_drive.so">


Whatever I try to change, the broadcasting from the gazebo node remains.

How is it possible to kill the gazebo broadcasting without killing the gazebo simulation or is it possible to delete a frame from the tree ?

P.S.: I don't want to use the odometric data for my robot, that's why I am not just setting the "odom" parameter as odom in the launch file of the hector_mapping node. Same problem will arise if I set to false the "pub_map_odom_transform" parameter and use the static broadcaster at the end of the launch file.

I also have seen this question but I cannot find a solution with the two options provided, even though the person that asked the question made it work with option number 1.

Originally posted by patrchri on ROS Answers with karma: 354 on 2016-08-27

Post score: 0


1 Answer 1


Rosanswers logo

Check this out: http://answers.ros.org/question/229722/how-to-stop-gazebo-publishing-tf/#229735

Originally posted by DavidN with karma: 544 on 2016-08-28

This answer was ACCEPTED on the original site

Post score: 0

Original comments

Comment by patrchri on 2016-08-28:
Firstly, thank you for your idea ! :) I didn't think of remapping.

For me for some reason it doesn't work the remapping you specifically proposed, probably it's something wrong that I do, but I hope I will find it.

Comment by patrchri on 2016-08-28:
I tried to modify the launch file in the root directory and for some reason the gazebo node kept using the tf. I then tried to copy paste the empty_world.launch to my package directory and use it from there still didn't work. Anyway in case I don't find something, I will ask again. Thanks again :)


Your Answer

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