Support » Sample Project: Simple Hexapod Walker »
5. Using a Script for Obstacle Avoidance
<p>The Micro Maestro has an internal scripting language that can store sequences, read sensors, and link everything together to form intelligent behaviors, making your hexapod truly autonomous. For complete documentation on the scripting language, see <a href="/docs/0J40/6">Section 6</a> of the <a href="/docs/0J40">Micro Maestro User’s Guide</a>.</p>
<p>Once you have set up all of your basic gaits, erase your script, then click the “Copy All Sequences to Script” button on the Sequence tab. This button adds a set of subrountines that you can use to access the various gaits from within a script.</p>
<p>You can then call these subroutines from your script. For example,</p>
<pre name="code" class="maestro">
begin
 forward
 left
repeat</pre>
<p>will cause the hexapod to repeatedly step forward then turn left, over, and over. You will probably want to take into account the sensor readings, which can be accessed using the GET_POSITION command. Here is an example of a very simple program that uses the sensor readings to try to avoid objects – customize this to get the behavior you want!</p>
<pre name="code" class="maestro">
start:
 # back up if both sensors see an object
 left_sensor right_sensor logical_and
 if back back back goto start endif

 # back up and turn right if the left sensor sees an object
 left_sensor if back right right right goto start endif

 # back up and turn left if the right sensor sees an object
 right_sensor if back left left left goto start endif

 # otherwise, if there is nothing ahead, walk forward
 forward
 goto start

# returns true if the left sensor sees an object
sub left_sensor
 4 get_position 512 less_than
 return

# returns true if the right sensor sees an object
sub right_sensor
 3 get_position 512 less_than
 return

### Sequence subroutines: ###

# back
sub back
 100 4992 5312 5056 frame_0_1_2 # Frame 0
 120 7168 6976 frame_0_2 # Frame 1
 100 6528 frame_1 # Frame 2
 120 4992 5056 frame_0_2 # Frame 3
 return
# forward
sub forward
 100 7168 5312 6976 frame_0_1_2 # Frame 1
 120 4992 5056 frame_0_2 # Frame 2
 100 6528 frame_1 # Frame 3
 120 7168 6976 frame_0_2 # Frame 0
 return
# left
sub left
 100 7168 5312 5056 frame_0_1_2 # Frame 0
 150 4992 6976 frame_0_2 # Frame 1
 100 6528 frame_1 # Frame 2
 150 7168 5056 frame_0_2 # Frame 3
 return
# right
sub right
 100 4992 5312 6976 frame_0_1_2 # Frame 1
 120 7168 5056 frame_0_2 # Frame 2
 100 6528 frame_1 # Frame 3
 120 4992 6976 frame_0_2 # Frame 0
 return

sub frame_0_1_2
 2 servo 1 servo 0 servo delay
 return

sub frame_0_2
 2 servo 0 servo delay
 return

sub frame_1
 1 servo delay
 return</pre>