Ask Your Question
1

rgbdslam runs without issues, but octomap does not connect/receive pointcloud (transforms?)

asked 2014-05-28 04:37:45 -0600

xuningy gravatar image

updated 2014-06-04 08:55:52 -0600

I installed rgbdslam and octomap. Have been trying to run rgbdslam with octomap. Eventual goal is to get the MarkerArray /occupied_cells_vis_array as it should. Some things I've done:

METHOD 1

  1. Tried to run kinect+rgbdslam.launch and octomap_server.launch.
  2. Open rviz and nothing is received on the /octomap_point_cloud_array, /occupied_cells_vis_array, /rgbdslam/aggregate_clouds OR/rgbdslam/batch_clouds. The only PointCloud2 topics that displays an output are /camera/depth_registered/points.

METHOD 2

  1. Tried to run rgbdslam_octomap.launch. Worked as well, but due to the color_octomap_server_node not found under octomap_server package (I believe there are some posts saying that you need the experimental version of octomap and some posts saying that the octomap_server is by default colored) I edited it so that it reads octomap_server_node.
  2. Runs as well, also gives the same problem as above.

METHOD 3

While invoking the above scenario, I ran the following commands:

Runningroswtf gives that node subscription is unconnected: */rgbdslam: */cloud_in

Running rosrun tf view_frames gives camera_link > /camera_rgb_frame > /camera_rgb_optical_frame and camera_link > /camera_depth_frame > /camera_depth_optical_frame. Two branches only.

Runningrostopic_list The expect topics are listed: /cloud_in /octomap_point_cloud_array /occupied_cells_vis_array /rgbdslam/batch_clouds /rgbdslam/aggregate_clouds /tf

Running rosservice call /rgbdslam/ros_ui send_all did not change the above results.

I think it is a mapping issue and that the point clouds are not transformed to the correct topics. I am not sure which point cloud problem it is. Please give some pointers as how I can solve this problem.

EDIT 05/28/14 +1h: The issue lies in the transform. /map is not present in my frames.pdf view. Not sure how to solve this problem either.

EDIT 06/04/14: Solved building octomap using rgbdslam data by recording a .bag file, launching octomap_server, and viewing it in RViz. No fix for continuous rgbdslam mapping and trajectory output found yet.

rgbdslam_octomap.launch

<launch>
  <env name="ROSCONSOLE_CONFIG_FILE" value="$(find rgbdslam)/log.conf"/>

  <!--might only work with the experimental octomap (as of May 11)-->
    <include file="$(find openni_launch)/launch/openni.launch"/>
    <node pkg="rgbdslam" type="rgbdslam" name="rgbdslam" cwd="node" required="false" output="log" > 
      <param name="config/topic_image_mono"              value="/camera/rgb/image_color"/>
      <param name="config/topic_points"                  value="/camera/rgb/points"/> <!--if empty, poincloud will be reconstructed from image and depth -->
      <param name="config/wide_topic"                    value=""/>;
      <param name="config/wide_cloud_topic"              value=""/>;
      <param name="config/drop_async_frames"             value="true"/> <!-- Check association of depth and visual image, reject if not in sync -->
      <param name="config/feature_detector_type"         value="SIFTGPU"/><!-- If SIFTGPU is enabled in CMakeLists.txt, use SURF here -->
      <param name="config/feature_extractor_type"        value="SIFTGPU"/><!-- If SIFTGPU is enabled in CMakeLists.txt, use SURF here -->
      <param name="config/matcher_type"                  value="FLANN"/> <!-- FLANN (not avail for ORB features), SIFTGPU (only for SIFTGPU detector)  or BRUTEFORCE-->
      <param name="config/max_keypoints"                 value="700"/><!-- Extract no more than this many keypoints (not honored by SIFTGPU)-->
      <param name="config/min_keypoints"                 value="300"/><!-- Extract no less than this many ... -->
      <param name="config/nn_distance_ratio"             value="0.6"/> <!-- Feature correspondence is valid if distance to nearest neighbour is smaller than this parameter times the distance to the 2nd neighbour ...
(more)
edit retag flag offensive close merge delete

2 Answers

Sort by ยป oldest newest most voted
1

answered 2014-05-28 08:23:28 -0600

xuningy gravatar image

Solved. The problem of not seeing /rgbdslam/batch_clouds or /occupied_cells_vis_array was solved by this thread: http:// answers.ros.org/question/53228/rgbdslam-cannot-produce-octomap/#53511

The problem is solved by having to "send_file" or ctrl+M in RGBDSLAM view at each frame. Then toggle the topics in RVIZ to show your desired topic.

No solution was given to continuous map building by RGBDSLAM yet. Will be posting questions on this later.

edit flag offensive delete link more

Comments

25 pts required to accept your own answer. Anyone that would like to close this for me is appreciated.

xuningy gravatar imagexuningy ( 2014-05-28 08:24:14 -0600 )edit

Hi @loutifner ! Are you trying to do something like online SLAM and map creation for path planning and navigation? I also need what you have achieved so to obtain coordinates of a possible path a exploring UAV can follow. I'll be using rgbdslam+path planing pkg to do it so. Tips needed! Thanks

TSC gravatar imageTSC ( 2014-06-09 15:40:25 -0600 )edit
0

answered 2014-06-03 08:51:54 -0600

updated 2014-06-03 08:53:36 -0600

"Continuous map building" via SLAM is not a good combination with octomaps. The Graph-based approach ensures that information as introduced by large loop closures is integrated in the trajectory estimate. Therefore the trajectory estimate can become better over time instead of continuously degrading. However, once a point cloud is raytraced to the octomap, its sensor origin cannot be changed anymore, therefore the trajectory and the octomap diverge if (even small) loop closures occur after raycasting.

In essence, you therefore would use RGBDSLAM for visual odometry, not for SLAM. Therefore RGBDSLAM expects you to send the clouds after mapping to the octomap server (it now has the octomap library builtin btw).

Be aware that Ctrl-M will always send all clouds, i.e., if you do it every frame, you will send the first frame N times, the second frame N-1 times and so forth.

edit flag offensive delete link more

Comments

Hi Felix, Thanks for the answer. So Octomaps isn't ideal for "continuous map building", but I see in a presentation here(http://mobilerobotics.cs.washington.edu/rgbd-workshop-2013/talks/RSS_RGBD_Burgard.pdf) that I am able to get a camera trajectory and a 3D map (accumulated point clouds, although I've followed your advice here(http://answers.ros.org/question/33909/) to clear point cloud data as I go along. Point is, I am trying to create SLAM methods while saving 3D map, Even I do use the "rosservice send_all" and build the octomap incrementally using a .bag file, what would be the most efficient way to achieve this using rgbdslam? Thanks a ton.

xuningy gravatar imagexuningy ( 2014-06-04 08:52:45 -0600 )edit

First, if you clear the cloud after sending you solve the last issue I mention. The best way to voxelize online depends on how much delay you are willing to accept. If you don't need to be particularly current, you could voxelize frames when the camera goes out of view or after a short delay. Check the code for occurences of "octomap_online_creation", this should show you the places where to implement such a delay.

Felix Endres gravatar imageFelix Endres ( 2014-06-05 05:16:58 -0600 )edit

Great, thanks a ton!

xuningy gravatar imagexuningy ( 2014-06-05 08:14:05 -0600 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 2014-05-28 04:37:45 -0600

Seen: 1,972 times

Last updated: Jun 04 '14