-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path_model_8hpp_source.html
More file actions
151 lines (149 loc) · 17.8 KB
/
_model_8hpp_source.html
File metadata and controls
151 lines (149 loc) · 17.8 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
<!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/Model.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">Model.hpp</div> </div>
</div><!--header-->
<div class="contents">
<a href="_model_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="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#include <memory></span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include <atomic></span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>  </div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include "<a class="code" href="_params_8hpp.html">Params.hpp</a>"</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "<a class="code" href="_limits_8hpp.html">Limits.hpp</a>"</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</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="keyword">namespace </span><a class="code" href="namespaceackermann.html">ackermann</a> {</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  </div>
<div class="line"><a name="l00024"></a><span class="lineno"><a class="line" href="classackermann_1_1_model.html"> 24</a></span> <span class="keyword">class </span><a class="code" href="classackermann_1_1_model.html">Model</a> {</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keyword">public</span>:</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keyword">explicit</span> <a class="code" href="classackermann_1_1_model.html#ad9fa277e47f993c8089a9c388880a32c">Model</a>(<span class="keyword">const</span> std::shared_ptr<const Params>& params);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  </div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keywordtype">void</span> <a class="code" href="classackermann_1_1_model.html#a6dc1b7ae5c40f0950b4944a63b192550">reset</a>();</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  </div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordtype">void</span> <a class="code" href="classackermann_1_1_model.html#a109accf55eac34a33c9a5b2b8107e670">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="l00044"></a><span class="lineno"> 44</span>  </div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keywordtype">void</span> <a class="code" href="classackermann_1_1_model.html#a770662c33060369f437a098c944ca262">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="l00053"></a><span class="lineno"> 53</span>  </div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keywordtype">void</span> <a class="code" href="classackermann_1_1_model.html#a09d9ac604f91d339eae4b18a85db9732">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="l00061"></a><span class="lineno"> 61</span>  </div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordtype">void</span> <a class="code" href="classackermann_1_1_model.html#a37c42fe7705a2b3106b0faff813bfcad">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="l00070"></a><span class="lineno"> 70</span>  </div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keywordtype">void</span> <a class="code" href="classackermann_1_1_model.html#a24f1fd6f59b6daa78b1f99f5f2029b56">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="l00079"></a><span class="lineno"> 79</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_model.html#a24f1fd6f59b6daa78b1f99f5f2029b56">getCommand</a>(<span class="keywordtype">double</span>& throttle, <span class="keywordtype">double</span>& steering, <span class="keywordtype">double</span>& steer_vel) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  </div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordtype">void</span> <a class="code" href="classackermann_1_1_model.html#a62226204f92b8c1c7cca0a11f616d7fd">command</a>(<span class="keywordtype">double</span> desired_speed, <span class="keywordtype">double</span> steering, <span class="keyword">const</span> <span class="keywordtype">double</span> dt);</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  </div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keywordtype">void</span> <a class="code" href="classackermann_1_1_model.html#a4b91f4da42041ac667e49116b4f1040d">getError</a>(<span class="keywordtype">double</span>& speed_error, <span class="keywordtype">double</span>& heading_error) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  </div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keywordtype">void</span> <a class="code" href="classackermann_1_1_model.html#a571711ea578e1ccaa7bc23528a53ba95">getWheelLinVel</a>(<span class="keywordtype">double</span>& wheel_LeftFront,</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordtype">double</span>& wheel_RightFront,</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keywordtype">double</span>& wheel_LeftRear,</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keywordtype">double</span>& wheel_RightRear) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  </div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keyword">private</span>:</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keyword">const</span> std::shared_ptr<const Params> params_;</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  std::unique_ptr<Limits> limits_;</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  </div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="comment">// system state variables</span></div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="comment">// use for current conditions for limits</span></div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="comment"></span> std::atomic<double> current_throttle_ {0.0};</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  std::atomic<double> current_steering_ {0.0};</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  std::atomic<double> current_steering_vel_ {0.0};</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  </div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="comment">// use for setting goal</span></div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="comment"></span> std::atomic<double> desired_speed_ {0.0};</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  std::atomic<double> desired_heading_ {0.0};</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  </div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="comment">// current states</span></div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="comment"></span> std::atomic<double> current_speed_ {0.0};</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  std::atomic<double> current_heading_ {0.0};</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> };</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</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_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_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_model_html"><div class="ttname"><a href="classackermann_1_1_model.html">ackermann::Model</a></div><div class="ttdoc">This class is used to further define a vehicle with Ackermann steering.</div><div class="ttdef"><b>Definition:</b> Model.hpp:24</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="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="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_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="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_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>
<!-- 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>