![]() |
|
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
|