Project SlyBot
Big boys toys...

Project Status

Welcome to my new project! So far, SlyBot I is my latest robot.

It's a bit of a guts dragger currently; I'll wait till a later phase to mount everything!

Robot Hobbyist?

Know of any useful sites/IRC channels?

Drop me a mail and I'll add them to my resources section.

 Project SlyBot Introduction

 Quick Introduction

The current SlyBot - Click to enlarge Project SlyBot is my venture into the world of robotics. I'm interested in the challenges involved in developing software systems to control movement and behaviour; so what better way to put them to the test than to build a robot! (also an excuse to play with Lego again ;)

This page will follow my adventures as I work to develop both the hardware and software for various generations of a robot; namely SlyBot. Hopefully by the end of it, SlyBot will be fairly autonomous!

The picture to the left shows SlyBot I - Phase I, still pretty early in the development cycle as you can see! Click it to see an enlarged version.

I will post here pictures and videos of the robots, and details of what has been learnt along the way. In due time I will make the control software available to aid others in their own robotics adventures!

 Aims and Scope

The overall aim is:

  • To build a six legged robot with the ability to move and react independently of external controls.
  • It will be able to move using various techniques and gates, and at varying speeds.
  • Obstacles will be overcome or avoided, depending on height.
  • The robot will be able to track where it has been, build up an internal map, and perform basic orienteering tasks using that data.
  • Its initial primary goal will be to map where it hasn't been before.

Hardware wise, initially the robot will be built from technic Lego, use SuperTek/GWS servos and a 12 channel servo driver. As things develop it will use a Sharp Zaurus (running Linux) to host the control software, and use an I2C servo controller and sensors for input.

Goto Top

Build schedule likely to change due to work commitments!

Phase I

The first phase will end with a basic six-legged robot, able to walk forward and backwards.

I've got a lot to learn; there's a lot of work behind just getting the software for wave gait working!

However, as anybody who works with robots could tell you, when it first crawls by itself it's a tad cool!

Phase II

The second phase will concentrate on making something that doesn't fall apart ;-)

The RaSCL control software will be released during this phase for you all to play with!

 Build Project Progress

The following outlines roughly where I want this project to go. I've split the development into a number of phases, each providing a significant advance in functionality over the previous.

Phase: SlyBot I - Phase I
Mission: Six legged robot with servos mounted - basic wave gait motion.
Status: Complete
    Hardware Development:
  • Leg design and construction
  • Servos mounted to leg construction
  • Initial prototype body design
  • Assemble prototype robot
  • Basic off bot control software - non-mounted electronics
  • Basic leg motion test

  • Software Development:
  • Core application developed - PC hosted for now
  • Control language and parser created (RaSCL)
  • Servo calibration and bot setup routines
  • Single job robotics code execution
  • Implement wave gait walking in high level robotics language

Phase: SlyBot I - Phase II
Mission: Body/leg strengthen - reliable tripod gait motion - software enhancement
Status: In progress
    Hardware Development:
  • Strengthen leg design/fix in place
  • Redesign body
  • Enhanced off bot control software - non-mounted electronics
  • Tripod gait walking at varying speed
  • Direction control (turning whilst walking)

  • Software Development:
  • Windows port and integration - PC hosted for now
  • Implement multiple job support and job interaction
  • Implement tripod gait walking and turning in high level robotics language

Further phases will follow!

Goto Top

No Rude Comments!

SlyBot isn't much of a looker, but I'm going for functionality first!

Never underestimate the power of Lego (or how much you need!).

See my resources section for some good replacement Lego suppliers!

 Developed Robots

SlyBot 1 - the first generation!
SlyBot I - The first generation of SlyBot!

Goto Top

Slyware Logo RaSCL: Hum, somewhat fitting logo don't you think ;-)

Erm, ya wah?

It may look insane initially, but I'm trying to make it developer friendly; especially to those without past programming experience.

If you've got ideas on what would be useful, drop me a mail at

Check out my RaSCL project page for more!

RaSCL: Side Note

Think of RaSCL as a merging of Scheme, C++, me and a fair bit of coffee. With any luck it will be useful!

 Control Software (RaSCL)

 RaSCL - Robotics and Sensorial Control Language

One of the main drivers I have for this SlyBot project is to experiment with control software. My background is in software, but whilst I have been developing SlyBot one hurdle I've had is the hardware and electronics side. For other robotics hobbyists and enthusiasts, the barrier may be automation; they have a robot, but no idea how to get it to do something useful!

This is where RaSCL comes in; Robotics and Sensorial Control Language. RaSCL is a high level yet powerful language to aid interaction between a PC/PDA and servos/sensors. It is by no means meant to be embedded; it aims to provide a generic platform to develop algorithms such as walking gait and collision avoidance, and present them in a markup that users can swap and customise.

For SlyBot I will be running this software on a Linux based Zaurus PDA. However, the major advantage this has is that an interpreter will also be available for Windows, so you can prototype your own control software on the desktop. My goal here is so that users with a servo controlled robot can download the interpreter, configure their controller encodings (or use a pre-defined one), plug in the serial cable, and call the in-built routines to get their bot to move! They are then free to customise the routines to their needs.

Learn more from my RaSCL project page!

 RaSCL - Language Outline

  • Interpreted Lisp like language
  • Object like interactions/abstractions
  • Controller encodings defined in RaSCL; no re-compilations
  • Servo/resource abstractions - let RaSCL deal with all the details!
  • Easy debugging
  • Abstracted definitions; users can share common routines like walking gaits etc
  • Supports Linux/Windows
  • Resource sharing/locking/deadlock avoidance built into the language
  • Multiple jobs - threads of control to deal with each individual aspects of your robot
  • Job communication - easy inter-job communication
  • Scope for inter-bot communications via TCP/IP

 Short RaSCL Code Example

The following gives a flavour for the language: this function sets all configured servos to a given position at a given speed, and waits for all servos to complete their move before returning.

To make sense of the following you may need to know:

  • The code defines a function called set_all_servos
  • The function is passed a list of two arguments, the target position and the speed
  • A pre-defined list called gBotServos contains pointers to all configured servo objects
  • The *lServo::setpos command executes an operation on a servo object
  • The primitive ::= sets a variable in the local context

Learn more from my RaSCL project page!

(::*complex_function set_all_servos)

    # Split out params - icar extracts an item from a given list index position
    (::= .lPos (icar func_args 0))
    (::= .lSpeed (icar func_args 1))

    # Following defines a variable to be the empty list
    (::= .lTimes {})

    # For each servo
    (::foreach gBotServos)

        # Each servo pointer will be in iItem - split it out
        (::= .lEntry iItem)
        (::= .lServo (dynamic_cast (car lEntry)))

        # This instructs the servo to move. The setpos method on a Servo object returns the
        # time it will take to move that servo, given its last position and the specified speed.
        # The resulting times are appended to the end of the lTimes list.
        (::= .lTimes (carpush (*lServo::setpos (list lPos lSpeed)) lTimes))


    # Sleep until the servo with the longest distance to move has completed.
    (::sleep (max lTimes))

Goto Top

Exchange Links?

Know of any useful links that could be included?

Mail them to
and I'll add them.

 Robotics Resources

Goto Top