MCPcopy Create free account
hub / github.com/Robotics-STAR-Lab/SOAR / getDistWithGrad

Method getDistWithGrad

src/planner/plan_env/src/sdf_map.cpp:604–644  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

602}
603
604double SDFMap::getDistWithGrad(const Eigen::Vector3d& pos, Eigen::Vector3d& grad)
605{
606 if (!isInMap(pos)) {
607 grad.setZero();
608 return 0;
609 }
610
611 /* trilinear interpolation */
612 Eigen::Vector3d pos_m = pos - 0.5 * mp_->resolution_ * Eigen::Vector3d::Ones();
613 Eigen::Vector3i idx;
614 posToIndex(pos_m, idx);
615 Eigen::Vector3d idx_pos, diff;
616 indexToPos(idx, idx_pos);
617 diff = (pos - idx_pos) * mp_->resolution_inv_;
618
619 double values[2][2][2];
620 for (int x = 0; x < 2; x++)
621 for (int y = 0; y < 2; y++)
622 for (int z = 0; z < 2; z++) {
623 Eigen::Vector3i current_idx = idx + Eigen::Vector3i(x, y, z);
624 values[x][y][z] = getDistance(current_idx);
625 }
626
627 double v00 = (1 - diff[0]) * values[0][0][0] + diff[0] * values[1][0][0];
628 double v01 = (1 - diff[0]) * values[0][0][1] + diff[0] * values[1][0][1];
629 double v10 = (1 - diff[0]) * values[0][1][0] + diff[0] * values[1][1][0];
630 double v11 = (1 - diff[0]) * values[0][1][1] + diff[0] * values[1][1][1];
631 double v0 = (1 - diff[1]) * v00 + diff[1] * v10;
632 double v1 = (1 - diff[1]) * v01 + diff[1] * v11;
633 double dist = (1 - diff[2]) * v0 + diff[2] * v1;
634
635 grad[2] = (v1 - v0) * mp_->resolution_inv_;
636 grad[1] = ((1 - diff[2]) * (v10 - v00) + diff[2] * (v11 - v01)) * mp_->resolution_inv_;
637 grad[0] = (1 - diff[2]) * (1 - diff[1]) * (values[1][0][0] - values[0][0][0]);
638 grad[0] += (1 - diff[2]) * diff[1] * (values[1][1][0] - values[0][1][0]);
639 grad[0] += diff[2] * (1 - diff[1]) * (values[1][0][1] - values[0][0][1]);
640 grad[0] += diff[2] * diff[1] * (values[1][1][1] - values[0][1][1]);
641 grad[0] *= mp_->resolution_inv_;
642
643 return dist;
644}
645
646vector<Eigen::Vector3i> SDFMap::allNeighbors(const Eigen::Vector3i& voxel)
647{

Callers 1

evaluateEDTWithGradMethod · 0.80

Calls

no outgoing calls

Tested by

no test coverage detected