• Jan posted an update 8 years, 10 months ago

    Hi,

    Again a few weeks ago my son Wouter and I demonstrated our first attempt to drive out robot around on an OxBoard. In the mean time we’ve optimised some parts and changed the script so both servo’s are now controlled with one joystick (the left one).
    Script:
    import time

    ############################
    # declare variables
    ############################
    rightPort = “COM3”
    joystickId = 8

    # declare array with values for Left servo
    arrayL = [[0 for x in range(10)] for x in range(10)]
    arrayL[0]=[ 0, 0, 77, 77, 77, 77, 81, 85, 0, 0]
    arrayL[1]=[ 0, 87, 85, 83, 81, 81, 81, 81, 81, 0]
    arrayL[2]=[ 97, 93, 90, 87, 85, 85, 83, 81, 79, 77]
    arrayL[3]=[101, 97, 93, 90, 88, 88, 86, 83, 80, 77]
    arrayL[4]=[105,101, 97, 94, 91, 91, 88, 85, 81, 77]
    arrayL[5]=[105,101, 97, 94, 91, 91, 88, 85, 81, 77]
    arrayL[6]=[105,102, 99, 96, 94, 94, 91, 89, 85, 81]
    arrayL[7]=[105,103,101, 99, 97, 97, 94, 91, 88, 85]
    arrayL[8]=[ 0,103,102,101,101,101, 98, 95, 91, 0]
    arrayL[9]=[ 0, 0,105,105,105,105,101, 97, 0, 0]

    # declare array with values for Right servo
    arrayR = [[0 for x in range(10)] for x in range(10)]
    arrayR[0]=[ 0, 0, 80, 78, 75, 75, 75, 75, 0, 0]
    arrayR[1]=[ 0, 77, 77, 78, 78, 78, 81, 84, 88, 0]
    arrayR[2]=[ 75, 77, 78, 79, 80, 80, 83, 85, 87, 90]
    arrayR[3]=[ 75, 77, 79, 81, 82, 82, 84, 87, 90, 93]
    arrayR[4]=[ 75, 78, 80, 82, 84, 84, 87, 90, 93, 97]
    arrayR[5]=[ 75, 78, 80, 82, 84, 84, 87, 90, 93, 97]
    arrayR[6]=[ 78, 81, 83, 85, 87, 87, 89, 91, 94, 97]
    arrayR[7]=[ 80, 83, 86, 88, 90, 90, 91, 93, 95, 97]
    arrayR[8]=[ 0, 85, 87, 90, 93, 93, 94, 95, 96, 0]
    arrayR[9]=[ 0, 0, 90, 93, 97, 97, 97, 97, 0, 0]

    # declare global variables
    oldX = 0
    oldY = 0

    ############################
    # Start the InMoov Service
    ############################
    i01 = Runtime.createAndStart(“i01”, “InMoov”)

    ############################
    # Start and initialize Torso
    ############################
    torso = i01.startTorso(rightPort)

    # tweaking the torso settings
    torso.midStom.setMinMax(77,105)
    torso.lowStom.setMinMax(75,97)
    torso.midStom.setRest(91)
    torso.lowStom.setRest(84)
    i01.moveTorso(90,torso.midStom.min,torso.lowStom.max)
    sleep(1)
    i01.moveTorso(90,torso.midStom.max,torso.lowStom.min)
    sleep(1)
    i01.moveTorso(90,93,86)

    ############################
    # Start the Joystick service
    ############################
    uberjoy = Runtime.createAndStart(“uberjoy”, “Joystick”)
    uberjoy.setController(joystickId)
    uberjoy.startPolling()

    ############################
    # control functions
    ############################
    def StickXListener(value):
    intValue = int(value)
    positonChanged(intValue, oldY)

    def StickYListener(value):
    intValue = int(value)
    positonChanged(oldX, intValue)

    def positonChanged(Xvalue, Yvalue):
    global oldX
    global oldY
    if ((Xvalue oldX) or (Yvalue oldY)) and (arrayL[Yvalue][Xvalue] > 0) and (arrayR[Yvalue][Xvalue] > 0):
    print “Xvalue:” + str(Xvalue) + ” Yvalue: ” + str(Yvalue)
    print “Move servo left to:” + str(arrayL[Yvalue][Xvalue]) + ” and servo right to:” + str(arrayR[Yvalue][Xvalue])
    i01.moveTorso(90,arrayL[Yvalue][Xvalue],arrayR[Yvalue][Xvalue])
    oldX = Xvalue
    oldY = Yvalue

    ########################################################
    # Left Arm Control (left joystick for lowStom and midStom)
    ########################################################
    uberjoy.map(“x”, -1, 1, 0, 9)
    uberjoy.map(“y”, -1, 1, 0, 9)

    uberjoy.addListener(“publishX”, “python”, “StickXListener”)
    uberjoy.addListener(“publishY”, “python”, “StickYListener”)

    See the result in the short video below. Driving around is still limited because of the usb-cable to the computer. So our next goal is to attach a dedicated PC or tablet to make it “stand-alone”. We also want to experiment with a gyroscope and perhaps some distance sensors connected to the feet-servo’s.

    Best Regards,
    Wouter and Jan Janson

    • Awesome!!!
      This is getting serious!
      I have sent you an email with the part you need for the hips!
      I think it’s great to see how the feet are moving up and down using the same servo system than form the arm pistons.
      I think you will need more than one accelerometer to counter act as body equilibrium.
      Awesome video!