DiscreteControlSpace.h
1 /*********************************************************************
2 * Software License Agreement (BSD License)
3 *
4 * Copyright (c) 2012, Willow Garage
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * * Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * * Redistributions in binary form must reproduce the above
14 * copyright notice, this list of conditions and the following
15 * disclaimer in the documentation and/or other materials provided
16 * with the distribution.
17 * * Neither the name of the Willow Garage nor the names of its
18 * contributors may be used to endorse or promote products derived
19 * from this software without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 * POSSIBILITY OF SUCH DAMAGE.
33 *********************************************************************/
34 
35 /* Author: Ioan Sucan */
36 
37 #ifndef OMPL_CONTROL_SPACES_DISCRETE_CONTROL_SPACE_
38 #define OMPL_CONTROL_SPACES_DISCRETE_CONTROL_SPACE_
39 
40 #include "ompl/control/ControlSpace.h"
41 
42 namespace ompl
43 {
44  namespace control
45  {
47  class DiscreteControlSampler : public ControlSampler
48  {
49  public:
51  DiscreteControlSampler(const ControlSpace *space) : ControlSampler(space)
52  {
53  }
54 
55  void sample(Control *control) override;
56  };
57 
62  class DiscreteControlSpace : public ControlSpace
63  {
64  public:
66  class ControlType : public Control
67  {
68  public:
70  int value;
71  };
72 
75  DiscreteControlSpace(const base::StateSpacePtr &stateSpace, int lowerBound, int upperBound)
76  : ControlSpace(stateSpace), lowerBound_(lowerBound), upperBound_(upperBound)
77  {
78  setName("Discrete" + getName());
80  }
81 
82  ~DiscreteControlSpace() override = default;
83 
84  unsigned int getDimension() const override;
85 
86  void copyControl(Control *destination, const Control *source) const override;
87 
88  bool equalControls(const Control *control1, const Control *control2) const override;
89 
91 
92  Control *allocControl() const override;
93 
94  void freeControl(Control *control) const override;
95 
97  void nullControl(Control *control) const override;
98 
99  void printControl(const Control *control, std::ostream &out) const override;
100 
101  void printSettings(std::ostream &out) const override;
102 
104  unsigned int getControlCount() const
105  {
106  return upperBound_ - lowerBound_ + 1;
107  }
108 
110  int getLowerBound() const
111  {
112  return lowerBound_;
113  }
114 
116  int getUpperBound() const
117  {
118  return upperBound_;
119  }
120 
123  void setBounds(int lowerBound, int upperBound)
124  {
125  lowerBound_ = lowerBound;
126  upperBound_ = upperBound;
127  }
128 
129  void setup() override;
130 
132  unsigned int getSerializationLength() const override;
133 
135  void serialize(void *serialization, const Control *ctrl) const override;
136 
138  void deserialize(Control *ctrl, const void *serialization) const override;
139 
140  protected:
142  int lowerBound_;
143 
145  int upperBound_;
146  };
147  }
148 }
149 
150 #endif
void nullControl(Control *control) const override
This sets the control value to lowerBound_.
void deserialize(Control *ctrl, const void *serialization) const override
Deserializes a control from the serialization buffer.
@ CONTROL_SPACE_DISCRETE
ompl::control::DiscreteControlSpace
Definition of an abstract control.
Definition: Control.h:111
DiscreteControlSampler(const ControlSpace *space)
Constructor.
void setBounds(int lowerBound, int upperBound)
Set the bounds for the states in this space (the states will be in the set [lowerBound,...
bool equalControls(const Control *control1, const Control *control2) const override
Check if two controls are the same.
void copyControl(Control *destination, const Control *source) const override
Copy a control to another.
const std::string & getName() const
Get the name of the control space.
void serialize(void *serialization, const Control *ctrl) const override
Serializes the given control into the serialization buffer.
Control * allocControl() const override
Allocate memory for a control.
DiscreteControlSpace(const base::StateSpacePtr &stateSpace, int lowerBound, int upperBound)
Construct a discrete space in wich controls can take values in the set [lowerBound,...
void setName(const std::string &name)
Set the name of the control space.
void sample(Control *control) override
Sample a control. All other control sampling functions default to this one, unless a user-specified i...
void printControl(const Control *control, std::ostream &out) const override
Print a control to a stream.
int getUpperBound() const
Returns the highest possible control value.
int type_
A type assigned for this control space.
Definition: ControlSpace.h:251
ompl::control::Control ControlType
Define the type of control allocated by this control space.
Definition: ControlSpace.h:131
void freeControl(Control *control) const override
Free the memory of a control.
unsigned int getControlCount() const
Returns the number of controls possible.
void printSettings(std::ostream &out) const override
Print the settings for this control space to a stream.
A shared pointer wrapper for ompl::control::ControlSampler.
void setup() override
Perform final setup steps. This function is automatically called by the SpaceInformation.
int getLowerBound() const
Returns the lowest possible control value.
int value
The current control - an int in range [lowerBound, upperBound].
int lowerBound_
The lowest integer state.
int upperBound_
The highest integer state.
ControlSamplerPtr allocDefaultControlSampler() const override
Allocate the default control sampler.
unsigned int getDimension() const override
Get the dimension of this control space.
Main namespace. Contains everything in this library.
unsigned int getSerializationLength() const override
Returns the serialization size for a single control in this space.