Unconnected tree in hector_slam ( How to kill the gazebo broadcaster node / Delete a frame from tf tree)
Hello,
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"?>
<launch>
<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>
<!--<node pkg="tf" type="static_transform_publisher" name="map_nav_broadcaster" args="0 0 0 0 0 0 map nav 100"/>-->
</launch>
When I test the node in rviz, I get good map results. However, when I rosrun tf view_frames
I see the following tree :
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:
<gazebo>
<plugin name="differential_drive_controller" filename="libgazebo_ros_diff_drive.so">
<rosDebugLevel>Debug</rosDebugLevel>
<publishWheelTF>False</publishWheelTF>
<publishWheelJointState>True</publishWheelJointState>
<alwaysOn>True</alwaysOn>
<updateRate>100.0</updateRate>
<leftJoint>joint_r_wheel</leftJoint>
<rightJoint>joint_l_wheel</rightJoint>
<wheelSeparation>0.22</wheelSeparation>
<wheelDiameter>0.16</wheelDiameter>
<broadcastTF>0</broadcastTF>
<wheelTorque>30</wheelTorque>
<commandTopic>/labrob/cmd_vel</commandTopic>
<robotBaseFrame>base_footprint</robotBaseFrame>
<legacyMode>true</legacyMode>
</plugin>
</gazebo>
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 ...