06.03.2013 Views

Graphics for a 3D Driving Simulator - Robotics UWA

Graphics for a 3D Driving Simulator - Robotics UWA

Graphics for a 3D Driving Simulator - Robotics UWA

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!