IEEE Robotics & Automation Magazine - June 2016 - 72

(x0, y0)

| a ao |
h = * Threshold if | a ao | 1 Threshold,
1
otherwise

(x1, y1)

Dwall
y1 − Dwall

αwall
x1

a

Wall_lead

y0

x1 + Wall_lead − y0
Figure 4. An abstract right triangle for computing the wall-following
heading.

opportunity for the students to observe, analyze, and collaborate to find solutions:
● It detects objects to the side that pose no collision threat.
* The solution was to limit the lengths of the ultrasound data linearly by measurement angle so that
forward measurements have greater range than side
measurements.
● The sum of the vectors always points forward and does not
adequately deflect away from obstacles.
* The solution was to shift each vector in the opposite
direction. Thus, detected obstacles can result in negative vectors. A panic element to the shift was also
adopted to give larger negative vectors in the event of
a near collision.
Autonomous
Behaviors
One of the parallel executing loops of the host condemonstrated their
troller program contains a
finite state machine (FSM)
program to solve the
where the robot's algorithmic behaviors are implecul-de-sac problem, they
mented. With each loop
iteration, an updated
consistently expressed a
heading and velocity is
sense of accomplishment. calculated so that the
robot drives according
to a specified behavior.
The FSM is a natural construct for implementing autonomous behaviors. Implementing the FSM was also a valuable educational experience for the students.

After students successfully

Blending Headings
In both the go-to goal and wall-following behaviors with
obstacle avoidance, the final steering heading is a blended
combination of two angles: αao for avoid-obstacle and β
for the behavior component. When there is little threat of
a collision, | a ao | . 0 and the behavior component dominate. When the risk of a collision is increased, | a ao |
becomes larger and the robot is diverted. We define a
weighting variable, h:
72

*

IEEE ROBOTICS & AUTOMATION MAGAZINE

*

jUNE 2016

= h · a ao + (1 - h) ·b.

(8)
(9)

Pure obstacle avoidance, a = a ao , occurs when | a ao | $
Threshold. The Threshold is a tunable parameter for
each behavior.
Go-To Goal
The go-to goal behavior uses the robot's pose and the
location of a goal. A simple trigonometry calculation
provides the direction to the goal, z g. The robot heading
is then simply a g = z g - i. Adding blended obstacle
avoidance simply requires using the VI to compute the
steering heading with (8) and (9) using b = a g and
Threshold = r/4 . The only difficulty that any students
had with this quick assignment was making sure that the
robot stopped at the goal.
Wall Following
Autonomous controlled mobile robots require a wall-following behavior to maneuver around large concave obstacles. Convex obstacles may be avoided using a blended
go-to goal with avoid-obstacle behavior. However, when
inside a large concave obstacle, such as a cul-de-sac, the
go-to goal-based behavior causes the robot to become
stuck in a local minimum, where it wanders in the cul-desac but refuses to drive away from the goal as is needed to
exit the cul-de-sac. When a wall-following behavior is
used, the robot can follow the contours of the obstacle to
move around it and then proceed toward the goal location.
The algorithm used to achieve wall-following behavior
uses the blended avoid-obstacle concept along with a
behavioral heading, αwall, which follows the contours of
the wall. The algorithm for computing the behavioral
heading was original. It was developed specifically to be a
simple algorithm for students to understand and implement. Despite its simplicity, the overall algorithm has demonstrated good performance for the intended application.
The behavioral heading calculation uses an abstract right
triangle, shown in Figure 4. The side lengths of the triangle
derive from the first two ultrasound measurements from the
side of the robot facing the wall. The wall-following heading
is then simply an angle calculation from the triangle. Using
the known measurement angles, the first two measurements
are converted to points in the robot's local coordinate frame.
The wall-following heading is given by
= a tan 2 ((| y 1 | - D wall),
(x 1 + Wall_lead -| y 0 |))
if the wall is to the left
t
a wall = )
-t if the wall is to the right.
t

The relationship of |y1| to Dwall reports the robot's current
position relative to what is detected about the approaching



Table of Contents for the Digital Edition of IEEE Robotics & Automation Magazine - June 2016

IEEE Robotics & Automation Magazine - June 2016 - Cover1
IEEE Robotics & Automation Magazine - June 2016 - Cover2
IEEE Robotics & Automation Magazine - June 2016 - 1
IEEE Robotics & Automation Magazine - June 2016 - 2
IEEE Robotics & Automation Magazine - June 2016 - 3
IEEE Robotics & Automation Magazine - June 2016 - 4
IEEE Robotics & Automation Magazine - June 2016 - 5
IEEE Robotics & Automation Magazine - June 2016 - 6
IEEE Robotics & Automation Magazine - June 2016 - 7
IEEE Robotics & Automation Magazine - June 2016 - 8
IEEE Robotics & Automation Magazine - June 2016 - 9
IEEE Robotics & Automation Magazine - June 2016 - 10
IEEE Robotics & Automation Magazine - June 2016 - 11
IEEE Robotics & Automation Magazine - June 2016 - 12
IEEE Robotics & Automation Magazine - June 2016 - 13
IEEE Robotics & Automation Magazine - June 2016 - 14
IEEE Robotics & Automation Magazine - June 2016 - 15
IEEE Robotics & Automation Magazine - June 2016 - 16
IEEE Robotics & Automation Magazine - June 2016 - 17
IEEE Robotics & Automation Magazine - June 2016 - 18
IEEE Robotics & Automation Magazine - June 2016 - 19
IEEE Robotics & Automation Magazine - June 2016 - 20
IEEE Robotics & Automation Magazine - June 2016 - 21
IEEE Robotics & Automation Magazine - June 2016 - 22
IEEE Robotics & Automation Magazine - June 2016 - 23
IEEE Robotics & Automation Magazine - June 2016 - 24
IEEE Robotics & Automation Magazine - June 2016 - 25
IEEE Robotics & Automation Magazine - June 2016 - 26
IEEE Robotics & Automation Magazine - June 2016 - 27
IEEE Robotics & Automation Magazine - June 2016 - 28
IEEE Robotics & Automation Magazine - June 2016 - 29
IEEE Robotics & Automation Magazine - June 2016 - 30
IEEE Robotics & Automation Magazine - June 2016 - 31
IEEE Robotics & Automation Magazine - June 2016 - 32
IEEE Robotics & Automation Magazine - June 2016 - 33
IEEE Robotics & Automation Magazine - June 2016 - 34
IEEE Robotics & Automation Magazine - June 2016 - 35
IEEE Robotics & Automation Magazine - June 2016 - 36
IEEE Robotics & Automation Magazine - June 2016 - 37
IEEE Robotics & Automation Magazine - June 2016 - 38
IEEE Robotics & Automation Magazine - June 2016 - 39
IEEE Robotics & Automation Magazine - June 2016 - 40
IEEE Robotics & Automation Magazine - June 2016 - 41
IEEE Robotics & Automation Magazine - June 2016 - 42
IEEE Robotics & Automation Magazine - June 2016 - 43
IEEE Robotics & Automation Magazine - June 2016 - 44
IEEE Robotics & Automation Magazine - June 2016 - 45
IEEE Robotics & Automation Magazine - June 2016 - 46
IEEE Robotics & Automation Magazine - June 2016 - 47
IEEE Robotics & Automation Magazine - June 2016 - 48
IEEE Robotics & Automation Magazine - June 2016 - 49
IEEE Robotics & Automation Magazine - June 2016 - 50
IEEE Robotics & Automation Magazine - June 2016 - 51
IEEE Robotics & Automation Magazine - June 2016 - 52
IEEE Robotics & Automation Magazine - June 2016 - 53
IEEE Robotics & Automation Magazine - June 2016 - 54
IEEE Robotics & Automation Magazine - June 2016 - 55
IEEE Robotics & Automation Magazine - June 2016 - 56
IEEE Robotics & Automation Magazine - June 2016 - 57
IEEE Robotics & Automation Magazine - June 2016 - 58
IEEE Robotics & Automation Magazine - June 2016 - 59
IEEE Robotics & Automation Magazine - June 2016 - 60
IEEE Robotics & Automation Magazine - June 2016 - 61
IEEE Robotics & Automation Magazine - June 2016 - 62
IEEE Robotics & Automation Magazine - June 2016 - 63
IEEE Robotics & Automation Magazine - June 2016 - 64
IEEE Robotics & Automation Magazine - June 2016 - 65
IEEE Robotics & Automation Magazine - June 2016 - 66
IEEE Robotics & Automation Magazine - June 2016 - 67
IEEE Robotics & Automation Magazine - June 2016 - 68
IEEE Robotics & Automation Magazine - June 2016 - 69
IEEE Robotics & Automation Magazine - June 2016 - 70
IEEE Robotics & Automation Magazine - June 2016 - 71
IEEE Robotics & Automation Magazine - June 2016 - 72
IEEE Robotics & Automation Magazine - June 2016 - 73
IEEE Robotics & Automation Magazine - June 2016 - 74
IEEE Robotics & Automation Magazine - June 2016 - 75
IEEE Robotics & Automation Magazine - June 2016 - 76
IEEE Robotics & Automation Magazine - June 2016 - 77
IEEE Robotics & Automation Magazine - June 2016 - 78
IEEE Robotics & Automation Magazine - June 2016 - 79
IEEE Robotics & Automation Magazine - June 2016 - 80
IEEE Robotics & Automation Magazine - June 2016 - 81
IEEE Robotics & Automation Magazine - June 2016 - 82
IEEE Robotics & Automation Magazine - June 2016 - 83
IEEE Robotics & Automation Magazine - June 2016 - 84
IEEE Robotics & Automation Magazine - June 2016 - 85
IEEE Robotics & Automation Magazine - June 2016 - 86
IEEE Robotics & Automation Magazine - June 2016 - 87
IEEE Robotics & Automation Magazine - June 2016 - 88
IEEE Robotics & Automation Magazine - June 2016 - 89
IEEE Robotics & Automation Magazine - June 2016 - 90
IEEE Robotics & Automation Magazine - June 2016 - 91
IEEE Robotics & Automation Magazine - June 2016 - 92
IEEE Robotics & Automation Magazine - June 2016 - 93
IEEE Robotics & Automation Magazine - June 2016 - 94
IEEE Robotics & Automation Magazine - June 2016 - 95
IEEE Robotics & Automation Magazine - June 2016 - 96
IEEE Robotics & Automation Magazine - June 2016 - 97
IEEE Robotics & Automation Magazine - June 2016 - 98
IEEE Robotics & Automation Magazine - June 2016 - 99
IEEE Robotics & Automation Magazine - June 2016 - 100
IEEE Robotics & Automation Magazine - June 2016 - 101
IEEE Robotics & Automation Magazine - June 2016 - 102
IEEE Robotics & Automation Magazine - June 2016 - 103
IEEE Robotics & Automation Magazine - June 2016 - 104
IEEE Robotics & Automation Magazine - June 2016 - 105
IEEE Robotics & Automation Magazine - June 2016 - 106
IEEE Robotics & Automation Magazine - June 2016 - 107
IEEE Robotics & Automation Magazine - June 2016 - 108
IEEE Robotics & Automation Magazine - June 2016 - Cover3
IEEE Robotics & Automation Magazine - June 2016 - Cover4
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_december2023
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_september2023
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_june2023
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_march2023
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_december2022
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_september2022
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_june2022
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_march2022
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_december2021
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_september2021
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_june2021
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_march2021
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_december2020
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_september2020
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_june2020
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_march2020
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_december2019
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_september2019
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_june2019
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_march2019
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_december2018
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_september2018
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_june2018
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_march2018
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_december2017
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_september2017
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_june2017
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_march2017
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_december2016
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_september2016
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_june2016
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_march2016
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_december2015
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_september2015
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_june2015
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_march2015
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_december2014
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_september2014
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_june2014
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_march2014
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_december2013
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_september2013
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_june2013
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_march2013
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_december2012
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_september2012
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_june2012
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_march2012
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_december2011
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_september2011
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_june2011
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_march2011
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_december2010
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_september2010
https://www.nxtbookmedia.com