reference_trajectory.cpp
Go to the documentation of this file.
1 /*********************************************************************
2  *
3  * Software License Agreement
4  *
5  * Copyright (c) 2020,
6  * TU Dortmund - Institute of Control Theory and Systems Engineering.
7  * All rights reserved.
8  *
9  * This program is free software: you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation, either version 3 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program. If not, see <https://www.gnu.org/licenses/>.
21  *
22  * Authors: Christoph Rösmann
23  *********************************************************************/
24 
26 
27 namespace corbo {
28 
29 #ifdef MESSAGE_SUPPORT
30 void StaticReference::toMessage(corbo::messages::ReferenceTrajectory& message) const
31 {
32  message.mutable_static_reference()->mutable_xf()->Resize(_ref.rows(), 0);
33  Eigen::Map<OutputVector>(message.mutable_static_reference()->mutable_xf()->mutable_data(), _ref.rows()) = _ref;
34 }
35 
36 void StaticReference::fromMessage(const corbo::messages::ReferenceTrajectory& message, std::stringstream* issues)
37 {
38  int dim = message.static_reference().xf_size();
39  if (dim >= 1)
40  {
41  _ref.resize(dim);
42  for (int i = 0; i < dim; ++i) _ref[i] = message.static_reference().xf(i);
43  }
44  else if (issues)
45  *issues << "StaticReference: dimension must be larger than zero.\n";
46 }
47 #endif
48 
49 #ifdef MESSAGE_SUPPORT
50 void ZeroReference::toMessage(corbo::messages::ReferenceTrajectory& message) const
51 {
52  message.mutable_zero_reference()->set_dimension(getDimension());
53 }
54 
55 void ZeroReference::fromMessage(const corbo::messages::ReferenceTrajectory& message, std::stringstream* issues)
56 {
57  int dim = message.zero_reference().dimension();
58  if (dim >= 1)
59  {
60  setDimension(dim);
61  }
62  else if (issues)
63  *issues << "ZeroReference: dimension must be larger than zero.\n";
64 }
65 #endif
66 
67 #ifdef MESSAGE_SUPPORT
68 void SineReferenceTrajectory::toMessage(corbo::messages::ReferenceTrajectory& message) const
69 {
70  message.mutable_sine_reference_trajectory()->set_amplitude(_amplitude);
71  message.mutable_sine_reference_trajectory()->set_omega(_omega);
72  message.mutable_sine_reference_trajectory()->set_offset(_offset);
73 }
74 
75 void SineReferenceTrajectory::fromMessage(const corbo::messages::ReferenceTrajectory& message, std::stringstream* issues)
76 {
77  setParameters(message.sine_reference_trajectory().amplitude(), message.sine_reference_trajectory().omega(),
78  message.sine_reference_trajectory().offset());
79 }
80 #endif
81 
82 #ifdef MESSAGE_SUPPORT
83 void DiscreteTimeReferenceTrajectory::toMessage(corbo::messages::ReferenceTrajectory& message) const
84 {
85  if (_trajectory) _trajectory->toMessage(*message.mutable_discrete_time_reference()->mutable_time_series());
86  switch (_interpolation)
87  {
89  {
90  message.mutable_discrete_time_reference()->set_interpolation(messages::DiscreteTimeReferenceTrajectory_Interpolation_ZERO_ORDER);
91  break;
92  }
94  {
95  message.mutable_discrete_time_reference()->set_interpolation(messages::DiscreteTimeReferenceTrajectory_Interpolation_LINEAR);
96  break;
97  }
98  default:
99  {
100  PRINT_ERROR_NAMED("Unknown interpolation method.");
101  }
102  }
103 }
104 
105 void DiscreteTimeReferenceTrajectory::fromMessage(const corbo::messages::ReferenceTrajectory& message, std::stringstream* issues)
106 {
107  TimeSeries::Ptr time_series = std::make_shared<TimeSeries>();
108  time_series->fromMessage(message.discrete_time_reference().time_series());
109  setTrajectory(time_series);
110 
111  switch (message.discrete_time_reference().interpolation())
112  {
113  case messages::DiscreteTimeReferenceTrajectory_Interpolation_ZERO_ORDER:
114  {
115  setInterpolationMethod(TimeSeries::Interpolation::ZeroOrderHold);
116  break;
117  }
118  case messages::DiscreteTimeReferenceTrajectory_Interpolation_LINEAR:
119  {
120  setInterpolationMethod(TimeSeries::Interpolation::Linear);
121  break;
122  }
123  default:
124  {
125  PRINT_ERROR_NAMED("Unknown interpolation method.");
126  }
127  }
128 }
129 #endif
130 
131 #ifdef MESSAGE_SUPPORT
132 void BlindDiscreteTimeReferenceTrajectory::toMessage(corbo::messages::ReferenceTrajectory& message) const
133 {
134  if (_trajectory) _trajectory->toMessage(*message.mutable_blind_discrete_time_reference()->mutable_time_series());
135 
136  switch (_interpolation)
137  {
139  {
140  message.mutable_blind_discrete_time_reference()->set_interpolation(
141  messages::BlindDiscreteTimeReferenceTrajectory_Interpolation_ZERO_ORDER);
142  break;
143  }
145  {
146  message.mutable_blind_discrete_time_reference()->set_interpolation(messages::BlindDiscreteTimeReferenceTrajectory_Interpolation_LINEAR);
147  break;
148  }
149  default:
150  {
151  PRINT_ERROR_NAMED("Unknown interpolation method.");
152  }
153  }
154 }
155 
156 void BlindDiscreteTimeReferenceTrajectory::fromMessage(const corbo::messages::ReferenceTrajectory& message, std::stringstream* issues)
157 {
158  TimeSeries::Ptr time_series = std::make_shared<TimeSeries>();
159  time_series->fromMessage(message.blind_discrete_time_reference().time_series());
160  setTrajectory(time_series);
161 
162  switch (message.blind_discrete_time_reference().interpolation())
163  {
164  case messages::BlindDiscreteTimeReferenceTrajectory_Interpolation_ZERO_ORDER:
165  {
166  setInterpolationMethod(TimeSeries::Interpolation::ZeroOrderHold);
167  break;
168  }
169  case messages::BlindDiscreteTimeReferenceTrajectory_Interpolation_LINEAR:
170  {
171  setInterpolationMethod(TimeSeries::Interpolation::Linear);
172  break;
173  }
174  default:
175  {
176  PRINT_ERROR_NAMED("Unknown interpolation method.");
177  }
178  }
179 }
180 #endif
181 
182 } // namespace corbo
#define PRINT_ERROR_NAMED(msg)
Definition: console.h:260
A matrix or vector expression mapping an existing array of data.
Definition: Map.h:94
int getDimension() const override
std::shared_ptr< TimeSeries > Ptr
Definition: time_series.h:64


control_box_rst
Author(s): Christoph Rösmann
autogenerated on Mon Feb 28 2022 22:07:15