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

goetz.marc's profile - activity

2017-06-27 10:00:08 -0500 received badge  Good Answer (source)
2015-05-29 13:24:00 -0500 received badge  Enlightened (source)
2015-01-09 06:48:00 -0500 received badge  Nice Question (source)
2014-07-09 22:42:03 -0500 received badge  Nice Answer (source)
2014-07-09 10:30:10 -0500 received badge  Commentator
2014-07-09 10:30:10 -0500 commented answer combine visual odometry data from ccny_rgbd with encoders/IMU

Hi @TSC, the values are: X, Y, Z, Roll, Pitch, Yaw; so yes, it should work for UAVs

2013-07-31 00:55:13 -0500 received badge  Nice Answer (source)
2013-07-29 23:48:23 -0500 answered a question Generate map with underwater sonar data

when you already have a 3d pointcloud you could have a look at http://www.ros.org/wiki/octomap_server , just give this node your pointcloud2-msgs and it will generate a 2D and 3D map out of it (the 2d map is just the downprojected 3d map)

just do an apt-get install ros-groovy-octomap*

example launch file:

<!--
firing up the octomap server to generate 2D/3D occupancy maps
-->

<launch>
  <node pkg="octomap_server" type="octomap_server_node" name="octomap_server">
    <!-- resolution in meters per pixel -->
    <param name="resolution" value="0.05" />
    <!-- name of the fixed frame, needs to be "/map" for SLAM -->
    <param name="frame_id" type="string" value="/map" />
    <!-- max range / depth resolution of the kinect in meter -->
    <param name="sensor_model/max_range" value="4.0" />
    <param name="latch" value="true" />
    <!-- max/min height for occupancy map, should be in meters -->
    <param name="pointcloud_max_z" value="1.75" />
    <param name="pointcloud_min_z" value="0.1" />
    <!-- topic from where pointcloud2 messages are subscribed -->
    <remap from="cloud_in" to="/camera/depth_registered/points" />
  </node>
</launch>
2013-07-09 11:49:35 -0500 answered a question RGBD-slam start without enter keyword(space)

hello Qubaish,

there is a rosparam "start_paused" which is per default true, just set it to false via the launchfile of the rgbdslam node

<rosparam name="start_paused" value="false" />
2013-07-07 23:57:04 -0500 commented answer combine visual odometry data from ccny_rgbd with encoders/IMU

you may need to install boost first: sudo apt-get install libboost-all-dev

2013-07-07 23:55:06 -0500 commented answer combine visual odometry data from ccny_rgbd with encoders/IMU

for VISUAL_COVARIANCE: after the includes put "double VISUAL_COVARIANCE;", or just replace it in the code with your desired value, for boost it should be enough to "#include <boost/assign/list_of.hpp>", alternatively you can try to find out how to assign the list without boost

2013-07-03 21:50:51 -0500 answered a question combine visual odometry data from ccny_rgbd with encoders/IMU

hi rossi

the matrix is zero because ccny_rgbd doesn't calculate the covariance for the visual odometry, so the matrix is initialized as all-zero

i had the same issue, so i just manually set the covariance

of course this is just a quick&dirty fix, since the covariance remains the same but instead should "grow" over time, but yeah, it is enough for my needs like this

ccny_rgbd_tools/ccny_rgbd/src/apps/visual_odometry.cpp, line ~384

void VisualOdometry::publishOdom(const std_msgs::Header& header)
{
  OdomMsg odom;
  // this prevents the "out of sync" / "no time" error
  odom.header.stamp = ros::Time::now();
  odom.header.frame_id = fixed_frame_;
  odom.child_frame_id = "base_link";
  tf::poseTFToMsg(f2b_, odom.pose.pose);
  // robot_pose_ekf doesn't accept all-zeros in the covariance matrix
  odom.pose.covariance = boost::assign::list_of(VISUAL_COVARIANCE)(0)(0)(0)(0)(0)
                                               (0)(VISUAL_COVARIANCE)(0)(0)(0)(0)
                                               (0)(0)(999999)(0)(0)(0)
                                               (0)(0)(0)(999999)(0)(0)
                                               (0)(0)(0)(0)(999999)(0)
                                               (0)(0)(0)(0)(0)(VISUAL_COVARIANCE);
    odom.twist.covariance = boost::assign::list_of(VISUAL_COVARIANCE)(0)(0)(0)(0)(0)
                                               (0)(VISUAL_COVARIANCE)(0)(0)(0)(0)
                                               (0)(0)(999999)(0)(0)(0)
                                               (0)(0)(0)(999999)(0)(0)
                                               (0)(0)(0)(0)(999999)(0)
                                               (0)(0)(0)(0)(0)(VISUAL_COVARIANCE);
  odom_publisher_.publish(odom);
}

VISUAL_COVARIANCE is a rosparam, which i can set via the launch-file

ccny_rgbd_tools/ccny_rgbd/src/apps/visual_odometry.cpp, line ~107

void VisualOdometry::initParams()
{
    nh_private_.param<double>("VISUAL_COVARIANCE", VISUAL_COVARIANCE, 0.2);

  if (!nh_private_.getParam ("publish_tf", publish_tf_))
    publish_tf_ = true;
  ...
2013-06-27 23:52:52 -0500 commented question run hector_slam with LaserScan topic only

try putting <param name="map_frame" value="base_link"/> into your launch file

2013-06-25 21:34:43 -0500 received badge  Famous Question (source)
2013-06-06 21:42:04 -0500 commented question the right way to install openi-kinect

did you try using apt-get? the packages are ros-groovy-openni-camera and ros-groovy-openni-launch, or fuerte respectively

2013-05-29 22:18:27 -0500 commented question turtlebot Failed to open port /dev/ttyUSB0

i had a similar problem with p2os. are you in the dialout group? useradd -G dialout $USER

2013-05-29 21:23:42 -0500 commented question unable to install rgdbslam_freiburg

you might wanna post the log / error message you get

2013-05-29 14:06:34 -0500 received badge  Good Answer (source)
2013-05-28 22:29:13 -0500 commented answer RGBDSLAM ICP fallback when there are not enough features

honestly i can't really see any difference, neither good nor bad; but i'm using rgbdslam in headless-mode (so no GUI) and only display the generated octomap (res: 0.075), which might be a reason that i'm not noticing any changes

2013-05-28 22:18:18 -0500 received badge  Nice Answer (source)
2013-05-28 21:51:12 -0500 received badge  Teacher (source)
2013-05-28 21:47:12 -0500 answered a question How can I get real-time input from user?

As HenryW already said, you can use the normal python method, for example

#!/usr/bin/env python

from rospy import init_node, is_shutdown

if __name__ == '__main__':

  init_node('input_test')

  while not is_shutdown():

      print "gimme something, please?"
      something = raw_input()
      print "thanks for giving me " + something

compiling this node and then running it leads to

gimme something, please?
beer
thanks for giving me beer
gimme something, please?
box
thanks for giving me box
gimme something, please?
plant
thanks for giving me plant
gimme something, please?

If this doesn't work for you, update your question with your code and error messages.

2013-05-27 22:23:41 -0500 commented question How to install ros-groovy-moveit-full?

have you tried to install these three dependencies manually?

2013-05-26 22:14:54 -0500 received badge  Scholar (source)
2013-05-26 22:14:39 -0500 commented answer RGBDSLAM ICP fallback when there are not enough features

compiling now works fine, thank you

2013-05-26 21:39:16 -0500 received badge  Notable Question (source)
2013-05-24 06:51:23 -0500 received badge  Popular Question (source)
2013-05-24 02:00:48 -0500 received badge  Editor (source)
2013-05-23 02:44:46 -0500 received badge  Student (source)
2013-05-23 02:42:54 -0500 asked a question RGBDSLAM ICP fallback when there are not enough features

I'm currently using RGBDSLAM for mapping and autonomous driving. The room I'm trying to map has a big white wall, of course there are not enough features to be detected/extracted (<10), so RGBDSLAM tells me that it didn't add this node ("Found only %i features on image, node is not included").

So my question is: is the functionality for falling back to ICP only(!), if there are not enough features in the 2d image already implemented and if so, what am I doing wrong in the config/CMakeLists.txt ?

I first tried to activate ICP in the CMakieLists.txt, and in the launch file

  • < param name="config/use_icp" value="true" />
  • < param name="config/icp_method" value="icp" />
  • set(USE_GICP_BIN 1)
  • set(USE_GICP_CODE 0)
  • set(USE_PCL_ICP 1)

Do i need to pick only one of these or do I have to combine them in some way?

Using only USE_PCL_ICP 1 doesn't seem to have an effect. Additionaly setting USE_GICP_BIN 1 is the same. Setting USE_GICP_CODE 1 leads to a compile error:

/home/sarcoma/groovy/sandbox/rgbdslam/rgbdslam/src/node.cpp:1221:114: error: ‘getRelativeTransformationTo_ICP_code’ was not declared in this scope

So then I took a look at the code.

The comment "///Apply Feature based Alignment and/or ICP" in node.cpp suggests, that (G)ICP was indeed intended to be used to improve the feature-based transformation estimation, or to replace it (when no features are found?)

In graph_manager.cpp I found the origion of the "node is not included" message:

if ((int)new_node->feature_locations_2d_.size() < ps->get<int>("min_matches") && 
    ! ps->get<bool>("keep_all_nodes"))

Setting the "keep_all_nodes" option in the launch file sure avoided the problem but, yeah, didn't help, because the new pointclouds were added all in the same position ("no-motion assumption"). Decreasing the "min_matches" option to <10 only drastically decreased the quality of the output.

Commenting out said if-statement didn't help either.

Another thing I found in node.cpp:

#if  defined USE_ICP_CODE || defined USE_ICP_CODE
///ICP - This sets the icp transformation in "mr", if the icp alignment is better than the ransac_quality
found_transformation = found_transformation || edge_from_icp_alignment(found_transformation, this, older_node, mr, ransac_quality);
#endif

So, when USE_ICP_CODE is defined (which it is, if USE_GICP_BIN or USE_GICP_CODE are set to 1?), the function edge_from_icp_alignment should be called, which should produce the transformation estimation even without features?

I also tried "manually" doing ICP when the if-statement for not enough features is triggered:

    if ((int)new_node->feature_locations_2d_.size() < ps->get<int>("min_matches") && 
    ! ps->get<bool>("keep_all_nodes"))
{
    //magic?
    ROS_INFO("Found only %i features on image, initializing ICP fallback",(int)new_node->feature_locations_2d_.size());
    pcl::VoxelGrid<point_type> voxel;
    new_node->id_ = graph_.size();
    ros::Time now = ros::Time::now();
    std::vector<int> indices;
    pointcloud_type::Ptr cloud_1;
    pointcloud_type::Ptr cloud_2;
    pcl::IterativeClosestPoint<point_type, point_type>* icp = new pcl::IterativeClosestPoint<point_type, point_type>();
    Node* old_node = graph_[graph_.size()-1];
    cloud_1 = old_node->pc_col;
    cloud_2 = new_node->pc_col;
    pcl::removeNaNFromPointCloud(*cloud_1, *cloud_1, indices);
    pcl::removeNaNFromPointCloud(*cloud_2, *cloud_2, indices);
    voxel.setLeafSize(0.01, 0.01, 0.01);
    voxel.setInputCloud(cloud_1);
    voxel.filter(*cloud_1 ...
(more)
2013-05-23 01:45:19 -0500 received badge  Supporter (source)