Graphics for a 3D Driving Simulator - Robotics UWA
Graphics for a 3D Driving Simulator - Robotics UWA
Graphics for a 3D Driving Simulator - Robotics UWA
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
L E H R S T U H L F Ü R R E A L Z E I T - C O M P U T E R S Y S T E M E<br />
TECHNISCHE UNIVERSIT ÄT MÜNCHEN<br />
UNIV.-PROF. DR.-ING. G. F ÄRBER<br />
<strong>Graphics</strong> <strong>for</strong> a <strong>3D</strong> <strong>Driving</strong> <strong>Simulator</strong><br />
Johannes Georg Brand<br />
Bachelor Thesis
<strong>Graphics</strong> <strong>for</strong> a <strong>3D</strong> <strong>Driving</strong> <strong>Simulator</strong><br />
Bachelor Thesis<br />
Supervised by the Institute <strong>for</strong> Real-Time Computer Systems<br />
Technische Universität München<br />
Prof. Dr.-Ing. Georg Färber<br />
Conducted at <strong>Robotics</strong> and Automation Lab<br />
Center <strong>for</strong> Intelligent In<strong>for</strong>mation Processing Systems<br />
University of Western Australia<br />
Perth<br />
Advisor: Assoc. Prof. Dr. rer. nat. habil. Thomas Bräunl<br />
Adrian Boeing<br />
Dipl.-Ing. Philipp Harms<br />
Author: Johannes Georg Brand<br />
Eulenweg 2<br />
85356 Freising<br />
Submitted 3rd March 2008
Contents<br />
List of Figures v<br />
List of Tables vii<br />
List of Symbols viii<br />
1 Introduction 1<br />
<br />
<br />
<br />
2 Related Work 6<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
3 AutoSim Framework 15<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
4 World and Robot Creation 25<br />
<br />
<br />
5 Terrain Modeling 29<br />
iii
iv Contents<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
6 Road Construction 40<br />
<br />
<br />
<br />
7 Rendering Methods 47<br />
<br />
<br />
<br />
8 Conclusion and Future Work 50<br />
A Tutorials 52<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
B The Configuration Files 59<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Bibliography 70
List of Figures<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
v
vi List of Figures
List of Tables<br />
<br />
<br />
<br />
<br />
vii
List of Symbols<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
viii
Abstract<br />
Due to the continuously growing amount of traffic on our roads, and with it, an increasing<br />
risk of car accidents, the theory and design of robotic cars that take away the risk of<br />
human driver errors has become an area of active research among car manufacturers,<br />
suppliers and universities. Even if various competitions <strong>for</strong> autonomous driving cars have<br />
introduced some excellent testing venues in real world environments, decent simulators <strong>for</strong><br />
testing the robotic programs without hardware do not exist. In the light of this an extensible,<br />
modular and flexible open source component-based <strong>3D</strong> driving simulator framework called<br />
AutoSim is presented in this thesis. The framework enables rapid and interactive development<br />
of robotic car algorithms and allows researchers to develop, test and experiment<br />
with autonomous vehicle software without the need <strong>for</strong> a physical vehicle. Using a testing<br />
environment like AutoSim can tremendously increase the speed of development and thus<br />
save costs by reducing time to market.<br />
Constructing a simulator framework includes meeting a large range of demands <strong>for</strong> creating<br />
a high-level <strong>3D</strong> environment. A large <strong>3D</strong> scene has to be adapted <strong>for</strong> execution on limited<br />
computer hardware and nevertheless provide the user all features desired <strong>for</strong> interaction<br />
with the tested robots. This thesis follows the ideas of methods like GeoMipMap and Geometric<br />
Clipmaps by applying them to the simulator’s requirements and per<strong>for</strong>ming parallel<br />
operations on the graphics card. The road system in AutoSim is designed in order to display<br />
an accurate representation of a real world street web, implemented through self-developed<br />
methods <strong>for</strong> procedurally constructing road meshes out of 2D world road data and trans<strong>for</strong>ming<br />
them by height data. Finally, the thesis introduces approaches <strong>for</strong> designing a <strong>3D</strong><br />
simulator framework which includes concepts <strong>for</strong> transferring and managing data as well<br />
as multiple rendering methods.<br />
x
Zusammenfassung<br />
Aufgrund einer beständig anwachsenden Verkehrsdichte auf unseren Straßen und eines<br />
damit verbundenen immer größer werdenden Unfallrisikos, ist das Entwickeln von Roboter<br />
Autos, welche die Fehler des menschlichen Fahrers als Unfallrisiko entfernen, ein aktiv um<strong>for</strong>schtes<br />
Gebiet von Fahrzeugherstellern, Lieferanten und Universitäten geworden. Auch<br />
wenn verschiedene Wettbewerbe schon exzellente Testumgebungen für autonome Fahrzeuge<br />
bereitgestellt haben, gibt es noch immer keine geeigneten <strong>Simulator</strong>en um Roboter<br />
Programme ohne Hardware zu testen. Im Angesicht dessen wird in dieser Bachelorarbeit<br />
ein erweiterbares, modular aufgebautes und flexibel anwendbares Open Source <strong>3D</strong><br />
Fahrsimulator Framework mit dem Namen AutoSim präsentiert. Das Framework ermöglicht<br />
schnelles und interaktives Entwickeln von Programmen für Roboter und erlaubt Forschern<br />
ohne Gebrauch eines physikalischen Fahrzeugs zu entwickeln, zu testen und zu experimentieren.<br />
Eine Testumgebung wie AutoSim kann die Entwicklungszeit eines solchen<br />
Programmes enorm beschleunigen und auch wegen eines verkürzten Time-to-Market’s<br />
Kosten einsparen.<br />
Das Entwickeln eines Fahrsimulator Frameworks er<strong>for</strong>dert einer großen Menge von Ansprüchen<br />
einer hochwertigen <strong>3D</strong> Anwendung gerecht zu werden. Eine große <strong>3D</strong> Szene<br />
muss an die Limitierungen der Computer Hardware angepasst werden und trotzdem alle<br />
gewünschten Fähigkeiten zur Interaktion mit den Robotern bereitstellen. Diese Bachelorarbeit<br />
übernimmt dazu Ideen von Methoden wie GeoMipMap oder Geometric Clipmaps<br />
um sie an die An<strong>for</strong>derungen des <strong>Simulator</strong>s anzupassen und dabei parallele Operationen<br />
auf der Grafikkarte auszuführen. Das Straßensystem von AutoSim ist entworfen um das<br />
echte Straßennetz möglichst genau wiederzugeben, indem aus 2D Weltdaten durch selbst<br />
entwickelte Methoden prozedurale Straßenmeshes erstellt werden, um sie dann durch Höhendaten<br />
zu verändern. Abschließend führt die Arbeit noch einige Ansätze auf die das<br />
Entwickeln eines <strong>3D</strong> Fahrsimulator Frameworks betreffen und geht dabei auf Konzepte wie<br />
das Übertragen und Verwalten von Daten sowie mehrere Render Methoden ein.<br />
xi
1 Introduction<br />
<br />
<br />
1.1 Motivation<br />
<br />
<br />
<br />
<br />
Sojourner, Mars rover from Pathfinder mission [29].<br />
<br />
<br />
<br />
<br />
<br />
<br />
1
2 1 INTRODUCTION
1.1 MOTIVATION 3<br />
<br />
<br />
<br />
<br />
Stanley, 2005 Grand Challenge winner from Stan<strong>for</strong>d University [4]
4 1 INTRODUCTION<br />
1.2 Objectives
1.3 THESIS OUTLINE 5<br />
1.3 Thesis Outline
2 Related Work<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
2.1 Literature Review<br />
<br />
<br />
2.1.1 Design Patterns<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
6
2.1 LITERATURE REVIEW 7<br />
<br />
<br />
<br />
• <br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
• <br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
2.1.2 Terrain Rendering<br />
!"#$%& !"#$%&'()%*<br />
'()*$%&<br />
-.(/%&0)(112<br />
34"1/%&054#)$".#26<br />
34"1/%&7894"1/:(&$2;>><br />
+ ,<br />
+",-&%.%/'()*$%&<br />
Builder Design Pattern
8 2 RELATED WORK<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
ROAM Method
2.1 LITERATURE REVIEW 9<br />
<br />
Geometrical MipMapping<br />
<br />
<br />
<br />
2.1.3 Geometric Data Systems<br />
Geometry Clipmap
10 2 RELATED WORK<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
2.2 <strong>Simulator</strong>s<br />
<br />
OpenStreetMap<br />
<br />
<br />
2.2.1 RARS
2.2 SIMULATORS 11<br />
<br />
<br />
<br />
<br />
<br />
RARS Screenshot [26]<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
2.2.2 TORCS
12 2 RELATED WORK<br />
<br />
<br />
<br />
<br />
TORCS Screenshot [31]<br />
<br />
<br />
<br />
<br />
2.2.3 Racer
2.2 SIMULATORS 13<br />
Racer Screenshot [25]<br />
<br />
<br />
<br />
2.2.4 SubSim
14 2 RELATED WORK<br />
The Subsim AUV <strong>Simulator</strong> [1]
3 AutoSim Framework<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
3.1 Used Libraries<br />
<br />
<br />
<br />
15
16 3 AUTOSIM FRAMEWORK
3.2 FRAMEWORK ARCHITECTURE 17<br />
<br />
3.2 Framework Architecture<br />
<br />
<br />
• <br />
<br />
• <br />
<br />
• <br />
<br />
• <br />
<br />
<br />
<br />
<br />
<br />
<br />
!"#$%&'(%)*+)*<br />
23)*4*$5*6'!47<br />
23)*4*$5*6'<br />
23)*4*$5*6'<br />
23)*4*$5*6'<br />
,)#-$*.<br />
!"#$%&'(/0&)1#<br />
!"#$%&'(/0&)1#<br />
!"#$%&'(/0&)1#<br />
23)*4*$5*6'!47<br />
/0&)1#23)*4*$5*6'!47<br />
23)*4*$5*6'<br />
23)*4*$5*6'<br />
23)*4*$5*6'<br />
AutoSim during runtime
18 3 AUTOSIM FRAMEWORK<br />
<br />
<br />
<br />
<br />
3.3 Program Description<br />
<br />
3.3.1 AutoSimServer<br />
<br />
<br />
<br />
<br />
<br />
<br />
Graphical User Interface of the AutoSim Server
3.3 PROGRAM DESCRIPTION 19<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
3.3.2 AutoSimClient<br />
<br />
<br />
<br />
AutoSimClient Graphical User Interface
20 3 AUTOSIM FRAMEWORK<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
3.3.3 The UserProgram<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
3.3.4 OsmManipulator
3.3 PROGRAM DESCRIPTION 21<br />
<br />
User Program<br />
<br />
<br />
• <br />
• <br />
• <br />
•
22 3 AUTOSIM FRAMEWORK<br />
3.4 Client Software Design<br />
Main Window OsmManipulator
3.4 CLIENT SOFTWARE DESIGN 23<br />
+,-%&'()"*<br />
,#&-5&-417<br />
3<br />
89$$*&'#+&1-<br />
:)6;0(
24 3 AUTOSIM FRAMEWORK
4 World and Robot Creation<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
4.1 World Creation<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
25
26 4 WORLD AND ROBOT CREATION<br />
!"#$%&'#()*+",<br />
-"."*&'#()*+", /(##)+,&'#()*+",<br />
2+,*(#3)4(5<br />
0(1(,-.%+)"#<br />
*+%"&,0(1(,-.%+)"#<br />
0 0<br />
/(#+)'($)"#<br />
1<br />
0(1(,'($)"#<br />
*+%"&,/(#+)-.%+)"#<br />
0<br />
2+,*(#3)4(5<br />
/(#+)-.%+)"#<br />
0<br />
0<br />
!"##$%&'($)"#<br />
World Creation<br />
0 0<br />
2+,*(#3)4(5<br />
!"##$%&-.%+)"#<br />
*+%"&,!"##$%&-.%+)"#
4.2 ROBOT CREATION 27<br />
<br />
<br />
• <br />
<br />
• <br />
<br />
<br />
• <br />
<br />
<br />
• <br />
<br />
4.2 Robot Creation
28 4 WORLD AND ROBOT CREATION<br />
!"#"$%<br />
&'($)%<br />
*+,-.+)%<br />
0+1$2/++0<br />
!"#$%&!&'()*<br />
./'))-)<br />
!"#$%&!&'()*<br />
333<br />
Robot Creation<br />
<br />
("#"$<br />
+,--.)*<br />
$('-0+(<br />
!"#$%&!&'()*<br />
$('-0+(.'4<br />
/$01,2%32-&02)*<br />
<br />
• <br />
<br />
• <br />
<br />
• <br />
<br />
• <br />
<br />
• <br />
• <br />
• <br />
<br />
• <br />
• <br />
<br />
• <br />
<br />
• <br />
<br />
<br />
<br />
<br />
333<br />
333
5 Terrain Modeling<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
5.1 Bilinear Interpolation<br />
<br />
<br />
<br />
<br />
<br />
P (x, y) <br />
Q11 = (x1, y1) Q12 = (x1, y2) Q21 = (x2, y1) Q22 = (x2, y2) <br />
<br />
R1 = (x, y1) R2 = (x, y2) <br />
<br />
f(R1) ≈ x2 − x x − x1<br />
f(Q11) + f(Q21) <br />
x2 − x1<br />
x2 − x1<br />
x2 − x1<br />
f(R2) ≈ x2 − x x − x1<br />
f(Q12) + f(Q22) <br />
29<br />
x2 − x1
30 5 TERRAIN MODELING<br />
"<br />
"<br />
"<br />
$<br />
#<br />
% ##<br />
! ! !<br />
#<br />
% #$<br />
& $<br />
'<br />
& #<br />
Bilinear Interpolation<br />
f(R1) f(R2) <br />
P<br />
f(P ) ≈ y2 − y y − y1<br />
f(R1) + f(R2) <br />
y2 − y1<br />
y2 − y1<br />
1 (x1, y1) (0, 0) <br />
<br />
<br />
a1 = Q11<br />
a2 = Q21 − Q11<br />
a3 = Q12 − Q11<br />
a4 = Q11 − Q21 − Q12 + Q22<br />
Q11<br />
% $$<br />
$<br />
f(P ) ≈ a1 + a2x + a3y + a4xy <br />
% $#
2)5!9:;$!&*(!2)5!!:;$
32 5 TERRAIN MODELING<br />
<br />
<br />
<br />
• <br />
<br />
<br />
<br />
256 <br />
<br />
<br />
<br />
<br />
<br />
<br />
Example of predefined names <strong>for</strong> varying inputs<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Output Structure<br />
/ / Vertex shader output s t r u c t u r e<br />
struct VS_OUTPUT<br />
{<br />
f l o a t 4 P o s i t i o n : POSITION ; / / v e r t e x p o s i t i o n<br />
f l o a t 4 D i f f u s e : COLOR0; / / v e r t e x d i f f u s e c o l o r<br />
f l o a t 2 TexCoord : TEXCOORD0; / / tex coords<br />
} ;<br />
VS_OUTPUT vertexMain (VS_INPUT IN )<br />
{<br />
VS_OUTPUT Output ;<br />
<br />
Preparing data
5.3 APPLYING HEIGHT DATA TO THE WORLD 33<br />
Output . P o s i t i o n = mul ( IN . vPosition , mWorldViewProj ) ;<br />
<br />
return Output ;<br />
}<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
5.3 Applying Height Data to the World
34 5 TERRAIN MODELING<br />
5.4 <strong>Graphics</strong> Terrain<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
5.4.1 Terrain Mesh
5.4 GRAPHICS TERRAIN 35<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
!"#$ !"#% &'()<br />
(*+,- -.,/012+/-'<br />
Tile Mesh Construction<br />
<br />
<br />
<br />
<br />
!"#!$%&'$()"*&("*$<br />
-+..$-("+.&)%$)&).'&($%%)".&#)/<br />
Terrain Gap<br />
*+,$%&'$()"*&("*$<br />
Gap in rendered Terrain
36 5 TERRAIN MODELING<br />
<br />
<br />
<br />
<br />
Terrain Mesh Wireframe Terrain<br />
5.4.2 Terrain Vertex Shader
5.4 GRAPHICS TERRAIN 37<br />
<br />
<br />
<br />
<br />
10 <br />
<br />
<br />
10 <br />
256 130m ∗ 130m
38 5 TERRAIN MODELING<br />
#<br />
"<br />
#<br />
Flipping Edges<br />
5.5 Creation of Static Objects<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
α <br />
<br />
!<br />
"<br />
!<br />
α = arccos( a ·b |a|| ) <br />
b|<br />
a b <br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
360
5.5 CREATION OF STATIC OBJECTS 39<br />
0 <br />
360
6 Road Construction<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
6.1 Splines<br />
<br />
<br />
<br />
<br />
<br />
<br />
t <br />
p(t) = (2t 3 −3t 2 +1)pi +(t 3 −2t 2 +t)mi +(−2t 3 +3t 2 )pi+1 +(t 3 −t 2 )mi+1 t ∈ [0; 1] <br />
pi pi+1 <br />
mi mi+1 <br />
<br />
t<br />
40
6.1 SPLINES 41<br />
h00(t) = 2t 3 − 3t 2 + 1<br />
h10(t) = t 3 − 2t 2 + t<br />
h01(t) = −2t 3 + 3t 2<br />
h11(t) = t 3 − t 2<br />
Hermite Basis Functions [36]<br />
t 0 h00(t) 0 <br />
pi t = 1 h01(t) 0 <br />
pi+1 −1<br />
<br />
<br />
<br />
<br />
<br />
<br />
mi =<br />
mi+1 =<br />
(1 − t)(1 + b)(1 + c)<br />
(1 − t)(1 − b)(1 − c)<br />
(pi − pi−1) + (pi+1 − pi)<br />
2<br />
2<br />
(1 − t)(1 + b)(1 − c)<br />
(1 − t)(1 − b)(1 + c)<br />
(pi+1 − pi) + (pi+2 − pi+1) <br />
2<br />
2<br />
t ∈ [−1; 1]<br />
b ∈ [−1; 1]<br />
c ∈ [−1; 1]<br />
<br />
<br />
0 <br />
(C 1 )
42 6 ROAD CONSTRUCTION<br />
Spline [33] Kochanek Bartels Parameters [37]<br />
<br />
<br />
<br />
0 1 <br />
<br />
<br />
=<br />
C<br />
ds =<br />
b<br />
a<br />
<br />
˙x(t) 2 + ˙y(t) 2 dt <br />
˙x(t) ˙y(t) x y ˙p(t)<br />
6.2 Road Data
6.3 ROAD GENERATION 43<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
class Road<br />
{<br />
public :<br />
Vertex m_Position ;<br />
VECTOR roadSegment ;<br />
} ;<br />
<br />
class I n t e r s e c t i o n<br />
{<br />
public :<br />
Vertex m_Position ;<br />
VECTOR i n t e r s e c t i o n V e r t i c e s ;<br />
VECTOR i n t e r s e c t i o n I n d i c e s ;<br />
} ;<br />
Road Data Streets in Perth<br />
<br />
<br />
6.3 Road Generation
44 6 ROAD CONSTRUCTION<br />
<br />
<br />
<br />
left handed and right handed coordinate system [35]<br />
<br />
<br />
<br />
0
6.3 ROAD GENERATION 45<br />
!"#$%&<br />
,+-&*&%.<br />
!.)&&.<br />
'()*+#<br />
Road Construction Constructed Road Part<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
x 2 <br />
(x − 1) 2
46 6 ROAD CONSTRUCTION<br />
2',,$1/*',%3'*,/0<br />
(440$/<br />
!"#$#%&'"#<br />
.,/$)0$1/*',<br />
Offset Fading<br />
<br />
()*+*,"-%&'"#<br />
T-junction after Road Generation<br />
y(t) = (x − 1) 2 y(t) = x 2
7 Rendering Methods<br />
<br />
<br />
<br />
7.1 Triangulation<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
v0 v1<br />
v2 v1 v3 v2 v2 v3 <br />
v4 v3 v5 v4 <br />
<br />
<br />
<br />
<br />
<br />
<br />
vi vi+1 <br />
<br />
<br />
v1 v2 v0 <br />
v2 v3 v0 v3 v4 v0 <br />
<br />
47
48 7 RENDERING METHODS<br />
<strong>for</strong> ( i n t i =0; i
7.3 GEOMIPMAP 49<br />
<br />
<br />
<br />
<br />
<br />
<br />
7.3 GeoMipMap<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
456/.'<br />
#/01+.'3<br />
#+,01)2/3<br />
!"#$ !"#% &''&''& ()*+,+-./<br />
! "#$%&'()* +#$%&'()* ,#$%&'()*<br />
GeoMipMap
8 Conclusion and Future Work<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
50
51
A Tutorials<br />
A.1 The AutoSimServer kick start guide<br />
<br />
<br />
Graphical User Interface of the AutoSim Server<br />
<br />
<br />
<br />
<br />
<br />
<br />
52
A.2 WORKING WITH THE AUTOSIMCLIENT 53<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
A.2 Working with the AutoSimClient<br />
AutoSimClient
54 A TUTORIALS<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
A.3 How to write a User Program<br />
<br />
<br />
<br />
A.3.1 Workings of the User Program
A.3 HOW TO WRITE A USER PROGRAM 55<br />
User Program<br />
<br />
<br />
<br />
<br />
<br />
<br />
A.3.2 The User Program API<br />
<br />
<br />
Parts section of a robot configuration file<br />
namespace UserProgramAPI<br />
{<br />
SimDeviceError setData ( SimDeviceName device , DeviceData ∗data , i n t dataSize<br />
) ;<br />
SimDeviceError getData ( SimDeviceName device , DeviceData ∗data , i n t dataSize<br />
) ;
} ;<br />
56 A TUTORIALS<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
A.3.3 The Client User Program API<br />
<br />
<br />
Parts section of a robot configuration file<br />
namespace ClientUserProgramAPI<br />
{<br />
typedef unsigned i n t ∗ VirtualCameraImage ;<br />
i n t getImageHeight ( ) ;<br />
i n t getImageWidth ( ) ;<br />
VirtualCameraImage getImage ( UserProgramAPI : : SimDeviceName camera ) ;<br />
void unlockImage ( ) ;<br />
} ;<br />
<br />
<br />
<br />
<br />
<br />
<br />
A.3.4 A Simple Example<br />
<br />
<br />
Parts section of a robot configuration file<br />
#include " UserProgramAPI . h " / / i n c l u d e the user program API d e f i n i t i o n s<br />
#include / / f o r the Sleep ( ) f u n c t i o n
A.3 HOW TO WRITE A USER PROGRAM 57<br />
/ / f o r convenience : i n c l u d e the UserProgramAPI namespace<br />
using namespace UserProgramAPI ;<br />
<br />
/ / Entry p o i n t f o r the user program .<br />
/ / Do not change argument l i s t or r e t u r n value !<br />
i n t main ( i n t argc , char ∗ argv [ ] )<br />
{<br />
<br />
/ / device names of an a c t u a t o r and a sensor t h a t are defined<br />
/ / i n the corresponding robot d e s c r i p t i o n f i l e<br />
SimDeviceName i n d i c a t o r = " chassis . i n d i c a t o r _ l i g h t _ b a c k _ l e f t " ;<br />
SimDeviceName i n c l i n o m e t e r = " chassis . i n c l i n o 0 " ;<br />
<br />
/ / the robot name t h a t the user program belongs to i s<br />
/ / always the f i r s t argument s t r i n g<br />
RobotName robot = argv [ 0 ] ;<br />
<br />
/ / v a r i a b l e s to s t o r e the data from the devices<br />
f l o a t i n t e n s i t y = 0.0 f ;<br />
f l o a t angle = 0.0 f ;<br />
f l o a t previousAngle = 0.0 f ;<br />
<br />
/ / get the c u r r e n t angle from the i n c l i n o m e t e r and make the<br />
/ / l e f t i n d i c a t o r l i g h t b l i n k i f the robot t u r n s l e f t<br />
while ( true )<br />
{<br />
GET_DATA( robot+" . " + i n c l i n o m e t e r , angle ) ;<br />
<br />
i f ( ( angle − previousAngle ) < 0.0 f | | i n t e n s i t y == 1.0 f )<br />
i n t e n s i t y = 0.0 f ;<br />
else<br />
i n t e n s i t y = 1.0 f ;<br />
<br />
previousAngle = angle ;<br />
<br />
SET_DATA( robot+" . " + i n d i c a t o r , i n t e n s i t y ) ;<br />
<br />
Sleep (300) ;<br />
}<br />
<br />
return 0;<br />
}
58 A TUTORIALS<br />
A.4 Manipulate an OSM file in 6 steps<br />
<br />
<br />
<br />
OsmManipulator
B The Configuration Files<br />
B.1 General Syntax<br />
<br />
<br />
<br />
<br />
Examplary Configuration file structure<br />
<br />
<br />
<br />
<br />
<br />
< P o s i t i o n x= " 0.0 " y= " 0.0 " z= " 0.0 " / ><br />
<br />
<br />
<br />
<br />
< / Box><br />
< / Parts><br />
<br />
<br />
<br />
<br />
<br />
< P o s i t i o n x= " 0.0 " y= " 3.0 " z= " −4.0 " / ><br />
< / Camera><br />
<br />
<br />
<br />
<br />
< / GyroscopeSensor><br />
< / Devices><br />
<br />
< / Robot><br />
<br />
<br />
<br />
59
60 B THE CONFIGURATION FILES<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
B.2 Customizing a World File<br />
<br />
<br />
<br />
• <br />
• <br />
• <br />
• <br />
<br />
<br />
<br />
<br />
B.3 General info on OSM Files
B.3 GENERAL INFO ON OSM FILES 61<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Highways
62 B THE CONFIGURATION FILES<br />
<br />
<br />
<br />
<br />
<br />
<br />
Landuse<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
B.4 The Robot File<br />
House Node<br />
<br />
<br />
<br />
<br />
<br />
Parts section of a robot configuration file<br />
<br />
<br />
< P o s i t i o n x= " 0.0 " y= " 0.0 " z= " 0.0 " / ><br />
<br />
<br />
<br />
<br />
< / Box><br />
<br />
< P o s i t i o n x= " 0.0 " y= " 0.0 " z= " 10.0 " / ><br />
<br />
<br />
<br />
<br />
< / Box><br />
< S p h e r i c a l L i n k name= " towbar " ><br />
B.4 THE ROBOT FILE 63<br />
< Child name= " t r a i l e r " / ><br />
< P o s i t i o n x= " 0.0 " y= " 0.0 " z= " 5.0 " / ><br />
< / S p h e r i c a l L i n k ><br />
< / Parts><br />
<br />
<br />
<br />
<br />
Devices section of a robot configuration file<br />
<br />
< DriveActuator name= " drive_chassis " ><br />
<br />
<br />
<br />
< / DriveActuator><br />
<br />
<br />
< DriveActuator name= " drive_chassis " / ><br />
< P o s i t i o n x= " −0.80 " y= " −0.45 " z= " 1.35 " / ><br />
<br />
<br />
<br />
<br />
<br />
<br />
< Steering value= " t r u e " / ><br />
<br />
<br />
< / WheelDevice><br />
<br />
<br />
<br />
< P o s i t i o n x= " 0.0 " y= " 1.0 " z= " 1.4 " / ><br />
< D i r e c t i o n x= " 0.0 " y= " −0.25 " z= " 1.0 " / ><br />
<br />
< / Camera><br />
<br />
<br />
<br />
<br />
<br />
< / GyroscopeSensor><br />
< / Devices>
64 B THE CONFIGURATION FILES<br />
<br />
• <br />
• <br />
<br />
<br />
• <br />
• <br />
• <br />
• <br />
• <br />
<br />
• <br />
• <br />
<br />
• <br />
• <br />
• <br />
• <br />
• <br />
<br />
B.5 The Map Setup File
B.5 THE MAP SETUP FILE 65<br />
<br />
<br />
<br />
<br />
OsmSetup<br />
<br />
<br />
<br />
<br />
< !−− Lat and lon coordinates of the s i m u l a t i o n world center−−><br />
<br />
< / OsmSetup><br />
<br />
<br />
RoadDimensions<br />
<br />
< !−− S p e c i f y i n g how much ( i n meters ) the roads are l i f t e d above the t e r r a i n .<br />
I f t h i s value i s set to low graphic problems may occur .−−><br />
<br />
< !−− Height of the curbs i n distance to the road lanes i n meters .−−><br />
<br />
< !−− Number of l e v e l s of d e t a i l constructed f o r the roads . At l e a s t 1 l e v e l<br />
of d e t a i l i s constructed . −−><br />
< L e v e l s O f D e t a i l value= " 3.0 " / ><br />
< / RoadDimensions><br />
<br />
<br />
<br />
<br />
<br />
HighwayDimensions<br />
<br />
<br />
<br />
< t r u n k width = " 12.0 " leftPavementWidth = " 1.5 " rightPavementWidth = " 1.5 " / ><br />
< t r u n k _ l i n k width = " 4.0 " leftPavementWidth = " 0.0 " rightPavementWidth = " 0.0 " / ><br />
<br />
< p r i m a r y _ l i n k width = " 4.0 " leftPavementWidth = " 0.0 " rightPavementWidth = " 0.0 "<br />
/ ><br />
<br />
< t e r t i a r y width = " 6.0 " leftPavementWidth = " 1.5 " rightPavementWidth = " 1.5 " / ><br />
< u n c l a s s i f i e d width = " 6.0 " leftPavementWidth = " 0.0 " rightPavementWidth = " 0.0 "<br />
/ ><br />
66 B THE CONFIGURATION FILES<br />
< t r a c k width = " 3.0 " leftPavementWidth = " 1.5 " rightPavementWidth = " 1.5 " / ><br />
< r e s i d e n t i a l width = " 8.0 " leftPavementWidth = " 1.5 " rightPavementWidth = " 1.5 " /<br />
><br />
< s e r v i c e width = " 3.0 " leftPavementWidth = " 1.5 " rightPavementWidth = " 1.5 " / ><br />
< / HighwayDimensions><br />
<br />
<br />
<br />
<br />
<br />
!<br />
(<br />
" #<br />
'<br />
Triangle Fan<br />
<br />
<br />
<br />
<br />
<br />
Textures<br />
<br />
<br />
<br />
<br />
<br />
<br />
< I n t e r s e c t i o n f i l e = " media / roads / lane_withoutmarks .JPG" / ><br />
< / RoadTextures><br />
< TerrainTextures name= " c i r c l e _ t o w n " ><br />
< !−− Texture f i l e name f o r the t e r r a i n t e x t u r e−−><br />
<br />
< !−− S p e c i f y i n g how o f t e n the t e x t u r e i s repeated on the t e r r a i n . Only has to<br />
be changed to a value bigger than one<br />
&<br />
$<br />
%
B.5 THE MAP SETUP FILE 67<br />
i f no t e x t u r e f o r the complete t e r r a i n i s used . The used t e x t u r e should be<br />
seamless then . −−><br />
<br />
< !−− Folder path and f i l e type of the skybox t e x t u r e s .<br />
I n s i d e the f o l d e r have to be s i x t e x t u r e f i l e s of the declared f i l e t y p e :<br />
1. l e f t . ∗<br />
2. f r o n t . ∗<br />
3. r i g h t . ∗<br />
4. back . ∗<br />
5. top . ∗<br />
6. bottom . ∗ −−><br />
<br />
< / TerrainTextures><br />
<br />
<br />
TerrainDimensions<br />
<br />
< !−− Size of the loaded t e r r a i n i n meters . The t e r r a i n has to be at l e a s t big<br />
enough to load a l l the s t r e e t data of the OSM f i l e and to contain a l l the<br />
t i l e s the g r a p h i c a l r e p r e s e n t a t i o n of the t e r r a i n i s made of ( can be set<br />
i n the f o l l o w i n g values ) . A T e r r a i n bigger than 3000m∗3000m may e f f e c t<br />
long loading times and slow physics . −−><br />
<br />
< !−− Size of one t i l e of the g r a p h i c a l t e r r a i n r e p r e s e n t a t i o n i n meters .<br />
T i l e S i z e has to be a m u l t i p l e of HeightDataPerArea ! −−><br />
< T i l e S i z e value = " 64.0 " / ><br />
< !−− D e t a i l value of the graphic t e r r a i n ’ s center t i l e . (maximum = 7) −−><br />
<br />
<br />
< L e v e l s O f D e t a i l value = " 3 . 0 " / ><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
< H e i g h t D i v i s i o n C o e f f i c i e n t value ="10.0" / >
68 B THE CONFIGURATION FILES<br />
<br />
B.6 The House File List<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
File<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
House List<br />
< r e s i d e n t i a l ><br />
<br />
< F i l e path= " models / b u i l d i n g s / oldschoolhouse " type= " 3ds " / ><br />
<br />
< / house><br />
<br />
< F i l e path= " models / b u i l d i n g s / r e s i d e n t i a l /2 " type= " obj " / ><br />
<br />
< / house><br />
< / r e s i d e n t i a l ><br />
< f o r e s t ><br />
< t r e e name= " tree0 " ><br />
< F i l e path= " models / nature / t r e e s / tree0 " type= " 3ds " / >
B.7 GENERAL MODEL FILE INFORMATION 69<br />
<br />
< / t r e e ><br />
< / f o r e s t ><br />
B.7 General Model File In<strong>for</strong>mation
Bibliography<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
70
Bibliography 71