-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathindex.html
More file actions
197 lines (195 loc) · 11.2 KB
/
index.html
File metadata and controls
197 lines (195 loc) · 11.2 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
191
192
193
194
195
196
197
<!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: Ackermann Controller</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>
</div><!-- top -->
<!-- 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 class="PageDoc"><div class="header">
<div class="headertitle">
<div class="title">Ackermann Controller </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p><a href="https://travis-ci.org/danielmohansahu/ackermann-controller"><object type="image/svg+xml" data="https://travis-ci.org/danielmohansahu/ackermann-controller.svg?branch=master" style="pointer-events: none;">Build Status</object></a> <a href="https://coveralls.io/github/danielmohansahu/ackermann-controller?branch=master"><object type="image/svg+xml" data="https://coveralls.io/repos/github/danielmohansahu/ackermann-controller/badge.svg?branch=master" style="pointer-events: none;">Coverage Status</object></a> </p>
<h1><a class="anchor" id="autotoc_md1"></a>
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT"/></a></h1>
<h1><a class="anchor" id="autotoc_md2"></a>
Overview</h1>
<p>This is an implementation of an <a href="https://en.wikipedia.org/wiki/Ackermann_steering_geometry">Ackermann Steering Geometry</a> controller. The user is able to input a desired heading and speed in the global reference frame which the controller will drive the robot model towards, based upon rover parameters and limitations.</p>
<p>To calculate the Ackermann steering angles for a four wheeled vehicles, a simplified model with a single front and rear wheel is assumed. The steering angle of this simulated single steering wheel is used to calculate the updated heading of the rover along with the vehicle wheel base. For an Ackermann steering system, the two actual steering wheels are perpindicular to the radius of the turning circle traced by each wheel; the difference in angles for each of these wheels can be calculated based on the track of the rover. The different turning circles and the vehicle speed are used to calculate individual wheel speeds.</p>
<p>For more detailed information on this project please explore the generated docs. After cloning the repository open <a href="docs/doxygen/html/index.html">them</a> in the web browser of your choice, e.g. </p><div class="fragment"><div class="line">firefox docs/doxygen/html/index.html</div>
</div><!-- fragment --><h1><a class="anchor" id="autotoc_md3"></a>
Dependencies</h1>
<p>This project requires a C++11 enabled compiler and <code>cmake</code>. In addition, we use QT5 for visualization of our demo.</p>
<p>QT5 (and QtCharts) can be installed via the following command on Ubuntu 18.04:</p>
<div class="fragment"><div class="line">sudo apt-get install qt5-default libqt5charts5-dev</div>
</div><!-- fragment --><h1><a class="anchor" id="autotoc_md4"></a>
Usage Documentation</h1>
<h2><a class="anchor" id="autotoc_md5"></a>
Build Instructions</h2>
<p>To build the package on Ubuntu 18.04, run the following from a terminal.</p>
<div class="fragment"><div class="line">git clone https://github.com/danielmohansahu/ackermann-controller</div>
<div class="line">cd ackermann-controller</div>
<div class="line">mkdir build && cd build</div>
<div class="line">cmake .. && make</div>
</div><!-- fragment --><p>A script to launch this is included in BashScripts.</p>
<h2><a class="anchor" id="autotoc_md6"></a>
Demonstration Instructions</h2>
<p>Assuming the build succeeded, you can then run the demo code.</p>
<div class="fragment"><div class="line"># from your build directory (e.g. ackermann-controller/build/)</div>
<div class="line">./app/demo</div>
</div><!-- fragment --><p>A script to launch this is included in BashScripts.</p>
<p>You should see something similar to the following, which allows you to evaluate the system and play with parameters against a mock Plant.</p>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadNone">Empty </th><th class="markdownTableHeadNone">Running </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone"><img src="docs/media/empty_demo.png" alt=""Empty Demo""/> </td><td class="markdownTableBodyNone"><img src="docs/media/running_demo.png" alt=""Running Demo""/> </td></tr>
</table>
<h2><a class="anchor" id="autotoc_md7"></a>
Testing Instructions</h2>
<p>Unit and System tests are run during Continuous integration, but you can run them manually from the command line as well:</p>
<div class="fragment"><div class="line"># from your build directory (e.g. ackermann-controller/build/)</div>
<div class="line">./test/cpp-test</div>
</div><!-- fragment --><p>A script to launch this is included in BashScripts.</p>
<p>To generate CPPCheck and CPPLint code analysis:</p>
<div class="fragment"><div class="line"># from the BashScripts directory</div>
<div class="line">chmod +x check_cppcheck.sh check_cpplint.sh</div>
<div class="line">./check_cppcheck.sh</div>
<div class="line">./check_cpplint.sh</div>
</div><!-- fragment --><h1><a class="anchor" id="autotoc_md8"></a>
Personnel</h1>
<ul>
<li>Spencer Elyard, <em>TODO: Complete personnel blurb.</em></li>
<li>Santosh Kesani, <em>TODO: Complete personnel blurb.</em></li>
<li>Daniel Sahu, a roboticist working on his Masters at UMD.</li>
</ul>
<h1><a class="anchor" id="autotoc_md9"></a>
Licensing</h1>
<p>This project uses the MIT License as described in [the license file](LICENSE).</p>
<h1><a class="anchor" id="autotoc_md10"></a>
Engineering Processes and Documentation</h1>
<p>Details on the status of our Agile Iterative Process (AIP) <a href="https://docs.google.com/spreadsheets/d/1nx85sowA3IRX-usU_M1hhwHplOLXMWdkvec2w3Roi5Q/edit?usp=sharing">can be found here</a></p>
<p>Sprint planning notes and reviews <a href="https://docs.google.com/document/d/1MEoRXtJXdUWnkTbJmcDfJYct3i6_LEJ-TULpP2h_qYA/edit?usp=sharing">can be found here</a>.</p>
<h1><a class="anchor" id="autotoc_md11"></a>
Known Bugs and Issues</h1>
<p><b>TODO: Annote bugs and issues when uncovered.</b></p>
<h2><a class="anchor" id="autotoc_md12"></a>
Documentation Generation instructions</h2>
<p>To generate Doxygen documentation:</p>
<div class="fragment"><div class="line"># from your install directory (e.g. ackermann-controller/)</div>
<div class="line">doxygen Doxyfile</div>
</div><!-- fragment --><p>To access Doxygen documentation, navigate to: </p><div class="fragment"><div class="line">doxygen/html/index.html</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md13"></a>
Parameters and Limitations</h2>
<h3><a class="anchor" id="autotoc_md14"></a>
Rover Model</h3>
<p>The controller enforces the various limitations of the rover:</p>
<ul>
<li>Physical Parameters<ul>
<li>Robot wheel base (length between front and rear wheels). (0.45 meters for demo)</li>
<li>Maximum allowable steering angle (absolute value) (0.785 radians for demo)</li>
</ul>
</li>
<li>Dynamic Limitations<ul>
<li>Maximum (forward) and minimum (reverse) speed limitations (10 m/s and 0 m/s for demo).</li>
<li>Maximum (forward) and minimum (reverse) acceleration limitations (+/- 5 m/s^2 for demo).</li>
<li>Maximum (right) and minimum (left) angular velocity limitations (TBD)</li>
<li>Maximum (right) and minimum (left) angular acecleration limitations (TBD)</li>
</ul>
</li>
<li>Controller Parameters<ul>
<li>Frequency (100hz for demo)</li>
<li>PID controller parameters for speed control</li>
<li>PID controller parameters for heading control</li>
</ul>
</li>
</ul>
<h3><a class="anchor" id="autotoc_md15"></a>
Controller Model</h3>
<p>The controller will accept the following inputs:</p>
<ul>
<li>Desired heading (global coordinate frame) and speed</li>
<li>Updates to current speed and heading from rover model</li>
</ul>
<p>The controller will provide the following outputs:</p>
<ul>
<li>Throttle and Steering Commands, limited as appropriate by the established limitations from the rover model</li>
<li>Current calculated speed and heading</li>
<li>Current desired heading (global coordinate frame) and speed</li>
</ul>
<h1><a class="anchor" id="autotoc_md16"></a>
Class Diagram</h1>
<p>An overview of the classes used and their dependencies is shown in the following UML diagram:</p>
<p><img src="docs/uml/revised/class_diagram.png" alt="Class-Diagram" class="inline"/></p>
<h1><a class="anchor" id="autotoc_md17"></a>
Sequence Diagram</h1>
<p>An example sequence diagram for the full program is shown in the following UML diagram:</p>
<p><img src="docs/uml/revised/sequence_diagram.png" alt="Activity-Diagram" class="inline"/></p>
<h1><a class="anchor" id="autotoc_md18"></a>
Activity Diagram for Controller</h1>
<p>An example activity diagram for the controller methodology is shown in the following UML diagram:</p>
<p><img src="docs/uml/revised/controller_activity.png" alt="Activity-Diagram" class="inline"/> </p>
</div></div><!-- PageDoc -->
</div><!-- contents -->
<!-- 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>