Featured Posts

Biped robot kicks a ball .. and has a great fall

Posted by Mike Redrobe | Posted in robots, Technology | Posted on 17-08-2013



Kicking a ball:

Kicking  a ball

The kicking action runs the knee/hip servos at full speed, instead of slow smoothly interpolated sweeps like used in walking/ leaning

Servo.hip = 90
Servo.hip= 140


For sweep in range (90, 140):
Servo.hip = sweep
time.sleep (0.1)

Here’s a quick vid of it falling over when the battery pack detached, causing it to lose balance:

Pi biped

Raspberry Pi Biped Robot

Posted by Mike Redrobe | Posted in robots, Technology | Posted on 16-06-2013


2013-06-16 16.44.10

This is a biped based on the BRAT design from a few years ago, updated to be controlled by the raspberry pi and so giving access to usb peripherals, camera wifi etc.

The robot is a 6 servo biped walker featuring three degrees of freedom (DOF) per leg. The robot can walk forward or backwards and turn in place left or right with variable speed. It can even do lots of Robo-One style acrobatic moves.

Currently using the interrupt driven servoblaster software to drive 6 servos.

2013-06-16 17.02.14

Arms and head will increase the servo count, so may offload servo processing to an arduino in addition to the raspberry pi.

Balancing robot – without gyros

Posted by Mike Redrobe | Posted in Arduino, robots | Posted on 25-05-2012

Tags: , , ,


Bot balancing without gyros … for a few seconds at least

No gyros, no accelerometers – only a sonar ranger and lots of code.

The motors used are standard servos modified for continuous rotation, sonar sensor is a HC-SR04 as detailed in a previous post

Code ? Well here’s a simplified portion of the PID loop:

    int Drive = 0; // PWM value sent to Servos
    int Error[5]; // array of 5 Error elements
    int P = 0; // proportional term
    int I = 0; // integral term
    int D = 0; // derivative term

    #define Current 0
    #define Sum 1
    #define Last 2
    #define SecondToLast 3
    #define Delta 4

    int PID() {
    Error[Current] = SetPoint – Ptime;
    P = Error[Current] * Kp;
    Error[Sum] = Error[Current] + Error[Last] + Error[SecondToLast];
    I = Error[Sum] * Ki;
    Error[Delta] = Error[Current] – Error[Last];
    D = Error[Delta] * Kd;
    Drive = P + I + D;
    Error[SecondToLast] = Error[Last];
    Error[Last] = Error[Current];

    return Drive;