![]() |
|

George Vastianos |
|---|
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:
![]() 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.
![]() 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.
![]() 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
3. References
|