Talk:Cheesoid: Difference between revisions

From Nottinghack Wiki
Jump to navigation Jump to search
No edit summary
Line 21: Line 21:
* using sphinx for speech recognition
* using sphinx for speech recognition


=== speech recognition with sphinx ===
http://cmusphinx.sourceforge.net/wiki/tutorialconcepts
The sphinx packages
<div>
<pre>
p    --\ sphinx2-bin                                                                                                                    <none>    0.6-2.1
  Description: speech recognition utilities
    Sphinx 2 is a real-time, speaker-independent speech recognition system.
    This package contains examples and utilities that use Sphinx. It also includes a sample language model that is capable of recognizing simple commands
    like "go forward ten meters" and other commands one might use to tell a robot where to move.
  Priority: optional
  Section: universe/sound
  Maintainer: Ubuntu MOTU Developers <ubuntu-motu@lists.ubuntu.com>
  Compressed size: 129k
  Uncompressed size: 500k
  Source Package: sphinx2
  --\ Depends (3)
    --- libc6 (>= 2.4)
    --- libsphinx2g0 (>= 0.6) (UNSATISFIED)
    --- sphinx2-hmm-6k (UNSATISFIED)
  --\ Packages which depend on sphinx2-bin (0)
  --\ Versions of sphinx2-bin (1)
p    0.6-2.1
</pre>
</div>


Good examples of the use of sphinx: -
Good examples of the use of sphinx: -
Line 56: Line 85:
* building the wheels/axles/bearing hubs: nearly done - some tweaking and securing to do
* building the wheels/axles/bearing hubs: nearly done - some tweaking and securing to do


* building the plastic chassis - what's that display board plastic material called?
* building the plastic chassis
** milling the plastic
** what's that display board plastic material called?
** is it http://www.foamcore.com/ultra-board.html
** milling the plastic - is nicely cut with a fine jigsaw blade - try router table!
** can it be laser cut? may contain chlorine or other nasties: see http://www.nycresistor.com/2008/08/28/how-to-identify-polymers-with-burnination/
** can it be laser cut? may contain chlorine or other nasties: see http://www.nycresistor.com/2008/08/28/how-to-identify-polymers-with-burnination/
** strong enough to carry those batteries? !!!!
 
* battery regulation: http://letsmakerobots.com/node/3880
* battery mounting - where?
** chassis strong enough to carry those batteries? !!!!
** aluminium cross bracing?
** aluminium cross bracing?
* battery mount - where?
** perhaps move to 2x 6V - keep it flexible
** perhaps move to 2x 6V - keep it flexible
* battery regulation: http://letsmakerobots.com/node/3880


OK, motors tested with a two motor circuit...
OK, motors tested with a two motor circuit...
Line 227: Line 259:


=== goal/job list ===
=== goal/job list ===
Take to HS:  
HS:  
* boxfile, eeepc, station clock antenna, wheel assemblies,
* big battery station? nah,
* backup multimeter and hook probes - label it and solder plugs onto probe wires
* backup multimeter and hook probes - label it and solder plugs onto probe wires


DO: -
** 40mm al angle motor mounts
** test charged 12V battery and examine the available 6V and 12V batteries
* Look into voice commands using sphinx
** http://cmusphinx.sourceforge.net/wiki/tutorialconcepts
** try the sphinx packages
<div>
<pre>
p    --\ sphinx2-bin                                                                                                                    <none>    0.6-2.1
  Description: speech recognition utilities
    Sphinx 2 is a real-time, speaker-independent speech recognition system.
    This package contains examples and utilities that use Sphinx. It also includes a sample language model that is capable of recognizing simple commands
    like "go forward ten meters" and other commands one might use to tell a robot where to move.
  Priority: optional
  Section: universe/sound
  Maintainer: Ubuntu MOTU Developers <ubuntu-motu@lists.ubuntu.com>
  Compressed size: 129k
  Uncompressed size: 500k
  Source Package: sphinx2
  --\ Depends (3)
    --- libc6 (>= 2.4)
    --- libsphinx2g0 (>= 0.6) (UNSATISFIED)
    --- sphinx2-hmm-6k (UNSATISFIED)
  --\ Packages which depend on sphinx2-bin (0)
  --\ Versions of sphinx2-bin (1)
p    0.6-2.1
</pre>
</div>


* pizza box mods
* pizza box mods

Revision as of 18:15, 3 October 2011

Interaction Goals

Cheesoid is intended to be a fully autonomous robot that interacts with people and objects in its environment. Human-Robot interaction is a massive subject but I intend to get some rudimentary (and comedic) speech and general input features in place as soon as possible. The environment interactions will develop as I learn more about sensing and mapping. Since the robot will live at Hackspace I have two basic goals for comedy value: -

  • interact with the fridge for cheese status
  • interact with the petrol pump for petrol status

So...

  • it needs to know where they are to go and talk to them
  • the status needs to be stored and needs to be set - Xino at each? Via IRC bot? Some web interface?
  • it need to be able to read the status from the fridge and the petrol pump - what sort of interface? IR remote control?

Petrol status

  • just a number!

Cheese status

  • many cheese types - each with use by date
  • Primula status is "in tube"

Human - Robot Interactions: speech

With the eeePC I have a very capable processor on board and I'm taking full advantage of that: -

  • using espeak for text to speech
  • using sphinx for speech recognition


speech recognition with sphinx

http://cmusphinx.sourceforge.net/wiki/tutorialconcepts

The sphinx packages

p    --\ sphinx2-bin                                                                                                                    <none>     0.6-2.1
  Description: speech recognition utilities
    Sphinx 2 is a real-time, speaker-independent speech recognition system.

    This package contains examples and utilities that use Sphinx. It also includes a sample language model that is capable of recognizing simple commands
    like "go forward ten meters" and other commands one might use to tell a robot where to move.
  Priority: optional
  Section: universe/sound
  Maintainer: Ubuntu MOTU Developers <ubuntu-motu@lists.ubuntu.com>
  Compressed size: 129k
  Uncompressed size: 500k
  Source Package: sphinx2
  --\ Depends (3)
    --- libc6 (>= 2.4)
    --- libsphinx2g0 (>= 0.6) (UNSATISFIED)
    --- sphinx2-hmm-6k (UNSATISFIED)
  --\ Packages which depend on sphinx2-bin (0)
  --\ Versions of sphinx2-bin (1)
p    0.6-2.1

Good examples of the use of sphinx: -

Mobility

  • motors
  • wheels
  • chassis
  • motor power
  • motor control circuitry
  • big battery

Drive motors: I now have my 12V 150RPM gearmotors from China

  • battery regulation: http://letsmakerobots.com/node/3880
  • battery mounting - where?
    • chassis strong enough to carry those batteries? !!!!
    • aluminium cross bracing?
    • perhaps move to 2x 6V - keep it flexible

OK, motors tested with a two motor circuit...

Motor Test sketch (non-PWM)

int motor_left[] = {
  2, 3};
int motor_right[] = {
  7, 8};
const int ledPin = 13;      // LED 
const int switchPin = 10;    // switch input
const int enablePin = 9;    // H-bridge enable pin


// ————————————————————————— Setup
void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
  pinMode(switchPin, INPUT); 
  pinMode(enablePin, OUTPUT);


  // Setup motors
  int i;
  for(i = 0; i < 2; i++){
    pinMode(motor_left[i], OUTPUT);
    pinMode(motor_right[i], OUTPUT);
  }
  check_enable();
  // blink the LED 3 times. This should happen only once.
  // if you see the LED blink three times, it means that the module
  // reset itself,. probably because the motor caused a brownout
  // or a short.
  blink(ledPin, 3, 100);

}


void check_enable(){
  digitalWrite(enablePin, digitalRead(switchPin));
}
// ————————————————————————— Loop
void loop() {

  drive_forward();
  delay(1000);
  motor_stop();
  Serial.println("1");

  drive_backward();
  delay(1000);
  motor_stop();
  Serial.println("2");

  turn_left();
  delay(1000);
  motor_stop();
  Serial.println("3");

  turn_right();
  delay(1000);
  motor_stop();
  Serial.println("4");

  motor_stop();
  delay(1000);
  motor_stop();
  Serial.println("5");
}

// ————————————————————————— Drive

void motor_stop(){
  check_enable();
  digitalWrite(motor_left[0], LOW);
  digitalWrite(motor_left[1], LOW);

  digitalWrite(motor_right[0], LOW);
  digitalWrite(motor_right[1], LOW);
  delay(25);
}

void drive_forward(){
  check_enable();
  digitalWrite(motor_left[0], HIGH);
  digitalWrite(motor_left[1], LOW);

  digitalWrite(motor_right[0], HIGH);
  digitalWrite(motor_right[1], LOW);
}

void drive_backward(){
  check_enable();
  digitalWrite(motor_left[0], LOW);
  digitalWrite(motor_left[1], HIGH);

  digitalWrite(motor_right[0], LOW);
  digitalWrite(motor_right[1], HIGH);
}

void turn_left(){
  check_enable();
  digitalWrite(motor_left[0], LOW);
  digitalWrite(motor_left[1], HIGH);

  digitalWrite(motor_right[0], HIGH);
  digitalWrite(motor_right[1], LOW);
}

void turn_right(){
  check_enable();
  digitalWrite(motor_left[0], HIGH);
  digitalWrite(motor_left[1], LOW);

  digitalWrite(motor_right[0], LOW);
  digitalWrite(motor_right[1], HIGH);
}

/*
    blinks an LED
 */
void blink(int whatPin, int howManyTimes, int milliSecs) {
  int i = 0;
  for ( i = 0; i < howManyTimes; i++) {
    digitalWrite(whatPin, HIGH);
    delay(milliSecs/2);
    digitalWrite(whatPin, LOW);
    delay(milliSecs/2);
  }
}

This sketch is a munge of http://letsmakerobots.com/node/2074 and http://itp.nyu.edu/physcomp/Labs/DCMotorControl

I want to have motor enable based on digital logic as this will be controlled by bumper and cliff sensors

Range Sensors

Xino upgrades

PIN usage on main Xino

  • PWM capable pins: 3,5,6,9,10,11
  • Dig out x2 for eyes
  • Dig in for mode switch
  • dig out for beacon on pin 13
  • motor enable dig out
  • PWM x4 for motor logic control - can it be reduced?
  • bumper and cliff inputs - use serial mux?
  • others!

PIN usage summary table...

TODO

goal/job list

HS:

  • backup multimeter and hook probes - label it and solder plugs onto probe wires


  • pizza box mods
    • power port extension
    • USB extension - USB hub
    • PWR switch extension - LED in "Micro", PWR switch? Monostable/bistable startup flasher circuit for "Micro" switch
#!/bin/sh
LID_STATE=`cat /proc/acpi/button/lid/LID/state | awk '{print $2 }'`

if [ $LID_STATE = "closed" ] ; then
#    /etc/acpi/suspend2ram.sh
        /bin/su user -c "/usr/bin/xrandr --output VGA --mode 800x600 --output LVDS --off"
fi
if [ $LID_STATE = "open" ] ; then
        /bin/su user -c "/usr/bin/xrandr --output LVDS --preferred --output VGA --off"
fi
exit 0


  • cylinder case mods
    • speakers in mouth plate/grill
    • side mount for Xino and boards
    • top for beacon - keep on side for now
    • mounting of cylinder on pizza box
  • Xino/UNO main sketch code
    • motor drive code and motor drive commands from PC
    • speech commands from
  • PC app code
    • console read and process
    • speech module
      • speech commands from stdin
      • speech thread - busy flag and job queue management
    • motor module
      • motor control input from STDIN
    • sensor module
    • camera module - look at Java interaction with V4L or whatever is in use
    • mic input - and speech recognition
    • GUI interface port and GUI app

--Michael Erskine 11:38, 28 September 2011 (EST)

Rotary Encoders for wheels

  • an easily available "obsolete" ball type PS/2 mouse
  • Microsoft "Mouse Port Compatible Mouse 2.0A"
  • using the serial output from the mouse circuitry
  • encoder usage in daylight
  • mounting encoder wheel to axle


eeePC problems

  • unionfs inode depletion causing "No space left on device" but df shows plenty of space!
  • running out of space due to other errors ~/.Xsession-errors
  • firefox won't start - oh well!


work!

Motor shaft couplings being the most annoying thing right now

  • I really need some well made couplings like these