ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question
1

RGBDSLAM+IMU

asked 2013-05-27 01:05:51 -0600

INSA gravatar image

updated 2014-01-28 17:16:39 -0600

ngrennan gravatar image

Hi guys,

I am using the RGBDSLAM package to build a 3D map using a stereo camera (Bumblebee2) :

Video result

Sometimes the 3D reconstruction (pointcloud matching) is not done in a good way. I want to improve the mapping results with IMU information. I just want to know which variable is taking the Odometry information to create an edge in the Graph. I suppose that it is "dom_edge.informationMatrix" in "graph_manager.cpp"

if(!invalid_odometry)
{
  ROS_INFO("Adding odometry motion edge for Node %i (if available, otherwise using identity)", (int)graph_.rbegin()->second->id_);
  LoadedEdge3D odom_edge;
  odom_edge.id1 = sequentially_previous_id;
  odom_edge.id2 = new_node->id_;
  odom_edge.mean = tf2G2O(odom_delta_tf);

  //Real odometry
  //FIXME get odometry information matrix and transform it to the optical frame
  odom_edge.informationMatrix = Eigen::Matrix<double,6,6>::Identity(); //0.1m /0.1rad error
  addEdgeToG2O(odom_edge,graph_[sequentially_previous_id],new_node, true,true, curr_motion_estimate);
  graph_[new_node->id_] = new_node; //Needs to be added

Under //Real odometry, all what i see is :

odom_edge.informationMatrix = Eigen::Matrix<double,6,6&gt;::identity();< p="">

In which identity matrix is used. Where is the real information matrix ??

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted
1

answered 2013-05-27 06:07:03 -0600

Unfortunately, there is none, this functionality is just a stub. TF doesn't deliver uncertainties, so one would have to incorporate a real odometry message, e.g. nav_msgs/Odometry, which requires to add listeners to openni_listeners that subscribe to that odometry topic and add edges to the graph accordingly.

edit flag offensive delete link more

Comments

Hi Felix, I am willing to create a tf listener on which i will put the tfs generated by the Fovis rosnode to replace the "odom_delta_tf" that represents the transformation between two pointclouds.

INSA gravatar image INSA  ( 2013-05-27 06:25:36 -0600 )edit

The fovis rosnode will be augmented with IMU data and this will allow me to match pointclouds "maybe" in better way. What do you think ?

INSA gravatar image INSA  ( 2013-05-27 06:26:16 -0600 )edit

Might work, but it will require tinkering with the information matrix to get the fusion of the data right. Otherwise the odometry will either be mostly ignored or greatly override the other edges.

Felix Endres gravatar image Felix Endres  ( 2013-05-28 00:09:55 -0600 )edit

In which way would I have to change the information matrix to greatly override the other edges with the odometry?

Bubble gravatar image Bubble  ( 2013-06-27 22:41:13 -0600 )edit

I suggest to proceed like this: Change src/graph_manager.cpp line 475 to a ROS_INFO_STREAM instead of ...DEBUG..., then check out the logfile what typical values are (I quickly checked, they were about 5-100), then use greater values for the dimensions you cover (x,y,yaw).

Felix Endres gravatar image Felix Endres  ( 2013-07-03 03:19:41 -0600 )edit

Question Tools

Stats

Asked: 2013-05-27 01:05:51 -0600

Seen: 1,345 times

Last updated: May 27 '13