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

mjjdick's profile - activity

2018-10-04 02:47:59 -0500 received badge  Famous Question (source)
2018-09-24 12:27:20 -0500 marked best answer what is the differences between ego-motion and odometry

I mean in 3D lidar. like LOAM, we say odometry estimation always means estimate the x,y,z,roll,pitch and yaw between two scans of lidar. but recently, I found the ego-motion seems also about this problem. so , what is the difference between the two "wrod" means? thx for your help so much!!

2018-09-03 20:07:01 -0500 received badge  Famous Question (source)
2018-07-09 14:35:33 -0500 received badge  Notable Question (source)
2018-07-09 03:31:37 -0500 received badge  Popular Question (source)
2018-07-08 21:02:15 -0500 asked a question what is the differences between ego-motion and odometry

what is the differences between ego-motion and odometry I mean in 3D lidar. like LOAM, we say odometry estimation always

2018-03-09 04:51:51 -0500 received badge  Famous Question (source)
2018-03-09 04:51:51 -0500 received badge  Notable Question (source)
2018-03-08 12:36:39 -0500 received badge  Notable Question (source)
2018-03-08 12:36:39 -0500 received badge  Popular Question (source)
2017-12-05 05:51:25 -0500 commented question How can I use ros with tensorflow in C++?

thx!it works!!!but I found it can not work right in debug mode,does anyone have the same problem with me?

2017-12-03 22:09:40 -0500 received badge  Popular Question (source)
2017-12-01 04:05:10 -0500 asked a question How can I use ros with tensorflow in C++?

How can I use ros with tensorflow in C++? I want to use ros with tensorflow module in C++, any one has ideas?

2017-09-30 02:25:52 -0500 marked best answer why pcl algothm so fast?

Hello: I want to write a VoxelGrid filter which can filter the center of the voxel. I just write the same as pcl source code in pcl/filters/include/pcl/filters/impl/filter.hpp. here is my code:

pcl::PointXYZI min_p,max_p;
pcl::getMinMax3D(*input_cloud_ptr_,min_p,max_p);

int dx = static_cast<int64_t>((max_p.x - min_p.x) * inverse_leaf_size_[0]) + 1;
int dy = static_cast<int64_t>((max_p.y - min_p.y) * inverse_leaf_size_[1]) + 1;
int dz = static_cast<int64_t>((max_p.z - min_p.z) * inverse_leaf_size_[2]) + 1;

if ((dx*dy*dz) > static_cast<int64_t>(std::numeric_limits<int32_t>::max())) {
    std::cerr<<"leaf size is too small for the input cloud, Integer indices would overflow."<<std::endl;
    return;
}

// Compute the minimum and maximum bounding box values
min_bounding_idx_[0] = static_cast<int> (floor (min_p.x * inverse_leaf_size_[0]));
max_bounding_idx_[0] = static_cast<int> (floor (max_p.x * inverse_leaf_size_[0]));
min_bounding_idx_[1] = static_cast<int> (floor (min_p.y * inverse_leaf_size_[1]));
max_bounding_idx_[1] = static_cast<int> (floor (max_p.y * inverse_leaf_size_[1]));
min_bounding_idx_[2] = static_cast<int> (floor (min_p.z * inverse_leaf_size_[2]));
max_bounding_idx_[2] = static_cast<int> (floor (max_p.z * inverse_leaf_size_[2]));

div_bounding_ = max_bounding_idx_ - min_bounding_idx_ + Eigen::Vector3i::Ones ();

// Set up the division multiplier
divb_mul_ = Eigen::Vector3i (1, div_bounding_[0], div_bounding_[0] * div_bounding_[1]);

cloud_index_.clear();
cloud_index_.reserve (input_cloud_ptr_->size ());
out_cloud_ptr->clear();
voxel_idx_.clear();

for (int i = 0; i < input_cloud_ptr_->size(); ++i) {
    pcl::PointXYZI tmp_pt = input_cloud_ptr_->points[i];
    int ijk0 = static_cast<int> (floor (tmp_pt.x * inverse_leaf_size_[0]) - static_cast<float> (min_bounding_idx_[0]));
    int ijk1 = static_cast<int> (floor (tmp_pt.y * inverse_leaf_size_[1]) - static_cast<float> (min_bounding_idx_[1]));
    int ijk2 = static_cast<int> (floor (tmp_pt.z * inverse_leaf_size_[2]) - static_cast<float> (min_bounding_idx_[2]));

    // Compute the centroid leaf index
    int idx = ijk0 * divb_mul_[0] + ijk1 * divb_mul_[1] + ijk2 * divb_mul_[2];
    cloud_index_.push_back(CloudPointIndexIdx(static_cast<unsigned int> (idx), i));
    voxel_idx_.push_back(Eigen::Vector3i(ijk0,ijk1,ijk2));
}

std::sort (cloud_index_.begin (), cloud_index_.end (), std::less<CloudPointIndexIdx> ());

std::vector<Eigen::Vector3i>::iterator iter = std::unique(voxel_idx_.begin(),voxel_idx_.end());
voxel_idx_.erase(iter,voxel_idx_.end());
for(int i = 0;i < static_cast<int>(voxel_idx_.size());i++){
    int ijk0 = voxel_idx_[i][0];
    int ijk1 = voxel_idx_[i][1];
    int ijk2 = voxel_idx_[i][2];
    pcl::PointXYZI tmp_pt;
    tmp_pt.x = (ijk0 + static_cast<float> (min_bounding_idx_[0])) * leaf_size_[0] + leaf_size_[0] / 2.;
    tmp_pt.y = (ijk1 + static_cast<float> (min_bounding_idx_[1])) * leaf_size_[1] + leaf_size_[1] / 2.;
    tmp_pt.z = (ijk2 + static_cast<float> (min_bounding_idx_[2])) * leaf_size_[2] + leaf_size_[2] / 2.;
    out_cloud_ptr->push_back(tmp_pt);
}

I test my code and pcl with the same dataset, my code cost 50ms,and the pcl cost 2ms. I am just very curious why is so diffetrent. are there any skill ? I appreciate who can give me some answer! thx ~

2017-09-30 02:25:52 -0500 received badge  Scholar (source)
2017-09-30 02:24:25 -0500 asked a question how to remove dynamic object in slam?

how to remove dynamic object in slam? if we do slam in a dynamic environment, how do we remove the dynamic objects?

2017-09-05 14:08:09 -0500 received badge  Notable Question (source)
2017-09-05 03:05:52 -0500 received badge  Popular Question (source)
2017-09-04 21:43:44 -0500 commented answer why pcl algothm so fast?

you are right!thx very much!

2017-09-04 21:43:07 -0500 received badge  Supporter (source)
2017-09-04 20:44:51 -0500 asked a question why pcl algothm so fast?

why pcl algothm so fast? Hello: I want to write a VoxelGrid filter which can filter the center of the voxel. I just writ