1#include "state_representation_bindings.h"
3#include <state_representation/parameters/ParameterType.hpp>
4#include <state_representation/parameters/Parameter.hpp>
5#include <state_representation/parameters/ParameterMap.hpp>
7#include <state_representation/space/cartesian/CartesianState.hpp>
8#include <state_representation/space/cartesian/CartesianPose.hpp>
9#include <state_representation/space/joint/JointState.hpp>
10#include <state_representation/space/joint/JointPositions.hpp>
11#include <state_representation/geometry/Ellipsoid.hpp>
13#include "parameter_container.h"
14#include "py_parameter_map.h"
16using namespace py_parameter;
18void parameter_type(py::module_& m) {
19 py::enum_<ParameterType>(m,
"ParameterType")
20 .value(
"INT", ParameterType::INT)
21 .value(
"INT_ARRAY", ParameterType::INT_ARRAY)
22 .value(
"DOUBLE", ParameterType::DOUBLE)
23 .value(
"DOUBLE_ARRAY", ParameterType::DOUBLE_ARRAY)
24 .value(
"BOOL", ParameterType::BOOL)
25 .value(
"BOOL_ARRAY", ParameterType::BOOL_ARRAY)
26 .value(
"STRING", ParameterType::STRING)
27 .value(
"STRING_ARRAY", ParameterType::STRING_ARRAY)
28 .value(
"STATE", ParameterType::STATE)
29 .value(
"VECTOR", ParameterType::VECTOR)
30 .value(
"MATRIX", ParameterType::MATRIX)
34void parameter_interface(py::module_& m) {
35 py::class_<ParameterInterface, std::shared_ptr<ParameterInterface>,
State> c(m,
"ParameterInterface");
37 c.def(py::init<const std::string&, const ParameterType&, const StateType&>(),
"Constructor of a ParameterInterface with name, parameter type and parameter state type",
"name"_a,
"type"_a,
"parameter_state_type"_a=StateType::NONE);
38 c.def(py::init<const ParameterInterface&>(),
"Copy constructor from another ParameterInterface",
"parameter"_a);
44void parameter(py::module_& m) {
45 py::class_<ParameterContainer, std::shared_ptr<ParameterContainer>,
ParameterInterface> c(m,
"Parameter");
47 c.def(py::init<const std::string&, const ParameterType&, const StateType&>(),
"Constructor of a parameter with name, parameter type and parameter state type",
"name"_a,
"type"_a,
"parameter_state_type"_a=StateType::NONE);
48 c.def(py::init<const std::string&, const py::object&, const ParameterType&, const StateType&>(),
"Constructor of a parameter with name, value, parameter type and parameter state type",
"name"_a,
"value"_a,
"type"_a,
"parameter_state_type"_a=StateType::NONE);
49 c.def(py::init<const ParameterContainer&>(),
"Copy constructor from another Parameter",
"parameter"_a);
50 c.def(py::init([](
const std::shared_ptr<ParameterInterface>& parameter) {
return interface_ptr_to_container(parameter); }),
"Constructor from a parameter interface pointer",
"parameter"_a);
52 c.def(
"get_value", &ParameterContainer::get_value,
"Getter of the value attribute.");
53 c.def(
"set_value", &ParameterContainer::set_value,
"Setter of the value attribute.", py::arg(
"value"));
62 std::stringstream buffer;
63 switch (parameter.get_parameter_type()) {
64 case ParameterType::INT: {
65 Parameter<int> param(parameter.get_name(), parameter.values.int_value);
69 case ParameterType::INT_ARRAY: {
74 case ParameterType::DOUBLE: {
79 case ParameterType::DOUBLE_ARRAY: {
84 case ParameterType::BOOL: {
85 Parameter<bool> param(parameter.get_name(), parameter.values.bool_value);
89 case ParameterType::BOOL_ARRAY: {
94 case ParameterType::STRING: {
99 case ParameterType::STRING_ARRAY: {
104 case ParameterType::STATE: {
106 switch (parameter.get_parameter_state_type()) {
107 case StateType::CARTESIAN_STATE: {
109 (parameter.get_name(), *std::dynamic_pointer_cast<CartesianState>(parameter.values.state_pointer));
113 case StateType::CARTESIAN_POSE: {
115 (parameter.get_name(), *std::dynamic_pointer_cast<CartesianPose>(parameter.values.state_pointer));
119 case StateType::JOINT_STATE: {
121 (parameter.get_name(), *std::dynamic_pointer_cast<JointState>(parameter.values.state_pointer));
125 case StateType::JOINT_POSITIONS: {
127 (parameter.get_name(), *std::dynamic_pointer_cast<JointPositions>(parameter.values.state_pointer));
131 case StateType::GEOMETRY_ELLIPSOID: {
133 (parameter.get_name(), *std::dynamic_pointer_cast<Ellipsoid>(parameter.values.state_pointer));
138 buffer <<
"Parameter " << parameter.get_name() <<
" contains an unsupported state type" << std::endl;
141 }
catch (
const std::exception&) {
142 buffer <<
"Parameter " << parameter.get_name() <<
" is invalid" << std::endl;
147 case ParameterType::MATRIX: {
152 case ParameterType::VECTOR: {
164void parameter_map(py::module_& m) {
165 py::class_<ParameterMap, std::shared_ptr<ParameterMap>,
PyParameterMap> c(m,
"ParameterMap");
167 c.def(py::init(),
"Empty constructor");
169 py::init([](
const std::map<std::string, ParameterContainer>& parameters) {
170 auto parameter_map = container_to_interface_ptr_map(parameters);
172 }),
"Construct the parameter map with an initial list of parameters",
"parameters"_a
175 py::init([](
const std::list<ParameterContainer>& parameters) {
176 auto parameter_list = container_to_interface_ptr_list(parameters);
178 }),
"Construct the parameter map with an initial map of parameters",
"parameters"_a);
183 } ,
"Get a parameter by its name",
"name"_a
188 } ,
"Get a map of all the <name, parameter> pairs"
191 "get_parameter_value", [](
ParameterMap& self,
const std::string& name) -> py::object {
192 return interface_ptr_to_container(self.
get_parameter(name)).get_value();
193 },
"Get a parameter value by its name",
"name"_a
198 } ,
"Get a list of all the parameters"
203 },
"Set a parameter",
"parameter"_a);
204 c.def(
"set_parameters", [](
ParameterMap& self,
const std::list<ParameterContainer>& parameters) {
206 },
"Set parameters from a list of parameters",
"parameters"_a);
207 c.def(
"set_parameters", [](
ParameterMap& self,
const std::map<std::string, ParameterContainer>& parameters) {
209 },
"Set parameters from a map with <name, parameter> pairs",
"parameters"_a);
211 "set_parameter_value", [](
ParameterMap& self,
const std::string& name,
const py::object& value,
const ParameterType& type,
const StateType& parameter_state_type) ->
void {
214 },
"Set a parameter value by its name",
"name"_a,
"value"_a,
"type"_a,
"parameter_state_type"_a=StateType::NONE
219void bind_parameters(py::module_& m) {
221 parameter_interface(m);
StateType get_parameter_state_type() const
Get the state type of the parameter.
ParameterType get_parameter_type() const
Get the parameter type.
A wrapper class to contain a map of Parameter pointers by name and provide robust access methods.
ParameterInterfaceMap get_parameters() const
Get a map of all the <name, parameter> pairs.
ParameterInterfaceList get_parameter_list() const
Get a list of all the parameters.
std::shared_ptr< ParameterInterface > get_parameter(const std::string &name) const
Get a parameter by its name.
void remove_parameter(const std::string &name)
Remove a parameter from the parameter map.
void set_parameters(const ParameterInterfaceList ¶meters)
Set parameters from a list of parameters.
void set_parameter(const std::shared_ptr< ParameterInterface > ¶meter)
Set a parameter.
Abstract class to represent a state.
ParameterType
The parameter value types.
StateType
The class types inheriting from State.