Replacing gmapping with rgbdslam
I am experimenting with replacing gmapping with rgbdslam on a turtlebot-like robot. Gmapping provides localization data through map->odom transform, and the mapping data through the published topic map.
How should I get these 2 pieces of information with rgbdslam?
I am trying this:
roslaunch rgbdslam rgbdslam_headless.launch
roslaunch rgbdslam octomap_server.launch
rosservice call /rgbdslam/ros_ui_b pause false
rosservice call /rgbdslam/ros_ui send_all
Every time I need an updated map, I call the send_all service, but this also gives the tf for each of the pointcloud, resulting in multiple map->odom transform being broadcast.
For the headless.launch file, I have added the following:
<param name="config/fixed_frame_name" value="/map"/>
<param name="config/ground_truth_frame_name" value=""/><!--empty string if no ground truth-->
<param name="config/base_frame_name" value="/odom"/> <!-- /openni_camera for hand-held kinect. For robot, e.g., /base_link -->
<param name="config/fixed_camera" value="true"/> <!--is the kinect fixed with respect to base, or can it be moved (false makes sense only if transform betw. base_frame and openni_camera is sent via tf)-->
The param "base_frame_name" ought to be something like "base_link", but this will not work (frames can only have one parent) since I have robot_pose_ekf broadcasting odom->base_footprint and robot_state_publisher broadcasting base_footprint->base_link
Also, I had to change line 1306 in graph_manager.cpp to broadcast fixed_frame->[base_frame_name] instead of the current "/openni_camera". I'm still not sure what the "where_mocap_should_be" means.
Am I on the right track? Or is there something already available to produce "map->odom" and publish "map" at regular intervals?
I see a void GraphManager::broadcastTransform(const ros::TimerEvent& )
function commented out. Should I be using this to get localization info instead? How then can I get the map published?