-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path_controller_8hpp_source.html
More file actions
190 lines (188 loc) · 31.6 KB
/
_controller_8hpp_source.html
File metadata and controls
190 lines (188 loc) · 31.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.17"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Ackermann Controller: include/Controller.hpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Ackermann Controller
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.17 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Controller.hpp</div> </div>
</div><!--header-->
<div class="contents">
<a href="_controller_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="preprocessor">#pragma once</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>  </div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include <assert.h></span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#include <atomic></span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include <memory></span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include <thread></span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include <chrono></span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  </div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "<a class="code" href="_params_8hpp.html">Params.hpp</a>"</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "<a class="code" href="_model_8hpp.html">Model.hpp</a>"</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "<a class="code" href="_p_i_d_8hpp.html">PID.hpp</a>"</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "<a class="code" href="_limits_8hpp.html">Limits.hpp</a>"</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  </div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">namespace </span><a class="code" href="namespaceackermann.html">ackermann</a> {</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  </div>
<div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="classackermann_1_1_controller.html"> 34</a></span> <span class="keyword">class </span><a class="code" href="classackermann_1_1_controller.html">Controller</a> {</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">public</span>:</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">explicit</span> <a class="code" href="classackermann_1_1_controller.html#a4bf9f0657a103e0144ef14f9b8a7c96e">Controller</a>(<span class="keyword">const</span> std::shared_ptr<const Params>& params);</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  </div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  ~<a class="code" href="classackermann_1_1_controller.html">Controller</a>();</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  </div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordtype">void</span> <a class="code" href="classackermann_1_1_controller.html#a65fb63861770f823cd30713833383aa6">start</a>();</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  </div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordtype">void</span> <a class="code" href="classackermann_1_1_controller.html#a285777e5abee8b5ec7eb683410215a04">stop</a>(<span class="keywordtype">bool</span> block = <span class="keyword">false</span>);</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  </div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordtype">void</span> <a class="code" href="classackermann_1_1_controller.html#ab225ab7b942ed1590cc91b0343860924">reset</a>();</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  </div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordtype">bool</span> <a class="code" href="classackermann_1_1_controller.html#ac42d34ea838ccf8e9f83199b5753c08e">isRunning</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  </div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordtype">void</span> <a class="code" href="classackermann_1_1_controller.html#aee37f9adf9e8b2ec31499c8f7838531d">setState</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> speed, <span class="keyword">const</span> <span class="keywordtype">double</span> heading);</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  </div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordtype">void</span> <a class="code" href="classackermann_1_1_controller.html#a6a282c7083ce5a240d5e8e71782cb106">getState</a>(<span class="keywordtype">double</span>& speed, <span class="keywordtype">double</span>& heading) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  </div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordtype">void</span> <a class="code" href="classackermann_1_1_controller.html#a2c048f93364371bb99445b68cb4ad064">setGoal</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> speed, <span class="keyword">const</span> <span class="keywordtype">double</span> heading);</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  </div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordtype">void</span> <a class="code" href="classackermann_1_1_controller.html#ad768d0fdc4ad85510ba90af05ef6e4c4">getGoal</a>(<span class="keywordtype">double</span>& speed, <span class="keywordtype">double</span>& heading) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  </div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keywordtype">void</span> <a class="code" href="classackermann_1_1_controller.html#a4af9cff4fa372a7bd245fe50aaf05859">getCommand</a>(<span class="keywordtype">double</span>& throttle, <span class="keywordtype">double</span>& steering) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  </div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordtype">void</span> <a class="code" href="classackermann_1_1_controller.html#ab1831f2b1e80c29e5d110c55e11e2d2e">getWheelLinVel</a>(<span class="keywordtype">double</span>& left_front,</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordtype">double</span>& right_front,</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordtype">double</span>& left_rear,</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordtype">double</span>& right_rear) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  </div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keyword">private</span>:</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keywordtype">void</span> controlLoop();</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  </div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keyword">const</span> std::shared_ptr<const Params> params_;</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  </div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  std::unique_ptr<Limits> limits_;</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  </div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  std::unique_ptr<Model> model_;</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  </div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  std::unique_ptr<PID> pid_throttle_;</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  </div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  std::unique_ptr<PID> pid_heading_;</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  </div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  std::thread control_loop_handle_;</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  std::atomic<bool> cancel_ {<span class="keyword">false</span>};</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> };</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  </div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> } <span class="comment">// namespace ackermann</span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassackermann_1_1_model_html_a4b91f4da42041ac667e49116b4f1040d"><div class="ttname"><a href="classackermann_1_1_model.html#a4b91f4da42041ac667e49116b4f1040d">ackermann::Model::getError</a></div><div class="ttdeci">void getError(double &speed_error, double &heading_error) const</div><div class="ttdoc">Return the current error between desired and setpoint; return as parameters specified.</div><div class="ttdef"><b>Definition:</b> Model.cpp:85</div></div>
<div class="ttc" id="aclassackermann_1_1_controller_html_a285777e5abee8b5ec7eb683410215a04"><div class="ttname"><a href="classackermann_1_1_controller.html#a285777e5abee8b5ec7eb683410215a04">ackermann::Controller::stop</a></div><div class="ttdeci">void stop(bool block=false)</div><div class="ttdoc">Stop execution of a control loop and rejoin. This also calls reset() to clear any state variables.</div><div class="ttdef"><b>Definition:</b> Controller.cpp:46</div></div>
<div class="ttc" id="aclassackermann_1_1_model_html_ad9fa277e47f993c8089a9c388880a32c"><div class="ttname"><a href="classackermann_1_1_model.html#ad9fa277e47f993c8089a9c388880a32c">ackermann::Model::Model</a></div><div class="ttdeci">Model(const std::shared_ptr< const Params > &params)</div><div class="ttdoc">Constructor.</div><div class="ttdef"><b>Definition:</b> Model.cpp:23</div></div>
<div class="ttc" id="aclassackermann_1_1_controller_html_a65fb63861770f823cd30713833383aa6"><div class="ttname"><a href="classackermann_1_1_controller.html#a65fb63861770f823cd30713833383aa6">ackermann::Controller::start</a></div><div class="ttdeci">void start()</div><div class="ttdoc">Begin execution of a control loop.</div><div class="ttdef"><b>Definition:</b> Controller.cpp:37</div></div>
<div class="ttc" id="aclassackermann_1_1_model_html_a24f1fd6f59b6daa78b1f99f5f2029b56"><div class="ttname"><a href="classackermann_1_1_model.html#a24f1fd6f59b6daa78b1f99f5f2029b56">ackermann::Model::getCommand</a></div><div class="ttdeci">void getCommand(double &throttle, double &steering) const</div><div class="ttdoc">Get the current commanded throttle and steering angle; return as parameters specified.</div><div class="ttdef"><b>Definition:</b> Model.cpp:57</div></div>
<div class="ttc" id="aclassackermann_1_1_controller_html_ac42d34ea838ccf8e9f83199b5753c08e"><div class="ttname"><a href="classackermann_1_1_controller.html#ac42d34ea838ccf8e9f83199b5753c08e">ackermann::Controller::isRunning</a></div><div class="ttdeci">bool isRunning() const</div><div class="ttdoc">Return true if the core execution thread is running. This is a useful utility for testing.</div><div class="ttdef"><b>Definition:</b> Controller.cpp:59</div></div>
<div class="ttc" id="aclassackermann_1_1_p_i_d_html_aaf565af4f72abcf148b8abe8880df6c3"><div class="ttname"><a href="classackermann_1_1_p_i_d.html#aaf565af4f72abcf148b8abe8880df6c3">ackermann::PID::get_k_d</a></div><div class="ttdeci">double get_k_d() const</div><div class="ttdoc">Get the kD Derivative Gain.</div><div class="ttdef"><b>Definition:</b> PID.cpp:27</div></div>
<div class="ttc" id="a_model_8hpp_html"><div class="ttname"><a href="_model_8hpp.html">Model.hpp</a></div><div class="ttdoc">Class declaration for an Ackermann vehicle model.</div></div>
<div class="ttc" id="aclassackermann_1_1_controller_html"><div class="ttname"><a href="classackermann_1_1_controller.html">ackermann::Controller</a></div><div class="ttdoc">Implementation of a steering and speed controller for a rover with an Ackermann steering mechanism.</div><div class="ttdef"><b>Definition:</b> Controller.hpp:34</div></div>
<div class="ttc" id="aclassackermann_1_1_controller_html_ad768d0fdc4ad85510ba90af05ef6e4c4"><div class="ttname"><a href="classackermann_1_1_controller.html#ad768d0fdc4ad85510ba90af05ef6e4c4">ackermann::Controller::getGoal</a></div><div class="ttdeci">void getGoal(double &speed, double &heading) const</div><div class="ttdoc">Get the current system setpoint (speed, heading); return as parameters specified.</div><div class="ttdef"><b>Definition:</b> Controller.cpp:75</div></div>
<div class="ttc" id="aclassackermann_1_1_controller_html_a6a282c7083ce5a240d5e8e71782cb106"><div class="ttname"><a href="classackermann_1_1_controller.html#a6a282c7083ce5a240d5e8e71782cb106">ackermann::Controller::getState</a></div><div class="ttdeci">void getState(double &speed, double &heading) const</div><div class="ttdoc">Get the current state (speed, heading) of the system; return as parameters specified.</div><div class="ttdef"><b>Definition:</b> Controller.cpp:67</div></div>
<div class="ttc" id="aclassackermann_1_1_controller_html_a4bf9f0657a103e0144ef14f9b8a7c96e"><div class="ttname"><a href="classackermann_1_1_controller.html#a4bf9f0657a103e0144ef14f9b8a7c96e">ackermann::Controller::Controller</a></div><div class="ttdeci">Controller(const std::shared_ptr< const Params > &params)</div><div class="ttdoc">Constructor; constructs and initializes parameters of all composition classes.</div><div class="ttdef"><b>Definition:</b> Controller.cpp:19</div></div>
<div class="ttc" id="aclassackermann_1_1_controller_html_aee37f9adf9e8b2ec31499c8f7838531d"><div class="ttname"><a href="classackermann_1_1_controller.html#aee37f9adf9e8b2ec31499c8f7838531d">ackermann::Controller::setState</a></div><div class="ttdeci">void setState(const double speed, const double heading)</div><div class="ttdoc">Set the current state (speed, heading) of the system.</div><div class="ttdef"><b>Definition:</b> Controller.cpp:63</div></div>
<div class="ttc" id="aclassackermann_1_1_model_html_a770662c33060369f437a098c944ca262"><div class="ttname"><a href="classackermann_1_1_model.html#a770662c33060369f437a098c944ca262">ackermann::Model::getState</a></div><div class="ttdeci">void getState(double &speed, double &heading) const</div><div class="ttdoc">Get the current state estimate; return as parameters specified.</div><div class="ttdef"><b>Definition:</b> Model.cpp:42</div></div>
<div class="ttc" id="astructfake_1_1_plant_options_html_a9161f2e40ab9030eeb46ad4ea297700e"><div class="ttname"><a href="structfake_1_1_plant_options.html#a9161f2e40ab9030eeb46ad4ea297700e">fake::PlantOptions::max_steering_angle</a></div><div class="ttdeci">double max_steering_angle</div><div class="ttdoc">Maximum steering angle (rad)</div><div class="ttdef"><b>Definition:</b> plant.h:40</div></div>
<div class="ttc" id="aclassackermann_1_1_p_i_d_html_a9845f8af09db7e901d319c53e4e43268"><div class="ttname"><a href="classackermann_1_1_p_i_d.html#a9845f8af09db7e901d319c53e4e43268">ackermann::PID::get_k_i</a></div><div class="ttdeci">double get_k_i() const</div><div class="ttdoc">Get the kI Integral Gain.</div><div class="ttdef"><b>Definition:</b> PID.cpp:26</div></div>
<div class="ttc" id="aclassackermann_1_1_controller_html_ab1831f2b1e80c29e5d110c55e11e2d2e"><div class="ttname"><a href="classackermann_1_1_controller.html#ab1831f2b1e80c29e5d110c55e11e2d2e">ackermann::Controller::getWheelLinVel</a></div><div class="ttdeci">void getWheelLinVel(double &left_front, double &right_front, double &left_rear, double &right_rear) const</div><div class="ttdoc">Get the current system wheel speeds; return as parameters specified.</div><div class="ttdef"><b>Definition:</b> Controller.cpp:83</div></div>
<div class="ttc" id="aclassackermann_1_1_limits_html_a0e75c61fc7d5d90c6f64af78d8cf76ff"><div class="ttname"><a href="classackermann_1_1_limits.html#a0e75c61fc7d5d90c6f64af78d8cf76ff">ackermann::Limits::throttleToSpeed</a></div><div class="ttdeci">double throttleToSpeed(double throttle) const</div><div class="ttdoc">Use Parameters structure to convert throttle to speed as a function of maximum allowable speed.</div><div class="ttdef"><b>Definition:</b> Limits.cpp:20</div></div>
<div class="ttc" id="anamespacefake_html"><div class="ttname"><a href="namespacefake.html">fake</a></div><div class="ttdoc">Namespace for fake plant model implementation.</div><div class="ttdef"><b>Definition:</b> plant.cpp:8</div></div>
<div class="ttc" id="aclassackermann_1_1_p_i_d_html_a98e96878fcc3373f22d783b78c7cf0d9"><div class="ttname"><a href="classackermann_1_1_p_i_d.html#a98e96878fcc3373f22d783b78c7cf0d9">ackermann::PID::PID</a></div><div class="ttdeci">PID(const std::shared_ptr< const PIDParams > &params, double out_minLimit=std::numeric_limits< double >::lowest(), double out_maxLimit=std::numeric_limits< double >::max())</div><div class="ttdoc">Constructor.</div><div class="ttdef"><b>Definition:</b> PID.cpp:15</div></div>
<div class="ttc" id="anamespaceackermann_html"><div class="ttname"><a href="namespaceackermann.html">ackermann</a></div><div class="ttdoc">Namespace for Ackermann controller implementation.</div><div class="ttdef"><b>Definition:</b> Controller.cpp:14</div></div>
<div class="ttc" id="aclassackermann_1_1_model_html_a6dc1b7ae5c40f0950b4944a63b192550"><div class="ttname"><a href="classackermann_1_1_model.html#a6dc1b7ae5c40f0950b4944a63b192550">ackermann::Model::reset</a></div><div class="ttdeci">void reset()</div><div class="ttdoc">Reset system state variables to defaults.</div><div class="ttdef"><b>Definition:</b> Model.cpp:28</div></div>
<div class="ttc" id="aclassackermann_1_1_controller_html_a4af9cff4fa372a7bd245fe50aaf05859"><div class="ttname"><a href="classackermann_1_1_controller.html#a4af9cff4fa372a7bd245fe50aaf05859">ackermann::Controller::getCommand</a></div><div class="ttdeci">void getCommand(double &throttle, double &steering) const</div><div class="ttdoc">Get the current system command (speed, heading); return as parameters specified.</div><div class="ttdef"><b>Definition:</b> Controller.cpp:79</div></div>
<div class="ttc" id="aclassfake_1_1_plant_html_a51e4596f215bec72d55bc4b4a568b8b0"><div class="ttname"><a href="classfake_1_1_plant.html#a51e4596f215bec72d55bc4b4a568b8b0">fake::Plant::command</a></div><div class="ttdeci">void command(const double throttle, const double steering, const double dt)</div><div class="ttdoc">Simulate an actual command to the vehicle.</div><div class="ttdef"><b>Definition:</b> plant.cpp:34</div></div>
<div class="ttc" id="aclassackermann_1_1_controller_html_ab225ab7b942ed1590cc91b0343860924"><div class="ttname"><a href="classackermann_1_1_controller.html#ab225ab7b942ed1590cc91b0343860924">ackermann::Controller::reset</a></div><div class="ttdeci">void reset()</div><div class="ttdoc">Clear system state variables.</div><div class="ttdef"><b>Definition:</b> Controller.cpp:53</div></div>
<div class="ttc" id="aclassackermann_1_1_limits_html_a1fcf66ef8f8161d38e3d77c1e5acfb92"><div class="ttname"><a href="classackermann_1_1_limits.html#a1fcf66ef8f8161d38e3d77c1e5acfb92">ackermann::Limits::limit</a></div><div class="ttdeci">void limit(const double current_speed, const double current_steering, const double current_steering_vel, double &desired_throttle, double &desired_steering, double &desired_steering_vel, double dt) const</div><div class="ttdoc">Apply known limits to the given controller command.</div><div class="ttdef"><b>Definition:</b> Limits.cpp:74</div></div>
<div class="ttc" id="a_params_8hpp_html"><div class="ttname"><a href="_params_8hpp.html">Params.hpp</a></div><div class="ttdoc">Parameters used in the Ackermann controller system.</div></div>
<div class="ttc" id="aclassackermann_1_1_limits_html_abb347d9d57d22dfe47ef704ea6d10d7d"><div class="ttname"><a href="classackermann_1_1_limits.html#abb347d9d57d22dfe47ef704ea6d10d7d">ackermann::Limits::speedToThrottle</a></div><div class="ttdeci">double speedToThrottle(double speed) const</div><div class="ttdoc">Use Parameters structure to convert speed to throttle as a function of maximum allowable speed.</div><div class="ttdef"><b>Definition:</b> Limits.cpp:35</div></div>
<div class="ttc" id="aplant_8h_html"><div class="ttname"><a href="plant_8h.html">plant.h</a></div><div class="ttdoc">A Fake implementation of a physical Ackermann platform.</div></div>
<div class="ttc" id="aclassackermann_1_1_model_html_a109accf55eac34a33c9a5b2b8107e670"><div class="ttname"><a href="classackermann_1_1_model.html#a109accf55eac34a33c9a5b2b8107e670">ackermann::Model::setState</a></div><div class="ttdeci">void setState(const double speed, const double heading)</div><div class="ttdoc">Set the current system state.</div><div class="ttdef"><b>Definition:</b> Model.cpp:37</div></div>
<div class="ttc" id="astructfake_1_1_plant_options_html"><div class="ttname"><a href="structfake_1_1_plant_options.html">fake::PlantOptions</a></div><div class="ttdoc">Configurable parameters for the Plant class.</div><div class="ttdef"><b>Definition:</b> plant.h:31</div></div>
<div class="ttc" id="aclassackermann_1_1_limits_html_a18e0ace6fde91bf5b641197dafbd5f57"><div class="ttname"><a href="classackermann_1_1_limits.html#a18e0ace6fde91bf5b641197dafbd5f57">ackermann::Limits::boundHeading</a></div><div class="ttdeci">double boundHeading(const double heading) const</div><div class="ttdoc">Bound heading to [-pi,pi) range; prevents odd behavior.</div><div class="ttdef"><b>Definition:</b> Limits.cpp:60</div></div>
<div class="ttc" id="aclassackermann_1_1_model_html_a09d9ac604f91d339eae4b18a85db9732"><div class="ttname"><a href="classackermann_1_1_model.html#a09d9ac604f91d339eae4b18a85db9732">ackermann::Model::setGoal</a></div><div class="ttdeci">void setGoal(const double speed, const double heading)</div><div class="ttdoc">Set the target setpoint.</div><div class="ttdef"><b>Definition:</b> Model.cpp:47</div></div>
<div class="ttc" id="aclassackermann_1_1_model_html_a37c42fe7705a2b3106b0faff813bfcad"><div class="ttname"><a href="classackermann_1_1_model.html#a37c42fe7705a2b3106b0faff813bfcad">ackermann::Model::getGoal</a></div><div class="ttdeci">void getGoal(double &speed, double &heading) const</div><div class="ttdoc">Get the current setpoint; return as parameters specified.</div><div class="ttdef"><b>Definition:</b> Model.cpp:52</div></div>
<div class="ttc" id="aclassackermann_1_1_controller_html_a2c048f93364371bb99445b68cb4ad064"><div class="ttname"><a href="classackermann_1_1_controller.html#a2c048f93364371bb99445b68cb4ad064">ackermann::Controller::setGoal</a></div><div class="ttdeci">void setGoal(const double speed, const double heading)</div><div class="ttdoc">Set the current system setpoint (speed, heading).</div><div class="ttdef"><b>Definition:</b> Controller.cpp:71</div></div>
<div class="ttc" id="aclassackermann_1_1_model_html_a62226204f92b8c1c7cca0a11f616d7fd"><div class="ttname"><a href="classackermann_1_1_model.html#a62226204f92b8c1c7cca0a11f616d7fd">ackermann::Model::command</a></div><div class="ttdeci">void command(double desired_speed, double steering, const double dt)</div><div class="ttdoc">Simulate execution of the given throttle and steering commands.</div><div class="ttdef"><b>Definition:</b> Model.cpp:69</div></div>
<div class="ttc" id="a_limits_8hpp_html"><div class="ttname"><a href="_limits_8hpp.html">Limits.hpp</a></div><div class="ttdoc">Class declaration for Limits class.</div></div>
<div class="ttc" id="aclassackermann_1_1_model_html_a571711ea578e1ccaa7bc23528a53ba95"><div class="ttname"><a href="classackermann_1_1_model.html#a571711ea578e1ccaa7bc23528a53ba95">ackermann::Model::getWheelLinVel</a></div><div class="ttdeci">void getWheelLinVel(double &wheel_LeftFront, double &wheel_RightFront, double &wheel_LeftRear, double &wheel_RightRear) const</div><div class="ttdoc">Return the current linear velocity at each wheel; used for calculating wheel speed with tire informat...</div><div class="ttdef"><b>Definition:</b> Model.cpp:92</div></div>
<div class="ttc" id="aclassackermann_1_1_p_i_d_html_a3257bf60c93eb2a3b18b48a40a480b2d"><div class="ttname"><a href="classackermann_1_1_p_i_d.html#a3257bf60c93eb2a3b18b48a40a480b2d">ackermann::PID::get_k_p</a></div><div class="ttdeci">double get_k_p() const</div><div class="ttdoc">Get the kP Proportional Gain.</div><div class="ttdef"><b>Definition:</b> PID.cpp:25</div></div>
<div class="ttc" id="aclassackermann_1_1_p_i_d_html_a6286415d935d49dceba543deb4356b42"><div class="ttname"><a href="classackermann_1_1_p_i_d.html#a6286415d935d49dceba543deb4356b42">ackermann::PID::getCommand</a></div><div class="ttdeci">double getCommand(double current_error, double dt)</div><div class="ttdoc">Perform PID Calculation.</div><div class="ttdef"><b>Definition:</b> PID.cpp:29</div></div>
<div class="ttc" id="aclassfake_1_1_plant_html_a65ac487259b9dc0e30f6495f5f5c0453"><div class="ttname"><a href="classfake_1_1_plant.html#a65ac487259b9dc0e30f6495f5f5c0453">fake::Plant::getState</a></div><div class="ttdeci">void getState(double &speed, double &heading) const</div><div class="ttdoc">Get the current system state.</div><div class="ttdef"><b>Definition:</b> plant.cpp:29</div></div>
<div class="ttc" id="aclassackermann_1_1_limits_html"><div class="ttname"><a href="classackermann_1_1_limits.html">ackermann::Limits</a></div><div class="ttdoc">Class used to apply known limits to a given desired control signal.</div><div class="ttdef"><b>Definition:</b> Limits.hpp:26</div></div>
<div class="ttc" id="aclassfake_1_1_plant_html_a346cd2379207256138a0996960461d16"><div class="ttname"><a href="classfake_1_1_plant.html#a346cd2379207256138a0996960461d16">fake::Plant::Plant</a></div><div class="ttdeci">Plant(const PlantOptions &opts, const std::shared_ptr< const ackermann::Params > &params)</div><div class="ttdoc">Constructor.</div><div class="ttdef"><b>Definition:</b> plant.cpp:10</div></div>
<div class="ttc" id="aclassackermann_1_1_limits_html_a7fb25c558450b31945d1b13db4573a08"><div class="ttname"><a href="classackermann_1_1_limits.html#a7fb25c558450b31945d1b13db4573a08">ackermann::Limits::shortestArcToTurn</a></div><div class="ttdeci">double shortestArcToTurn(double current_heading, double desired_heading) const</div><div class="ttdoc">Calculate the direction to minimize turning angle (eg, don't turn 270deg right if you can turn 90deg ...</div><div class="ttdef"><b>Definition:</b> Limits.cpp:50</div></div>
<div class="ttc" id="aclassfake_1_1_plant_html_aa6f602aaabebcc84a03c2ae7a4878c05"><div class="ttname"><a href="classfake_1_1_plant.html#aa6f602aaabebcc84a03c2ae7a4878c05">fake::Plant::setState</a></div><div class="ttdeci">void setState(const double speed, const double heading)</div><div class="ttdoc">Set the current system state.</div><div class="ttdef"><b>Definition:</b> plant.cpp:24</div></div>
<div class="ttc" id="aclassackermann_1_1_p_i_d_html_a1f2e47eb9958ec5d1887bf7c5f82175a"><div class="ttname"><a href="classackermann_1_1_p_i_d.html#a1f2e47eb9958ec5d1887bf7c5f82175a">ackermann::PID::reset_PID</a></div><div class="ttdeci">void reset_PID()</div><div class="ttdoc">Reset the PID.</div><div class="ttdef"><b>Definition:</b> PID.cpp:52</div></div>
<div class="ttc" id="a_p_i_d_8hpp_html"><div class="ttname"><a href="_p_i_d_8hpp.html">PID.hpp</a></div><div class="ttdoc">Class declaration for a PID controller.</div></div>
<div class="ttc" id="aclassfake_1_1_plant_html_ac63a7c00709fdffe2318ed429e1f351c"><div class="ttname"><a href="classfake_1_1_plant.html#ac63a7c00709fdffe2318ed429e1f351c">fake::Plant::reset</a></div><div class="ttdeci">void reset()</div><div class="ttdoc">Reset all state variables to their defaults.</div><div class="ttdef"><b>Definition:</b> plant.cpp:19</div></div>
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by  <a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.17
</small></address>
</body>
</html>