Putting robotics at your service™

Free shipping on orders over $200

W.A.L.T.E.R. Returns as a 2WD/4WD

Print view Share :
Previous topicNext topic

Page 3 of 10 [ 149 posts ]

1, 2, 3, 4, 5, 6 ... 10
User avatar
Guru ( offline )
Posts: 2956
Posted: 2010-05-27 17:24 
I finished building the new leg and took a few pictures.

Attachment:
new_leg_assy_side.jpg
new_leg_assy_side.jpg [ 129.59 KiB | Viewed 2427 times ]


Attachment:
new_leg_assy_top.jpg
new_leg_assy_top.jpg [ 132.77 KiB | Viewed 2427 times ]


Walking mode:
Attachment:
new_leg_walk.jpg
new_leg_walk.jpg [ 89.02 KiB | Viewed 2427 times ]

8-Dale

_________________
I can usually handle complexity. It's the [b][i]simple[/i][/b] things that always confound me..
Check out my [url=http://www.hybotics.me]blog[/url] now!
Open your mind, Read, Learn, Think, Apply..


User avatar
Guru ( offline )
Posts: 2956
Posted: 2010-05-27 17:31 
Here are a few more picures of the new leg attached to ASTRID. I have several macros made in LynxTerm to send the leg to various positions, as it might be controlled by a micro. I wish I could share this as a video, but my PC is apparently not quite fast enough to capture smooth video from my webcam (Logitec 9000).

Home position:
Attachment:
new_leg_home.jpg
new_leg_home.jpg [ 87.9 KiB | Viewed 2424 times ]

Medium extension:
Attachment:
new_leg_medium.jpg
new_leg_medium.jpg [ 85.5 KiB | Viewed 2424 times ]

Full extension:
Attachment:
new_leg_full.jpg
new_leg_full.jpg [ 82.31 KiB | Viewed 2424 times ]

This leg design looks way better than the previous design, and these servos have quite a bit of slop due to much use in experimenting with stuff. I'm wondering if going to the digital (5485 and 5645) would be worth the extra cost. I'm using just regular analog 475 and 645 servos at present.

Would going to the digital versions of my current servos make enough difference to warrent spending the extra money?

8-Dale

_________________
I can usually handle complexity. It's the [b][i]simple[/i][/b] things that always confound me..
Check out my [url=http://www.hybotics.me]blog[/url] now!
Open your mind, Read, Learn, Think, Apply..


User avatar
Guru ( offline )
Posts: 2956
Posted: 2010-06-03 15:44 
Well, I must be coming full circle or something. I connected up my Basic Atom Pro and checked all the pins. Everything seems to be working so far, which is good. Now that Basic Micro has released build #30 of Basic Micro Studio, hservo compiles and links properly. :) I'm going to put the BAP/Bot Board II on WALTER and see what I can do with it. My previous software for WALTER was written for the Basic Atom (not Pro), but I lost it when I lost everything on my hard drives and will be starting from scratch (not necessarily a bad thing) now. So, I have a clean slate, which can often be a really good thing. :D I'm preparing for getting an Arc32 board when they are available.

I'm also going to experiment with programming the BAP/Arc32 in C, which is my preference for writing code. I'm starting to look at Kurte's C code for the Phoenix and see what I might be able to use from that, and build from there. If Basic Micro adds solid support for building and using libraries to Basic Micro Studio, I think there is a lot of potential for development in C for both Atom Pro and Arc32. I have several ideas I'd like to work towards in C development for the Atom Pro/Arc32.

We'll see how fast I can fill up 32K of flash on the Atom Pro. I ran out of flash pretty quick on the Basic Atom when I started working with Subsumption. At some point, I want to add a BeagleBoard or Gumstix into the mix for WALTER, and can make pretty much any micro into a serial slave. I've already worked out how to power my BeagleBoard and USB hub from a standard NMiH battery pack using a slightly modified breadboard power supply from SparkFun.

8-Dale

_________________
I can usually handle complexity. It's the [b][i]simple[/i][/b] things that always confound me..
Check out my [url=http://www.hybotics.me]blog[/url] now!
Open your mind, Read, Learn, Think, Apply..


User avatar
Guru ( offline )
Posts: 2956
Posted: 2010-06-03 16:22 
Here is some slightly updated code for the Arduino Serial Slave. All I have done is convert the if/then blocks to switch() in the mainline for consistancy and to make it easier to add new secondary commands.

BeagleComm.pde:
Code:
/*
 http://www.arduino.cc/en/Tutorial/SerialCallResponse

 Created 26 Sept. 2005
 by Tom Igoe
 Modified 14 April 2009
 by Tom Igoe and Scott Fitzgerald

  Modified 20-May-2010
  Dale Weber <robotguy@hybotics.org>
 
  Version:      0.10
  Date:         20-May-2010
  Purpose:      Added remote serial control commands to read sensors and send readings back through the UART.
 
  Version:      0.20
  Date:         31-May-2010
  Purpos:       Added the remote Dump (D) command to allow dumping sensor data to a terminal.
 
  Version:      0.21
  Date:         03-Jun-2010
  Purpose:      Changed all if/then statements to switch() blocks to make adding new secondary commands easier.
 */
//#include <Servo.h>
#include "BeagleComm.h"

int inValue = 0;                                 // Incoming serial byte
byte ir[6];                                      // IR sensor data;
byte ping[8];                                    // Ultrasonic semsor data

//Servo pan, tilt;

// Establish contact with the master controller
void establishContact() {
  while (Serial.available() <= 0) {
    Serial.print('!', BYTE);                     //   Send a '!'

    delay(300);
  }
}

/*
   http://www.arduino.cc/en/Tutorial/Ping

   created 3 Nov 2008
   by David A. Mellis
   modified 30 Jun 2009
   by Tom Igoe

   This example code is in the public domain.
*/

// Read distance from a PING ultrasonic sensor
//  Code taken from the Arduino Playground. Returns distance in cm.
long read_ping (byte pin) {
  // establish variables for duration of the ping,
  // and the distance result in inches and centimeters:
  long duration, inches, cm;

  // The PING))) is triggered by a HIGH pulse of 2 or more microseconds.
  // Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
  pinMode(pin, OUTPUT);
  digitalWrite(pin, LOW);
  delayMicroseconds(2);
  digitalWrite(pin, HIGH);
  delayMicroseconds(5);
  digitalWrite(pin, LOW);

  // The same pin is used to read the signal from the PING))): a HIGH
  // pulse whose duration is the time (in microseconds) from the sending
  // of the ping to the reception of its echo off of an object.
  pinMode(pin, INPUT);
  duration = pulseIn(pin, HIGH);

  // Convert the time into a distance
//  inches = microsecondsToInches(duration);
  cm = microsecondsToCentimeters(duration);

//  Serial.print("\nPin ");
//  Serial.print(pin, DEC);
//  Serial.print(": ");
//  Serial.print(cm, DEC);

  return cm;
}

long microsecondsToInches(long microseconds) {
  // According to Parallax's datasheet for the PING))), there are
  // 73.746 microseconds per inch (i.e. sound travels at 1130 feet per
  // second).  This gives the distance travelled by the ping, outbound
  // and return, so we divide by 2 to get the distance of the obstacle.
  // See: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
  return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds) {
  // The speed of sound is 340 m/s or 29 microseconds per centimeter.
  // The ping travels out and back, so to find the distance of the
  // object we take half of the distance travelled.
  return microseconds / 29 / 2;
}

// Read Sharp GP2D12 IR sensor.
//  Code taken from the Arduino Playground. Returns distance in cm
int read_gp2d12 (byte pin) {
  int tmp;

  tmp = analogRead(pin);

  if (tmp < 3)
    return -1;                               // Invalid value

  tmp = (6787.0 /((float)tmp - 3.0)) - 4.0;

  return tmp;
}

// Convert lower case to upper case
char toUpper (char inp) {
  if ((inp >= 97) & (inp <= 122))
    return inp - 32;
  else
    return 0xFF;
}

// blink a heartbeat LED
void do_heartbeat (void) {
  digitalWrite(HEARTBEAT_PIN, HIGH);
  delay(250);
  digitalWrite(HEARTBEAT_PIN, LOW);
  delay(250);
}

void setup() {
  byte i;

  pinMode(HEARTBEAT_PIN, OUTPUT);

  // start serial port at 115200 bps:
  Serial.begin(115200);

  // Initialize sensor arrays
  for (i = 0; i < IR_MAX; i++)
    ir[i] = 0;

  for (i = 0; i < PING_MAX; i++)
    ping[i] = 0;

  establishContact();                    // Send a byte to establish contact until receiver responds
}

// Responds to commands from the master controller and updates sensor readings
void loop() {
  byte errorNr = 0, sensorNr = 0;        // Eorror number, Sensor index number
  byte angle = -85, increment = 10;      // Scan angle and increment
  byte pin, inValue;                     // Pin number to read (analog or digital)
  boolean scanarea = false;              // Scan flag
  char maincmd, seccmd;                  // Main and secondary command chars

  errorNr = 0;

  do_heartbeat();                        // Blink the heartbeat LED

  // Get incoming byte:
  if (Serial.available() > 0) {
    maincmd = toUpper(Serial.read());

    // Process master controller commands
    switch (maincmd) {
      case 'D':
        Serial.print("\nSensor Data Dump\n");
       
        // Dump IR sensor data
        for (sensorNr = 0; sensorNr < IR_MAX; sensorNr++) {
          Serial.print("\nIR sensor #");
          Serial.print(sensorNr, DEC);
          Serial.print(": ");
          Serial.print(ir[sensorNr], DEC);
     Serial.print(" cm");
        }

        // Dump PING sensor data - Digital pins 4 through 11
        for (sensorNr = 0; sensorNr < PING_MAX; sensorNr++) {
          Serial.print("\nPING sensor #");
          Serial.print(sensorNr, DEC);
          Serial.print(": ");
          Serial.print(ping[sensorNr], DEC);
          Serial.print(" cm");
        }

        break;
      case 'G':
        // Get an immediate sensor reading
        seccmd = toUpper(Serial.read());

        sensorNr = Serial.read();
        sensorNr = sensorNr - 48;
       
        switch (seccmd) {
          case 'I':                                               // IR Sensor
            ir[sensorNr] = read_gp2d12(sensorNr);
            Serial.print(ir[sensorNr], BYTE);
            break;
          case 'U':                                              // Ultrasonic (PING) Sensor
            ping[sensorNr] = read_ping(sensorNr + PING_START);
            Serial.print(ping[sensorNr], BYTE);
            break;
          default:
            break;
        }
        break;
      case 'R':
        if (Serial.available() > 0) {
          // Get the second character of the command
          seccmd = toUpper(Serial.read());

          switch (seccmd) {
            case 'A':                                            // RA command (Read Analog)
            case 'P':                                            // RP command (Read Pulse)
              // Read an analog pin
              inValue = Serial.read();
              pin = inValue - 48;

              switch (seccmd) {
                case 'A':
                  inValue = analogRead(pin);
                  Serial.print("\nAnalog #");
                  break;
                case 'P':
                  pinMode(pin, OUTPUT);
                  digitalWrite(pin, LOW);
                  pinMode(pin, INPUT);
                  inValue = pulseIn(pin, HIGH);
                  Serial.print("\nPulse #");
                default:
                  break;
              }

              Serial.print(pin, DEC);
              Serial.print(" = ");
              Serial.print(inValue, DEC);

              break;
            case 'R':                                            // RR command
              // Send all current sensor readings
              // Send header
              Serial.print(IR_MAX + PING_MAX, BYTE);
              Serial.print(IR_MAX, BYTE);
              Serial.print(PING_MAX, BYTE);

              // Send IR sensor readings
              for (sensorNr = 0; sensorNr < IR_MAX; sensorNr++)
                Serial.print(ir[sensorNr], BYTE);

              // Send PING sensor readings
              for (sensorNr = 0; sensorNr < PING_MAX; sensorNr++)
                Serial.print(ping[sensorNr], BYTE);

              break;
            case 'I':                                          // RI command (Send last IR reading)
            case 'U':
              // Send single IR sensor reading
              inValue = Serial.read();                         // RU command (Send last PING reading)
              sensorNr = inValue - 48;

              switch (seccmd) {
                case 'I':
                  Serial.print(ir[sensorNr], BYTE);
                  break;
                case 'U':
                  Serial.print(ping[sensorNr], BYTE);
                  break;
                default:
                  break;
              }
                 
              break;
            default:
              break;
          }
        }
        break;
      case 'S':                                            // S command (Scan area)
        // Scan area using pan/tilt
        scanarea = true;
        break;
      case 'T':                                            // Test command
        // Test command
        Serial.println("\nTesting.. ");
        break;
      default:
        break;
    }
  }

  // Read IR sensors
  for (sensorNr = 0; sensorNr < IR_MAX; sensorNr++)
     ir[sensorNr] = read_gp2d12(sensorNr);

  // Read PING sensors - Digital pins 4 through 11
  for (sensorNr = 0; sensorNr < PING_MAX; sensorNr++)
    ping[sensorNr] = read_ping(sensorNr + PING_START);

  // Scan an area from -85 degrees to +85 degrees using a pan/tilt
  if (scanarea) {
    Serial.print("\nScanning..");
    scanarea = false;
    // Scan area using the Pan/Tilt sensors
  }
}

BeagleCom.h:
Code:
#ifndef BeagleComm_h
#define BeagleComm_h

#include <inttypes.h>
#define IR_MAX          2
#define PING_MAX        2
#define PING_START      4

#define HEARTBEAT_PIN   13

#endif

For some reason I am getting weird JAVA errors when I try to upload the code to my Arduino or Sanguino. I'm using the Arduino 018 IDE upgraded with support for the Sanguino. As far as I can tell, my code looks good, but I am getting these weird errors when I try to upload it. The errors scroll to fast to read.

Edit: Updated the code listing for BeagleComm.pde after fixing some bugs. It all works now. :)

8-Dale

_________________
I can usually handle complexity. It's the [b][i]simple[/i][/b] things that always confound me..
Check out my [url=http://www.hybotics.me]blog[/url] now!
Open your mind, Read, Learn, Think, Apply..


User avatar
Guru ( offline )
Posts: 2956
Posted: 2010-06-05 12:08 
I've mounted my AtomPro/BotBoard II on to WALTER and have the rear steering servos connected, and I've got some initial code I have been working on. It's like I haven't even been away from programming an AtomPro! :D

Right now, all the code does is send the steering servos to their home position, which is for standard forward/reverse motion. With this position, I should be able to use standard two wheel steering by using the motor speed and direction for turning. I still have to do some fine tuning of the home position to be sure the wheels are positioned correctly for this mode of control and properly center the servos mechanically, which I will do when I get the am able to get the new HS-485 servos. For now, my current setup is good enough for testing.

Below is my current code:
Code:
'
'   Program:   Control Software for W.A.L.T.E.R. - the Wheeled Autonomous Learning Terrain Exploring Rover
'   Author:      Dale Weber <robotguy@hybotics.org>
'   Date:      04-Jun-2010
'   Version:   2.10
'   Purpos:      Original
'
'   Processor:   Basic Atom Pro on a BotBoard II
'   Hardware:   Dimension Engineering Sabertooth 2X5 Motor Controller
'            GHM-04 Motors with QME-01 Shaft Encoders (2)
'            HS-485HB Servos (4 Steering, 1 Arm Pan)
'            HS-645MG Servos (2)
'            7.2V @ 2800 mAH NiMH Battery Pack (Motors)
'            7.2V @ 2800 mAH Battery Pack (Electronics)
'            6.0V @ 2800 mAH Battery Pack (Servos)
'
'
' Constants
'
StepsPerDegree con 133.3               ' Counts per degree of servo movement.

TRUE con 1
FALSE con 0
'
' Steering servo pins
'
RightFront con 0
LeftFront con 1
RightRear con 2
LeftRear con 3
'
' Steering servo direction addustments
'
RFDir con 0
LFDir con 0
RRDir con 1
LRDir con -1
'
' Steering positions in degrees
'
CurrRFPos var sword
CurrLFPos var sword
CurrRRPos var sword
CurrLRPos var sword

CurrSpeed var sword
'
' Initialize variables
'
CurrRFPos = 0
CurrLFPos = 0
CurrRRPos = 55
CurrLRPos = -55

CurrSpeed = 0

enablehservo

' Tell everyone we are here
sound 9, [150\5000, 150\4400, 150\5000]
' Send servos to starting position
hservo [RightFront\0, LeftFront\0, RightRear\0, LeftRear\0]

'
' Main Line
'
gosub Steering [CurrRFPos, CurrLFPos, CurrRRPos, CurrLRPos, 100]
goto ShutDown
'
'Set speed for the four motors - SaberTooth 2x5 motor controller, packet serial
'
speed var sword
SetSpeed [speed]
   return

'
' Steer the four wheels
'
rfangle var sword
lfangle var sword
rrangle var sword
lrangle var sword
spd var sword
Steering [rfangle, lfangle, rrangle, lrangle, spd]
   hservo [RightFront\rfangle * StepsPerDegree\spd, LeftFront\lfangle * StepsPerDegree\spd, RightRear\rrangle * StepsPerDegree\spd, LeftRear\lrangle * StepsPerDegree\spd]
   return

ShutDown
   End

8-Dale

_________________
I can usually handle complexity. It's the [b][i]simple[/i][/b] things that always confound me..
Check out my [url=http://www.hybotics.me]blog[/url] now!
Open your mind, Read, Learn, Think, Apply..


User avatar
Guru ( offline )
Posts: 2956
Posted: 2010-06-06 18:16 
I've added a PS2 wireless controller to WALTER now, and am getting data from the controller. I have the controller on P0 - P3 and used Kurte's init code to get started with that configuration. After I changed the power jumper for those pins to +5V instead of VS (thanks to a nudge from Kurte), everything started to come together nicely. I took the rest of the PS2 controller code from one of the A4WD1 PS2 tutorial.

The purpose of having PS2 control available is I want to be able to take manual control of WALTER if he gets into a problem area he can't get out of on his own. After I correct his course, I can then return control to him and he can continue to roam around autonomously. :D

Now, I am getting anxious to get a RoboClaw 2X5A motor controller, so I can hook the rear motors and encoders up and start tinkering with that. I could connect up my SaberTooth 2X5, but I'd rather just start out with the RoboClaw. :)

8-Dale

_________________
I can usually handle complexity. It's the [b][i]simple[/i][/b] things that always confound me..
Check out my [url=http://www.hybotics.me]blog[/url] now!
Open your mind, Read, Learn, Think, Apply..


User avatar
Guru ( offline )
Posts: 2956
Posted: 2010-06-09 21:21 
I've mapped out the I/Os on my Atom Pro. To get everything I want connected to WALTER right now, I will be using every single I/O, and there is still stuff I want to connect beyond this. I'll be using the hardware serial port for the motor controllers. I've decided to use motors with encoders on the front wheels as well as the rear wheels, which means using two motor controllers.

It looks like I will be needing an Arc32 board for WALTER at some point in the not too distant future. I'm anxiously awaiting the Arc32 and RoboClaw 2X5A coming into stock here, but unfortunately I don't think I will be able to order both at the same time as I would like to do. At this point, it actually makes more sense to get the RoboClaw first, since I can use it right on WALTER immediately, but I could also use my SaberTooth 2X5 for awhile as long as I don't want to use the encoders right away. Getting the Arc32 now pretty much depends on whether I have the possibility of building my own DIY Robot Remote Controller with XBee, but I am not at all sure I can pull a project like this off.

8-Dale

_________________
I can usually handle complexity. It's the [b][i]simple[/i][/b] things that always confound me..
Check out my [url=http://www.hybotics.me]blog[/url] now!
Open your mind, Read, Learn, Think, Apply..


User avatar
Guru ( offline )
Posts: 2956
Posted: 2010-07-28 19:44 
I've been working with my BeagleBoard and Sanguino. I've already got code written and debugged that allows a Sanguino/Arduino to read sensors and send those results out the UART. This happens based on ASCII commands sent from a host, such as a PC or BeagleBoard. Now I am working on Python code for my BeagleBoard that will send commands to the Sanguino and have it take sensor readings and send those results back to the BeagleBoard for action. This will get me one step closer to being able to use a BeagleBoard for the main brain on W.A.L.T.E.R. When this is working, I'll be able to use RoboDuinos for sensor handlers, a pan/tilt sensor handler (always scanning).

I've decided to use an SSC-32 for servo control rather than getting an ARC-32 for this purpose right now. I'm not sure I'd be able to use the ARC-32 as a serial slave, due to various things I have been reading. Of course, I might be able to have it communicate via HSERIAL2, which is a possibility. I just don't have the funds available right now for purchasing new boards, so have to experiment with and use what I already have, until I perfect my hardware configuration for W.A.L.T.E.R. So far, using one or more Arduino compatible boards seems to be the best way to go for me, with the BeagleBoard as the main brain. I've already verified that my BeagleBoard will detect and setup the serial port when I plug my Sanguino into it, which is positive. I've also got WiFi b/g working on my BeagleBoard (LinkSys WUSB54GC dongle) and will also be adding XBee via USB.

Using the BeagleBoard will also allow me to do some much more processing intense tasks such as onboard video processing, etc. I'm anxious to get a BeagleBoard-xM board at some point when it is released, because it operates at 1 GHz, has a four port USB Hub and 10/100 Ethernet on board. Right now, I have my C3 BeagleBoard setup to boot Android 2.1 from NAND if there is no SD Card in the SD slot, or from the SD Card if one is present. I'm also looking forward to getting a TinCanTools Trainer Board at some point, to add to my BeagleBoard, which will break out and level shift many of the pins to 3.3V and/or 5V to make it easier to interface additional hardware to it.

8-Dale

_________________
I can usually handle complexity. It's the [b][i]simple[/i][/b] things that always confound me..
Check out my [url=http://www.hybotics.me]blog[/url] now!
Open your mind, Read, Learn, Think, Apply..


User avatar
Guru ( offline )
Posts: 2956
Posted: 2010-09-27 10:50 
Yes, I know my work on W.A.L.T.E.R. is not progressing very fast.

Things like health issues and a severe anxiety/panic attack on a public bus (still have health issues from this) last month keep me from doing the things I enjoy most. However, I can get a bit of work done on him here and there as I am able, and have started actually putting together the new motor/wheel mounting system. Yes, I have been taking pictures along the way and have a set of 16 (and growing) new pictures coming together now. I just have to decide which mounting position I want to try for the wheels first, more forward or more rearward with respect to WALTER's most forward point. This new mounting scheme is more flexible, and will allow at least four (three usable) different schemes for mounting the motors and wheels, unlike the old setup which had to be completely rebuilt just to change the mounting scheme. Right now, I want to try the more forward short "C" bracket scheme.

This new mounting scheme also allows for the possibility of mounting sensors that would point out over the wheel in the direction the wheel is moving. The impact of having this capability has not fully hit me yet, and my head is already hurting. Knowing how far each wheel is from an obstacle could be very valuable information, considering that each wheel is independently steerable.

Hopefully, I will have the two new motor/wheel mounts assembled this week, if I can find the short "C" (ASB-09) brackets I need. I also have the option of using long "C" (ASB-10) brackets.

8-Dale

_________________
I can usually handle complexity. It's the [b][i]simple[/i][/b] things that always confound me..
Check out my [url=http://www.hybotics.me]blog[/url] now!
Open your mind, Read, Learn, Think, Apply..


User avatar
Guru ( offline )
Posts: 2956
Posted: 2010-10-05 01:08 
OK, here are some pictures of the latest revisions to W.A.L.T.E.R. These pictures show the start of the assembly of the new motor mounts for the rear wheels. The basic mount is just an ASB-06 attached to an ASB-04. I will have to clip a bit off one corner of the deck to provide for full range of motion, but I can take care of that with my Dremel tool.

Attachment:
14-New-Motor-Mount-01.jpg
14-New-Motor-Mount-01.jpg [ 403.22 KiB | Viewed 2179 times ]


Attachment:
15-New-Motor-Mount-02.jpg
15-New-Motor-Mount-02.jpg [ 516.72 KiB | Viewed 2179 times ]


Attachment:
16-New-Motor-Mount-03.jpg
16-New-Motor-Mount-03.jpg [ 545.93 KiB | Viewed 2179 times ]


8-Dale

_________________
I can usually handle complexity. It's the [b][i]simple[/i][/b] things that always confound me..
Check out my [url=http://www.hybotics.me]blog[/url] now!
Open your mind, Read, Learn, Think, Apply..


User avatar
Guru ( offline )
Posts: 2956
Posted: 2010-10-05 01:13 
More pictures of the new motor/wheel mounting scheme. You may recognize something here - an idea taken from a biped. :) I expect this arrangement to provide the extra strength between the steering servo and motor mount. I can use either an ASB-09 or an ASB-10 in this setup. I ran out of ASB-09s in this case, so had to use ASB-10s.

Attachment:
17-Strengthener-01.jpg
17-Strengthener-01.jpg [ 296.74 KiB | Viewed 2180 times ]


Attachment:
18-Strengthener-02.jpg
18-Strengthener-02.jpg [ 512.29 KiB | Viewed 2180 times ]


Attachment:
19-Strengthener-03.jpg
19-Strengthener-03.jpg [ 520.28 KiB | Viewed 2180 times ]


8-Dale

_________________
I can usually handle complexity. It's the [b][i]simple[/i][/b] things that always confound me..
Check out my [url=http://www.hybotics.me]blog[/url] now!
Open your mind, Read, Learn, Think, Apply..


User avatar
Guru ( offline )
Posts: 2956
Posted: 2010-10-26 18:10 
After taking a closer look at the new wheel mounting scheme, I've discovered I can not use the ASB-10 because it is too long to allow the wheel to mount onto the hub. So, I'll have to canibalize ASTRIDE to get the four ASB-09 "C" brackets I need or wait until I can order more of them.

Edit: I was wrong. The ASB-10 or ASB-09 will point in the direction of backward travel for the rear wheels and the direction of forward travel for the front wheels. I've also discovered a use for the ASB-07 45 degree bracket - I need one on each ASB-04 to bring that bracket in line with the center line of the robot. This will also provide better range of motion for the steering of each wheel.

8-Dale

_________________
I can usually handle complexity. It's the [b][i]simple[/i][/b] things that always confound me..
Check out my [url=http://www.hybotics.me]blog[/url] now!
Open your mind, Read, Learn, Think, Apply..


User avatar
Guru ( offline )
Posts: 2956
Posted: 2010-10-30 22:38 
I've installed Python 2.6.6, flup 1.02, zLib 2.2.5, and pyserial-2.5 on my BeagleBoard. I built them natively because I could not get the right versions from OpenEmbedded to get dependencies to work out. I also have DJango 1.2.3 to install yet, for the web interface of W.A.L.T.E.R. and Phenny (IRC bot) for the IRC interactive interface. My BeagleBoard has been repurposed to run my AllStarLink/EchoLink node, so I will have to wait to add more to it until I can get a BeagleBoard-xM (the 1 GHz, 512 MB RAM version, 4 USB 2.0 Host, USB OTG, Ethernet, stereo audio, and much more).

In the meantime, I can still write and test my Python code on a PC, since Python is platform independent for the most part.

Below is the beginning of my Python main line. I'll be converting several things into objects, because it just makes sense to have Servo and Motor objects with their associated methods.

Code:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# Import the Serial module
import serial

EOL = "\r"
command = ""

# Set the Sanguino port - "COM1:" for Windows, "/dev/ttyS0 or /dev/ttyUSB0" for Linux
SANGUINO_PORT = "/dev/ttyUSB1"

#
# Left Front Motor
#
LFM_Speed_C = 0
LFM_Speed_Min = 500
LFM_Speed_Max = 2500
LFM_Stop = 1520
LFM_Dir = 0

#
# Left Front Steering
#
LFM_Steer_C = 1
LFM_Steer_Min = 600
LFM_Steer_Max = 2400
LFM_Steer_Ctr = 1500

#
# Right Front Motor
#
RFM_Speed_C = 16
RFM_Speed_Min = 500
RFM_Speed_Max = 2500
RFM_Stop = 1525
RFM_Dir = 0

#
# Right Front Steering
#
RFM_Steer_C = 17
RFM_Steer_Min = 500
RFM_Steer_Max = 2500
RFM_Steer_Ctr = 1500

#
# Left Rear Motor
#
LRM_Speed_C = 2
LRM_Speed_Min = 500
LRM_Speed_Max = 2500
LRM_Stop = 1520
LRM_Dir = 0

#
# Left Rear Steering
#
LRM_Steer_C = 3
LRM_Steer_Min = 600
LRM_Steer_Max = 2400
LRM_Steer_Ctr = 1500

#
# Right Rear Motor
#
RRM_Speed_C = 18
RRM_Speed_Min = 500
RRM_Speed_Max = 2500
RRM_Stop = 1525
RRM_Dir = 0

#
# Right Rear Steering
#
RRM_Steer_C = 19
RRM_Steer_Min = 0
RRM_Steer_Max = 0
RRM_Steer_Ctr = 1500

#
# Pan/Tilt
#
PanChan = 6
PanHome = 1530
PanREnd = 2150
PanLEnd = 900

TiltChan = 7
TiltHome = 1430
TiltUEnd = 500
TiltDEnd = 1550

# Reads single characters until a CR is read
def Response (port):
   ich = ""
   resp = ""

   while (port.inWaiting() and ich <> '\r'):
      ich = inAlpha(port)

      if (ich <> '\r'):
         resp = resp + ich

   return resp

def inAlpha(port):
   ich = ""
   num = 0

   while (port.inWaiting() < 1):
      pass

   while ((num < 32) or (num > 125)):
      ich = port.read(1)
      num = ich
#      print "'",ich,", ", num

   return ich

# Establish communications with a serial slave
def establishComm(port):
   ich = port.read(1)

   while (ich != '!'):
      ich = inAlpha(port)

   print "Communication established.."

   port.write('*')

   return

# Converts a servo position in degrees to uS for the SSC-32
def to_Degrees (uS):
   result = 0

   result = (uS - 1500) / 10

   return result

# Converts an SSC-32 servo position in uS to degrees
def to_uS (degrees):
   result = 0

   result = (degrees * 10) + 1500

   return result

# Wait for a servo move to be completed
def Wait_for_Servos (port):
   ich = ""

   while (ich <> "."):
      Send_Command (port, "Q", True)

      ich = port.read(1)

   return

# Send EOL to the SSC-32 to start a command executing
def Send_EOL (port):
   result = port.write(EOL)

   return result

# Send a command to the SSC-32 with or without an EOL
def Send_Command (port, cmd, sendeol):
   result = port.write (cmd)

   if (sendeol):
      Send_EOL (port)

   return result

#   Open the port at 115200 Bps - defaults to 8N1
sanguino = serial.Serial(SANGUINO_PORT, 38400, timeout = 0, xonxoff = False, rtscts = False, dsrdtr = False)
inp = ''

establishComm(sanguino);

#   Send command to read ultrasonic sensor #0
command = "RI0"
Send_Command (sanguino, command, False)
#Send_EOL (sanguino)

#   Read the response
inp = InByte(sanguino)

#   Show what we got back
print inp

#while (1):
#   inp = inAlpha(sanguino)
#   print inp
#
#   if (inp == 'Q'):
#      exit
#
#   Close the port
sanguino.close()

#   Test the conversion functions
print "600 uS = ", to_Degrees(600), " degrees."
print "2400 uS = ", to_Degrees(2400), " degrees."
print "1500 uS = ", to_Degrees (1500), " degrees."

print "-90 degrees = ", to_uS(-90), " uS."
print "90 degrees = ", to_uS(90), " uS."
print "0 degrees = ", to_uS(0), " uS."


8-Dale

_________________
I can usually handle complexity. It's the [b][i]simple[/i][/b] things that always confound me..
Check out my [url=http://www.hybotics.me]blog[/url] now!
Open your mind, Read, Learn, Think, Apply..


New ( offline )
Posts: 2
Posted: 2011-03-04 00:06 
This is an awesome thread and I find myself wanted to find out more about this project. Is this project still in progress? Any video that shows it in motion?

I am new to the forums.


User avatar
Guru ( offline )
Posts: 2956
Posted: 2011-04-18 18:18 
manintech wrote:
This is an awesome thread and I find myself wanted to find out more about this project. Is this project still in progress? Any video that shows it in motion?

Yes, W.A.L.T.E.R. is still in progress, but development is stalled at present due to lack of funds. I am hoping to aquire a new RoboClaw 2x10 motor controller in a month or so, and next month is my birthday so I'll see what I can do then. :) I've decided to use the RoboClaw 2x10 because it is the same form factor as the SSC-32 and ARC-32 boards, while allowing for future upgrades of motors without changing the controller.

manintech wrote:
I am new to the forums.

WELCOME to the forums!

8-Dale

_________________
I can usually handle complexity. It's the [b][i]simple[/i][/b] things that always confound me..
Check out my [url=http://www.hybotics.me]blog[/url] now!
Open your mind, Read, Learn, Think, Apply..


1, 2, 3, 4, 5, 6 ... 10

All times are UTC - 5 hours [ DST ]. It is currently 2014-10-25 14:54
Feedback Form
Feedback Form