hpp-python  9.0.2
python bindings for HPP, based on boost python
graph.hh
Go to the documentation of this file.
1 //
2 // Copyright (c) 2025, CNRS
3 // Authors: Florent Lamiraux, Paul Sardin
4 //
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions
7 // are met:
8 
9 // 1. Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer.
11 
12 // 2. Redistributions in binary form must reproduce the above
13 // copyright notice, this list of conditions and the following
14 // disclaimer in the documentation and/or other materials provided
15 // with the distribution.
16 
17 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
20 // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
21 // COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
22 // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24 // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26 // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
28 // OF THE POSSIBILITY OF SUCH DAMAGE.
29 
30 #ifndef PYHPP_GRAPH_HH
31 #define PYHPP_GRAPH_HH
32 
36 
37 namespace pyhpp {
38 namespace manipulation {
39 
56 
58 struct PyWState {
60  PyWState(const StatePtr_t& object);
61  std::size_t id() const;
62  std::string name() const;
63  boost::python::list neighborEdges();
65 };
66 typedef std::shared_ptr<PyWState> PyWStatePtr_t;
67 
69 struct PyWEdge {
71  PyWEdge(const EdgePtr_t& object);
72  std::size_t id() const;
73  std::string name() const;
74  bool isWaypointTransition() const;
75  std::size_t nbWaypoints() const;
76  std::size_t weight() const;
77  PyWEdge waypoint(int index) const;
79 };
80 typedef std::shared_ptr<PyWEdge> PyWEdgePtr_t;
81 
83 struct PyWGraph {
86 
87  std::map<std::string, std::size_t> id;
88 
89  // Member variables
93 
95 
96  // Constructors
97  PyWGraph(const GraphPtr_t& object);
98  PyWGraph(const std::string& name, const PyWDevicePtr_t& d,
99  const PyWProblemPtr_t& problem);
100 
101  // Configuration methods
102  void maxIterations(size_type iterations);
103  size_type maxIterations() const;
104  void errorThreshold(const value_type& threshold);
105  value_type errorThreshold() const;
106 
107  // Graph construction
108  PyWStatePtr_t createState(const std::string& nodeName, bool waypoint,
109  int priority);
111  const std::string& transitionName, int w,
112  PyWStatePtr_t isInState);
114  PyWStatePtr_t nodeTo,
115  const std::string& edgeName, int nb,
116  int w, PyWStatePtr_t isInState,
117  bool automaticBuilder);
119  PyWStatePtr_t nodeTo,
120  const std::string& edgeName, int w,
121  PyWStatePtr_t isInState);
122 
123  // Edge/State management
125  std::string getContainingNode(PyWEdgePtr_t edge);
126  void setShort(PyWEdgePtr_t edge, bool isShort);
127  bool isShort(PyWEdgePtr_t edge);
129  void setWeight(PyWEdgePtr_t edge, int weight);
130  size_t getWeight(PyWEdgePtr_t edge);
131  void setWaypoint(PyWEdgePtr_t waypointEdge, int index, PyWEdgePtr_t edge,
132  PyWStatePtr_t state);
134  const boost::python::list& py_constraints);
135  PyWEdgePtr_t getTransition(const std::string& edgeName);
136  PyWStatePtr_t getState(const std::string& stateName);
137 
138  boost::python::list getTransitions();
139  boost::python::list getStates();
140  boost::python::list getTransitionNames();
141  boost::python::list getStateNames();
142 
143  // State queries
144  std::string getStateFromConfiguration(ConfigurationIn_t input);
145 
146  // Constraint management
148  const ImplicitPtr_t& constraint);
150  PyWStatePtr_t component, const boost::python::list& py_constraints);
152  PyWEdgePtr_t component, const boost::python::list& py_constraints);
154  PyWStatePtr_t component, const boost::python::list& py_constraints);
155  void resetConstraints(PyWStatePtr_t component);
156  void registerConstraints(const ImplicitPtr_t& constraint,
157  const ImplicitPtr_t& complement,
158  const ImplicitPtr_t& both);
159 
161  const std::string& name, const boost::python::list& py_surface1,
162  const boost::python::list& py_surface2, const value_type& margin);
164  const std::string& name, const boost::python::list& py_surface1,
165  const boost::python::list& py_surface2, const value_type& width,
166  const value_type& margin);
168  const std::string& name, const boost::python::list& py_surface1,
169  const boost::python::list& py_surface2, const value_type& margin);
171  const std::string& name, const boost::python::list& py_surface1,
172  const boost::python::list& py_surface2);
174  const std::string& name, const boost::python::list& py_surface1,
175  const boost::python::list& py_surface2, const value_type& width,
176  const value_type& margin);
178  const std::string& name, const boost::python::list& py_surface1,
179  const boost::python::list& py_surface2, const value_type& width);
180 
181  boost::python::list createGraspConstraint(const std::string& name,
182  const std::string& gripper,
183  const std::string& handle);
184  ImplicitPtr_t createPreGraspConstraint(const std::string& name,
185  const std::string& gripper,
186  const std::string& handle);
187  boost::python::list getNumericalConstraintsForState(PyWStatePtr_t component);
188  boost::python::list getNumericalConstraintsForEdge(PyWEdgePtr_t component);
189  boost::python::list getNumericalConstraintsForGraph();
190 
191  // Configuration error checking
193  ConfigurationIn_t input);
195  ConfigurationIn_t input);
197  const PyWEdgePtr_t& edge, ConfigurationIn_t leafConfig,
198  ConfigurationIn_t config) const;
200  const PyWEdgePtr_t& edge, ConfigurationIn_t leafConfig,
201  ConfigurationIn_t config) const;
202 
203  // Level set edges
205  const boost::python::list& condNC,
206  const boost::python::list& paramNC);
207 
208  // Security margins and collision
209  boost::python::list getSecurityMarginMatrixForTransition(PyWEdgePtr_t edge);
210  void setSecurityMarginForTransition(PyWEdgePtr_t edge, const char* joint1,
211  const char* joint2, double margin);
212  boost::python::list getRelativeMotionMatrix(PyWEdgePtr_t edge);
213  void removeCollisionPairFromTransition(PyWEdgePtr_t edge, const char* joint1,
214  const char* joint2);
215 
217  ConfigurationIn_t input);
219  ConfigurationIn_t q_rhs,
220  ConfigurationIn_t input);
222  ConfigurationIn_t q_rhs,
223  ConfigurationIn_t input);
224  // Subgraph management
225  void createSubGraph(const char* subgraphName,
226  hpp::core::RoadmapPtr_t roadmap);
227  void setTargetNodeList(const boost::python::list& nodes);
228 
229  // Display and debugging
230  std::string displayStateConstraints(PyWStatePtr_t state);
231  std::string displayTransitionConstraints(PyWEdgePtr_t edge);
233  void display(const char* filename);
234 
235  // Initialization
236  void initialize();
237  // Get transition at given parameter of a PathVector
239  value_type param);
240 };
241 typedef std::shared_ptr<PyWGraph> PyWGraphPtr_t;
242 
243 } // namespace manipulation
244 } // namespace pyhpp
245 #endif // PYHPP_GRAPH_HH
std::vector< ConstraintAndComplement_t > ConstraintsAndComplements_t
shared_ptr< Implicit > ImplicitPtr_t
std::vector< constraints::ImplicitPtr_t > NumericalConstraints_t
pinocchio::value_type value_type
shared_ptr< PathVector > PathVectorPtr_t
shared_ptr< PathValidation > PathValidationPtr_t
shared_ptr< Roadmap > RoadmapPtr_t
pinocchio::ConfigurationIn_t ConfigurationIn_t
pinocchio::size_type size_type
shared_ptr< ConstraintSet > ConstraintSetPtr_t
shared_ptr< Edge > EdgePtr_t
shared_ptr< State > StatePtr_t
shared_ptr< GraphComponent > GraphComponentPtr_t
shared_ptr< Graph > GraphPtr_t
shared_ptr< Problem > ProblemPtr_t
pinocchio::Configuration_t Configuration_t
core::size_type size_type
core::value_type value_type
pinocchio::ConfigurationIn_t ConfigurationIn_t
boost::python::tuple tuple
Definition: path-planner.hh:39
hpp::manipulation::graph::StatePtr_t StatePtr_t
Definition: graph.hh:51
std::shared_ptr< Device > PyWDevicePtr_t
Definition: fwd.hh:42
hpp::manipulation::ConstraintsAndComplements_t ConstraintsAndComplements_t
Definition: graph.hh:54
std::shared_ptr< PyWEdge > PyWEdgePtr_t
Definition: graph.hh:80
hpp::manipulation::ProblemPtr_t ProblemPtr_t
Definition: graph.hh:47
std::shared_ptr< PyWGraph > PyWGraphPtr_t
Definition: fwd.hh:47
hpp::manipulation::graph::State State
Definition: graph.hh:50
hpp::core::PathValidationPtr_t PathValidationPtr_t
Definition: graph.hh:40
hpp::manipulation::graph::Edge Edge
Definition: graph.hh:48
hpp::pinocchio::ConfigurationIn_t ConfigurationIn_t
Definition: device.hh:56
hpp::manipulation::graph::EdgePtr_t EdgePtr_t
Definition: graph.hh:49
hpp::manipulation::ConstraintAndComplement_t ConstraintAndComplement_t
Definition: graph.hh:55
hpp::manipulation::graph::GraphComponentPtr_t GraphComponentPtr_t
Definition: graph.hh:46
std::shared_ptr< PyWState > PyWStatePtr_t
Definition: graph.hh:66
hpp::manipulation::graph::GraphComponent GraphComponent
Definition: graph.hh:45
std::shared_ptr< Problem > PyWProblemPtr_t
Definition: fwd.hh:46
hpp::pinocchio::Configuration_t Configuration_t
Definition: device.hh:55
hpp::manipulation::graph::GraphPtr_t GraphPtr_t
Definition: graph.hh:52
hpp::pinocchio::value_type value_type
Definition: device.hh:60
hpp::pinocchio::size_type size_type
Definition: device.hh:59
Definition: fwd.hh:35
Python wrapper for Edge.
Definition: graph.hh:69
std::size_t nbWaypoints() const
Definition: graph.cc:287
std::size_t weight() const
PyWEdge(const EdgePtr_t &object)
Definition: graph.cc:284
std::string name() const
Definition: graph.cc:286
EdgePtr_t obj
Definition: graph.hh:70
PyWEdge waypoint(int index) const
Definition: graph.cc:297
bool isWaypointTransition() const
Definition: graph.cc:292
std::size_t id() const
Definition: graph.cc:285
PathValidationPtr_t pathValidation() const
Definition: graph.cc:951
Python wrapper for Graph.
Definition: graph.hh:83
boost::python::tuple getConfigErrorForTransitionLeaf(const PyWEdgePtr_t &edge, ConfigurationIn_t leafConfig, ConfigurationIn_t config) const
Definition: graph.cc:764
void setShort(PyWEdgePtr_t edge, bool isShort)
Definition: graph.cc:441
size_t getWeight(PyWEdgePtr_t edge)
Definition: graph.cc:476
boost::python::list getRelativeMotionMatrix(PyWEdgePtr_t edge)
Definition: graph.cc:904
void initialize()
Definition: graph.cc:1047
static PyWEdgePtr_t transitionAtParam(hpp::core::PathVectorPtr_t path, value_type param)
Definition: graph.cc:509
boost::python::list getStates()
Definition: graph.cc:566
ConstraintsAndComplements_t constraintsAndComplements
Definition: graph.hh:94
PyWGraph(const GraphPtr_t &object)
Definition: graph.cc:310
boost::python::tuple getConfigErrorForTransitionTarget(const PyWEdgePtr_t &edge, ConfigurationIn_t leafConfig, ConfigurationIn_t config) const
Definition: graph.cc:773
boost::python::tuple getConfigErrorForTransition(PyWEdgePtr_t edge, ConfigurationIn_t input)
Definition: graph.cc:745
ImplicitPtr_t createPreGraspConstraint(const std::string &name, const std::string &gripper, const std::string &handle)
Definition: graph.cc:1254
ImplicitPtr_t createPrePlacementConstraint(const std::string &name, const boost::python::list &py_surface1, const boost::python::list &py_surface2, const value_type &width, const value_type &margin)
Definition: graph.cc:1169
void setContainingNode(PyWEdgePtr_t edge, PyWStatePtr_t node)
Definition: graph.cc:425
boost::python::tuple createPlacementConstraint1(const std::string &name, const boost::python::list &py_surface1, const boost::python::list &py_surface2, const value_type &margin)
Definition: graph.cc:1158
boost::python::tuple applyStateConstraints(PyWStatePtr_t state, ConfigurationIn_t input)
Definition: graph.cc:786
PyWProblemPtr_t problem
Definition: graph.hh:92
boost::python::list getNumericalConstraintsForEdge(PyWEdgePtr_t component)
Definition: graph.cc:707
boost::python::tuple generateTargetConfig(PyWEdgePtr_t transition, ConfigurationIn_t q_rhs, ConfigurationIn_t input)
Definition: graph.cc:818
ImplicitPtr_t createPrePlacementConstraint1(const std::string &name, const boost::python::list &py_surface1, const boost::python::list &py_surface2, const value_type &width, const value_type &margin)
Definition: graph.cc:1214
boost::python::list getNumericalConstraintsForGraph()
Definition: graph.cc:711
PyWEdgePtr_t createLevelSetTransition(PyWStatePtr_t nodeFrom, PyWStatePtr_t nodeTo, const std::string &edgeName, int w, PyWStatePtr_t isInState)
Definition: graph.cc:404
ImplicitPtr_t createPrePlacementConstraint2(const std::string &name, const boost::python::list &py_surface1, const boost::python::list &py_surface2, const value_type &width)
Definition: graph.cc:1221
size_type maxIterations() const
Definition: graph.cc:328
void display(const char *filename)
Definition: graph.cc:1032
boost::python::tuple getNodesConnectedByTransition(PyWEdgePtr_t edge)
Definition: graph.cc:457
bool isShort(PyWEdgePtr_t edge)
Definition: graph.cc:449
PyWEdgePtr_t getTransition(const std::string &edgeName)
Definition: graph.cc:515
GraphPtr_t obj
Definition: graph.hh:90
void setWaypoint(PyWEdgePtr_t waypointEdge, int index, PyWEdgePtr_t edge, PyWStatePtr_t state)
Definition: graph.cc:484
boost::python::tuple createPlacementConstraint(const std::string &name, const boost::python::list &py_surface1, const boost::python::list &py_surface2, const value_type &margin)
Definition: graph.cc:1065
void removeCollisionPairFromTransition(PyWEdgePtr_t edge, const char *joint1, const char *joint2)
Definition: graph.cc:930
boost::python::list getNumericalConstraintsForState(PyWStatePtr_t component)
Definition: graph.cc:703
boost::python::list getStateNames()
Definition: graph.cc:600
void addLevelSetFoliation(PyWEdgePtr_t edge, const boost::python::list &condNC, const boost::python::list &paramNC)
Definition: graph.cc:842
hpp::constraints::NumericalConstraints_t NumericalConstraints_t
Definition: graph.hh:85
void resetConstraints(PyWStatePtr_t component)
Definition: graph.cc:715
void createSubGraph(const char *subgraphName, hpp::core::RoadmapPtr_t roadmap)
Definition: graph.cc:959
PyWStatePtr_t createState(const std::string &nodeName, bool waypoint, int priority)
Definition: graph.cc:340
PyWEdgePtr_t createTransition(PyWStatePtr_t nodeFrom, PyWStatePtr_t nodeTo, const std::string &transitionName, int w, PyWStatePtr_t isInState)
Definition: graph.cc:352
value_type errorThreshold() const
Definition: graph.cc:334
boost::python::list createGraspConstraint(const std::string &name, const std::string &gripper, const std::string &handle)
Definition: graph.cc:1227
void addNumericalConstraintsForPath(PyWStatePtr_t component, const boost::python::list &py_constraints)
Definition: graph.cc:687
std::string getContainingNode(PyWEdgePtr_t edge)
Definition: graph.cc:433
boost::python::tuple applyLeafConstraints(PyWEdgePtr_t transition, ConfigurationIn_t q_rhs, ConfigurationIn_t input)
Definition: graph.cc:801
PyWEdgePtr_t createWaypointTransition(PyWStatePtr_t nodeFrom, PyWStatePtr_t nodeTo, const std::string &edgeName, int nb, int w, PyWStatePtr_t isInState, bool automaticBuilder)
Definition: graph.cc:365
void setSecurityMarginForTransition(PyWEdgePtr_t edge, const char *joint1, const char *joint2, double margin)
Definition: graph.cc:886
std::string displayStateConstraints(PyWStatePtr_t state)
Definition: graph.cc:996
boost::python::list getTransitionNames()
Definition: graph.cc:583
boost::python::tuple getConfigErrorForState(PyWStatePtr_t component, ConfigurationIn_t input)
Definition: graph.cc:734
boost::python::list getSecurityMarginMatrixForTransition(PyWEdgePtr_t edge)
Definition: graph.cc:870
std::map< std::string, std::size_t > id
Definition: graph.hh:87
void setTargetNodeList(const boost::python::list &nodes)
Definition: graph.cc:971
std::string displayTransitionTargetConstraints(PyWEdgePtr_t edge)
Definition: graph.cc:1020
void addNumericalConstraintsToTransition(PyWEdgePtr_t component, const boost::python::list &py_constraints)
Definition: graph.cc:655
hpp::constraints::ImplicitPtr_t ImplicitPtr_t
Definition: graph.hh:84
void addNumericalConstraintsToGraph(const boost::python::list &py_constraints)
Definition: graph.cc:671
std::string getStateFromConfiguration(ConfigurationIn_t input)
Definition: graph.cc:621
boost::python::tuple createPlacementConstraint2(const std::string &name, const boost::python::list &py_surface1, const boost::python::list &py_surface2)
Definition: graph.cc:1163
void addNumericalConstraint(PyWStatePtr_t node, const ImplicitPtr_t &constraint)
Definition: graph.cc:634
PyWDevicePtr_t robot
Definition: graph.hh:91
std::string displayTransitionConstraints(PyWEdgePtr_t edge)
Definition: graph.cc:1008
void addNumericalConstraintsToState(PyWStatePtr_t component, const boost::python::list &py_constraints)
Definition: graph.cc:639
void registerConstraints(const ImplicitPtr_t &constraint, const ImplicitPtr_t &complement, const ImplicitPtr_t &both)
Definition: graph.cc:719
boost::python::list getTransitions()
Definition: graph.cc:549
void setWeight(PyWEdgePtr_t edge, int weight)
Definition: graph.cc:468
PyWStatePtr_t getState(const std::string &stateName)
Definition: graph.cc:532
Python wrapper for State.
Definition: graph.hh:58
boost::python::list neighborEdges()
Definition: graph.cc:266
std::string name() const
Definition: graph.cc:263
StatePtr_t obj
Definition: graph.hh:59
std::size_t id() const
Definition: graph.cc:264
hpp::core::ConstraintSetPtr_t configConstraint() const
Definition: graph.cc:280
PyWState(const StatePtr_t &object)
Definition: graph.cc:262