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 ...@@ -43,6 +43,9 @@ namespace simox::geometric_planning
const auto node = articulatedObject->getRobotNode(nodeName); const auto node = articulatedObject->getRobotNode(nodeName);
REQUIRE(node != nullptr); REQUIRE(node != nullptr);
const auto global_T_object_root = articulatedObject->getGlobalPose();
articulatedObject->setGlobalPose(Eigen::Matrix4f::Identity());
simox::geometric_planning::ArticulatedObjectGeometricPlanningHelper helper( simox::geometric_planning::ArticulatedObjectGeometricPlanningHelper helper(
articulatedObject); articulatedObject);
...@@ -84,6 +87,10 @@ namespace simox::geometric_planning ...@@ -84,6 +87,10 @@ namespace simox::geometric_planning
const auto parametricPath = helper.getPathForNode(node->getName(), joint->getName()); const auto parametricPath = helper.getPathForNode(node->getName(), joint->getName());
// reset global pose
articulatedObject->setGlobalPose(global_T_object_root);
return parametricPath; return parametricPath;
} }
......
...@@ -19,6 +19,11 @@ namespace simox::geometric_planning ...@@ -19,6 +19,11 @@ namespace simox::geometric_planning
{ {
return path->progress(toLocalPathFrame(global_T_pose)); return path->progress(toLocalPathFrame(global_T_pose));
} }
float ParametricPath::progress(const float param) const
{
return path->progress(param);
}
Pose Pose
ParametricPath::toLocalPathFrame(const Pose& global_T_pose) const ParametricPath::toLocalPathFrame(const Pose& global_T_pose) const
......
...@@ -32,6 +32,7 @@ namespace simox::geometric_planning ...@@ -32,6 +32,7 @@ namespace simox::geometric_planning
// helper functions to obtain the PathPrimitive's parameter and progress directly from a global pose // 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(const Pose& global_T_pose) const;
float progress(float param) const;
Pose toLocalPathFrame(const Pose& global_T_pose) const; Pose toLocalPathFrame(const Pose& global_T_pose) const;
......
...@@ -23,7 +23,9 @@ namespace simox::geometric_planning ...@@ -23,7 +23,9 @@ namespace simox::geometric_planning
Eigen::Vector3f Eigen::Vector3f
Circle::getPosition(float t) const 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); return radius * Eigen::Vector3f(std::cos(t), std::sin(t), 0.0F);
} }
...@@ -31,7 +33,8 @@ namespace simox::geometric_planning ...@@ -31,7 +33,8 @@ namespace simox::geometric_planning
Eigen::Vector3f Eigen::Vector3f
Circle::getPositionDerivative([[maybe_unused]] float t) const 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); // 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 ...@@ -80,7 +83,7 @@ namespace simox::geometric_planning
const float param = phi; const float param = phi;
// ARMARX_DEBUG << "Param is " << param; // ARMARX_DEBUG << "Param is " << param;
return std::clamp(param, parameterRange().min, parameterRange().max); return clampParameter(param);
} }
} // namespace simox::geometric_planning } // namespace simox::geometric_planning
...@@ -16,9 +16,23 @@ namespace simox::geometric_planning ...@@ -16,9 +16,23 @@ namespace simox::geometric_planning
PathPrimitive::progress(const Pose& pose) const PathPrimitive::progress(const Pose& pose) const
{ {
const float param = parameter(pose); const float param = parameter(pose);
return progress(param);
}
float PathPrimitive::progress(const float param) const
{
const auto range = parameterRange(); 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 Pose
...@@ -26,6 +40,7 @@ namespace simox::geometric_planning ...@@ -26,6 +40,7 @@ namespace simox::geometric_planning
{ {
return Pose(::math::Helpers::CreatePose(getPosition(t), getOrientation(t))); return Pose(::math::Helpers::CreatePose(getPosition(t), getOrientation(t)));
} }
Eigen::Vector3f Eigen::Vector3f
PathPrimitive::GetPosition(float t) PathPrimitive::GetPosition(float t)
......
...@@ -36,6 +36,7 @@ namespace simox::geometric_planning ...@@ -36,6 +36,7 @@ namespace simox::geometric_planning
* @return the progress in range [0,1] * @return the progress in range [0,1]
*/ */
float progress(const Pose& pose) const; float progress(const Pose& pose) const;
float progress(float param) const;
// math::AbstractFunctionR1R6 interface // math::AbstractFunctionR1R6 interface
Eigen::Vector3f GetPosition(float t) override; Eigen::Vector3f GetPosition(float t) override;
...@@ -51,6 +52,8 @@ namespace simox::geometric_planning ...@@ -51,6 +52,8 @@ namespace simox::geometric_planning
Pose getPose(float t) const; Pose getPose(float t) const;
float clampParameter(float t) const;
~PathPrimitive() override = default; ~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