Skip to content
Snippets Groups Projects
Commit dc2c0d70 authored by Fabian Reister's avatar Fabian Reister
Browse files

Merge branch 'feature/geometric-plannung-update'

parents 7657f412 df8d8acf
No related branches found
No related tags found
No related merge requests found
......@@ -43,6 +43,9 @@ namespace simox::geometric_planning
const auto node = articulatedObject->getRobotNode(nodeName);
REQUIRE(node != nullptr);
const auto global_T_object_root = articulatedObject->getGlobalPose();
articulatedObject->setGlobalPose(Eigen::Matrix4f::Identity());
simox::geometric_planning::ArticulatedObjectGeometricPlanningHelper helper(
articulatedObject);
......@@ -84,6 +87,10 @@ namespace simox::geometric_planning
const auto parametricPath = helper.getPathForNode(node->getName(), joint->getName());
// reset global pose
articulatedObject->setGlobalPose(global_T_object_root);
return parametricPath;
}
......
......@@ -19,6 +19,11 @@ namespace simox::geometric_planning
{
return path->progress(toLocalPathFrame(global_T_pose));
}
float ParametricPath::progress(const float param) const
{
return path->progress(param);
}
Pose
ParametricPath::toLocalPathFrame(const Pose& global_T_pose) const
......
......@@ -32,6 +32,7 @@ namespace simox::geometric_planning
// helper functions to obtain the PathPrimitive's parameter and progress directly from a global pose
float progress(const Pose& global_T_pose) const;
float progress(float param) const;
Pose toLocalPathFrame(const Pose& global_T_pose) const;
......
......@@ -23,7 +23,9 @@ namespace simox::geometric_planning
Eigen::Vector3f
Circle::getPosition(float t) const
{
REQUIRE(parameterRange().isInRange(t));
// REQUIRE(parameterRange().isInRange(t));
t = clampParameter(t);
return radius * Eigen::Vector3f(std::cos(t), std::sin(t), 0.0F);
}
......@@ -31,7 +33,8 @@ namespace simox::geometric_planning
Eigen::Vector3f
Circle::getPositionDerivative([[maybe_unused]] float t) const
{
REQUIRE(parameterRange().isInRange(t));
// REQUIRE(parameterRange().isInRange(t));
// return radius * Eigen::Vector3f(-std::sin(t + M_PI_2f32), std::cos(t + M_PI_2f32), 0.0F);
......@@ -80,7 +83,7 @@ namespace simox::geometric_planning
const float param = phi;
// ARMARX_DEBUG << "Param is " << param;
return std::clamp(param, parameterRange().min, parameterRange().max);
return clampParameter(param);
}
} // namespace simox::geometric_planning
......@@ -16,9 +16,23 @@ namespace simox::geometric_planning
PathPrimitive::progress(const Pose& pose) const
{
const float param = parameter(pose);
return progress(param);
}
float PathPrimitive::progress(const float param) const
{
const auto range = parameterRange();
return (param - range.min) / (range.max - range.min);
const float paramSanitized = clampParameter(param);
return (paramSanitized - range.min) / (range.max - range.min);
}
float PathPrimitive::clampParameter(float t) const
{
const auto range = parameterRange();
return std::clamp(t, range.min, range.max);
}
Pose
......@@ -26,6 +40,7 @@ namespace simox::geometric_planning
{
return Pose(::math::Helpers::CreatePose(getPosition(t), getOrientation(t)));
}
Eigen::Vector3f
PathPrimitive::GetPosition(float t)
......
......@@ -36,6 +36,7 @@ namespace simox::geometric_planning
* @return the progress in range [0,1]
*/
float progress(const Pose& pose) const;
float progress(float param) const;
// math::AbstractFunctionR1R6 interface
Eigen::Vector3f GetPosition(float t) override;
......@@ -51,6 +52,8 @@ namespace simox::geometric_planning
Pose getPose(float t) const;
float clampParameter(float t) const;
~PathPrimitive() override = default;
};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment