Encoder Front Page
SRS Home | Front Page | Monthly Issue | Index
Google
Search WWW Search seattlerobotics.org

SLOTH
Rope Climbing Robot

Design & Development

George Vastianos
Electronics Engineer BSc.
Dipl. from Electronics Department,
Faculty of Technological Applications,
Technological Educational Institute of Piraeus, Greece

www.vastianos.com

Table of contents

0. Abstract
1. Robot's hardware
1.1 The Mini SSC II Serial Servo Controller
1.2 Hardware implementation of SLOTH robot
2. Robot's software
2.1 Rope climbing gates
2.2 Software implementation of SLOTH robot
3. References

Keywords: Artificial intelligence & life, crawling type robots, mobile robotic systems, micro-robotics.

0. Abstract

SLOTH is a robot that is used for rope climbing. Studying the anatomy and moving of a real biological sloth animal has inspired SLOTH's mechanical design and its climbing gaits. SLOTH robot is constructed by three small servos and is controlled through an SSC II serial servo controller. The maximum climbing speed of this 0,25Kgr and 20cm long robot is 60 meters per hour. SLOTH robot can be used as a telepresence robotic system by carrying a small video camera to offer "visual access" in places where access by human presence is difficult and dangerous (like earthquake affected buildings, poisonous and toxic gas trapped rooms etc).

1. Robot's hardware

1.1 The Mini SSC II Serial Servo Controller

The Mini SSC II (serial servo controller) is a small pre-assembled dedicated servo controller. This handy little device makes controlling servos from a microcontroller or a PC serial port practically plug and play. The servos can be easily positioned by sending simple instructions as illustrated below.

How does it work? Controlling servos from a microcontroller is not difficult, however when the number of servos that need to be controlled grows, the general purpose microcontroller can become bogged down servicing the servos, leaving no time for monitoring sensors or other I/O. The SSC takes care of the timing and leaves the host computer free to deal with other issues.

The modular connector makes controlling the SSC from a PC very easy. Simply plug the cable into the serial port and the SSC, and sending positioning data to the serial port as follows:

Byte1 = Sync (255)
Byte2 = Servo #(0-7)
Byte3 = Position (0-254)

So sending a 255,3,180 would move servo 3 to position 180, sending 255,6,25 would move servo 6 to position 25. Any computer or programming language that can send serial data at 2400 or 9600 baud can be used. The SSC is addressable to allow up to sixteen servos to be controlled from one serial port, or one pin on a microcontroller. Special order units allow control of up to 255 servos from a single port.

The Mini SSC is a trademark and product of Scott Edwards Electronics Inc., AZ-USA, (www.seetron.com).

1.2 Hardware implementation of SLOTH robot

The robot's brain is based on the SSC II serial servo controller that described above. The controller is connected through an RS-232 connection with a personal computer that runs the robot's Control Panel software. The controller is connected with the PC through the RJ11 connector. The range of servos' motion is defined for 180 degrees, so the R jumper is on. The servo addresses identification is defined for 0-7, so I jumper is off. And the communication speed is defined in 9600 baud, so the S jumper is on. The robot uses only three servos with servo addresses 0-2. The first two servos used for the up and down grippers and the third for the body. The electronics setup of the robot is illustrated bellow:

2. Robot's software

2.1 Rope climbing gates

The climbing-up and climbing-down gaits are consisted by six steps each. The difference between the two gaits is that the order of the steps is exactly the opposite. The preparation before climbing, and the up & down climbing gates are fully described (with a lot of pictures) bellow:

Preparation before climbing



Press the "Release" button of
the control panel software to
release both grippers and pass
through the rope



Press the "Grab" button of
the control panel software to
stabilize the robot's body on
the rope

After this preparation the robot is ready to climb up or down in a vertical setup, or to climb right or left in a horizontal setup.

Climbing up gait



Step 1
Release down gripper



Step 2
Bend body



Step 3
Grab down gripper



Step 4
Release up gripper



Step 5
Straighten body



Step 6
Grab up gripper

This is a climbing-up step cycle. For continuous climbing repeat the above steps.

Climbing down gait



Step 1
Release up gripper



Step 2
Bend body



Step 3
Grab up gripper



Step 4
Release down gripper



Step 5
Straighten body



Step 6
Grab down gripper

This is a climbing-down step cycle. For continuous climbing repeat the above steps.

2.2 Software implementation of SLOTH robot

The robot's control software (Control Panel) has been developed in Visual Basic 6. The program's GUI includes eight buttons for the easy control of the robot. The "Port" button is used for the definition of the serial port and the "Mode" button is used to define if the robot will climb only one step at a time or it will climb continuously. The "Grab" and "Release" buttons are used for the preparation of the rope and the "Climb Up", "Climb Down" and "Stop Climb" buttons are used for the climbing. The "Quit Program" button is used to terminate the execution of the program. A screenshot of the Control Panel software is illustrated bellow:

The source code of the Control Panel software is listed bellow:

File: slothbot.vbp

Type=Exe
Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#..\..\SYSTEM\stdole2.tlb#OLE Automation
Object={648A5603-2C6E-101B-82B6-000000000014}#1.1#0; MSCOMM32.OCX
Form=slothbot.frm
IconForm="frmSlothbot"
Startup="frmSlothbot"
HelpFile=""
Title="SLOTH Rope Climbing Robot"
ExeName32="slothbot.exe"
Command32=""
Name="prjSlothbot"
HelpContextID="0"
Description="SLOTH Rope Climbing Robot - [Control Panel]"
CompatibleMode="0"
MajorVer=1
MinorVer=0
RevisionVer=0
AutoIncrementVer=0
ServerSupportFiles=0
VersionFileDescription="SLOTH Rope Climbing Robot - [Control Panel]"
VersionLegalCopyright="(c) 2002 by George Vastianos"
VersionProductName="SLOTH Rope Climbing Robot"
CompilationType=0
OptimizationType=0
FavorPentiumPro(tm)=0
CodeViewDebugInfo=0
NoAliasing=0
BoundsCheck=0
OverflowCheck=0
FlPointCheck=0
FDIVCheck=0
UnroundedFP=0
StartMode=0
Unattended=0
Retained=0
ThreadPerObject=0
MaxNumberOfThreads=1
DebugStartupOption=0

File: slothbot.frm

VERSION 5.00
Object = "{648A5603-2C6E-101B-82B6-000000000014}#1.1#0"; "MSCOMM32.OCX"
Begin VB.Form frmSlothbot 
   BorderStyle     =   1  'Fixed Single
   Caption         =   "SLOTH Rope Climbing Robot - [Control Panel]"
   ClientHeight    =   3975
   ClientLeft      =   45
   ClientTop       =   330
   ClientWidth     =   4575
   Icon            =   "slothbot.frx":0000
   LinkTopic       =   "Form1"
   MaxButton       =   0   'False
   MinButton       =   0   'False
   ScaleHeight     =   3975
   ScaleWidth      =   4575
   StartUpPosition =   3  'Windows Default
   Begin MSCommLib.MSComm cntPort 
      Left            =   3960
      Top             =   3360
      _ExtentX        =   1005
      _ExtentY        =   1005
      _Version        =   393216
      DTREnable       =   -1  'True
   End
   Begin VB.Timer tmrTimer 
      Enabled         =   0   'False
      Left            =   3480
      Top             =   3480
   End
   Begin VB.CommandButton cmdQuit 
      Caption         =   "&Quit Program"
      Height          =   375
      Left            =   2760
      TabIndex        =   8
      Top             =   3480
      Width           =   1695
   End
   Begin VB.CommandButton cmdPort 
      Caption         =   "&Port: COM1"
      Height          =   375
      Left            =   2760
      TabIndex        =   1
      Top             =   120
      Width           =   1695
   End
   Begin VB.CommandButton cmdMode 
      Caption         =   "&Mode: Continuous"
      Height          =   375
      Left            =   2760
      TabIndex        =   2
      Top             =   600
      Width           =   1695
   End
   Begin VB.CommandButton cmdStopClimb 
      Caption         =   "&Stop Climb"
      Enabled         =   0   'False
      Height          =   375
      Left            =   2760
      TabIndex        =   5
      Top             =   2040
      Width           =   1695
   End
   Begin VB.CommandButton cmdClimbDown 
      Caption         =   "Climb &Down"
      Height          =   375
      Left            =   2760
      TabIndex        =   4
      Top             =   1560
      Width           =   1695
   End
   Begin VB.CommandButton cmdClimbUp 
      Caption         =   "Climb &Up"
      Height          =   375
      Left            =   2760
      TabIndex        =   3
      Top             =   1080
      Width           =   1695
   End
   Begin VB.CommandButton cmdGrab 
      Caption         =   "&Grab"
      Height          =   375
      Left            =   2760
      TabIndex        =   6
      Top             =   2520
      Width           =   1695
   End
   Begin VB.CommandButton cmdRelease 
      Caption         =   "&Release"
      Height          =   375
      Left            =   2760
      Picture         =   "slothbot.frx":0442
      TabIndex        =   7
      Top             =   3000
      Width           =   1695
   End
   Begin VB.PictureBox picSloth 
      Height          =   3735
      Left            =   120
      Picture         =   "slothbot.frx":2A31
      ScaleHeight     =   3675
      ScaleWidth      =   2475
      TabIndex        =   0
      Top             =   120
      Width           =   2535
   End
End
Attribute VB_Name = "frmSlothbot"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
'***************************
'*        S L O T H        *
'*   Rope Climbing Robot   *
'*     [Control Panel]     *
'* R&D by George Vastianos *
'***************************

'Define global variables
Dim POSI(0 To 2, 0 To 1) As Byte
Dim POSIDIF As Byte
Dim PATT(0 To 1, 0 To 5, 0 To 2) As Byte
Dim CLIMBMODE As Byte
Dim STEPCOUNT As Byte

Private Sub Robot_Init()
    'Servo(0) = Up gripper
    'Servo(1) = Down gripper
    'Servo(2) = Body
    
    'Define servo positions
    POSIDIF = 64
    'Up gripper closed position
    POSI(0, 0) = 128
    'Up gripper open position
    POSI(0, 1) = 128 + POSIDIF
    'Down gripper closed position
    POSI(1, 0) = 128
    'Down gripper open position
    POSI(1, 1) = 128 + POSIDIF
    'Body straight position
    POSI(2, 0) = 115
    'Body bent position
    POSI(2, 1) = 115 + POSIDIF

    'Define climbing patterns
    
    'Climb Up: Step 1: Release Down Gripper
    PATT(0, 0, 0) = POSI(0, 0)
    PATT(0, 0, 1) = POSI(1, 1)
    PATT(0, 0, 2) = POSI(2, 0)
    'Climb Up: Step 2: Bend Body
    PATT(0, 1, 0) = POSI(0, 0)
    PATT(0, 1, 1) = POSI(1, 1)
    PATT(0, 1, 2) = POSI(2, 1)
    'Climb Up: Step 3: Grab Down Gripper
    PATT(0, 2, 0) = POSI(0, 0)
    PATT(0, 2, 1) = POSI(1, 0)
    PATT(0, 2, 2) = POSI(2, 1)
    'Climb Up: Step 4: Release Up Gripper
    PATT(0, 3, 0) = POSI(0, 1)
    PATT(0, 3, 1) = POSI(1, 0)
    PATT(0, 3, 2) = POSI(2, 1)
    'Climb Up: Step 5: Straighten Body
    PATT(0, 4, 0) = POSI(0, 1)
    PATT(0, 4, 1) = POSI(1, 0)
    PATT(0, 4, 2) = POSI(2, 0)
    'Climb Up: Step 6: Grab Up Gripper
    PATT(0, 5, 0) = POSI(0, 0)
    PATT(0, 5, 1) = POSI(1, 0)
    PATT(0, 5, 2) = POSI(2, 0)
    
    'Climb Down: Step 1: Release Up Gripper
    PATT(1, 0, 0) = POSI(0, 1)
    PATT(1, 0, 1) = POSI(1, 0)
    PATT(1, 0, 2) = POSI(2, 0)
    'Climb Down: Step 2: Bend Body
    PATT(1, 1, 0) = POSI(0, 1)
    PATT(1, 1, 1) = POSI(1, 0)
    PATT(1, 1, 2) = POSI(2, 1)
    'Climb Down: Step 3: Grab Up Gripper
    PATT(1, 2, 0) = POSI(0, 0)
    PATT(1, 2, 1) = POSI(1, 0)
    PATT(1, 2, 2) = POSI(2, 1)
    'Climb Down: Step 4: Release Down Gripper
    PATT(1, 3, 0) = POSI(0, 0)
    PATT(1, 3, 1) = POSI(1, 1)
    PATT(1, 3, 2) = POSI(2, 1)
    'Climb Down: Step 5: Straighten Body
    PATT(1, 4, 0) = POSI(0, 0)
    PATT(1, 4, 1) = POSI(1, 1)
    PATT(1, 4, 2) = POSI(2, 0)
    'Climb Down: Step 6: Grab Down Gripper
    PATT(1, 5, 0) = POSI(0, 0)
    PATT(1, 5, 1) = POSI(1, 0)
    PATT(1, 5, 2) = POSI(2, 0)
    
    'Init timer
    tmrTimer.Enabled = False
    tmrTimer.Interval = 200
    STEPCOUNT = 6
End Sub

Private Sub Robot_StartMove()
    cmdPort.Enabled = False
    cmdMode.Enabled = False
    cmdClimbUp.Enabled = False
    cmdClimbDown.Enabled = False
    cmdStopClimb.Enabled = True
    cmdGrab.Enabled = False
    cmdRelease.Enabled = False
    cmdQuit.Enabled = False
    On Error Resume Next
    cntPort.PortOpen = True
    tmrTimer.Enabled = True
End Sub

Private Sub Robot_StopMove()
    Do
        DoEvents
    Loop Until (STEPCOUNT = 6)
    tmrTimer.Enabled = False
    On Error Resume Next
    cntPort.PortOpen = False
    cmdPort.Enabled = True
    cmdMode.Enabled = True
    cmdClimbUp.Enabled = True
    cmdClimbDown.Enabled = True
    cmdStopClimb.Enabled = False
    cmdGrab.Enabled = True
    cmdRelease.Enabled = True
    cmdQuit.Enabled = True
End Sub

Private Sub cmdPort_Click()
    If cmdPort.Caption = "&Port: COM1" Then
        cmdPort.Caption = "&Port: COM2"
        cntPort.CommPort = 2
    Else
        cmdPort.Caption = "&Port: COM1"
        cntPort.CommPort = 1
    End If
End Sub

Private Sub cmdMode_Click()
    If cmdMode.Caption = "&Mode: Continuous" Then
        cmdMode.Caption = "&Mode: Step"
    Else
        cmdMode.Caption = "&Mode: Continuous"
    End If
End Sub

Private Sub cmdClimbUp_Click()
    CLIMBMODE = 0
    STEPCOUNT = 0
    Call Robot_StartMove
End Sub

Private Sub cmdClimbDown_Click()
    CLIMBMODE = 1
    STEPCOUNT = 0
    Call Robot_StartMove
End Sub

Private Sub cmdStopClimb_Click()
    Call Robot_StopMove
End Sub

Private Sub cmdGrab_Click()
    On Error Resume Next
    cntPort.PortOpen = True
    cntPort.Output = (Chr(255) & Chr(0) & Chr(POSI(0, 0)))
    cntPort.Output = (Chr(255) & Chr(1) & Chr(POSI(1, 0)))
    cntPort.Output = (Chr(255) & Chr(2) & Chr(POSI(2, 0)))
    cntPort.PortOpen = False
End Sub

Private Sub cmdRelease_Click()
    On Error Resume Next
    cntPort.PortOpen = True
    cntPort.Output = (Chr(255) & Chr(0) & Chr(POSI(0, 1)))
    cntPort.Output = (Chr(255) & Chr(1) & Chr(POSI(1, 1)))
    cntPort.Output = (Chr(255) & Chr(2) & Chr(POSI(2, 0)))
    cntPort.PortOpen = False
End Sub

Private Sub cmdQuit_Click()
    Unload Me
End Sub

Private Sub Form_Load()
    Call Robot_Init
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Call cmdStopClimb_Click
End Sub

Private Sub tmrTimer_Timer()
    On Error Resume Next
    If STEPCOUNT = 6 Then
        STEPCOUNT = 0
    End If
    Dim Servo As Byte
    For Servo = 0 To 2
        cntPort.Output = (Chr(255) & Chr(Servo) & Chr(PATT(CLIMBMODE, STEPCOUNT, Servo)))
    Next Servo
    STEPCOUNT = STEPCOUNT + 1
    If ((STEPCOUNT = 6) And (cmdMode.Caption = "&Mode: Step")) Then
        Call cmdStopClimb_Click
    End If
End Sub

Robot's software files. (92,3 KBytes)

3. References

  1. Vastianos G., "SLOTH - Rope Climbing Robot", (Draft Notes), (02/2002).
  2. Lynxmotion Inc., "Control up to 8 RC servos using one microcontroller I/O pin, or a PCs serial port!", Pekin IL, USA.
  3. Scott Edwards Electronics Inc., "Mini SSC II Serial Servo Controller: Userís Manual", Sierra Vista AZ, USA.