Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
f5218da
Begins exposing sampling_time as pilz_sampling.max_seconds
riv-tnoble Mar 19, 2026
d99c17e
Continues exposing sampling_time
riv-tnoble Mar 19, 2026
f269ebb
Fix yaml syntax
riv-tnoble Mar 19, 2026
56e2f17
Applies formatting
riv-tnoble Mar 19, 2026
e23482b
Runs pre-commit hooks
riv-tnoble Mar 19, 2026
5eab009
Fixes missing semicolon
riv-tnoble Mar 19, 2026
ec5cfe9
Fixes bad parameter namespace
riv-tnoble Mar 19, 2026
7dd1e65
Applies formatting
riv-tnoble Mar 19, 2026
0e5c273
Fixes imports
riv-tnoble Mar 19, 2026
7136aa1
Fixes namespace
riv-tnoble Mar 19, 2026
25da36f
Begins updating tests
riv-tnoble Mar 19, 2026
6006e9d
Fixes const issues
riv-tnoble Mar 19, 2026
e8bf780
Fixes syntax errors
riv-tnoble Mar 19, 2026
c9f5eaa
Formatting
riv-tnoble Mar 19, 2026
5544653
Makes setSamplingTime() public
riv-tnoble Mar 19, 2026
5cf6b7a
Fixes syntax errors
riv-tnoble Mar 19, 2026
fab041c
Fix tests
riv-tnoble Mar 19, 2026
e7ae716
Fixes more tests
riv-tnoble Mar 19, 2026
e14fe68
Fixes more tests. Adds teardown step to reset to default sampling time
riv-tnoble Mar 20, 2026
8aa1fce
Fixes bad syntax
riv-tnoble Mar 20, 2026
ac4559f
Fixes more tests
riv-tnoble Mar 20, 2026
be6990b
Removes typo in yaml file
riv-tnoble Mar 20, 2026
04fb663
Merge branch 'main' into feature/expose-pilz-sampling-time
riv-tnoble Mar 24, 2026
b4d5fe1
Fixes formatting
riv-tnoble Mar 24, 2026
473c6ae
Merge branch 'feature/expose-pilz-sampling-time' of github.com:riv-tn…
riv-tnoble Mar 24, 2026
ba6e0bb
Merge branch 'main' into feature/expose-pilz-sampling-time
riv-tnoble May 21, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 10 additions & 3 deletions moveit_planners/pilz_industrial_motion_planner/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -63,16 +63,22 @@ generate_parameter_library(
src/cartesian_limits_parameters.yaml # path to input yaml file
)

generate_parameter_library(
pilz_sampling_parameters # cmake target name for the parameter library
src/pilz_sampling_parameters.yaml # path to input yaml file
)

add_library(
joint_limits_common SHARED
src/joint_limits_aggregator.cpp src/joint_limits_container.cpp
src/joint_limits_validator.cpp src/limits_container.cpp)
target_link_libraries(joint_limits_common cartesian_limits_parameters)
target_link_libraries(joint_limits_common cartesian_limits_parameters
pilz_sampling_parameters)
ament_target_dependencies(joint_limits_common ${THIS_PACKAGE_INCLUDE_DEPENDS})

add_library(planning_context_loader_base SHARED src/planning_context_loader.cpp)
target_link_libraries(planning_context_loader_base cartesian_limits_parameters
joint_limits_common)
pilz_sampling_parameters joint_limits_common)
ament_target_dependencies(planning_context_loader_base
${THIS_PACKAGE_INCLUDE_DEPENDS})

Expand All @@ -81,7 +87,7 @@ add_library(
src/trajectory_functions.cpp src/trajectory_generator.cpp
src/trajectory_blender_transition_window.cpp)
target_link_libraries(trajectory_generation_common cartesian_limits_parameters
joint_limits_common)
pilz_sampling_parameters joint_limits_common)
ament_target_dependencies(trajectory_generation_common
${THIS_PACKAGE_INCLUDE_DEPENDS})

Expand Down Expand Up @@ -161,6 +167,7 @@ pluginlib_export_plugin_description_file(
install(
TARGETS pilz_industrial_motion_planner
cartesian_limits_parameters
pilz_sampling_parameters
joint_limits_common
planning_context_loader_base
planning_context_loader_ptp
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
#include <memory>

#include <pilz_industrial_motion_planner/cartesian_limits_parameters.hpp>
#include <pilz_industrial_motion_planner/pilz_sampling_parameters.hpp>

namespace pilz_industrial_motion_planner
{
Expand Down Expand Up @@ -133,9 +134,13 @@ class CommandPlanner : public planning_interface::PlannerManager
/// aggregated limits of the active joints
pilz_industrial_motion_planner::JointLimitsContainer aggregated_limit_active_joints_;

/// cartesian limit
std::shared_ptr<cartesian_limits::ParamListener> param_listener_;
cartesian_limits::Params params_;
/// cartesian limit parameters
std::shared_ptr<cartesian_limits::ParamListener> cartesian_limits_param_listener_;
cartesian_limits::Params cartesian_limits_params_;

/// sampling parameters
std::shared_ptr<pilz_sampling::ParamListener> sampling_param_listener_;
pilz_sampling::Params sampling_params_;
};

MOVEIT_CLASS_FORWARD(CommandPlanner);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,12 +58,14 @@ class PlanningContextBase : public planning_interface::PlanningContext
public:
PlanningContextBase<GeneratorT>(const std::string& name, const std::string& group,
const moveit::core::RobotModelConstPtr& model,
const pilz_industrial_motion_planner::LimitsContainer& limits)
const pilz_industrial_motion_planner::LimitsContainer& limits,
const pilz_sampling::Params& sampling)
: planning_interface::PlanningContext(name, group)
, terminated_(false)
, model_(model)
, limits_(limits)
, generator_(model, limits_, group)
, sampling_(sampling)
, generator_(model, limits_, sampling_, group)
{
}

Expand Down Expand Up @@ -112,6 +114,9 @@ class PlanningContextBase : public planning_interface::PlanningContext
/// Joint limits to be used during planning
pilz_industrial_motion_planner::LimitsContainer limits_;

/// Settings to be used when sampling the output trajectory
pilz_sampling::Params sampling_;

protected:
GeneratorT generator_;
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,9 @@ class PlanningContextCIRC : public pilz_industrial_motion_planner::PlanningConte
{
public:
PlanningContextCIRC(const std::string& name, const std::string& group, const moveit::core::RobotModelConstPtr& model,
const pilz_industrial_motion_planner::LimitsContainer& limits)
: pilz_industrial_motion_planner::PlanningContextBase<TrajectoryGeneratorCIRC>(name, group, model, limits)
const pilz_industrial_motion_planner::LimitsContainer& limits,
const pilz_sampling::Params& sampling)
: pilz_industrial_motion_planner::PlanningContextBase<TrajectoryGeneratorCIRC>(name, group, model, limits, sampling)
{
}
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,9 @@ class PlanningContextLIN : public pilz_industrial_motion_planner::PlanningContex
{
public:
PlanningContextLIN(const std::string& name, const std::string& group, const moveit::core::RobotModelConstPtr& model,
const pilz_industrial_motion_planner::LimitsContainer& limits)
: pilz_industrial_motion_planner::PlanningContextBase<TrajectoryGeneratorLIN>(name, group, model, limits)
const pilz_industrial_motion_planner::LimitsContainer& limits,
const pilz_sampling::Params& sampling)
: pilz_industrial_motion_planner::PlanningContextBase<TrajectoryGeneratorLIN>(name, group, model, limits, sampling)
{
}
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
#pragma once

#include <pilz_industrial_motion_planner/limits_container.hpp>
#include <pilz_industrial_motion_planner/pilz_sampling_parameters.hpp>

#include <memory>
#include <vector>
Expand Down Expand Up @@ -75,6 +76,13 @@ class PlanningContextLoader
*/
virtual bool setLimits(const pilz_industrial_motion_planner::LimitsContainer& limits);

/**
* @brief Sets the sampling parameters the planner can pass to the contexts
* @param sampling container of sampling parameters
* @return true if sampling parameters could be set
*/
virtual bool setSampling(const pilz_sampling::Params& sampling);

/**
* @brief Return the planning context
* @param planning_context
Expand Down Expand Up @@ -107,6 +115,9 @@ class PlanningContextLoader
/// Limits to be used during planning
pilz_industrial_motion_planner::LimitsContainer limits_;

/// Settings to be used when sampling the output trajectory
pilz_sampling::Params sampling_;

/// True if model is set
bool model_set_;

Expand All @@ -123,7 +134,7 @@ bool PlanningContextLoader::loadContext(planning_interface::PlanningContextPtr&
{
if (limits_set_ && model_set_)
{
planning_context = std::make_shared<T>(name, group, model_, limits_);
planning_context = std::make_shared<T>(name, group, model_, limits_, sampling_);
return true;
}
else
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,10 @@ class PlanningContextPolyline : public pilz_industrial_motion_planner::PlanningC
public:
PlanningContextPolyline(const std::string& name, const std::string& group,
const moveit::core::RobotModelConstPtr& model,
const pilz_industrial_motion_planner::LimitsContainer& limits)
: pilz_industrial_motion_planner::PlanningContextBase<TrajectoryGeneratorPolyline>(name, group, model, limits)
const pilz_industrial_motion_planner::LimitsContainer& limits,
const pilz_sampling::Params& sampling)
: pilz_industrial_motion_planner::PlanningContextBase<TrajectoryGeneratorPolyline>(name, group, model, limits,
sampling)
{
}
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,9 @@ class PlanningContextPTP : public pilz_industrial_motion_planner::PlanningContex
{
public:
PlanningContextPTP(const std::string& name, const std::string& group, const moveit::core::RobotModelConstPtr& model,
const pilz_industrial_motion_planner::LimitsContainer& limits)
: pilz_industrial_motion_planner::PlanningContextBase<TrajectoryGeneratorPTP>(name, group, model, limits)
const pilz_industrial_motion_planner::LimitsContainer& limits,
const pilz_sampling::Params& sampling)
: pilz_industrial_motion_planner::PlanningContextBase<TrajectoryGeneratorPTP>(name, group, model, limits, sampling)
{
}
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@

#include <pilz_industrial_motion_planner/joint_limits_extension.hpp>
#include <pilz_industrial_motion_planner/limits_container.hpp>
#include <pilz_industrial_motion_planner/pilz_sampling_parameters.hpp>
#include <pilz_industrial_motion_planner/trajectory_functions.hpp>
#include <pilz_industrial_motion_planner/trajectory_generation_exceptions.hpp>

Expand Down Expand Up @@ -93,11 +94,20 @@ class TrajectoryGenerator
{
public:
TrajectoryGenerator(const moveit::core::RobotModelConstPtr& robot_model,
const pilz_industrial_motion_planner::LimitsContainer& planner_limits)
: robot_model_(robot_model), planner_limits_(planner_limits), clock_(std::make_unique<rclcpp::Clock>())
const pilz_industrial_motion_planner::LimitsContainer& planner_limits,
const pilz_sampling::Params& sampling)
: robot_model_(robot_model)
, planner_limits_(planner_limits)
, sampling_(sampling)
, clock_(std::make_unique<rclcpp::Clock>())
{
}

/**
* @brief Set the sampling time
*/
void setSamplingTime(double sampling_time);

virtual ~TrajectoryGenerator() = default;

/**
Expand All @@ -107,7 +117,7 @@ class TrajectoryGenerator
* @param sampling_time: sampling time of the generate trajectory
*/
void generate(const planning_scene::PlanningSceneConstPtr& scene, const planning_interface::MotionPlanRequest& req,
planning_interface::MotionPlanResponse& res, double sampling_time = 0.1);
planning_interface::MotionPlanResponse& res);

protected:
/**
Expand Down Expand Up @@ -276,6 +286,7 @@ class TrajectoryGenerator
protected:
const moveit::core::RobotModelConstPtr robot_model_;
const pilz_industrial_motion_planner::LimitsContainer planner_limits_;
pilz_sampling::Params sampling_;
double max_cartesian_speed_;
static constexpr double MIN_SCALING_FACTOR{ 0.0001 };
static constexpr double MAX_SCALING_FACTOR{ 1. };
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,13 +74,14 @@ class TrajectoryGeneratorCIRC : public TrajectoryGenerator
* @brief Constructor of CIRC Trajectory Generator.
*
* @param planner_limits Limits in joint and Cartesian spaces
* @param sampling Sampling parameters
*
* @throw TrajectoryGeneratorInvalidLimitsException
*
*/
TrajectoryGeneratorCIRC(const moveit::core::RobotModelConstPtr& robot_model,
const pilz_industrial_motion_planner::LimitsContainer& planner_limits,
const std::string& group_name);
const pilz_sampling::Params& sampling, const std::string& group_name);

private:
void cmdSpecificRequestValidation(const planning_interface::MotionPlanRequest& req) const override;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,11 @@ class TrajectoryGeneratorLIN : public TrajectoryGenerator
* @throw TrajectoryGeneratorInvalidLimitsException
* @param model: robot model
* @param planner_limits: limits in joint and Cartesian spaces
* @param sampling: sampling parameters
*/
TrajectoryGeneratorLIN(const moveit::core::RobotModelConstPtr& robot_model,
const pilz_industrial_motion_planner::LimitsContainer& planner_limits,
const std::string& group_name);
const pilz_sampling::Params& sampling, const std::string& group_name);

private:
void extractMotionPlanInfo(const planning_scene::PlanningSceneConstPtr& scene,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,10 +67,11 @@ class TrajectoryGeneratorPolyline : public TrajectoryGenerator
* @throw TrajectoryGeneratorInvalidLimitsException
* @param model: robot model
* @param planner_limits: limits in joint and Cartesian spaces
* @param sampling: sampling parameters
*/
TrajectoryGeneratorPolyline(const moveit::core::RobotModelConstPtr& robot_model,
const pilz_industrial_motion_planner::LimitsContainer& planner_limits,
const std::string& group_name);
const pilz_sampling::Params& sampling, const std::string& group_name);

private:
void cmdSpecificRequestValidation(const planning_interface::MotionPlanRequest& req) const override;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,12 @@ class TrajectoryGeneratorPTP : public TrajectoryGenerator
* @brief Constructor of PTP Trajectory Generator
* @throw TrajectoryGeneratorInvalidLimitsException
* @param model: a map of joint limits information
* @param planner_limits: limits in joint and Cartesian spaces
* @param sampling: sampling parameters
*/
TrajectoryGeneratorPTP(const moveit::core::RobotModelConstPtr& robot_model,
const pilz_industrial_motion_planner::LimitsContainer& planner_limits,
const std::string& group_name);
const pilz_sampling::Params& sampling, const std::string& group_name);

private:
void extractMotionPlanInfo(const planning_scene::PlanningSceneConstPtr& scene,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ namespace pilz_industrial_motion_planner
{
namespace
{
const std::string PARAM_NAMESPACE_LIMITS = "robot_description_planning";
const std::string PARAMETER_NAMESPACE = "robot_description_planning";
rclcpp::Logger getLogger()
{
return moveit::getLogger("moveit.planners.pilz.command_planner");
Expand All @@ -73,12 +73,17 @@ bool CommandPlanner::initialize(const moveit::core::RobotModelConstPtr& model, c

// Obtain the aggregated joint limits
aggregated_limit_active_joints_ = pilz_industrial_motion_planner::JointLimitsAggregator::getAggregatedLimits(
node, PARAM_NAMESPACE_LIMITS, model->getActiveJointModels());
node, PARAMETER_NAMESPACE, model->getActiveJointModels());

// Obtain cartesian limits
param_listener_ =
std::make_shared<cartesian_limits::ParamListener>(node, PARAM_NAMESPACE_LIMITS + ".cartesian_limits");
params_ = param_listener_->get_params();
cartesian_limits_param_listener_ =
std::make_shared<cartesian_limits::ParamListener>(node, PARAMETER_NAMESPACE + ".cartesian_limits");
cartesian_limits_params_ = cartesian_limits_param_listener_->get_params();

// Obtain sampling parameters
sampling_param_listener_ =
std::make_shared<pilz_sampling::ParamListener>(node, PARAMETER_NAMESPACE + ".pilz_sampling");
sampling_params_ = sampling_param_listener_->get_params();

// Load the planning context loader
planner_context_loader_ = std::make_unique<pluginlib::ClassLoader<PlanningContextLoader>>(
Expand All @@ -102,10 +107,11 @@ bool CommandPlanner::initialize(const moveit::core::RobotModelConstPtr& model, c

pilz_industrial_motion_planner::LimitsContainer limits;
limits.setJointLimits(aggregated_limit_active_joints_);
limits.setCartesianLimits(params_);
limits.setCartesianLimits(cartesian_limits_params_);

loader_pointer->setLimits(limits);
loader_pointer->setModel(model_);
loader_pointer->setSampling(sampling_params_);

registerContextLoader(loader_pointer);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
pilz_sampling:
max_seconds: {
type: double,
default_value: 0.1,
description: "Maximum time interval between two consecutive samples in seconds",
validation: {
gt: [ 0.0 ]
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,12 @@ bool pilz_industrial_motion_planner::PlanningContextLoader::setLimits(
return true;
}

bool pilz_industrial_motion_planner::PlanningContextLoader::setSampling(const pilz_sampling::Params& sampling)
{
sampling_ = sampling;
return true;
}

std::string pilz_industrial_motion_planner::PlanningContextLoader::getAlgorithm() const
{
return alg_;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ bool pilz_industrial_motion_planner::PlanningContextLoaderCIRC::loadContext(
{
if (limits_set_ && model_set_)
{
planning_context = std::make_shared<PlanningContextCIRC>(name, group, model_, limits_);
planning_context = std::make_shared<PlanningContextCIRC>(name, group, model_, limits_, sampling_);
return true;
}
else
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ bool pilz_industrial_motion_planner::PlanningContextLoaderLIN::loadContext(
{
if (limits_set_ && model_set_)
{
planning_context = std::make_shared<PlanningContextLIN>(name, group, model_, limits_);
planning_context = std::make_shared<PlanningContextLIN>(name, group, model_, limits_, sampling_);
return true;
}
else
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ bool pilz_industrial_motion_planner::PlanningContextLoaderPolyline::loadContext(
{
if (limits_set_ && model_set_)
{
planning_context = std::make_shared<PlanningContextPolyline>(name, group, model_, limits_);
planning_context = std::make_shared<PlanningContextPolyline>(name, group, model_, limits_, sampling_);
return true;
}
else
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ bool pilz_industrial_motion_planner::PlanningContextLoaderPTP::loadContext(
{
if (limits_set_ && model_set_)
{
planning_context = std::make_shared<PlanningContextPTP>(name, group, model_, limits_);
planning_context = std::make_shared<PlanningContextPTP>(name, group, model_, limits_, sampling_);
return true;
}
else
Expand Down
Loading
Loading