Escolar Documentos
Profissional Documentos
Cultura Documentos
Audi Corporation
Mechanical Engineering 310
Fall Design Documentation
Version: 10.12.2012.
Dept. of Mechanical Engineering
Stanford University
Stanford, CA 94305-4021
In Partnership With:
Aalto University, Helsinki, Finland
Final Documentation
Final Documentation
1. Prelude
Final Documentation
Final Documentation
of the car.
Final Documentation
in June 2013.
Final Documentation
Final Documentation
............................................................ 26
28
37
42
43
45
.....................................................
47
........................................................ 50
Final Documentation
67
68
68
69
..................................... 78
10
Final Documentation
95
97
137
141
141
Final Documentation
11
..............................................................
165
168
191
192
193
194
194
196
226
227
229
230
239
241
259
12
Final Documentation
.................................................... 284
298
299
301
301
310
312
314
315
316
318
330
Final Documentation
13
333
336
336
14
Final Documentation
27
28
28
29
29
30
30
31
31
32
32
32
34
52
53
54
54
54
55
55
55
56
58
58
59
62
63
65
68
Final Documentation
15
71
Figure 5.1.1.3.1 - Dual fan assembly for rotation motor heatsink .......
72
73
73
74
75
76
76
77
77
78
80
81
82
82
83
83
83
84
84
85
85
85
85
86
87
88
16
Final Documentation
.....................................
89
89
91
91
92
92
93
94
94
95
96
96
97
98
99
100
100
101
Final Documentation
17
59
Table 4.5.2.1 Pro and Con for Retracting Steering Wheel .................
60
1.7 Glossary
Glossary
This system is much like regular cruise control, it is
Adaptive Cruise Control
ACC
Analog-to-Digital
Converter (ADC)
18
Final Documentation
Glossary
Application Programming
Interface (API)
Arduino
Autonomous Mode
Cabin Space
Confirmation Clue
get about the events outside and inside the car. This
information confirms that car is behaving the way its user
wants it to behave.
Computer Numerically
Controlled (CNC)
Critical Experience
Prototype (CEP)
Critical Function
Prototype (CFP)
Final Documentation
19
Glossary
Dashboard
Double Pole, Double
Throw (DPDT)
Electroencephalography
(EEG)
Electronically Erasable
Programmable Read-
Type of memory
Technician (EMT)
provider of an ambulance.
EXPE
(FSR)
applied.
Flowdoc is a collaboration web application for technical
Flowdock
Functional System
Prototype
Funky Prototype
20
Final Documentation
Glossary
H-Bridge
Haptics
Ideal Persona
Information Technology
(IT)
Infotainment System
Therapy)
a vein.
Camera
wavelengths.
Port)
Integrated Drive
Electronics (IDE)
Kinetic
Kinetic
Lane Assistant
Final Documentation
21
Glossary
Mac OSX
Manual Mode
Matrix Laboratory
(MATLAB)
Microcontroller
Mobile Workspace
Motion Sickness
Multiplexer
Needfinding
Night Vision
Original Equipment
Manufacturer (OEM)
22
Final Documentation
Glossary
OpenNI/NITE
Physical Steering
Pull-Up Resistor
Pulse-Width Modulation
(PWM)
Reconfigurable
Workspace
Sandwich Threshold
Segway
Servo Motor
SimpleOpen NI
Situational Awareness
Skype
Throw (SPDT)
Final Documentation
23
Glossary
Control system for an automobile that is done with
Steer-by-Wire (SbW)
Steering Wheel
Teensy
Vehicle to Infrastructure
communication (V2I)
infrastructure.
VCC
VDC
Windows
24
Final Documentation
Final Documentation
25
26
Final Documentation
of
advanced
technologies.
Final Documentation
27
28
Final Documentation
Stanford University
Sangram Patil
Founded: 1891
Graduate Student
Contact: sangram@stanford.edu
Phone: 650.704.1145
After completing his undergrad in ME from
India, he joined Stanford last year and has
been enjoying an awesome roller-coaster
ride since then. Sangram thoroughly enjoys
working in team projects and being a part of
a student community that is so radiant and
full of enthusiasm.
Final Documentation
29
Stephanie Tomasetta
David Wang
Graduate Student
Graduate Student
Contact: sltomase@stanford.edu
Contact: dcwang3@stanford.edu
Phone: 732.492.8373
Phone: 407.376.4635
functionally.
hardware
design
and
30
Final Documentation
Aalto University
Goran Bjelajac
Founded: 2010
Graduate Student
Contact: goran.bjelajac@aalto.fi
Phone: +385417009819
Goran Goci Bjelajac was born in 1986. in
Belgrade, Serbia. Since his early age he
has showed exceptional talent and interest
in art. A profession in design seemed natural
and the only option for him. He enrolled in
specialized high-school for industrial design
and has continued education at the Faculty
of applied arts in Belgrade and now at
Aalto University School of Art, Design and
Architecture at the department of Industrial
and Strategic Design.
Final Documentation
Sifo Luo
Status: Information and Service
Management Graduate Student
Contact: sifo.luo@aalto.fi
Phone: +385417009819
Sifo got her Bsc in Business Technology
from Aalto School of Economics. She is now
continuing her Masters study in Information
and Service Management. Educated in three
countries -- China, Finland, and US, she is
very good at adaptation to various cultures.
Sense of urgency and teamwork are highly
valued by Sifo, and her new enthusiasm is
searching for inspiration in daily routine.
31
Heikki Sjman
Status: Mechanical Engineering Graduate
Student
Contact: heikki.sjoman@aalto.fi
Phone: +385417009819
Heikki is on his final year of his masters
degree in Mechatronics in Aalto University,
Finland. During his studies, he has been
working in the field of Design and spent a
year in United Kingdom studying business.
Heikki enjoys challenges and making things
happen. Every day is a new adventure!
32
Final Documentation
Tommi Tuulenmki
Status: Mechanical Engineering Graduate
Student
Contact: tommi.tuulenmaki@aalto.fi
Phone: +385417009819
Comes from the land of ice and snow,
Finland, where he did his undergrad in ME.
The journey continues, and now Tommi has
stepped on the path of a graduate student,
which is also being done at same school,
Aalto University. Tommi thinks challenges
are necessary for individual development;
this is why he also enjoys them so much.
He rejoices even more, when overcoming
the challenges is done with solid teamwork.
The ERL
Final Documentation
33
Contact: steber@stanford.edu
Phone: +1 650.496.7000
Contact: jdabrowiak@gmail.com
Phone: 650.274.7871
Lauri Repokari, Professor
Contact: repokari@stanford.edu
Sara De Moitie, Teaching Assistant
Contact: sara.demoitie@gmail.com
Maria Kulse, Teaching Assistant
Contact: maria.kulse@gmail.com
Tuomas Sahramaa, Teaching Assistant
Contact: tuomas.sahramaa@gmail.com
Mikelis Studers, Teaching Assistant
Contact: mikelis.studers@aalto.fi
34
Final Documentation
Final Documentation
3. Design Requirements
35
36
Final Documentation
Design Requirement
Rationale
In order for the driver to fully enjoy
used should
indicate to the
transition is
complete.
should have
the flexibility of
moving around
different
two
has
tablet
The
she is on.
Implementation
Rationale
Metric
The interface
user.
intuitive to the
space should be
of the cabin
reconfiguration
Functional
Requirements
Final Documentation
37
and activities
between modes
transitions
comfortable
home.
Smooth and
cabin space
volumetric
passengers.
utilization of
changes.
be maximum
Implementation
Rationale
Metric
There should
mode
in autonomous
multiple activities
performing the
Cabin has to be
Functional
Requirements
38
Final Documentation
and sporty
feeling of driving
driving
autonomous
of monitoring
responsibility
driver of the
Relieves the
in every 3 minutes
to be 7 or higher on a scale of
precise control
an Audi
maintain the
on the windshield.
driving experience.
seconds
and activities
design should
between modes
Quick transitions
Implementation
Rationale
Control input
Metric
Functional
Requirements
Final Documentation
39
degrees.
threshold in
terms of the
the user
comfortable for
needs to
steering wheel
time of the
pushing or pulling.
activities.
response
chair response
too sensitive
should not be
body commands
The emergence
The intentional
position
activities
space
the sandwich
Rationale
Metric
not exceed
of the user
be within reach
command should
initiator
Any mode
Functional
Requirements
times in a row.
facing forward.
Implementation
40
Final Documentation
off when in
manual driving
mode.
must be turned
unsafe.
driving position.
Rationale
Metric
Smart features
the user
comfortable for
needs to
steering wheel
time of the
The emergence
Functional
Requirements
disabled.
environment is maintained.
a comfortable communication
Implementation
Final Documentation
41
driver
technologies quickly
model like the current smart phones.
the user.
as working interface.
Implementation
Rationale
surface
Opportunity
42
Final Documentation
use
and be comfortable to
Physical Requirements
all
integrated
must
experience
prototypes manufacturer
Driver
When
Metric
relax, or socialize.
Rationale
seat.
Implementation
Final Documentation
43
be concealed and
unnoticeable to the
user sitting in it
should
The
not slippery.
a comfortable recline
driver
Metric
Physical Requirements
to
ensure
contact
with
rotation.
points
covering.
Implementation
linear movement.
Rationale
44
Final Documentation
If there is personal ownership of the car in the future and the cabin
space has been so well designed it might as well integrate into the
structure itself
home
using
Virtual
space
of
reality helmet and transport the users wherever they want to be. This
lives of people
The car transforms into a personal robot to better integrate into the
This opportunity allows for more flexibility for the cabin space without
Transformer car
Rationale
Opportunity
Implementation
Final Documentation
45
inside
cabin
reconfigurable
space should be
The
interactive inputs
windows
away, but still within the users reach (2.5ft) at any chair location.
The cabin must have integrated tables and storage that are stowed
of cabin space.
control input
Designing a new control input like this has the potential to make driving
Rationale
Opportunity
is
currently
only
being
the car.
This
Implementation
46
Final Documentation
Final Documentation
47
Rationale
After the launch of autonomous cars, the
business model can shift to car sharing or a
48
Final Documentation
Final Documentation
4. Design Development
49
50
Final Documentation
The ERL
Internet
platforms.
and
social
networks
have
moments
of
thrill
and
Final Documentation
51
52
Final Documentation
Final Documentation
53
54
Final Documentation
Final Documentation
55
56
Final Documentation
4.3.1 Vision
The team was split in terms of whether to
focus on the activities or transitions between activities. A resolution was reached
and encapsulated in the vision. The focus
of the project was to facilitate and make
sure that users would be able to perform
many activities, while still making sure that
the transitions would be made much more
effortless. The team agreed to deliver a
complete experience so that users could
get a taste of what it would be like to work,
relax, and socialize in the cabin space
Functional Prototype - Retractable
Steering Wheel
QUESTIONS - Do users feel that initiating
modes with the seat belt is intuitive?
Insight/Conclusion - Seat belt as a trigger
brought confusion. The trigger has to be
something simple, clear, and notify the
user of which mode they are in.
To facilitate activities
for the driver through
effortless transitions
and increased mobility.
Final Documentation
57
Prototype Component
Team Division
Priority Level
Stanford
Very High
Rotation Mechanism
Stanford
Very High
Stanford
Mid
High
Retraction Mechanism
Aalto
Very High
Aalto
Mid
Aalto
Low
Stanford
Low
Aalto
High
Prototype Component
Team Division
Priority Level
Stanford
Very High
Butterfly Doors
Aalto
Low
Temperature Control
Stanford
Low
Aalto
Mid
Lighter chairs
Stanford
Md
Interactive Display
Aalto
Very high
58
Final Documentation
Users were delighted when they activated the rotation and began smiling
or giggling.
(Figure 4.4.2)
Steering Wheel Findings:
Final Documentation
59
Magneto
off
60
Final Documentation
4.5.2
Cons
Final Documentation
61
to slide the chair back and forth. Rotating the user up to 180 degrees drastically
the floor.
usability and flexibility are important aspects for the user to feel that the transition
62
Final Documentation
area.
user.
that the spring had to be about 40 newtons. This meant that around 4kg weight
can push the steering wheel in.
Final Documentation
63
64
Final Documentation
relaxing.
Relaxing
Driving
around.
Working / Entertainment
Socializing
Final Documentation
65
66
Final Documentation
Final Documentation
5. Design Specifications
67
68
Final Documentation
1. Anticipatory Chair
The chair is comprised of several components: the chair electronics, the firmware
development, and the rotation mecha-
nism.
Car
Ba6ery
(12V)
Chair
Motor
Drivers
Power
Supply
(5V,
12V)
Chair
Motors
Microcontroller
RotaAon
Motor
Driver
Chair
Motor
Sensing
Force
Sensor
Board
RotaAon
OpAcal
Encoder
Force
Sensors
on
Chair
Figure 5.1.1.1 System level view
RotaAon
Motor
Final Documentation
69
70
Final Documentation
Final Documentation
71
created.
72
Final Documentation
duration than without the additional cooling before it gets noticeably warm.
Final Documentation
73
74
Final Documentation
tested
Final Documentation
75
back respectively.
fixed position.
Initially, all the sensors shown in Figure
76
Final Documentation
CD4067BE
OUT
T2
T1
B6
B5
B4
B3
B2
B1
CONTROL_A
CONTROL_B
GND
OUT
IN7
IN6
IN5
IN4
IN3
IN2
IN1
IN0
A
B
VSS
VDD
IN8
IN9
IN10
IN11
IN12
IN13
IN14
IN15
INHIBIT
C
D
+5VDC
T3
T4
T5
T6
GND
CONTROL_C
CONTROL_D
TI - CD4067BE
Final Documentation
77
trol box.
78
5.1.2
Final Documentation
Firmware Development
FSR
Calibrate
Switch
Override
Disabled
?
Determine
thresholds
Based
on
body
type
Reset
chair
to
default
pos
Check
override
SW
touched
System
Enable
?
Y
Reset
Chair
?
Auto
Mode
?
Drive
Mode
?
Read FSR
Move
into
drive
pos
SLIDE,
TILT,
OR
ROTATE
SW
touched
?
Move
chair
motors
accordingly
Final Documentation
79
position setting.
activated.
80
Final Documentation
Final Documentation
81
5.1.3.1 Assumptions:
tric
ome a
e
g
on ees in
ia
sed
s ba 80 degr of inert
i
s
i
h
1
t
T
n
e
.
t
e
r
rota
chai
t, it
mom
ng
f the eeds to ase for er is lyi ir weigh
o
e
n
s
s
c
a
e ba
hair
he u
e ch
orst
of th el. The c l. The w ed and t t and th
r
e
t
n
e
e
h
b
s
e ce
whe
weig
g wh
ke a
55cm
at th steerin teering sition li e user
1
s
=
i
l
s
r
s
o
e
th
ai
3 0 kg
e ch and th lear the a flat p tion of is.
ons
i
h
=
s
t
'
n
r
d
u
n
e
i
m
fo
ib
ar
ll c
ax
ass
(dim
hbo
air is
d sti
tion
distr
ned
kgs
of m
rota the das ition an n the ch inuous e desig
0
)
s
f
3
t
o
1
n
2
he
t th
ont
pos
axis
one
m=
rom
-m^
ass
The raints f eclined axis is w ing a c ng abou
omp
2 kg
c
m
2
.
f
m
0
i
t
m
2
r
o
t
s
=5
b
cons ortable bout the it. Assu ab rota
hani
r sla
(l ')
l
n
f
a
mec
2 )+m
gula
n
n
o
a
com lations clined o 30 kgs s
i
t
t
c
1
e
u
m (b2 + l
rota
a re
calc letely r ed as a
ms
g of
c
ts of
n
i
s
0
t
i
=
p
4
s
s
n
t
i
i
s
on
12
hif
com e imag
l'=
(con
lel s
am c
b
xis is
disc
aral
a
iagr
r
p
d
can
n
a
i
l
+
s
s
mas
circu f the ma
ete
l axi
ped
mpl t
o
nd a
ntra
o
a
m
t
e
c
f
u
)
c
i
l
e
h
s
a
S
n
ut a
The
as o cided th eed.
56cm 35cms .
t
abo
e
=
I
s
e
b
M
s
sp
d
=
and
d wa . It was nstant
lab =
2
us r
e
s
i
^
e
r
d
p
m
o
a
a
c
l
s
c
r
2
5 kg
d/se
at a
tion
and
angu
' l =1.22
rota f 0.6 ra move
rect
m
e
m
h
o
d
u
t
l
f
d
im
^2
d of
shou
MI o
spee
c= 2
g-m
max
spee
red ngular and the
r dis
45 k
i
a
4
s
m
l
.
e
u
u
1
a
d
c 2
5
circ
um
axim
the
1 se
tia =
f the
s
hair maxim eed in
he m
/
iner
c
t
l
f
d
d
e
o
a
a
MI o
p
n
an
r
nt
to
rs
wiv
-m a
m at
ome
he s comes angula d be 0.6
N
t
N
m
7
n
l
o
t
l
m
.86
0.75
Tota
one
wou
imu
. Tha
= 30
ue is lues we
6
hen
sts d econds his max
q
.
t
r
e
0
t
o
n
t
x
va
d
ve t
d on
11 s
ratio
uire n those
.445
q
1
e
5
Base ution in ld achie r accele
r
o
is
l
u
la
t the
fety
hen
revo hair sho
angu
s tha tor of sa
air t
n
h
m
c
a
c
u
e
e
c
the
axim
rn th
ich m nal fa
he m
to tu 6 rpm.
1 wh additio
:
d
0
So t
e
4
ir
f
n
y
atel
requ
ion o
ing a
duct d apply 0 rpm.
rque pproxim
e
o
r
t
a
0
The ion is a
t an
at 3
has
t
ear ing poin 1 N-m
g
rota
m
t
r
is
ra
oint
d wo
ope
lecte That is rating p
e
s
The f 240. he ope
o
t
rpm ed that
d
i
c
e
d
82
Final Documentation
Final Documentation
83
84
Final Documentation
Final Documentation
85
86
Final Documentation
actuating section.
Final Documentation
87
Steering Wheel
Android tablet.
torque efficiency.
Retraction Mechanism
5.2 The Interactive Steering Wheel
88
Final Documentation
Retraction Mechanism
Handles
Frame
Android Tablet
Final Documentation
89
Back Lid
Ejection Spring
Tightening Band
Switch
Outter shaft
Inner Shaft
Base
Microswitch Support
Lid
Flange
90
Final Documentation
Steering Wheel
two categories:
Milled parts
3D-printed parts
ties that were not allowed with the manufacturers settings and also sets free the
superuser(SU) functionality in order to
Milled Parts
plastic.
3D-Printed Parts
Finishing
Retraction Mechanism
Base
Tablet
seen bellow.
Final Documentation
91
92
Final Documentation
Final Documentation
93
Shaft
The shaft was manufactured with a lathe.
Here are the steps for making the shaft
part of the Retraction Mechanism.
1. Step
Steel blanks were cut into correct lengths
2. Step
A hole for the guide nut was drilled on the
inner shaft, threads for locking bolt were
made and the guide nut was glued into its
spot.
3. Step
Grooves were made on the inner shaft
with a lathe.
4. Step
The flange was welded onto the inner
shaft and four M5 holes were drilled into
the flange.
5. Step
Guiding profile were manufactured and
M10 threads were welded onto Outer
Shaft.
6. Step
Locking screw was with a M6 bolt, two M6
nuts, two steel washers and one plastic
washer. The spring is also attached to it.
94
Final Documentation
Microswitch Support
Final Documentation
95
onto it.
Protocols used:
96
Final Documentation
Projector canvas
App
Microcontroller
Mechanical switch
behind the steering
wheel
VGA cable
Projector
Mac computer
Caress server
node.js
python script
Tongseng
USB cable
WiFi router
Data to computer
Touch events TUIO protocol
Final Documentation
97
Material needed:
3 ft x 4ft 1/4in Duron sheets
8 sheets
Gluing the pieces:
Each piece was numbered for easier assembly. On each piece, there was also a
rastered line to guide where the next piece
should be glued.
Material needed:
Wood glue
Clamps
98
Final Documentation
Coloring
of dashboard)
Material needed:
6 x primer
Material needed:
Sanding machine
Grinder
40 pieces of 60 sand paper
20 pieces of 150 sand paper
3 cans x wood filler
5 cans x Bondo
Fiberglass kit
Final Documentation
99
The Ribbon
became hard.
Another solution was to divide the rib-
100
Final Documentation
2 x primer
board.
Final Documentation
101
Ribbon
2x4 Wooden Board
Wooden Pillars
Plastic pipe
102
Final Documentation
Final Documentation
103
104
Final Documentation
Deliverables
10/22/12
11/8/12
Benchmarking review
11/29/12
12/4/12
12/6/12
Fall presentation
12/11/12
1/23/13
1/24/13
1/18/13 - 1/29/13
1/31/13 - 2/14/13
Funky prototyping
2/15/13 - 2/28/13
Functional prototyping
3/3/13
3/10/13
3/12/13
3/13/13 - 3/16/13
3/21/13
3/22/13 - 3/31/13
Stanford in Helsinki
3/27/13
4/18/13
X is finished
5/12/13
Aalto in Stanford
5/16/13
Penultimate is due
5/28/13
6/6/13
EXPE
6/11/13
Final Documentation
105
Date
Vendor
Item
Purpose
Amount
11/1/2012
Amazon
Mindflex Game
Benchmarking
$55.99
Stanford
Batteries and
Materials for
Bookstore
markers
Benchmarking
Sparkfun
Accelerometer
CFP
$38.23
Item
Purpose
Amount
Van renting
CEP
38.95
Saitek Aviator PC
Steering Testing
49.90
Steering Testing
24.90
Steering Testing
57.10
11/4/2012
11/21/2012
$30.44
Date
14/11/2012
Vendor
Mechanical
Engineering Guild
27/11/2012
Verkkokauppa
27/11/2012
Verkkokauppa
Gran Turismo 5
PS3
Thrustmaster
27/11/12
Verkkokauppa
Experience
Racing Wheel
28/11/12
ABC Gas
Diesel gasoline
Audi A6 Test
Station
for Audi A6
Drive
26.93
106
Final Documentation
Date
Vendor
Item
13/2/2013
ABC gas
Gasoline
27/2/2013
Hobbyfactory Oy
Servo
27/2/2013
Protoshop
Aluminium pipe
27/2/2013
Motonet Oy
Seatbelt
27/2/2013
Motonet Oy
Purpose
Funky Prototype
Testing
Functional
Prototype
Functional
Prototype
Functional
Prototype
Amount
31.07
71,9
18.23
39,9
Functional
steering wheel
Prototype
Item
Purpose
Amount
Paper Bots
26.86
Paper Bots
97.75
Dark Horse
180
Dark Horse
48.87
Dark Horse
Dark Horse
15
Travel
27.7
7,9
Date
Vendor
10/1/2013
JAMECO
1/23/2013
Frys
1/25/2013
UHAUL
1/25/2013
Frys
Dark Horse
1/26/2013
Testing
Cash
Dark Horse
1/26/2013
Testing
Cash
1/25/2013
Zipcar
Electronic
Components
Electronic
Components
Renting the van
Electronic
Components
Participant
incentive
Participant
incentive
Travel
Final Documentation
107
Date
Vendor
Item
Purpose
Amount
1/25/2013
UHAUL
Parking
Dark Horse
5.1
1/28/2013
UHAUL
Gas
Dark Horse
33.14
Electronic Components
FUNKY
62.89
2/20/2013
DigiKey Electronic
Components
2/20/2013
Jameco
Electronic Components
FUNKY
47.52
2/10/2013
Frys Components
Electronic Components
FUNKY
4.96
2/10/2013
Radioshack
Electronic Components
FUNKY
35.21
2/12/2013
McMaster Carr
Hardware
FUNKY
50.31
2/8/2013
AUDI Gas
Gas
AUDI testing
79.72
Fabric
FUNKY
11.3
2/10/2013
2/9/2013
FRYS
Electronic Components
Functional
15.14
2/13/2013
SparkFun
Electronic Components
Functional
50.74
2/20/2013
Andy Mark
Functional
130.18
Resistors
Functional
3.24
Switches
Functional
13.86
Functional
33.04
Functional
13.02
3/11/2013
3/3/2013
Radioshack
Resistors
Radioshack
Switches
DC motors and
connectors
2/25/2013
McMaster Carr
2/27/2013
Ace Hardware
2/25/2013
JAMECO
Electronic Components
Functional
44.57
2/26/2013
Ace Hardware
Hinges
Functional
29.25
2/25/2013
Radioshack
Functional
16.24
Couplings
Fasteners and Lead
Screw
Electronic
Components
108
Final Documentation
Date
Vendor
Item
Purpose
Amount ($)
2/22/2013
Frys
Electronic Components
Functional
40.03
2/22/2013
TAP Plastics
Plastic sheets
Functional
108.85
2/22/2013
ACE Hardware
Fasteners
Functional
33.48
2/22/2013
Radioshack
Electronic Components
Functional
15.15
2/13/2013
Staples
Easy button
Functional
7.58
2/20/2013
2/10/2013
Microsoft
Store
Olive Garden
Kinect
Dinner
Gesture
Recognition
Food for
SUDS
150
390
Final Documentation
109
Balance
(EUROS)
Type/Name
5833.33 Bearings
5786.33 Teflon
pipe
5760.29 Force
sensors
5760.29 Stainless
steel
pipes
5719.99 Rubber
matt
5715.53 Aluminum
blank
5671.94 Galaxy
tab
2
5222.04 Steering
wheel
for
PC
app
5218.05 Stainless
steel
pipes
5213.96 Spring
presser
M10,
small
ball
head
5168.21 Spring
presser
M10,
big
ball
head
5129.65 3D
printing
SW
4716.52 ACE
hardware
4653.33 ACE
hardware
4611.39 1/4
''
Duron
4605.22 gearbox
4231.22 home
depot
4207.97 tshirts
3924.5 carpet
3447.78 ACE
hardware
3403.78 Jameco
electronics
3259.1 home
depot
3251.1 ACE
hardware
3228.81 home
depot
3050.41 projector
2935.15 Ribbon
pieces
1924.99 miscellaneous
product
1915.8 Home
depot
1907.25 Home
depot
1899.23 Home
depot
1883.86 ACE
hardware
1862.96 ACE
hardware
1845.56 ACE
hardware
1833.87 Home
depot
1738.46 ACE
hardware
1723.96 coals
1692.9 Home
depot
1666.63 Home
depot
1638.55 potography
rental
1587.29 Repeater
cable
1561.74 Poster
1461.33 Ace
hardware
1442.1 Fry's
1416.99 Ace
hardware
1386.88 Jo-Ann
Fabric
and
craft
Total
Date
8.4.2013
10.4.2013
Amount
(EUROS)
47
26.04
5.4.2013
17.4.2013
17.4.2013
27.4.2013
3.5.2013
25.4.2013
26.4.2013
3.5.2013
12.5.2013
13.5.2013
16.5.2013
14.5.2013
17.5.2013
18.5.2013
20.5.2013
21.5.2013
22.5.2013
22.5.2013
24.5.2013
25.5.2013
29.5.2013
30.5.2013
30.5.2013
31.5.2013
30.5.2013
30.5.2013
26.5.2013
29.5.2013
29.5.2013
30.5.2013
2.6.2013
2.6.2013
1.6.2013
28.5.2013
6.5.13
1.6.13
27.5.13
4.6.13
5.6.13
5.6.13
19.5.13
40.3
4.46
43.59
449.9
3.99
4.09
45.75
38.56
413.13
63.19
41.94
6.17
374
23.25
283.47
476.72
44
144.68
8
22.29
178.4
115.26
1010.16
9.19
8.55
8.02
15.37
20.9
17.4
11.69
95.41
14.5
31.06
26.27
28.08
51.26
25.55
100.41
19.23
25.11
30.11
19.98
4466.43
110
Final Documentation
Date
Amount
(USD)
04/05/2013
275.8
04/04/2013
21.46
04/02/2013
85.11
04/09/2013
111.78
04/10/2013
506.4
04/10/2013
108.31
04/09/2013
152.8
04/09/2013
28.03
04/12/2013
26.62
4/15/2013
12.82
4/16/2013
29.21
4/16/2013
458.28
4/23/2013
31.33
4/23/2013
26.29
4/23/2013
23.98
4/23/2013
41.35
04/05/2013
143.93
4/16/2013
12.82
4/24/2013
19.95
4/30/2013
27.58
4/19/2013
20.11
4/27/2013
40.55
4/25/2013
22.14
4/19/2013
6.18
4/26/2013
108.63
4/26/2013
70.82
05/01/2013
254
05/02/2013
69.28
05/02/2013
23.28
05/02/2013
39.11
05/06/2013
35.8
05/07/2013
101.39
5/14/2013
63.22
5/14/2013
36.72
05/08/2013
29.36
05/11/2013
127.59
5/13/2013
22.53
05/09/2013
221.96
5/17/2013
30
5/17/2013
275
76.2
19.56
34.73
37.38
65.38
281.71
4256.48
Final Documentation
111
Tools
Purpose
Emails
Flowdock
Google Docs
Google+ Hangout
Photos
Videos
WhatsApp Group
Dropbox
Table 6.3.1 - Comunication Tools
112
Final Documentation
Final Documentation
The team has identified future opportunities that this final system has the potential
to include if future iterations were to be
made.
Force Sensor Calibrated Driver Presets
This chair calibrates using the force sensors to determine what body type you
most likely are from your default seated
force readings. Based on these, the chair
could determine who exactly is sitting in
the chair and adjust the driver presets
accordingly. That way the need to input
if you are driver number 1, 2 or 3 like in
todays car settings is eliminated and the
chair simply knows based on you sitting in
the chair.
Similarly if the driver is calibrated as a
shorter person, then the chair can lower
so that the user will be able to have their
feet reach the floor and pedals without
having to do any manual adjustments.
This will make it much easier for shorter
people be able to utilize the foot pad for
moving their chair forward and backward.
This can be applied to taller people as
well who may need the chair raised up
and moved backward in order to reach the
wheel and foot pad comfortably.
These presets can be extended passed
just chair adjustments to mirror adjustment, temperature control, lighting control,
and even media/ radio preferences. This
will ultimately make the car know who is
sitting in the car without the user ever hav-
113
114
Final Documentation
Winter Reflection
Sangram
Fall Reflection
I think registering for the ME310 sequence
before I graduate from Stanford was the
best decision throughout my stay here. It is
now that I know what I would have missed
if I had not taken 310 this year. Its been a
great learning experience for me and I am
enjoying working with my team at Stanford
and the global team as well. It is still amazing
how we managed to get so much done in
just over a month since serious work on the
project started. There were times when we
were completely lost and there were times
when we knew exactly what we wanted
to do. The former was required but was
completely outside my comfort zone. That is
one important thing I have learnt this quarter
- how to deal with total ambiguity.
Spring Relfection
Final Documentation
115
Stephanie
Fall Reflection
I am enjoying
working on this project
so much that I did not
even realize how this
quarter went by.
collaborating
and
116
Final Documentation
Winter Reflection
I am excited
Final Documentation
117
Spring Reflection
Fall Reflection
This design project has been challenging
and exciting. Since the project proposal is
set for the year 2035, being able to predict
and assume what the future will be like, in
terms of the automotive industry but also the
lifestyle of humankind, is extremely difficult.
I took this course to challenge me and be
able to apply my electrical engineering
and creative thinking to solve a wide-open
Winter Reflection
The winter quarter has been extremely
exciting. Since the fall critical function
prototype and working on the darkhorse
prototype, the direction and logic of going
from prototype to prototype has been well
defined. It has been great working on the
118
Final Documentation
dedicated,
supportive,
and
optimistic
the destination.
Spring Reflection
ME310 was an amazing experience. This
Goran
Fall Reflection
Final Documentation
119
Winter Reflection
120
Final Documentation
of acrylic pieces.
Spring Reflection
times.
Sifo
Fall Reflection
Final Documentation
121
project ends.
Winter Refletion
122
Final Documentation
Spring Reflection
Tommi
Fall Reflection
Final Documentation
123
position.
especially
specification/
the
design
Spring Reflection
This period was absolutely the best! Our
Winter Reflection
about to make.
124
Final Documentation
feedback.
this one.
Heikki
Fall Reflection
I have always been good at time management
and figuring out how to do things. Now, it has
all changed! I keep slipping off my deadlines
and coming to meetings unprepared. Work
is not an excuse, but it makes things harder.
I am really looking forward to the next year
where I have less things to do and more time
to focus on ME310.
The greatest learning has been anyway in
communications. There has been several
Final Documentation
125
Winter Reflection
126
Final Documentation
Final Documentation
127
7. Appendix
128
Final Documentation
!
!
"#$!%&'()*+,$-!./&01!&2!34$/56+!789:;!1/&<$6=!2&/!=#$!>;:>?>;:9!+6+@$456!A$+/!5)!
&-!=#$!=&156!&2!+0=&-&4&0)!@/5B5-,!+-@!=#$!5-=$/+6=5&-!C$=*$$-!+0=&-&4&0)!6+/!+-@!
#04+-!@/5B$/D!!"#5)!1/&<$6=!*5''!C$!6&41'$=$@!5-!6&''+C&/+=5&-!*5=#!3+'=&!E-5B$/)5=A!5-!
F$')5-(5G!H5-'+-@D!
!
IJ=!5)!=#$!A$+/!>;9K!+-@!+0=&-&4&0)!1+))$-,$/!B$#56'$)!6+-!1/&B5@$!@/5B$/)!*5=#!
5-6/$+)$@!2/$$!=54$!+-@!+!)+2$/!@/5B5-,!$L1$/5$-6$!*#5'$!)=5''!1/&B5@5-,!=#$!&1=5&-!&2!
4+-0+'!6&-=/&'!52!=#$!@/5B$/!@$)5/$)D!!M/$+=$!+!6+C5-!=#+=!5)!!"#$%&$'%()#&*!5-!&/@$/!=&!
1/&B5@$!$-=$/=+5-4$-=!&/!*&/(5-,!)1+6$!2&/!=#$!@/5B$/!@0/5-,!+0=&-&4&0)!6&-=/&'!+-@!
)=5''!$-)0/$)%+,#%'*-.#*%+*/0+0%+,#%(&*10%&/+!$!2!/0%3/$(+-!$04!A$=!6+-!+')&!
1/&B5@$!+!2#&$0%3!*%(!$+*!))-$5%+,#%(&*!52!=#$!@/5B$/!6#&&)$)!=&!=+($!4+-0+'!
6&-=/&'DN!
!
"#$!&0=6&4$!&2!=#5)!1/&<$6=!)#&0'@!4+-52$)=!5=)$'2!+)!+!1#A)56+'!1/&=&=A1$D!
!
M&/1&/+=$!O5+5)&-!
"/$B&/!P#+--&-!
%&'()*+,$-!8'$6=/&-56)!Q$)$+/6#!O+C!
8-,5-$$/G!70'=54$@5+!311'56+=5&-)!"$+4!
6R!S;TD9T;DT:U;!
&R!UK;DTVUDS;U9!
$R!=/$B&/D)#+--&-WB*D6&4!
5/'R!K;;!M'511$/!X/5B$G!Y$'4&-=G!M3!
Final Documentation
129
Design Team
Project Background
Audi is at the forefront of innovation in automotive technology and
is dedicated to providing customers with elegant sophisticated
solutions. Autonomous vehicles (AVs) will be relatively common by
the year 2035 and Audi envisions car design will focus not only on
the driving experience, but also the riding experience. Important
areas in designing driving spaces for AVs include how people will
interact with an AV and perform activities other than driving. Even
though the future users will be comfortable with riding in an AV,
there will be times when the user will want to take control just to
enjoy the pleasure of driving.
Stanford University
Sangram Patil
Stephanie Tomasetta
David Wang
Aalto University
Goran Bjelajac
Sifo Luo
Heikki Sjman
Tommi Tuulenmki
Vision
The design team envisions a future where people will want to
regain time lost from commuting to locations where they would be
productive. The team goal is to create adaptable cabin spaces
suitable for many activites, in order to transform the journey into
the destination.
Team VW-Audi envisions driving being a secondary activity that is
performed as frequently as all the other desired activities, such as
working, relaxing, socializing, and interacting with multi-media. An
important aspect of this design would be a seamless transition
between any of these activities. The VW-Audi team will aim to
maintain the pleasure of driving while providing comfort, safety
and an easy transition that increases situational awareness.
Coach
Jeremy Dabrowiak
130
Final Documentation
Left: User testing with different steering controllers. Middle: Transition Experience Prototype that utilizes a
guided matching task for gradual transfer of control. Right: Cabin Space Prototype of moving chairs.
Key Findings
UVisual representation of interactive information is too intrusive and distracting during driving
even if the visuals are projected into the driving field of view.
UPeople are better at doing multiple tasks at a time if the sources of information needed to
perform the tasks are cohesive or the same.
UWhen prompted to mimic the control actions of an AV, users didnt feel like they were driving
Design Requirements
Functional
Physical
Opportunities
U Redefine the
business model
to one that is
perhaps
subscription
based
UPersonalization of
the cabin space to
each user
UAdaptable cabin
space for doing user
desired activities
ULeverage the
social impact
of self-aware cars
Design Strategy
U Explore user interaction in the context of cabin space transitioning
UBetter define and categorize activities that would likely be performed in an AV
UIdentify emerging technologies to integrate into the cabin space based on defined activites
Final Documentation
7.3 Needfinding
To get information of how people behave in
131
Observations
132
7.4 Benchmarking
Gestural steering
An Xbox Kinect Dance Revolution game
was played to learn what it would feel like to
drive using gestural commands. The setup
involved a TV, an Xbox, and the Kinect
sensor module. The sensor module had to
be placed and leveled in the correct position
to be able to capture all of the movements
of the dancer. The distance of the sensor
was also important to be able to capture
movements from head to toe. Several
dance songs were played and points were
evaluated to see how well the dancer
mimicked the animated dancers motions.
Mind Control
The prototype was set up to play two different
games. One game involved two users to
compete against each other to move the
ball towards the opponents side. The other
game involved one user to raise or lower the
ball through different ball obstacles along
the track. Buttons on the game console
manually controlled the forward movement
of the ball.
Voice Command Steering
Several different paths were taken within the
empty parking lot to exhibit a more random
driving pattern to the driver. It was essential
that the driver did not know exactly where
they were even though they were able to see
the course prior to driving. Different degrees
of voice commands were given including
hard left turn, straight, slightly right, etc
Final Documentation
Motion Sickness
The experiment set up involved a car in
which the back seat windows were covered
with black garbage bags to not allow the
passenger in the backside to see the
outside. Also garbage bags were used to
partition the front section of the car from
the back section of the car. The passenger
was reading during the tests. The driver
randomly drove to different parts of the
campus with unexpected turns and car
movements/actions.
CNC Machine Operation
The experiment set up was viewed in the
Stanford Machine Workshop. The team
observed a student that was using the
CNC machines for a project in his class/
lab section. The team first observed the
students actions with the machine without
disturbing him, and then approached him
and asked direct questions of what exactly
he is doing and why he was doing that.
Racing Game Player-to-Player Transition
The experiment involved an Xbox game
station with Forza Motorsports racing game.
One user handled controls at first, and then
the second user stepped in after the first
user relinquished controls over. Several
transitions were tested including during
turning sections, straight away sections, and
within busy clustered car sections. The case
where the second user taking over controls
without seeing what was happening prior
was also tested.
Final Documentation
133
steering.
134
Final Documentation
understand
DRIVING
worth $1 mil)
20067732-48.html
Technology in it
Differential GPS
Observations
Gyroscopes
dramatically is distracting.
watch/273766)
Conclusions
A little disconcerting
is important
Final Documentation
135
accident proof
Technology in it:
(longitudinal control)
preprogrammed trajectory
Localization
control)
Planning
Perception
presentation)
heart attack)
Efficiency
Time- coordinated systems needed to
136
Final Documentation
safe car)
Interaction
Challenges:
example
Legal Issues
driving laws
autonomous mode.
to car companies
(Figure 73)
been suggested
(Figure 74)
Driver Interaction
Research Sensors
Made by VELODYNE
Laser scanners
64 emitters/ receivers
Spin to get a sweeping 360 degree
detection
Data volume: 1.3 mil points/ second
How do you handle that much data?
Final Documentation
137
page)
Elevator example
Elevators used to have a elevator man
that received calls, pulled crank, pick
you up and took you to your floor.
Now elevators are automated and you
barely notice
Future of mobility
(1) Personal mobility
The team looked at existing and future
Path project1990s
Autonomous platooning
on infrastructure changes
(Reference: http://www.segway.com/
puma/)
feedback
138
Final Documentation
movement/)
Final Documentation
139
VW Hover Car
FLAmg&feature=player_embedded
Gerdes believes that the optimal
autonomous car tech will not necessarily
Trust
Concept Cars
interactive interfaces.
140
Final Documentation
Situational Awareness:
to distract you.
signal
a
can
visual
be
one
shorter
than
(Kramer,
for
1994)
and infotainment
1994)
smartphone
to convey
route
Final Documentation
141
regions
matching
142
Final Documentation
Final Documentation
143
144
Final Documentation
if (serialPort1.IsOpen)
textBox1.Text = Done;
else
textBox1.Text = Not;
textBox3.Font = new Font(Georgia, 16);
textBox3.BackColor = Color.LightGreen;
textBox3.BorderStyle = BorderStyle.FixedSingle;
textBox3.TextAlign = HorizontalAlignment.Center;
textBox3.Text = Throttle matched;
textBox3.Visible = false;
int trial_int = 0;
string trial_msg = 0;
int flg = 0;
while(flg == 0)
{
trial_msg = serialPort1.ReadLine();
try
{
trial_int = Int32.Parse(trial_msg);
}
catch
{
}
if (trial_int == 1234)
break;
}
Final Documentation
while (flg == 0)
{
trial_msg = serialPort1.ReadLine();
try
{
trial_int = Int32.Parse(trial_msg);
}
catch
{
}
if (trial_int == 5678)
{
flg = 1;
break;
}
}
int count = 0;
int error_count = 0;
int error = 0;
int last_error = 0;
int error_threshold = 150;
int count_threshold = 200; //should be 200
bool pedalAchieved = false;
int time_count = 0;
int label_count = 0;
progressBar1.Maximum = count_threshold;
int steering_error_count = 0;
int steering_error = 0;
int steering_last_error = 0;
int steering_error_threshold = 50;
int steering_count_threshold = 150;
bool steeringAchieved = false;
//int label_count = 0;
progressBar2.Maximum = steering_count_threshold;
145
146
Final Documentation
Final Documentation
147
if (textBox3.Visible)
{
label_count++;
if (label_count == 150)
{
textBox3.Visible = false;
label_count = 0;
}
}
String msg0 = serialPort1.ReadLine();
String message = serialPort1.ReadLine();
String message2 = serialPort1.ReadLine();
button_flg = Int32.Parse(msg0);
pot = Int32.Parse(message);
pot2 = Int32.Parse(message2);
if (checkBox1.Checked)
{
fsw = new FileStream(Z:/Acads/Year2/ME310A/AUDI/CFP/Software/Csharp
Trials/Scenario2 + textBox2.Text, FileMode.Append, FileAccess.Write);
sw = new StreamWriter(fsw);
sw.WriteLine(message + + message2);
sw.Flush();
sw.Close();
fsw.Close();
}
if (checkBox2.Checked)
{
//string[] lines = System.IO.File.ReadAllLines(@Z:/Acads/Year2/ME310A/AUDI/
CFP/Software/Csharp Trials/Scenario2trial1.txt);
//string lines_check = lines[2];
String str1 = sr.ReadLine();
String str2 = sr.ReadLine();
String str3 = sr.ReadLine();
148
Final Documentation
pot_auto = Convert.ToInt32(str1);
pot2_auto = Convert.ToInt32(str2);
sw.WriteLine(message + + message2);
//sr.Close();
//fs.Close();
}
count++;;
if (count == 4)
{
progressBar1.Value = error_count;
progressBar2.Value = steering_error_count;
//textBox1.Text = error_count.ToString();
formGraphics.Clear(Color.FromName(Control));
Final Documentation
149
150
Final Documentation
}
//////////////////////////////////////////
// Steering matching code
/////////////////////////////////////////
if (pedalAchieved && !steeringAchieved && steering_error < steering_error_
threshold && steering_last_error < steering_error_threshold)
{
steering_error_count++;
}
else if (pedalAchieved && !steeringAchieved && steering_last_error < error_
threshold && steering_error >= steering_error_threshold)
{
steering_error_count = 0;
}
steering_last_error = steering_error;
if (pedalAchieved && !steeringAchieved && steering_error_count == steering_
count_threshold)
{
// successfully matched throttle pedal
int debug = 1;
steeringAchieved = true;
textBox3.Text = Steering matched;
textBox3.Visible = true;
label_count = 0;
if (checkBox2.Checked)
{
sw.WriteLine(********Steering matched**********************);
sw.WriteLine(time_count);
sw.WriteLine(******************************);
}
}
float centerX = (rectX1 + rectWidth / 2);
Final Documentation
151
152
Final Documentation
Final Documentation
}
count = 0;
}
}
myPen.Dispose();
formGraphics.Dispose();
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void progressBar1_Click(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
}
}
}
153
https://www.youtube.com/watch?v=reIyTHHCd-c
http://www.youtube.com/watch?v=uqeo_ZvGxE&feature=related
http://www.dailymotion.com/video/xcuin0_next-world-futuredanger-5th-april_shortfilms?search_algo=2
https://www.youtube.com/watch?
v=219YybX66MY&feature=related
https://www.youtube.com/watch?
v=K54LN9q1jSs&feature=related
http://www.youtube.com/watch?
v=7ic0JAH8rco&feature=relmfu
http://auto.howstuffworks.com/car-driving-safety/accidentshazardous-conditions/traffic.htm
Intelligence revolution
Traffic statistics
World in 2057
Future predictions
Future Intelligence
AR (Augmented Reality)
AR (Augmented Reality)
http://www.youtube.com/watch?v=P9KPJlA5yds
http://auto.howstuffworks.com/under-the-hood/trendsinnovations/5-future-car-technologies3.htm
http://www.youtube.com/watch?
v=U7UroLFYlzE&feature=related
Wasted time
AR (Augmented Reality)
http://www.futuretimeline.net
Goran
Goran
Goran
Goran
Goran
Goran
Goran
Goran
Goran
Tommi
Tommi
Tommi
Tommi
Tommi
Tommi
Tommi
Sangram
Who added
Sangram
Comments
Description
http://en.wikipedia.org/wiki/Augmented_reality
http://www.autoevolution.com/news/who-needs-parkingsensors-with-an-invisible-back-seat-50139.html
http://asasi.org/papers/2004/Shappell%20et%
20al_HFACS_ISASI04.pdf
http://auto.howstuffworks.com/car-driving-safety/accidentshazardous-conditions/traffic.htm
http://www.nytimes.
com/2011/05/29/business/economy/29view.html
No Link
Link/Title
http://ieeexplore.ieee.org/stamp/stamp.jsp?
tp=&arnumber=5945275
154
Final Documentation
Final Documentation
155
Link/Title
Description
http://en.wikipedia.org/wiki/Motion_sickness
Motion Sickness
http://www.medicinenet.com/motion_sickness/article.htm
Motion Sickness
http://www.viban.com/motionsickness.htm
http://en.wikipedia.org/wiki/Tilting_train
http://www.google.com/patents/US20040035347
http://www.google.com/patents/US7717841
Link/Title
http://www.audi.co.uk/new-cars/a8/a8/safety/presense.html
http://www.audi.
com/com/brand/en/tools/advice/glossary.html
http://www.audi.
com/com/brand/en/tools/advice/glossary.html
http://www.audi.
com/com/brand/en/tools/advice/glossary.html
http://www.audi.
com/com/brand/en/tools/advice/glossary.html
http://www.audi.
com/com/brand/en/tools/advice/glossary.html
http://www.audi.
com/com/brand/en/tools/advice/glossary.html
http://www.audi.
com/com/brand/en/tools/advice/glossary.html
http://www.audi.
com/com/brand/en/tools/advice/glossary.html
http://www.autoevolution.com/news/volvo-citysafety-lowers-insurance-rating-for-all-uk-boundv40s-50033.html
http://en.wikipedia.
org/wiki/Electronic_stability_control
http://www.autoevolution.com/news/cadillacvirtual-bumper-helps-avoid-parking-crashes49613.html
http://wot.motortrend.com/continental-wantsemergency-steer-assist-to-drive-cars-away-fromaccidents-8013.html
Motion sickness
product
Tilting Train
2006 Patent Autonomous, self
leveling, self
correcting antimotion sickness
chair, bed
Description
Who added
Tommi
Tommi
Steph
Active compensation
Sangram
Sangram
Sangram
Comments
Currently available system.
Includes floowing systems:
Audi adaptive cruise control,
Audi lane assist, Audi Side
Assist, Night vision, and
Audi Adaptive Lights.
Who added
Tommi
Tommi
Tommi
Tommi
Auto-dimming Mirrors
Tommi
Tommi
Tommi
Tommi
Night vision
Tommi
Tommi
Tommi
Comments
Some brife explanation what is
motion sickness
What causes motion sickness
etc
Air Bag
Tommi
Tommi
Tommi
Tommi
156
Final Documentation
Link/Title
Description
Comments
99 page document - extensive discussion about the
https://cyberlaw.stanford.
White paper on legality of autonomous legality of autonomous cars (This however is not that
edu/files/publication/files/2012-Smithcars in the US
relevant now that robocars have been legalized in
AutomatedVehiclesAreProbablyLegalinTheUS_0.pdf
California)
Important points from the article and user comments:
transportation as a service model, dealership
package of owning a personal car + having free miles
on the robo-service-car, reference to transit oriented
enviromentalists/activists (we need to look at their
views and why they are against this), service
robocars solve the parking space problems, robocars
http://www.theatlanticcities.
can really blur the line between "public" and "private"
Article about autonomous cars
com/commute/2012/09/driverless-carstransportation, concept of dynamic carpooling using
reshaping the future
would-reshape-automobiles-and-transitrobocars and smartphones, problems in robotaxis in
system/3432/
handling large crowds of people after the Big Game
lets say coming out of the stadium?, City planning model of "free-floating semi-autonomous people
transporters" would only push us toward building
more disconnected places?, car owners renting out
their robocars (other more advanced models to zipcar
and car-sharing)
http://ideas.4brad.com/
Awesome blog about robocars
Leads to more links, Still being updated regularly
http://www.autoevolution.
Autonomous parking introduced by
Parking which can be controlled with a smartpohone.
com/news/nissan-hops-aboard-self-drivingNissan
Avaivable in near future (2015).
train-with-nsc-2015-video-50028.html
Link/Title
Description
http://conferences.ifpri.
Study about
org/2020conference/PDF/summary_bongaarts.pdf
popultaion growth
http://view.fdu.
Modern human
edu/files/humanvaluessustainability.
being's values
pdf
http://www.futuretimeline.
net/21stcentury/2020.htm
Comments
Population of earth is likely to
increase with 3 billion between
2001-2050. Relevance to our cabin
is might not be that good :D.
Good insight in current human
values. A lot of useless stuff but
some relevant stuff also. Article
published 2010.
Completely new generation will rule
the world in future. People more like
you and me. Less religious, more
liberal...
Who added
Sangram
Sangram
Sangram
Tommi
Who added
Tommi
Tommi
Goran
Final Documentation
157
3P/33/3P
Sangram Patil
Stephanie Tomasetta
David Wang
Goran Bjelajac
Sifo Luo
Heikki Sj man
Tommi Tuulenm ki
158
Final Documentation
3P/33/3P
Assumptions
Transition
Trust
Cabin
Control
Transition
Trust
Cabin
Control
Transition
Testing the transition sequence from
autonomous to manual control
Transition: Gradual
Transition: Direct
_______ Display
______________ Switch
Final Documentation
159
3P/33/3P
Trust
Reason for trusting autonomous systems
Experience of riding in an autonomous vehicle
Transition
Trust
Cabin
People did not feel like they were driving when prompted
to mimic the AV controls.
Control
If the user sees what the cars sees, then trust is built.
If the user sees what the cars sees, then trust is built.
Having anticipatory cues for out of the ordinary situations
leads to reassurance that everything is working.
Cabin Space
Explore experience of having a moving chair in
the cabin space
Transition
Trust
Cabin
Control
Movable Chair __________
Cabin Activity Space _______________________
Working
Relaxing
Socializing
Interacting with multimedia
Driving
160
Final Documentation
3P/33/3P
Transition
Trust
Cabin
Control
Control Mechanisms
Explore possibility of a different control
mechanism that is more fun and easier to
transition
Design Requirements
Design Requirements
Comfortable Transition
Final Documentation
161
3P/33/3P
Design Requirements
Design Requirements
Design Requirements
Design Requirements
Situational Awareness
Identify emerging
technologies to integrate _____
162
3P/33/3P
Final Documentation
Questions?
Define and categorize
potential activities in AV __________
Final Documentation
163
164
Final Documentation
Final Documentation
165
166
Final Documentation
Final Documentation
167
168
Final Documentation
EVOLVE
Possibilities to use the time and space in
the autonomous car are only limited by the
size of the car and peoples imagination. We
found that the most common activities people
wished to do in the car are working, relaxing,
and socializing. Every one of those activities
requires different body position and slightly
different interior arrangement. The space in
the car is very limited and there is just not
enough space to move freely. How to create
a comfortable and entertaining cabin environment is one of our tasks.
In order to ensure the quality and sophistication Audi brand presents, we need to make
driver experience during entire ride equally
interesting. That includes both the experience during activities in the car and the transition between them as well.
The transition between autonomous and
manual modes is another problem. If we look
at only the transition from driving to autonomous, we can immediately see that it is not
easy at all. Letting go the control of your life
Vision
We envision cars in the year 2035 as moving personal space. Cars will be autonomous
and it will have two driving modes - manual
and autonomous. Drivers will no longer waste
time because of the time spent on the road,
but because of the possibility to use the time
while traveling for something else than driving. Those activities are going to be mainly
working, relaxing, and socializing. The design of the cabin will accommodate these activities as best as the size of the car allows to.
This requires us to radically restructure the
interior of the car. There might be only one
seat in front, and this driver seat will have to
be smart in a way that it senses what driver
wants and thus eases the transition between
activities and modes. Visual and audio guidance will also aid the transition by giving
enough information to the driver.
Final Documentation
169
170
Final Documentation
Final Documentation
171
172
Final Documentation
Final Documentation
173
174
Final Documentation
Final Documentation
175
176
Final Documentation
line5 = new GLine(CHAIR_MARGIN, CHAIR_MARGIN, CHAIR_MARGIN, CHAIR_HEIGHT CHAIR_MARGIN); //left vert line
//x1,y2 = bottom_left point, x2,y2 = bottom_right point
line6 = new GLine(CHAIR_MARGIN, CHAIR_HEIGHT - CHAIR_MARGIN, CHAIR_WIDTH CHAIR_MARGIN, CHAIR_HEIGHT - CHAIR_MARGIN); //bottom horiz line
break;
default:
break;
}
if(objectSelected == chairSymbol1)
{
remove(chairSymbol1);
chairSymbol1.removeAll();
chairSymbol1.add(chair1);
chairSymbol1.add(line1);
chairSymbol1.add(line2);
chairSymbol1.add(line3);
add(chairSymbol1, x, y);
}
else if(objectSelected == chairSymbol2)
{
remove(chairSymbol2);
chairSymbol2.removeAll();
chairSymbol2.add(chair1);
chairSymbol2.add(line4);
chairSymbol2.add(line5);
chairSymbol2.add(line6);
add(chairSymbol2, x, y);
}
}
public void createBedSymbol(GCompound bed, int xPosition, int yPosition)
{
GRect bed1 = new GRect(BED_WIDTH, BED_HEIGHT);
GRect pillow = new GRect(BED_WIDTH/8, BED_HEIGHT*3/4);
pillow.move(BED_WIDTH/10, pillow.getHeight()/5);
GLine sheet = new GLine(30, 0,30,BED_HEIGHT);
pillow.setFilled(true);
bed.add(bed1);
Final Documentation
bed.add(pillow);
bed.add(sheet);
add(bed, xPosition, yPosition);
}
public void flipBed()
{
int nextPosition = 0;
GRect bed = null, pillow = null;
GLine sheet = null;
GPoint objectLoc = objectSelected.getLocation();
double x = objectLoc.getX();
double y = objectLoc.getY();
//Need to check which rotated position it is in
if(objectSelected == bedSymbol)
{
nextPosition = flipBedCounter;
switch(nextPosition)
{
case 0:
bed = new GRect(BED_WIDTH, BED_HEIGHT);
pillow = new GRect(BED_WIDTH/8, BED_HEIGHT*3/4);
pillow.move(BED_WIDTH/10, pillow.getHeight()/5);
sheet = new GLine(30, 0,30,BED_HEIGHT);
pillow.setFilled(true);
break;
case 1:
bed = new GRect(BED_WIDTH, BED_HEIGHT);
pillow = new GRect(BED_WIDTH/8, BED_HEIGHT*3/4);
pillow.move(BED_WIDTH - BED_WIDTH/10 - pillow.getWidth(), pillow.getHeight()/5);
sheet = new GLine(BED_WIDTH - 30, 0, BED_WIDTH - 30,BED_HEIGHT);
pillow.setFilled(true);
break;
default:
break;
}
remove(bedSymbol);
bedSymbol.removeAll();
bedSymbol.add(bed);
177
178
Final Documentation
bedSymbol.add(pillow);
bedSymbol.add(sheet);
add(bedSymbol, x, y);
}
}
public void createTVSymbol(GCompound tv, int xPosition, int yPosition)
{
GRect tv1 = new GRect(TV_WIDTH, TV_HEIGHT);
GOval frame = new GOval(2, 2, TV_WIDTH-5, TV_HEIGHT-5);
GLine line1 = new GLine(TV_WIDTH, TV_HEIGHT/2,TV_WIDTH + 10, TV_HEIGHT/2);
GLine line2 = new GLine(TV_WIDTH, TV_HEIGHT/2,TV_WIDTH + 10, TV_HEIGHT/2 + 10);
GLine line3 = new GLine(TV_WIDTH, TV_HEIGHT/2, TV_WIDTH + 10, TV_HEIGHT/2 - 10);
tv.add(tv1);
tv.add(frame);
tv.add(line1);
tv.add(line2);
tv.add(line3);
add(tv, xPosition, yPosition);
}
public void createTableSymbol(GCompound table, int xPosition, int yPosition)
{
GRect table1 = new GRect(TABLE_WIDTH, TABLE_HEIGHT);
GLabel tableText = new GLabel(T);
tableText.setFont(SansSerif-16);
double x = (table1.getWidth() - tableText.getWidth()/2);
double y = (table1.getHeight() + tableText.getAscent()/2);
table.add(table1);
table.add(tableText, x/2, y/2);
add(table, xPosition, yPosition);
}
public void createDeskSymbol(GCompound desk, int xPosition, int yPosition)
{
GRect desk1 = new GRect(DESK_WIDTH, DESK_HEIGHT);
GLabel deskText = new GLabel(D);
deskText.setFont(SansSerif-16);
double x = (desk1.getWidth() - deskText.getWidth()/2);
double y = (desk1.getHeight() + deskText.getAscent()/2);
desk.add(desk1);
desk.add(deskText,x/2, y/2 + deskText.getAscent()/8);
Final Documentation
179
180
Final Documentation
deskSymbol.add(desk);
deskSymbol.add(deskText);
add(deskSymbol, x, y);
}
}
public void createLampSymbol(GCompound lamp, int xPosition, int yPosition)
{
GOval frame = new GOval(LAMP_WIDTH, LAMP_HEIGHT);
GOval lamp1 = new GOval(LAMP_WIDTH, LAMP_HEIGHT);
lamp1.setColor(Color.YELLOW);
lamp1.setFilled(true);
lamp.add(lamp1);
lamp.add(frame);
add(lamp, xPosition, yPosition);
Audi EVOLVE March 19, 2013
169
}
public void createDeckCardsSymbol(GCompound card, int xPosition, int yPosition)
{
GRect card1 = new GRect(DECK_CARDS_WIDTH, DECK_CARDS_HEIGHT);
GLabel cardText = new GLabel(DC);
double x = (card1.getWidth() - cardText.getWidth()/2);
double y = (card1.getHeight() + cardText.getAscent()/2);
card.add(card1);
card.add(cardText,x,y);
add(card, xPosition, yPosition);
}
public void createDrinkSymbol(GCompound drink, int xPosition, int yPosition)
{
GOval drink1 = new GOval(DRINK_WIDTH, DRINK_HEIGHT);
GOval frame = new GOval(DRINK_WIDTH, DRINK_HEIGHT);
drink1.setColor(Color.BLUE);
drink1.setFilled(true);
drink.add(drink1);
drink.add(frame);
add(drink, xPosition, yPosition);
}
public void mousePressed(MouseEvent e)
{
Final Documentation
181
182
Final Documentation
else
tvLabel.setVisible(false);
if(objectSelected == tableSymbol)
{
tableLabel.setVisible(true);
tableLabel.setLocation(TEXT_ALIGN_X - tableLabel.getWidth()/2, TEXT_ALIGN_Y tableLabel.getAscent()/2);
}
else
tableLabel.setVisible(false);
if(objectSelected == deskSymbol)
{
deskLabel.setVisible(true);
deskLabel.setLocation(TEXT_ALIGN_X - deskLabel.getWidth()/2, TEXT_ALIGN_Y deskLabel.getAscent()/2);
}
else
deskLabel.setVisible(false);
if(objectSelected == lampSymbol)
{
lampLabel.setVisible(true);
lampLabel.setLocation(TEXT_ALIGN_X - lampLabel.getWidth()/2, TEXT_ALIGN_Y lampLabel.getAscent()/2);
}
else
lampLabel.setVisible(false);
if(objectSelected == cardSymbol)
{
cardLabel.setVisible(true);
cardLabel.setLocation(TEXT_ALIGN_X - cardLabel.getWidth()/2, TEXT_ALIGN_Y cardLabel.getAscent()/2);
}
else
cardLabel.setVisible(false);
if(objectSelected == drinkSymbol)
{
drinkLabel.setVisible(true);
drinkLabel.setLocation(TEXT_ALIGN_X - drinkLabel.getWidth()/2, TEXT_ALIGN_Y drinkLabel.getAscent()/2);
Final Documentation
183
}
else
drinkLabel.setVisible(false);
}
}
else
{
bedLabel.setVisible(false);
chairLabel.setVisible(false);
chairLabel2.setVisible(false);
tvLabel.setVisible(false);
tableLabel.setVisible(false);
deskLabel.setVisible(false);
lampLabel.setVisible(false);
cardLabel.setVisible(false);
drinkLabel.setVisible(false);
}
}
public void mouseDragged(MouseEvent e)
{
if(objectSelected != null)
{
//Need to check whether if the object is the drop area, if so dont do anything and sent to
back
if((objectSelected != dropArea) && (objectSelected != frontText))
{
objectSelected.move(e.getX() - last_mouse_loc.getX(), e.getY() - last_mouse_loc.getY());
last_mouse_loc = new GPoint(e.getPoint());
if((objectSelected != dropArea) && (objectSelected != frontText))
{
objectSelected.sendToFront();
if(objectSelected == bedSymbol)
{
bedLabel.setVisible(true);
bedLabel.setLocation(TEXT_ALIGN_X - bedLabel.getWidth()/2,
TEXT_ALIGN_Y - bedLabel.getAscent()/2);
}
else
bedLabel.setVisible(false);
184
if(objectSelected == chairSymbol1)
{
chairLabel.setVisible(true);
chairLabel.setLocation(TEXT_ALIGN_X - chairLabel.getWidth()/2,
TEXT_ALIGN_Y - chairLabel.getAscent()/2);
}
else
chairLabel.setVisible(false);
if(objectSelected == chairSymbol2)
{
chairLabel2.setVisible(true);
chairLabel2.setLocation(TEXT_ALIGN_X chairLabel2.getWidth()/2, TEXT_ALIGN_Y - chairLabel2.getAscent()/2);
}
else
chairLabel2.setVisible(false);
if(objectSelected == tvSymbol)
{
tvLabel.setVisible(true);
tvLabel.setLocation(TEXT_ALIGN_X - tvLabel.getWidth()/2,
TEXT_ALIGN_Y - tvLabel.getAscent()/2);
}
else
tvLabel.setVisible(false);
if(objectSelected == tableSymbol)
{
tableLabel.setVisible(true);
tableLabel.setLocation(TEXT_ALIGN_X - tableLabel.getWidth()/2,
TEXT_ALIGN_Y - tableLabel.getAscent()/2);
}
else
tableLabel.setVisible(false);
if(objectSelected == deskSymbol)
{
deskLabel.setVisible(true);
deskLabel.setLocation(TEXT_ALIGN_X - deskLabel.getWidth()/2,
TEXT_ALIGN_Y - deskLabel.getAscent()/2);
}
else
Final Documentation
Final Documentation
deskLabel.setVisible(false);
if(objectSelected == lampSymbol)
{
lampLabel.setVisible(true);
lampLabel.setLocation(TEXT_ALIGN_X - lampLabel.getWidth()/2,
TEXT_ALIGN_Y - lampLabel.getAscent()/2);
}
else
lampLabel.setVisible(false);
if(objectSelected == cardSymbol)
{
cardLabel.setVisible(true);
cardLabel.setLocation(TEXT_ALIGN_X - cardLabel.getWidth()/2,
TEXT_ALIGN_Y - cardLabel.getAscent()/2);
}
else
cardLabel.setVisible(false);
if(objectSelected == drinkSymbol)
{
drinkLabel.setVisible(true);
drinkLabel.setLocation(TEXT_ALIGN_X - drinkLabel.getWidth()/2,
TEXT_ALIGN_Y - drinkLabel.getAscent()/2);
}
else
drinkLabel.setVisible(false);
}
else
{
bedLabel.setVisible(false);
chairLabel.setVisible(false);
chairLabel2.setVisible(false);
tvLabel.setVisible(false);
tableLabel.setVisible(false);
deskLabel.setVisible(false);
lampLabel.setVisible(false);
cardLabel.setVisible(false);
drinkLabel.setVisible(false);
}
}
185
186
Final Documentation
else
{
objectSelected.sendBackward();
}
}
}
public void mouseClicked(MouseEvent e)
{
last_mouse_loc = new GPoint(e.getPoint());
objectSelected = getElementAt(last_mouse_loc);
if(objectSelected != null)
{
if((objectSelected != dropArea) && (objectSelected != frontText))
{
objectSelected.sendToFront();
if(objectSelected == bedSymbol)
{
bedLabel.setVisible(true);
bedLabel.setLocation(TEXT_ALIGN_X - bedLabel.getWidth()/2, TEXT_ALIGN_Y bedLabel.getAscent()/2);
}
else
bedLabel.setVisible(false);
if(objectSelected == chairSymbol1)
{
chairLabel.setVisible(true);
chairLabel.setLocation(TEXT_ALIGN_X - chairLabel.getWidth()/2, TEXT_ALIGN_Y chairLabel.getAscent()/2);
}
else
chairLabel.setVisible(false);
if(objectSelected == chairSymbol2)
Audi EVOLVE March 19, 2013
173
{
chairLabel2.setVisible(true);
chairLabel2.setLocation(TEXT_ALIGN_X - chairLabel2.getWidth()/2, TEXT_ALIGN_Y
- chairLabel2.getAscent()/2);
}
Final Documentation
else
chairLabel2.setVisible(false);
if(objectSelected == tvSymbol)
{
tvLabel.setVisible(true);
tvLabel.setLocation(TEXT_ALIGN_X - tvLabel.getWidth()/2, TEXT_ALIGN_Y tvLabel.getAscent()/2);
}
else
tvLabel.setVisible(false);
if(objectSelected == tableSymbol)
{
tableLabel.setVisible(true);
tableLabel.setLocation(TEXT_ALIGN_X - tableLabel.getWidth()/2, TEXT_ALIGN_Y tableLabel.getAscent()/2);
}
else
tableLabel.setVisible(false);
if(objectSelected == deskSymbol)
{
deskLabel.setVisible(true);
deskLabel.setLocation(TEXT_ALIGN_X - deskLabel.getWidth()/2, TEXT_ALIGN_Y deskLabel.getAscent()/2);
}
else
deskLabel.setVisible(false);
if(objectSelected == lampSymbol)
{
lampLabel.setVisible(true);
lampLabel.setLocation(TEXT_ALIGN_X - lampLabel.getWidth()/2, TEXT_ALIGN_Y lampLabel.getAscent()/2);
}
else
lampLabel.setVisible(false);
if(objectSelected == cardSymbol)
{
cardLabel.setVisible(true);
cardLabel.setLocation(TEXT_ALIGN_X - cardLabel.getWidth()/2, TEXT_ALIGN_Y cardLabel.getAscent()/2);
187
188
Final Documentation
}
else
cardLabel.setVisible(false);
if(objectSelected == drinkSymbol)
{
drinkLabel.setVisible(true);
drinkLabel.setLocation(TEXT_ALIGN_X - drinkLabel.getWidth()/2, TEXT_ALIGN_Y drinkLabel.getAscent()/2);
}
else
drinkLabel.setVisible(false);
}
}
else
{
bedLabel.setVisible(false);
chairLabel.setVisible(false);
chairLabel2.setVisible(false);
tvLabel.setVisible(false);
tableLabel.setVisible(false);
deskLabel.setVisible(false);
lampLabel.setVisible(false);
cardLabel.setVisible(false);
drinkLabel.setVisible(false);
}
}
/*-----------------------*/
/*BUTTON ACTION PERFORMED*/
/*-----------------------*/
public void actionPerformed(ActionEvent e)
{
String cmd = e.getActionCommand();
if(cmd.equals(Reset All))
{
bedSymbol.setLocation(BED_INIT_LOC_X, BED_INIT_LOC_Y);
chairSymbol1.setLocation(CHAIR1_INIT_LOC_X, CHAIR2_INIT_LOC_Y);
chairSymbol2.setLocation(CHAIR2_INIT_LOC_X, CHAIR2_INIT_LOC_Y);
tvSymbol.setLocation(TV_INIT_LOC_X, TV_INIT_LOC_Y);
tableSymbol.setLocation(TABLE_INIT_LOC_X, TABLE_INIT_LOC_Y);
Final Documentation
189
deskSymbol.setLocation(DESK_INIT_LOC_X, DESK_INIT_LOC_Y);
lampSymbol.setLocation(LAMP_INIT_LOC_X, LAMP_INIT_LOC_Y);
cardSymbol.setLocation(DECK_CARDS_INIT_LOC_X, DECK_CARDS_INIT_LOC_Y);
drinkSymbol.setLocation(DRINK_INIT_LOC_X, DRINK_INIT_LOC_Y);
}
else if(cmd.equals(Reset Selected))
{
if(objectSelected != null)
{
if(objectSelected == bedSymbol)
bedSymbol.setLocation(BED_INIT_LOC_X, BED_INIT_LOC_Y);
else if(objectSelected == chairSymbol1)
chairSymbol1.setLocation(CHAIR1_INIT_LOC_X, CHAIR1_INIT_LOC_Y);
else if(objectSelected == chairSymbol2)
chairSymbol2.setLocation(CHAIR2_INIT_LOC_X, CHAIR2_INIT_LOC_Y);
else if(objectSelected == tvSymbol)
tvSymbol.setLocation(TV_INIT_LOC_X, TV_INIT_LOC_Y);
else if(objectSelected == tableSymbol)
tableSymbol.setLocation(TABLE_INIT_LOC_X, TABLE_INIT_LOC_Y);
else if(objectSelected == deskSymbol)
deskSymbol.setLocation(DESK_INIT_LOC_X,DESK_INIT_LOC_Y);
else if(objectSelected == lampSymbol)
lampSymbol.setLocation(LAMP_INIT_LOC_X, LAMP_INIT_LOC_Y);
else if(objectSelected == cardSymbol)
cardSymbol.setLocation(DECK_CARDS_INIT_LOC_X,
DECK_CARDS_INIT_LOC_Y);
else if(objectSelected == drinkSymbol)
drinkSymbol.setLocation(DRINK_INIT_LOC_X, DRINK_INIT_LOC_Y);
}
}
else if(cmd.equals(Rotate Selected))
{
if(objectSelected != null)
{
if(objectSelected == chairSymbol1)
{
if(++rotateChair1Counter == 4)
rotateChair1Counter = 0;
rotateChair();
190
}
else if(objectSelected == chairSymbol2)
{
if(++rotateChair2Counter == 4)
rotateChair2Counter = 0;
rotateChair();
}
else if(objectSelected == bedSymbol)
Audi EVOLVE March 19, 2013
175
{
if(flipBedCounter == 1)
flipBedCounter = 0;
else
flipBedCounter = 1;
flipBed();
}
else if(objectSelected == deskSymbol)
{
if(rotateDeskCounter == 1)
rotateDeskCounter = 0;
else
rotateDeskCounter = 1;
rotateDesk();
}
}
}
}
Final Documentation
Final Documentation
191
192
Final Documentation
TValue[i] = analogRead(T[i]);
}
//Send switch state data to matlab
Serial.println(switch state);
switchState = digitalRead(STATESWITCH);
Serial.println(switchState);
Serial.println(force data);
sprintf(topForceString,%u %u %u %u, TValue[0],TValue[1],TValue[2],TValue[3]);
sprintf(bottomForceString,%u %u %u %u, BValue[0],BValue[1],BValue[2],BValue[3]);
sprintf(forceString,%s %s, topForceString, bottomForceString);
Serial.println(forceString);
}
}
7.12.2 Matlab Data Collection Code (main.m)
clear;
close all;
name = MovingTest3;
serialPort = initialize_port();
forceCount = 1;
forceFlag = 0;
NCompare = 5;
while(1)
%Received value should be in format of attention value,meditation value
received = readSerial();
if(strncmpi(received,switch state,NCompare))
received = received(1:length(received)-2);
state = readSerial();
state = sscanf(state,%u); %%u gets rid of the \r\n
writeToFile(state,received,name);
elseif(strncmpi(received,force data,NCompare))
received = received(1:length(received)-2);
forceFlag = 1;
%Received data as a string in format (T1,T2,T3,T4,B1,B2,B3,B4)
values = readSerial();
writeToFile(values,received,name);
end
[date time] = strtok(datestr(clock));
writeToFile(time,time stamp,name);
end
Final Documentation
193
194
Final Documentation
Final Documentation
if(stateSwitch(i)~=lastState)
changeNums(count) = i;
count = count+1;
end
lastState = stateSwitch(i);
end
figure
subplot(4,1,1);
plot(forceData(:,1));
plotLines(changeNums);
ylabel(Sensor T1);
title(Top Sensors);
subplot(4,1,2);
plot(forceData(:,2));
plotLines(changeNums);
ylabel(Sensor T2);
subplot(4,1,3);
plot(forceData(:,3));
plotLines(changeNums);
ylabel(Sensor T3);
subplot(4,1,4);
plot(forceData(:,4));
plotLines(changeNums);
ylabel(Sensor T4);
figure
subplot(4,1,1);
plot(forceData(:,5));
plotLines(changeNums);
ylabel(Sensor B1);
title(Bottom Sensors);
subplot(4,1,2);
plot(forceData(:,6));
plotLines(changeNums);
ylabel(Sensor B2);
subplot(4,1,3);
plot(forceData(:,7));
plotLines(changeNums);
ylabel(Sensor B3);
subplot(4,1,4);
195
196
Final Documentation
plot(forceData(:,8));
plotLines(changeNums);
ylabel(Sensor B4);
saveas(figure(1),[name,/,name,top.fig])
saveas(figure(2),[name,/,name,bottom.fig])
saveas(figure(1),[name,/,name,top.jpg])
saveas(figure(2),[name,/,name,bottom.jpg])
function plotLines(changeNums)
for i=1:1:max(size(changeNums))
line([changeNums(i),changeNums(i)],[0,800],LineWidth,2,Color,Red)
end
end
Final Documentation
#define M2_direc 7
#define M3_switch 8
#define M3_direc 9
#define M4_switch 10
#define M4_direc 11
#define trial_pin A1
// Motor encoder input lines
#define M1_PIN 53 // PCI0 on PCINT0
#define M2_PIN 3 // INT5 interrupt
#define M3_PIN A8 // PCI2 on PCINT16
#define M4_PIN 2 // INT4 interrupt
// FSR control lines
#define MUX_BIT3 18
#define MUX_BIT2 19
#define MUX_BIT1 20
#define MUX_BIT0 21
// FSR input line
#define FSR_input A0
// M2 constants
const int M2_default = 650;
const int M2_D = 550;
const int M2_R = 950;
// M4 constants
const int M4_default = 650;
const int M4_D = 550;
const int M4_R = 800;
// Int Array to store FSR values
int FSR_values[12] = {0,0,0,0,0,0,0,0,0,0,0,0};
int M4_moveComplete = 1;
int M4_moveDirec = 0;
int M4_moveDelta = 0;
unsigned long int M4_moveStartTime = 0;
unsigned long int M4_moveStopTime = 0;
int M4_moveLastPos = 0;
int M4_moveStopDeltaTime = 800;
int M4_low_thresh = 150;
int M4_high_thresh = 675;
int M2_moveComplete = 1;
197
198
int M2_moveDirec = 0;
int M2_moveDelta = 0;
unsigned long int M2_moveStartTime = 0;
int M2_moveLastPos = 0;
int M4pos = 0; int M4lastpos = 0;
int M2pos = 0; int M2lastpos = 0;
int dumb_flg = 0;
unsigned long int trial_count = 0;
unsigned long int trial_count2 = 0;
unsigned long int codeStartTime = 0;
char last_incomingByte = l;
char incomingByte = ;
int drive = -1;
int twist = 0;
int code_disabled = 0;
int smart_code_disabled = 1;
char incoming_array[5] = { , , , , };
int incoming_count = 0;
int switchvar = 0;
unsigned long int lastTime = 0;
int forceDflg = 0;
int drive_isLast = 0;
void setup()
{
pinMode(M1_switch, OUTPUT);
pinMode(M1_direc, OUTPUT);
pinMode(M1_PIN, INPUT);
pinMode(M2_switch, OUTPUT);
pinMode(M2_direc, OUTPUT);
pinMode(M2_PIN, INPUT);
pinMode(M3_switch, OUTPUT);
pinMode(M3_direc, OUTPUT);
pinMode(M3_PIN, INPUT);
pinMode(M4_switch, OUTPUT);
pinMode(M4_direc, OUTPUT);
pinMode(M4_PIN, INPUT);
// Set MUX pins DDR
pinMode(MUX_BIT3,OUTPUT);
Final Documentation
Final Documentation
pinMode(MUX_BIT2,OUTPUT);
pinMode(MUX_BIT1,OUTPUT);
pinMode(MUX_BIT0,OUTPUT);
pinMode(FSR_input, INPUT);
pinMode(trial_pin, OUTPUT);
noInterrupts(); //disable interrupts
//Set Pin Change Interrupt Enable 0,1,2
PCICR |= (1<<PCIE2) | (1<<PCIE1) | (1<<PCIE0);
//Enable appropriate pin for pin change interrupt
PCMSK2 |= (1<<PCINT16);
PCMSK1 |= (1<<PCINT8);
PCMSK0 |= (1<<PCINT0); // Digital Pin 53
//Set External Interrupt 0 enable
EIMSK |= (1<<INT4) | (1<<INT5); // Pins 2 and 3
//Sense Control for EXTint0
Audi EVOLVE March 19, 2013
193
EICRB |= (1<<ISC40) | (1<<ISC50); // Set it to trigger on pin change
interrupts(); //enable global interrupts
Serial.begin(9600);
Serial3.begin(9600);
codeStartTime = millis();
#ifdef RESET_POS
if(M4pos != M4_default)
moveM4(abs(M4pos-M4_default),-(M4pos-M4_default)/abs(M4pos-M4_default));
if(M2pos != M4_default)
moveM2(abs(M2pos-M4_default),-(M2pos-M4_default)/abs(M2pos-M4_default));
#endif
Serial.println(Init);
#ifdef CALIBRATE_CHAIR
moveM2(6000,-1);
moveM4(6000,-1);
while(M4_moveComplete != 1 || M2_moveComplete != 1)
{
M4_stallCheck();
M2_stallCheck();
//Serial.print(M4_moveComplete);
//Serial.print(\t);
199
200
Final Documentation
//Serial.println(M2_moveComplete);
}
Serial.println(Maxed Out);
EEPROM.write(0,0);
EEPROM.write(1,0);
EEPROM.write(2,0);
EEPROM.write(3,0);
Serial.println(EEPROM Updated);
M4pos = 0;
M2pos = 0;
if(M4pos != M4_default)
moveM4(abs(M4pos-M4_default),-(M4pos-M4_default)/abs(M4pos-M4_default));
if(M2pos != M2_default)
moveM2(abs(M2pos-M2_default),-(M2pos-M2_default)/abs(M2pos-M2_default));
while(M4_moveComplete != 1 || M2_moveComplete != 1)
{
M4_stallCheck();
M2_stallCheck();
//Serial.print(M4_moveComplete);
//Serial.print(\t);
//Serial.println(M2_moveComplete);
}
Serial.println(Calibrated);
#else
// Read the EEPROM for last position
int M4low = EEPROM.read(0);
int M4high = EEPROM.read(1);
int M2low = EEPROM.read(2);
int M2high = EEPROM.read(3);
M4pos = word(M4high,M4low);
M2pos = word(M2high,M2low);
#endif
}
void loop()
{
if(code_disabled == 1)
{
//Serial.println(Waiting);
Final Documentation
}
else if(code_disabled == 0)
{
readFSRvalues();
EEPROM_Update(M4pos,M2pos);
// implement state machine here
if (Serial.available() > 0 || Serial3.available() > 0)
{
if(Serial.available() > 0)
{
incomingByte = Serial.read();
}
else if(Serial3.available() > 0)
{
incomingByte = Serial3.read();
}
/*
incoming_array[(incoming_count++)%5] = incomingByte;
Serial.print(incoming_array[0]); Serial.print(\t);
Serial.print(incoming_array[1]); Serial.print(\t);
Serial.print(incoming_array[2]); Serial.print(\t);
Serial.print(incoming_array[3]); Serial.print(\t);
Serial.println(incoming_array[4]);
*/
//twist = int(incomingByte);
if(incomingByte == E)
{
EEPROM_Update(M4pos,M2pos);
code_disabled = 1;
}
else if(incomingByte == P)
{
smart_code_disabled = 1;
}
else if(incomingByte == O)
{
smart_code_disabled = 0;
}
201
202
Final Documentation
/*
DELETE Later
//Redefine incoming byte to be D after some time since initiation
if(millis() - codeStartTime > 8000 && forceDflg == 0)
{
incomingByte = D;
forceDflg = 1;
Serial.print(Forcing a D); Serial.print(\t); Serial.println(last_incomingByte);
}
*/
//Redefine incoming byte to be R based on FSR inputs from steering wheel
// FSRs 4 and 5 - Steering front
// FSRs 6 and 10 - Steering back
//Serial.println(last_incomingByte);
if(drive_isLast == 1 && FSR_values[6] < 50 && FSR_values[10] < 50 && FSR_values[4] >
600 && FSR_values[5] > 600)
{
drive_isLast = 0;
incomingByte = R;
}
if(M4_moveComplete == 1 && M2_moveComplete == 1 && incomingByte != last_incomingByte && twist == 0)
{
last_incomingByte = incomingByte;
switch(incomingByte)
{
case Q: //default position reset
if(M4pos != M4_default)
moveM4(abs(M4pos-M4_default),-(M4pos-M4_default)/abs(M4pos-M4_default));
if(M2pos != M2_default)
moveM2(abs(M2pos-M2_default),-(M2pos-M2_default)/abs(M2pos-M2_default));
break;
case D:
if(M4pos != M4_D)
moveM4(abs(M4pos-M4_D),-(M4pos-M4_D)/abs(M4pos-M4_D));
if(M2pos != M2_D)
moveM2(abs(M2pos-M2_D),-(M2pos-M2_D)/abs(M2pos-M2_D));
drive = 1; // for the steering motor
Final Documentation
203
204
Final Documentation
{
trial_count = trial_count + 1;
if(trial_count < timeconst*2)
{
digitalWrite(M3_direc, LOW);
digitalWrite(M3_switch, HIGH);
}
else if(trial_count == timeconst*2)
{
digitalWrite(M3_switch, LOW);
drive = -1;
trial_count = 0;
}
}
// Code for controlling chair twist
// Code for controlling steering mechanism
//Serial.println(twist);
int timeconst2 = 20;
if(M4_moveComplete == 1 && M2_moveComplete == 1 && twist == 1)
{
trial_count2 = trial_count2 + 1;
if(trial_count2 < timeconst2)
{
digitalWrite(M1_direc, HIGH);
digitalWrite(M1_switch, HIGH);
}
else if(trial_count2 == timeconst2)
{
digitalWrite(M1_switch,LOW);
twist = 2;
EEPROM.write(4,twist);
trial_count2 = 0;
}
}
if(M4_moveComplete == 1 && M2_moveComplete == 1 && twist == 2 && FSR_values[8] >
M4_high_thresh)
{
twist = 3;
Final Documentation
EEPROM.write(4,twist);
}
if(M4_moveComplete == 1 && M2_moveComplete == 1 && twist == 3)
{
trial_count2 = trial_count2 + 1;
if(trial_count2 < timeconst2)
{
digitalWrite(M1_direc, LOW);
digitalWrite(M1_switch, HIGH);
}
else if(trial_count2 == timeconst2)
{
digitalWrite(M1_switch, LOW);
twist = 0;
EEPROM.write(4,twist);
trial_count2 = 0;
}
}
// FSR Test code delete later!
Serial.print(FSR_values[4]); Serial.print(\t);
Serial.print(FSR_values[5]); Serial.print(\t);
Serial.print(FSR_values[6]); Serial.print(\t);
Serial.println(FSR_values[10]);
#ifdef DUMB_CODE
// Dumb Code
if(dumb_flg == 0)
{
//moveM2(200,1);
//moveM4(500,1);
//digitalWrite(M3_direc, HIGH);
//digitalWrite(M3_switch,HIGH);
//digitalWrite(trial_pin, HIGH);
dumb_flg = 1;
}
#endif
if(smart_code_disabled == 0)
{
// Smart Code
205
206
Final Documentation
//Serial.println(FSR_values[7]);
if(FSR_values[7] > M4_high_thresh && M4_moveComplete == 1)
{
moveM4(400,1);
//Serial.println(a);
}
else if(FSR_values[7] < M4_low_thresh && M4_moveComplete == 1)
{
moveM4(400,-1);
//Serial.println(b);
}
if(M4_moveComplete == 2 && millis()-M4_moveStopTime > M4_moveStopDeltaTime)
{
M4_moveComplete = 1;
}
//printFSRvalues();
}
// Read EEPROM values
int M4posval = EEPROM.read(0);
int M2posval = EEPROM.read(1);
//Serial.print(M4posval);
//Serial.print(\t);
//Serial.println(M2posval);
}
}
ISR(PCINT0_vect)
{
int debounceTime = 500;
if(millis()-lastTime > debounceTime)
{
switchvar = switchvar + 1;
Serial.println(switchvar);
if(switchvar%2 == 1)
{
Serial3.flush();
code_disabled = 0;
smart_code_disabled = 0;
}
Final Documentation
207
else if(switchvar%2 == 0)
{
smart_code_disabled = 1;
}
lastTime = millis();
if(M4_moveComplete == 2)
{
M4_moveComplete = 1;
}
}
}
ISR(INT4_vect)
{
M4_moveStartTime = millis();
M4_moveLastPos = M4pos;
if(M4_moveDirec == -1)
Audi EVOLVE March 19, 2013
198
M4pos = M4pos - 1;
else
M4pos = M4pos + 1;
//EEPROM_Update(M4pos,M2pos);
//Serial.println(M4_moveComplete);
if(smart_code_disabled == 0)
{
if((M4_moveComplete == 0 && M4_moveDirec == 1 && FSR_values[7] < M4_low_thresh) ||
(M4_moveComplete == 0 &&
M4_moveDirec == -1 && FSR_values[7] > M4_high_thresh))
{
digitalWrite(M4_switch, LOW);
M4_moveComplete = 2;
M4_moveStopTime = millis();
}
}
if(abs(M4pos - M4lastpos) > M4_moveDelta)
{
digitalWrite(M4_switch, LOW);
M4_moveComplete = 1;
208
Final Documentation
}
}
ISR(INT5_vect)
{
M2_moveStartTime = millis();
M2_moveLastPos = M2pos;
if(M2_moveDirec == -1)
M2pos = M2pos - 1;
else
M2pos = M2pos + 1;
//EEPROM_Update(M4pos,M2pos);
if(abs(M2pos - M2lastpos) > M2_moveDelta)
{
digitalWrite(M2_switch, LOW);
M2_moveComplete = 1;
}
}
void readFSRvalues()
{
/*for(int i=0;i<12;i++)
{
PORTD = i; FSR_values[i] = analogRead(FSR_input);
}*/int time_delay = 2;
digitalWrite(MUX_BIT3, LOW); digitalWrite(MUX_BIT2, LOW); digitalWrite(MUX_BIT1,
LOW); digitalWrite(MUX_BIT0, LOW);
delay(time_delay); FSR_values[0] = analogRead(FSR_input);
digitalWrite(MUX_BIT3, LOW); digitalWrite(MUX_BIT2, LOW); digitalWrite(MUX_BIT1,
LOW); digitalWrite(MUX_BIT0, HIGH);
delay(time_delay); FSR_values[1] = analogRead(FSR_input);
digitalWrite(MUX_BIT3, LOW); digitalWrite(MUX_BIT2, LOW); digitalWrite(MUX_BIT1,
HIGH); digitalWrite(MUX_BIT0, LOW);
delay(time_delay); FSR_values[2] = analogRead(FSR_input);
digitalWrite(MUX_BIT3, LOW); digitalWrite(MUX_BIT2, LOW); digitalWrite(MUX_BIT1,
HIGH); digitalWrite(MUX_BIT0, HIGH);
delay(time_delay); FSR_values[3] = analogRead(FSR_input);
digitalWrite(MUX_BIT3, LOW); digitalWrite(MUX_BIT2, HIGH); digitalWrite(MUX_BIT1,
LOW); digitalWrite(MUX_BIT0, LOW);
delay(time_delay); FSR_values[4] = analogRead(FSR_input);
Final Documentation
209
210
Final Documentation
if(M4_moveComplete != 1 && (millis()-M4_moveStartTime > 2000) && (millis()-M4_moveStartTime < 4000) && (abs(M4pos M4_moveLastPos) < 100))
{
Serial.println(M4 Stall);
digitalWrite(M4_switch, LOW);
M4_moveComplete = 1;
}
}
void M2_stallCheck(void)
{
//Stall check
Serial.print(M2pos); Serial.print(\t); Serial.println(M2_moveLastPos);
if(M2_moveComplete != 1 && (millis()-M2_moveStartTime > 2000) && (millis()-M2_moveStartTime < 4000) && (abs(M2pos M2_moveLastPos) < 100))
{
Serial.println(M2 Stall);
digitalWrite(M2_switch, LOW);
M2_moveComplete = 1;
}
}
void moveM4(int counts, int direc)
{
M4_moveComplete = 0;
M4_moveDirec = direc;
M4_moveDelta = counts;
M4_moveStartTime = millis();
M4_moveLastPos = M4pos;
M4lastpos = M4pos;
if(direc == 1)
{
digitalWrite(M4_switch, HIGH);
digitalWrite(M4_direc, HIGH);
}
else if(direc == -1)
{
digitalWrite(M4_switch, HIGH);
Final Documentation
digitalWrite(M4_direc, LOW);
}
}
void moveM2(int counts, int direc)
{
M2_moveComplete = 0;
M2_moveDirec = direc;
M2_moveDelta = counts;
M2_moveStartTime = millis();
Audi EVOLVE March 19, 2013
200
M2_moveLastPos = M2pos;
M2lastpos = M2pos;
if(direc == 1)
{
digitalWrite(M2_switch, HIGH);
digitalWrite(M2_direc, HIGH);
}
else if(direc == -1)
{
digitalWrite(M2_switch, HIGH);
digitalWrite(M2_direc, LOW);
}
}
void EEPROM_Update(int M4position, int M2position)
{
int M4high = highByte(M4position);
int M4low = lowByte(M4position);
int M2high = highByte(M2position);
int M2low = lowByte(M2position);
EEPROM.write(0,M4low);
EEPROM.write(1,M4high);
EEPROM.write(2,M2low);
EEPROM.write(3,M2high);
}
void setPwmFrequency(int pin, int divisor) {
byte mode;
if(pin == 5 || pin == 6 || pin == 9 || pin == 10) {
211
212
Final Documentation
switch(divisor) {
case 1: mode = 0x01; break;
case 8: mode = 0x02; break;
case 64: mode = 0x03; break;
case 256: mode = 0x04; break;
case 1024: mode = 0x05; break;
default: return;
}
if(pin == 5 || pin == 6) {
TCCR0B = TCCR0B & 0b11111000 | mode;
} else {
TCCR1B = TCCR1B & 0b11111000 | mode;
}
} else if(pin == 3 || pin == 11) {
switch(divisor) {
case 1: mode = 0x01; break;
case 8: mode = 0x02; break;
case 32: mode = 0x03; break;
case 64: mode = 0x04; break;
case 128: mode = 0x05; break;
case 256: mode = 0x06; break;
case 1024: mode = 0x7; break;
default: return;
}
TCCR2B = TCCR2B & 0b11111000 | mode;
}
}
9.10.3 Kinect Code
Functional_System_Prototype.pde
import SimpleOpenNI.*;
import processing.serial.*; //import the Serial library
Serial port; // declare a new string called serial . A string is a sequence of characters (data
type know as char)
//SkeletonPoser turn;
SkeletonPoser drive;
SkeletonPoser retract;
//SkeletonPoser swipe;
SimpleOpenNI kinect;
Final Documentation
213
char state = q;
void setup() {
port = new Serial(this, /dev/tty.usbserial-A6003SBp, 9600); // initializing the object by assigning a port and baud rate (must match that
of Arduino)
size(640, 480);
kinect = new SimpleOpenNI(this);
kinect.enableDepth();
kinect.enableUser(SimpleOpenNI.SKEL_PROFILE_ALL);
kinect.setMirror(true);
// initialize the pose object
// turn = new SkeletonPoser(kinect);
drive = new SkeletonPoser(kinect);
retract = new SkeletonPoser(kinect);
// swipe = new SkeletonPoser(kinect);
/*
// rules for the right arm
turn.addRule(SimpleOpenNI.SKEL_RIGHT_HAND, PoseRule.BELOW, SimpleOpenNI.
SKEL_RIGHT_ELBOW);
turn.addRule(SimpleOpenNI.SKEL_RIGHT_HAND, PoseRule.RIGHT_OF, SimpleOpenNI.
SKEL_RIGHT_ELBOW);
turn.addRule(SimpleOpenNI.SKEL_RIGHT_ELBOW, PoseRule.BELOW, SimpleOpenNI.
SKEL_RIGHT_SHOULDER);
turn.addRule(SimpleOpenNI.SKEL_RIGHT_ELBOW, PoseRule.RIGHT_OF, SimpleOpenNI.
SKEL_RIGHT_SHOULDER);
turn.addRule(SimpleOpenNI.SKEL_RIGHT_HAND, PoseRule.BEHIND, SimpleOpenNI.
SKEL_RIGHT_ELBOW);
turn.addRule(SimpleOpenNI.SKEL_RIGHT_ELBOW, PoseRule.BEHIND, SimpleOpenNI.
SKEL_RIGHT_SHOULDER);
*/
drive.addRule(SimpleOpenNI.SKEL_RIGHT_HAND, PoseRule.ABOVE, SimpleOpenNI.
SKEL_RIGHT_ELBOW);
drive.addRule(SimpleOpenNI.SKEL_RIGHT_ELBOW, PoseRule.ABOVE, SimpleOpenNI.
SKEL_RIGHT_SHOULDER);
drive.addRule(SimpleOpenNI.SKEL_LEFT_HAND, PoseRule.ABOVE, SimpleOpenNI.
SKEL_LEFT_ELBOW);
drive.addRule(SimpleOpenNI.SKEL_LEFT_ELBOW, PoseRule.ABOVE, SimpleOpenNI.
SKEL_LEFT_SHOULDER);
retract.addRule(SimpleOpenNI.SKEL_RIGHT_ELBOW, PoseRule.BEHIND, SimpleOpenNI.
214
Final Documentation
SKEL_RIGHT_HAND);
retract.addRule(SimpleOpenNI.SKEL_RIGHT_SHOULDER, PoseRule.BEHIND, SimpleOpenNI.SKEL_RIGHT_ELBOW);
retract.addRule(SimpleOpenNI.SKEL_RIGHT_ELBOW, PoseRule.BELOW, SimpleOpenNI.
SKEL_RIGHT_HAND);
retract.addRule(SimpleOpenNI.SKEL_RIGHT_HAND, PoseRule.ABOVE, SimpleOpenNI.
SKEL_LEFT_HAND);
retract.addRule(SimpleOpenNI.SKEL_RIGHT_ELBOW, PoseRule.ABOVE, SimpleOpenNI.
SKEL_LEFT_ELBOW);
retract.addRule(SimpleOpenNI.SKEL_LEFT_HAND, PoseRule.BELOW, SimpleOpenNI.
SKEL_TORSO);
retract.addRule(SimpleOpenNI.SKEL_RIGHT_HAND, PoseRule.RIGHT_OF, SimpleOpenNI.
SKEL_LEFT_HAND);
retract.addRule(SimpleOpenNI.SKEL_RIGHT_ELBOW, PoseRule.BEHIND, SimpleOpenNI.
SKEL_RIGHT_HAND);
retract.addRule(SimpleOpenNI.SKEL_RIGHT_ELBOW, PoseRule.IN_FRONT_OF, SimpleOpenNI.SKEL_RIGHT_SHOULDER);
/*
swipe.addRule(SimpleOpenNI.SKEL_RIGHT_HAND, PoseRule.LEFT_OF, SimpleOpenNI.
SKEL_LEFT_HAND);
swipe.addRule(SimpleOpenNI.SKEL_RIGHT_ELBOW, PoseRule.LEFT_OF, SimpleOpenNI.
SKEL_RIGHT_SHOULDER);
swipe.addRule(SimpleOpenNI.SKEL_RIGHT_ELBOW, PoseRule.IN_FRONT_OF, SimpleOpenNI.SKEL_LEFT_ELBOW);
*/
strokeWeight(5);
state = q;
}
void draw() {
background(0);
kinect.update();
image(kinect.depthImage(), 0, 0);
IntVector userList = new IntVector();
kinect.getUsers(userList);
if (userList.size() > 0) {
int userId = userList.get(0);
if( kinect.isTrackingSkeleton(userId)) {
// check to see if the user
Final Documentation
// is in the pose
/* if(turn.check(userId))
{
//if they are, set the color white
stroke(255);
state = T;
println(state);
} */
if(drive.check(userId))
{
//if they are, set the color blue
stroke(0,0,255);
state = D;
}
/* else if(retract.check(userId))
{
//if they are, set the color red
stroke(255,0,0);
state = R;
}
else if(swipe.check(userId))
{
//if they are, set the color yellow
stroke(250,250,19);
state = S;
} */
else
{
// otherwise set the color to green DEFAULT STATE
stroke(0,255,0);
state = q;
}
// draw the skeleton in whatever color we chose
drawSkeleton(userId);
port.write(state);
}
}
}
void drawSkeleton(int userId) {
215
216
Final Documentation
Final Documentation
217
218
Final Documentation
}
void addRule(int fromJoint, int jointRelation, int toJoint){
PoseRule rule = new PoseRule(context, fromJoint, jointRelation, toJoint);
rules.add(rule);
}
boolean check(int userID){
boolean result = true;
for(int i = 0; i < rules.size(); i++){
PoseRule rule = (PoseRule)rules.get(i);
result = result && rule.check(userID);
}
return result;
}
}
class PoseRule {
int fromJoint;
int toJoint;
PVector fromJointVector;
PVector toJointVector;
SimpleOpenNI context;
int jointRelation; // one of:
static final int ABOVE = 1;
static final int BELOW = 2;
static final int LEFT_OF = 3;
static final int RIGHT_OF = 4;
static final int IN_FRONT_OF = 5;
static final int BEHIND = 6;
static final int SAME_HEIGHT = 7;
PoseRule(SimpleOpenNI context, int fromJoint, int jointRelation, int toJoint){
this.context = context;
this.fromJoint = fromJoint;
this.toJoint = toJoint;
this.jointRelation = jointRelation;
fromJointVector = new PVector();
toJointVector = new PVector();
}
boolean check(int userID){
// populate the joint vectors for the user were checking
Final Documentation
219
220
Final Documentation
Final Documentation
Serial.begin(9600);
}
void outSequence()
{
// Debug command
Serial.println(OutSequence);
// Large motor sequence
for(i = 0; i < 6;i ++)
{
if(i == 0)
largeMotor.write(99);
if(i == 5)
221
222
largeMotor.write(84);
delay(106);
}
largeMotor.write(94);
// Syncing time
delay(10);
// Small motor sequence
for(pos = inposition; pos < outposition; pos += 1)
{
smallMotor.write(pos);
delay(15);
}
}
void inSequence()
{
// Debug command
Serial.println(InSequence);
// Small motor sequence
for(pos = outposition; pos >= inposition; pos-=1)
Final Documentation
Final Documentation
{
smallMotor.write(pos);
delay(15);
}
// Syncing time
delay(10);
// Large motor sequence
for(i = 0; i < 5;i ++)
{
if(i == 0)
largeMotor.write(80);
if(i > 5)
largeMotor.write(97);
delay(110);
}
largeMotor.write(94);
}
void loop(){
// Button bouncer while polling
223
224
Final Documentation
buttonState = digitalRead(buttonPin);
delay(10);
if (buttonState == digitalRead(buttonPin))
{
// Debug command
Serial.println(buttonState);
// Random delay
delay(100);
if (buttonState == LOW) {
// LED confirmation of button for debugging
digitalWrite(ledPin, HIGH);
if(wheelStateIn == true) {
outSequence();
wheelStateIn = false;
}
else {
largeMotor.write(94);
}
}
Final Documentation
else {
// LED confirmation of button for debugging
digitalWrite(ledPin, LOW);
if(wheelStateIn == false)
{
inSequence();
wheelStateIn = true;
}
else {
largeMotor.write(94);
}
}
}
// Securing motor to stop if malfunctioning
largeMotor.write(94);
}
225
226
Final Documentation
7.14 Overview
The
knowledge
gained
from
these
Final Documentation
227
Growth
includes
incremental
Audi A3 Series
228
Final Documentation
Emerging
Growth
New
Growth
Core
Growth
Focus of our project - Adapted from Growth Agenda Limited
Final Documentation
229
includes
experimenting
current
Test
Learn from prototypes
ME310
Design Process
Needfinding and
Benchmarking
Understand the users and
design space
Prototype
Brainstorm
230
Final Documentation
Observing
Others
Self Observation
Observation
Context
Ideal Persona
Needfinding
Interviews &
Surveys
Physical
Benchmarking
Experimental
Functional
Information
Search
Final Documentation
231
continually
growing.
than
interact
with
digital
spending
time
cars
It is an extrapolation of
smartphones.
232
Final Documentation
primary fuel
Final Documentation
233
3d Printing
234
Final Documentation
Augmented Reality
applied on.
years.
Final Documentation
235
236
Final Documentation
Final Documentation
237
238
Final Documentation
7.18 Needfinding
rI
se
U
Auto
Piloted
Car Cabin
ks
pa
Cars
or
W
Drivers
s
er ce
riv n
D ista
s
As
ce
Infrastructure
nt
Si
er
n
io
ot ss
M cne
fa
ce
Users
Final Documentation
239
Motion sickness is
highly subjective
Observations
minutes)
experiment expedited it
7.18.2 Self-Observation
No Visuals Experiment
No Sound Experiment
240
Final Documentation
Observations
in this case
Test
person
was
more
focused
sickness
Observations
Conclusions/Lessons Learned
Observations
immediately
after
looking
Final Documentation
241
7.18.3 Interviews
Observation
Bus interviews
upcoming turns
Conclusions/Lessons Learned
242
Final Documentation
Keynotes
of the road
time to rest
Key Notes
Final Documentation
243
CarLab Interview
Key Notes
passenger.
Cultural
considerations
must
be
oriented.
movements
244
Final Documentation
Final Documentation
245
246
Final Documentation
Regional Airport
control.
sensitive)
Final Documentation
247
Conclusions
On longer trips, pilots perform activities like
reading and playing games on electronic
devices when in autopilot. Having a
comfortable and flexible cabin space is
important to be able to enjoy the riding
experience. On the transition side, the
interface with which the pilot interacts should
be more intuitive, non-redundant, and more
user friendly.
248
Final Documentation
7.18.4 EMT
(Emergency Medical Technician)
ambulance.
Key Notes
Conclusions/Lessons Learned
IV.
activity is key.
Shelves
Patient Bed
Seat Belts
Final Documentation
249
7.18.5 Survey
To discover users potential needs while
driving or riding a car, the team created a
survey about the current drivers driving
habits, their favorite activities inside a
vehicle, and unpleasant moments they have
experienced as a driver or a passenger.
The survey has 9 questions with no direct
indication of autonomous driving. It was sent
out to our Facebook friends.
(Figure 28: Servey Results)
Results
Females
of:
enjoy
privacy,
driving
easy
because
door-to-door
250
Final Documentation
18 - 26 (18)
Male (38)
27 - 35 (13)
36 - 45 (1)
Female (24)
18 - 26
48
77%
27 - 35
13
21%
27 - 35
2%
Female
24
39%
Male
38
61%
How often do you feel motion sick while reading in the following vehicles - Metro?
Always
Sometimes
Always
5%
Sometimes
10%
Hardly
53
85%
Hardly
0
11
22
33
44
55
How often do you feel motion sick while reading in the following vehicles - Plane?
Always
Sometimes
Hardly
0
11
22
33
44
55
Always
0%
Sometimes
15%
Hardly
53
85%
Final Documentation
251
How often do you feel motion sick while reading in the following vehicles - Car front seat?
Always
Sometimes
Always
15%
Sometimes
13
21%
Hardly
40
65%
Hardly
0
16
24
32
40
How often do you feel motion sick while reading in the following vehicles - Car back seat?
Always
Always
15
24%
Sometimes
Sometimes
22
35%
Hardly
25
40%
Hardly
0
10
15
20
25
How often do you feel motion sick while reading in the following vehicles - Bus?
Always
Sometimes
Always
15%
Sometimes
27
44%
Hardly
26
42%
Hardly
0
10
15
20
25
30
How often do you feel motion sick while reading in the following vehicles - Train?
Always
Sometimes
Hardly
0
10
20
30
40
50
Always
3%
Sometimes
10
16%
Hardly
50
81%
252
Final Documentation
61
98%
49
79%
Listening to music
61
98%
Mobile gaming
38
61%
Reading
42
68%
29
47%
55
89%
55
89%
Drinking alcohol
27
44%
tasking)
Changing clothes
39
63%
Putting on make-up
14
23%
Other
18
29%
parking
12
24
36
48
60
72
People may select more than one checkbox, so percentages may add up to more than 100%
Final Documentation
253
7.19 Benchmarking
cues
and workspace
Trust
Confirmation
Cues
Wokspace
Benchmarking
Motion
Sickness
Transition
Steering
254
Final Documentation
Observations
Conclusions/Insights
There are several insights that came from
benchmarking a gesture-based system. A
gesture based steering system can work if
the reaction time between the gesture and
response is minimized for best performance.
There also would be a learning curve
associated with this system. A training mode
can be implemented as a guide to follow
system to help the users get familiar with the
system and gain more confidence, but need
Final Documentation
255
Conclusions
Observations
properly.
once.
256
Final Documentation
when
the
voice
easier
Became
Conclusions
Several insightful conclusions were brought
up with this benchmarking idea. The voice
based steering functionality is not effective
since appropriate feedback and confirmation
cues were not provided. This leads to trust
issues and the driver feeling unsafe with
the situation. Although the voice commands
were clear and concise (left, right, hard
Observations
Final Documentation
257
Blindfolded Test
Observations
doing another.
another
258
Final Documentation
Conclusions
Segway benchmarking
Final Documentation
Observations
Conclusions
In order to make the driving experience
easy to learn, the team might try to use body
movements as one of the steering methods.
Being able to see the vehicle from above is
really useful in precise driving. If steering
is logical and similar to already learned
motoric body functions, it does not take long
to learn (it took about 2 minutes to learn to
drive Segways).
7.19.2 Motion Sickness Benchmark
The purpose of this benchmark was
to determine whether motion sickness
was an issue if no visuals of the outside
environment were given. The team initially
believed that focusing on a fixed visual while
having moving visuals in their peripherals
caused motion sickness. By eliminating the
moving visuals from the peripherals, motion
sickness could possibly be reduced. This
experiment involved covering the windows
of a car so the passenger in the back seat
could not see out of the windows towards
the front of the car. The passenger sat in the
back and read, while being driven around
campus. (Figure 35)
259
260
Final Documentation
Observations
Conclusions
From our initial beliefs, motion sickness
Benchmarking
Final Documentation
261
Observations
Conclusions
inspection.
stop button
doubled
was inserted.
The
operator
frequently
262
Final Documentation
Conclusions
From this experience, it seemed obvious
that a gradual shift of control is probably
better so that the drivers are aware of
the surrounding environments and of the
vehicles control actions. This way the driver
can align themselves or the controls in that
direction. An incremental rather than a direct
transition of controls would allow the driver
to get acclimated with what is happening
around them.
Final Documentation
263
fast)
3. Console lit up to indicate in advance
when something out of the ordinary
was going to happen (i.e. speed bump,
sharp turn, sudden braking)
Observations
264
Final Documentation
Conclusions
Compared to the light indicator experiment,
the voice indicator seemed to be more
effective. User acceptability will still depend
on the type and the amount of information
relayed and how intrusive it is when doing
desired activities inside the car during
autonomous mode. The interface with
which the user interacts should maximize
the enjoyment of the riding experience but
still allow the user to be aware of whats
happening around them.
Final Documentation
265
Observations
are
various
assistive
driving
to stop.
distance was.
ACC Control
Panamera Dashboard
266
Final Documentation
Conclusions
Observations
good
Observations
Conclusions
parallel parking.
weather conditions.
Conclusions
The display of information on top of a realtime image of the actual environment was
very effective for parking and driving in
reverse during low speed activities. Although
Final Documentation
267
Night VIsion
Lane Assistant
Conclusions
with it engaged.
Observations
268
Final Documentation
Camera
Audi A8 Equipment
Display
Camera
Final Documentation
269
Conclusions
In the future, computers will be able to
combine multiple sources of information
so that car will have better awareness of
its surroundings than a human driver. The
future car will most likely be able to predict
and calculate many different scenarios of
what will happen while driving.
270
Final Documentation
experiences.
Therefore
critical
Final Documentation
271
prototype?
safely?
during driving?
Display
Switch
272
Final Documentation
Gradual Transition
Transition
Match
Match
Initiated
Manual
Autonomous
Mode
Mode
Direct Transition
Transition
Initiated
Match
Autonomous
Mode
Gradual and Manual Transition Transfer Sequences
Manual
Mode
Final Documentation
273
Gradual
Direct
Pedal Matching
Simultaneous Matching
Steering Matching
Target
Regions
Step 1
Step 2
Observations
Users did not feel like driving and felt
unsafe during both the transition
sequences. People are more engaged in the
matching task than driving which is
supposed to be the primary task in
manual mode
In the gradual transition, once the users
are given the both the steering and pedals
in step 2, they neglect pedals completely
during steering matching
Matching error for the entire transition
sequence is lower for the direct transition.
Conclusions
The interactive interface was too distracting
during driving and it needs to blend with the
environment more easily. Visual
representation of information is too intrusive
during driving.
direct transition
274
Final Documentation
Interface
Environment
Environment
Interface
Environment
Environment
Final Documentation
275
Ideal Transition
Interface
Environment
car controller.
276
Final Documentation
Observations
pedals.
Final Documentation
277
278
Final Documentation
Observations
1. Control setting: four direction as
(Figure 50)
one hand
Final Documentation
279
1 .Control setting
Accelerate
Right
Left
Brake
2 .Control setting
Accelerate
Right
Left
Brake
280
Final Documentation
Tilting Feet
The team wanted to simulated Segway-like
-steering for this prototype. In this tilting feet
setup the car was steered with tilting feet
to simulate the intuitiveness of a Segway.
(Figure 51)
Observations
Final Documentation
281
from CFP
Opportunities
282
Final Documentation
Reconfigurable Workspace
Workspace prototyping is an important
desired activities
ASAP
avoid discomfort.
Observations
Final Documentation
283
Interactive
Windshield
Movable
Chair
Cabin Activity
Space
Reconfigurable Workspace
284
Final Documentation
Results
Mobile Workspace
games on board.
Test Setup
Final Documentation
285
286
Final Documentation
the
design
specifications
and
gradual
from
or
Transition Switch
direct
transition
Display Construction
Final Documentation
287
288
Final Documentation
Switch
Switch Contrustion
Final Documentation
289
3V3 5V
Vin
RST
D13
AREF
D12
D11
Arduino
D9
D8
D7
D10
D6
A0
D5
A1
D4
A2
D3
A3
D2
A4
D1
D0
A5
GND
290
Final Documentation
manual mode.
Arduino Flowchart
Stop
Select Mode
Write data
to file
Recording
Outside
threshold
Accuracy
achieved
Remove
Display
Loop
counter++
within
threshold
Wait for
switch
Switch to
manual
recieved
Display recorded
and real time data
Final Documentation
291
Basic Setup
Basic Setup - TV, Audi A4 car chair, Playstation 3, Colin Mcrae Dirt for PS3
292
Final Documentation
Final Documentation
293
Test Setup:
Small joystick control (Figure 62)
Large joystick control: Saitek Aviator PC
(Figure 63)
Thrustmaster Experience Racing Wheel
with Pedals (Figure 64)
Sponge (Figure 65)
Duct Tape (Figure 66)
Reboard
Racing Wheel
Sponge
Duct Tape
294
Sponge
Reboard
Final Documentation
Final Documentation
295
Controllers
Steering
Small Joystick
Buttons
Analog control
Large Joystick
Analog control
Large Joystick
Buttons
Analog control
Pedals
Buttons
Feet tilting
Analog control
296
Final Documentation
7.22 Needfinding
7.22.1 Trip to Germany
After Christmas break, the team got an
opportunity to visit Germany and had the
first meet with corporate partners from
Audi, which was the main purpose of this
Appendix.
1. BMW Welt
2. BMW Museum
3. Audi Museum (Figure 68)
4. 1st Meeting with Audi contacts Lorenz
Bohrer and Tilo Koch
sophistication,
sportiness
and
progressiveness
Final Documentation
297
298
Final Documentation
Observations
Final Documentation
299
Results
light
blue),
transparent
by 12 testers.
and futuristic
always needed.
touch screens.
by 16 testers.
persons.
1.
3.
Dashboad
Questionaires
2.
4.
5.
6.
300
Final Documentation
Changing
Manual / Autonomous
Brake buttons
Acceleration
Forward, Reverse
and U-turn mode
Rotatable Chair
Final Documentation
7.23 Benchmarking
7.23.1 Akka Car Concept
301
Steering
autonomous mode.
in order to drive.
modes.
Performance
Mode changing
manually.
302
Final Documentation
Final Documentation
303
Reconfiguro Setup
304
Final Documentation
Control Interfaces
APPENDIXSection 9.8.3.
Final Documentation
305
306
Final Documentation
Testing Procedure
Final Documentation
307
Experience
Flow 1 and 2
Experience
Flow 3
Behind the
scenes
User comes
Introduction story
marrated. Schedule
given.
User comes
Introduction story
marrated. Schedule
given.
User selects
configuration from
the tablet interface
User answers
preference survey
Long Journey to
work started based
on the configuration
chosen.
Users go shopping
and return to find
space reconfigured
for them.
Long Journey to
work started. Car
prompts user for
things they would
like to change.
Changes are made
by making a quick
stop.
Cabin space
reconfigured based
on what user wants
and team is in
driving position.
Two members of
theam in the van.
One member
follows in another
car with spare
furniture.
Cabin space is
reconfigured based
on what user wants
and team is in
driving position
308
Final Documentation
Results
space
LifeSync Interface:
users side
on the configuration
Final Documentation
309
suggestions
the
for
changes
to
for romancing.
General Experience Observations:
cabin space.
Maintaining
visuals
not
just
for
car.)
personal information.
front.
310
Final Documentation
constrained a lot.
activities?
Car
user
confidentiality
what
Conclusion
movement.
Final Documentation
311
Setup
solution
gestures
312
Final Documentation
Observations
Final Documentation
313
314
Final Documentation
Observations
Setup
sideways.
Conclusion / Lessons Learned
In the second test setup the users neck
Final Documentation
315
outlook.
316
Final Documentation
Magneto
suggested:
Cars roof
Final Documentation
the car
Conclusions / Lessons Learned
User testing is a fundamental way of getting
feedback and ideas from prototypes.
Prototype does not have to be that
sophisticated to open a conversation and
communicate the idea. Here we learned
that building and testing more is learning
more. Ideas generated by users was listed
317
318
Final Documentation
Anticipatory Chair
Final Documentation
319
320
Final Documentation
user test.
Technical Results
Final Documentation
321
Force Sensors
322
Final Documentation
Observations
position.
transitions easier.
Results
The team discovered that force sensors
seem like a fairly feasible way to identify
simple user intentions like pushing back
on the chair to recline, but a higher density
of sensors in conjunction with additional
types of sensors will be needed in order to
better distinguish between more complex
intentions like the desire to socialize with
Sitting up =
0 force read
Final Documentation
323
Sitting up =
INCREASE in force
Force Pattern 1
324
Final Documentation
Final Documentation
325
Pushing on seat
back = slight
INCREASE in force
Force Pattern 3
What should I do
326
Final Documentation
Situation
explanation
Debriefing the
test with the
user
Final Documentation
Autonomous mode
Boring
road
Manual mode
Fun
road
327
Autonomous mode
Manual mode
Trigger for
Transition
Fun
road
Manual mode
Autonomous mode
Trigger for
Transition
Boring
road
Test Results
Observations
would.
328
Final Documentation
30
Amount in Total
25
1st Gesture
Suggestion Amount
20
2nd Gesture
Suggestion Amount
3rd Gesture
15
Suggestion Amount
4th Gesture
10
Suggestion Amount
5th Gesture
Suggestion Amount
Touch
VoiceG
estureE
ye
Recognition
Brain
Waves
Suggestion Genre
Categories
Touch
Voice
Gesture
Eye
Rec.
Brain
Waves
Suggestions
in Total
Amount in Total
23
11
44
14
19
11
1st Gesture
Suggestion Amount
2nd Gesture
Suggestion Amount
3rd Gesture
Suggestion Amount
4th Gesture
Suggestion Amount
5th Gesture
Suggestion Amount
Final Documentation
another try.
Debrief Feedback
329
330
Final Documentation
Final Documentation
331
gestures.
332
Calibrated Position
Final Documentation
Drive Position
Retract Position
Final Documentation
333
in.
natural
sandwich threshold
body commands.
mode.
Other Considerations:
334
Final Documentation
that :
mode,
autonomously,
prototyped.
Final Documentation
335
Test Process
autonomous mode.
trigger first.
Observations
steering wheel.
Conclusions
etc.
336
Final Documentation
Anticipatory Chair
Motor Control
Signals(black connector)
+12VDC
Motor 4 P2
11
N/C
N/C
Connector Diagrams
GND
Motor 3 P2
Motor 2 P2
Motor 3 P1
Motor 1 P2
Motor 2 P1
Motor 1 P1
Motor 4 P2
Final Documentation
337
Motor Sensing
Signals(blue connector)
1
2
6
9
10
12
13
14
15
Red Conn P6
Red Conn P7
ACC Pin4
Motor 4 Encoder
Motor 1/2/3 GND
Motor 2 Encoder
Motor 4 GND
Motor 1 Encoder
Motor 3 Encoder
17
19
22
23
29
Motor 1
(Front bottom tilt)
1
2
Power
Return
Motor 2
(Chair slide)
Encoder
GND
4
3
ACC Pin3
ACC Pin1
ACC Pin5
ACC Pin2
Red Conn P2
1
2
Power
Return
Motor 3
(Back bottom tilt)
1
2
Power
Return
Motor 4
(Chair tilt)
Encoder
GND
4
3
6
7
1 - Blue conn P1
2 - Blue conn P28
3 - N/C
4 - +12VDC
5 - GND
Connector Diagrams
Encoder
GND
4
3
3
5
10
6 - +12VDC
7 - Blue conn P2
8 - Seat Belt
9 - N/C
10 - Seat Belt
1
2
Power
Return
Encoder
GND
4
3
Adjustment Controller
Connector
5
1 - Back tilt
2 - Chair slide
3 - GND
4 - Bottom height
5 - Bottom tilt
338
Final Documentation
To Controller Input
S?
SW - SPDT
450
700
GND
team designed.
Final Documentation
339
Force Sensors
340
: FSR Proto
Final Documentation
+5VDC
R6
FSR
3
R7
3.3K
GND
Final Documentation
341
Anticipatory System
342
Final Documentation
IR Camera (Kinect)
Arduino
Final Documentation
343
+12VDC
Enable power
D1
1N5817
GND
K1
ORWH-SH-105H-3F
(Relay SPDT)
D3
Motor control
GND
D3
1N5817
K2
RTE24005F
(Relay DPDT)
GND
M
Motor
prior to selecting parts to build the relay
344
Final Documentation
found that allowed a low frequency squarewave pulse to be transmitted on the line.
Final Documentation
345
R2
1K
GND
+5VDC
R2
1K
R4
R5
+5VDC
3
6
1K
470
+5VDC
U1A
LP339
R3
Res1
OUTPUT
1K
12
GND
GND
Figure 111: Motor Position Sensing Board 2
T1
T2
T3
T5
T4
T6
B1
B2
B3
B5
B4
B6
346
Final Documentation
FSR Board
CD4067BE
OUT
T2
T1
B6
B5
B4
B3
B2
B1
CONTROL_A
CONTROL_B
GND
OUT
IN7
IN6
IN5
IN4
IN3
IN2
IN1
IN0
A
B
VSS
VDD
IN8
IN9
IN10
IN11
IN12
IN13
IN14
IN15
INHIBIT
C
D
+5VDC
T3
T4
T5
T6
GND
CONTROL_C
CONTROL_D
TI - CD4067BE
Final Documentation
347
Setup
Kin
ect
FO
into
autonomous
mode,
Dashboard
348
Final Documentation
Calibrated Position
Drive Position
Retract Position
Final Documentation
349
Rotational Mechanism
The rotation mechanism allowed for users
to reach the backseat for an item or for
parents to reach back and unbuckle their
childs car seat. Placing the chair base on
a ball bearing turntable, which was also
attached to a motor base, compromised
the rotation mechanism as seen in Figure
Rotational mechanism subcomponent. This
motor base was where we also mounted our
motor and gear. Attached to the chair base
was a large gear, which interacts with the
gear mounted to the motor. This system
only allowed for a 30-degree turn, and the
gears .5 thick laser-cut acrylic pieces as
seen in Figure Laser cut gears for rotational
mechanism. Gear profile information and
motor specifications can be found in Section
Laser Cut Gears
9.10.4 Appendices.
Motor
Seat Base
Motor Gear
Seat Gear
350
Final Documentation
Steering Mechanism
The team designed a retractable steering
wheel using a crank slider mechanism. The
main concept is that the steering wheel lies
flush against the dashboard when not in
driving mode. This default configuration has
been shown in Figure Steering wheel tucked
away (disappeared) when in autonomous
mode. There is also a flap, which the users
can use as a work desk if they want to use
that space in autonomous mode to perform
some activity.
As soon as the controller gets a driving
Final Documentation
351
chair positions.
352
Final Documentation
R
Steering
Wheel
D
Smart
Chair
R
D - Driving Mode
Q - Default
R - Retract Mode
Final Documentation
353
354
The Frame
The base of the prototype was a chair from
a Fiat Doblo that was bolted to a wooden
frame. The measurements of the mock-up
cabin were taken from the Audi A8. Figure
124 displays a member of the group setting
the layout.
The frame was built already for an earlier
Funky prototype, but the system to control
the steering wheel was incorporated. The
team had two ideas how to make the steering
to appear as shown in Figure 125. One idea
was to have a cylinder-rolling dashboard
that had the steering wheel appear from the
bottom of the dashboard between the legs
of the driver. The concept was initially tested
but was too large to fit in a normal sized car.
The team took measurements from a BMW
Final Documentation
Final Documentation
355
48cm
24cm
64cm
38cm
77cm
50cm
356
Final Documentation
Steering Mechanism
and 129)
Servo Casing
Final Documentation
357
358
Final Documentation
Final Documentation
359
Electronics
The electronics on breadboard contains
Teensy 2.0++, a push button for debug,
wiring for the seat belt switch, motor
controller(pin 16) and servo(pin 15) wiring.
360
Final Documentation
Final Documentation
361
362
Final Documentation