Use py:overload_cast<>()

This commit is contained in:
Robert Haschke 2021-05-20 00:19:06 +02:00
parent fc0abe9dd9
commit defe144b55
4 changed files with 20 additions and 23 deletions

View File

@ -80,13 +80,12 @@ public:
/// set properties of IK solver
void setIKFrame(const geometry_msgs::PoseStamped& transform) { setProperty("ik_frame", transform); }
void setIKFrame(const Eigen::Isometry3d& pose, const std::string& link);
template <typename T>
void setIKFrame(const T& t, const std::string& link) {
Eigen::Isometry3d transform;
transform = t;
setIKFrame(transform, link);
}
void setIKFrame(const std::string& link) { setIKFrame(Eigen::Isometry3d::Identity(), link); }
/// allow setting IK frame from any type T that converts to Eigen::Isometry3d
template <typename T>
void setIKFrame(const T& transform, const std::string& link) {
setIKFrame(Eigen::Isometry3d(transform), link);
}
void setMaxIKSolutions(uint32_t max_ik_solutions) { setProperty("max_ik_solutions", max_ik_solutions); }
};

View File

@ -141,7 +141,7 @@ void export_core(pybind11::module& m) {
// expose name as writeable property
.def_property("name", &Stage::name, &Stage::setName)
// read-only access to properties + solutions
.def_property_readonly<const PropertyMap& (Stage::*)() const>("properties", &Stage::properties, py::return_value_policy::reference_internal)
.def_property_readonly("properties", py::overload_cast<>(&Stage::properties), py::return_value_policy::reference_internal)
.def_property_readonly("solutions", &Stage::solutions, py::return_value_policy::reference_internal)
.def_property_readonly("failures", &Stage::failures, py::return_value_policy::reference_internal)
.def("reset", &Stage::reset)
@ -189,7 +189,7 @@ void export_core(pybind11::module& m) {
py::class_<ContainerBase, Stage>(m, "ContainerBase")
.def("add", &ContainerBase::add)
.def("insert", &ContainerBase::insert, py::arg("stage"), py::arg("before") = -1)
.def("remove", static_cast<Stage::pointer (ContainerBase::*)(int)>(&ContainerBase::remove))
.def("remove", py::overload_cast<int>(&ContainerBase::remove), "Remove child stage by index")
.def("clear", &ContainerBase::clear)
.def("__len__", &ContainerBase::numChildren)
.def("__getitem__", [](const ContainerBase &c, const std::string &name) -> Stage* {
@ -225,7 +225,7 @@ void export_core(pybind11::module& m) {
.def(py::init<const std::string&, bool, ContainerBase::pointer&&>(),
py::arg("ns") = std::string(), py::arg("introspection") = true, py::arg("container"))
// read-only access to properties + solutions
.def_property_readonly<const PropertyMap& (Task::*)() const>("properties", &Task::properties, py::return_value_policy::reference_internal)
.def_property_readonly("properties", py::overload_cast<>(&Task::properties), py::return_value_policy::reference_internal)
.def_property_readonly("solutions", &Task::solutions, py::return_value_policy::reference_internal)
.def_property_readonly("failures", &Task::failures, py::return_value_policy::reference_internal)
.def_property("name", &Task::name, &Task::setName)

View File

@ -46,13 +46,10 @@ namespace moveit {
namespace python {
void export_solvers(py::module& m) {
// resolve &PlannerInterface::properties to non-const version
PropertyMap& (PlannerInterface::*PlannerInterface_getPropertyMap)() = &PlannerInterface::properties;
properties::class_<PlannerInterface, PlannerInterfacePtr>(m, "PlannerInterface")
.property<double>("max_velocity_scaling_factor")
.property<double>("max_acceleration_scaling_factor")
.def_property_readonly("properties", PlannerInterface_getPropertyMap,
.def_property_readonly("properties", py::overload_cast<>(&PlannerInterface::properties),
py::return_value_policy::reference_internal);
properties::class_<PipelinePlanner, PipelinePlannerPtr, PlannerInterface>(m, "PipelinePlanner")

View File

@ -112,11 +112,11 @@ void export_stages(pybind11::module& m) {
.property<geometry_msgs::PoseStamped>("ik_frame")
.property<moveit_msgs::Constraints>("path_constraints")
.def(py::init<const std::string&, const solvers::PlannerInterfacePtr&>())
.def<void (MoveTo::*)(const geometry_msgs::PoseStamped&)>("setGoal", &MoveTo::setGoal)
.def<void (MoveTo::*)(const geometry_msgs::PointStamped&)>("setGoal", &MoveTo::setGoal)
.def<void (MoveTo::*)(const moveit_msgs::RobotState&)>("setGoal", &MoveTo::setGoal)
.def<void (MoveTo::*)(const std::map<std::string, double>&)>("setGoal", &MoveTo::setGoal)
.def<void (MoveTo::*)(const std::string&)>("setGoal", &MoveTo::setGoal);
.def("setGoal", py::overload_cast<const geometry_msgs::PoseStamped&>(&MoveTo::setGoal))
.def("setGoal", py::overload_cast<const geometry_msgs::PointStamped&>(&MoveTo::setGoal))
.def("setGoal", py::overload_cast<const moveit_msgs::RobotState&>(&MoveTo::setGoal))
.def("setGoal", py::overload_cast<const std::map<std::string, double>&>(&MoveTo::setGoal))
.def("setGoal", py::overload_cast<const std::string&>(&MoveTo::setGoal));
properties::class_<MoveRelative, PropagatingEitherWay, PyMoveRelative<>>(m, "MoveRelative")
.property<std::string>("group")
@ -125,9 +125,9 @@ void export_stages(pybind11::module& m) {
.property<double>("max_distance")
.property<moveit_msgs::Constraints>("path_constraints")
.def(py::init<const std::string&, const solvers::PlannerInterfacePtr&>())
.def<void (MoveRelative::*)(const geometry_msgs::TwistStamped&)>("setDirection", &MoveRelative::setDirection)
.def<void (MoveRelative::*)(const geometry_msgs::Vector3Stamped&)>("setDirection", &MoveRelative::setDirection)
.def<void (MoveRelative::*)(const std::map<std::string, double>&)>("setDirection", &MoveRelative::setDirection);
.def("setDirection", py::overload_cast<const geometry_msgs::TwistStamped&>(&MoveRelative::setDirection))
.def("setDirection", py::overload_cast<const geometry_msgs::Vector3Stamped&>(&MoveRelative::setDirection))
.def("setDirection", py::overload_cast<const std::map<std::string, double>&>(&MoveRelative::setDirection));
py::enum_<stages::Connect::MergeMode>(m, "MergeMode")
.value("SEQUENTIAL", stages::Connect::MergeMode::SEQUENTIAL)
@ -164,8 +164,9 @@ void export_stages(pybind11::module& m) {
py::arg("name") = std::string("pick"))
.def("setApproachMotion", &Pick::setApproachMotion)
.def<void (Pick::*)(const geometry_msgs::TwistStamped&, double, double)>("setLiftMotion", &Pick::setLiftMotion)
.def<void (Pick::*)(const std::map<std::string, double>&)>("setLiftMotion", &Pick::setLiftMotion);
.def("setLiftMotion",
py::overload_cast<const geometry_msgs::TwistStamped&, double, double>(&Pick::setLiftMotion))
.def("setLiftMotion", py::overload_cast<const std::map<std::string, double>&>(&Pick::setLiftMotion));
properties::class_<Place, Stage>(m, "Place")
.property<std::string>("object")