Difference between revisions of "Tux Droid"

From YobiWiki
Jump to navigation Jump to search
m (Reverted edits by Etegohy (Talk) to last revision by PhilippeTeuwen)
 
(66 intermediate revisions by 2 users not shown)
Line 9: Line 9:
   
 
===Sites===
 
===Sites===
* [http://www.kysoh.com Keep Your Sense Of Humor]
+
* [http://www.kysoh.com Keep Your Sense Of Humor] Commercial site
* [http://www.tuxisalive.com/ Tux is alive!]
+
* [http://www.tuxisalive.com/ Tux is alive!] Community site ([http://www.tuxisalive.com/recently_modified recent changes])
* [http://www2.tux-is-alive.com/wiki/Main_Page Tux Droid development wiki]
+
* [http://wiki.tuxisalive.com/index.php/Main_Page Tux Droid development wiki]
  +
* [http://193.190.210.23/irclogs/index.html Logs] of the IRC channel #tuxdroid on irc.freenode.net
===First try===
 
  +
* Blogs aggregated [http://www.tuxisalive.com/siteplanet_view/ flatted] or [http://www.tuxisalive.com/tux-droid-forum/Members/jaguarondi/planet/ summarized]
* Plugging everything, and I get immediately a new Alsa device:
 
  +
* [http://www.tuxisalive.com/tux-droid-forum Forum]
  +
* Mailing lists
  +
** [https://lists.sourceforge.net/lists/listinfo/tux-droid-user tux-droid-user]
  +
** [https://lists.sourceforge.net/lists/listinfo/tux-droid-svn tux-droid-svn]
  +
** tux@kysoh.com was the old one(?)
  +
* [https://svn.kysoh.com Subversion server]
  +
* Bugreports
  +
** [http://www.tuxisalive.com/issue-trackers/tux-daemon/ daemon]
  +
** [http://www.tuxisalive.com/issue-trackers/firmware firmware/hardware]
  +
** [http://www.tuxisalive.com/issue-trackers/api API]
  +
** [http://www.tuxisalive.com/issue-trackers/tuxup bootloader]
  +
* Atmel
  +
** [http://www.atmel.com/dyn/products/product_card.asp?part_id=3302 ATmega88]
  +
  +
===Audio===
  +
* Plugging everything for the first time, and I got immediately a new Alsa device:
 
cat /proc/asound/cards
 
cat /proc/asound/cards
 
...
 
...
Line 20: Line 36:
 
And I can already place an Ekiga test call :-)
 
And I can already place an Ekiga test call :-)
 
<br>Note that echo between internal speaker and microphone is very important so echo tests are quite terrible!
 
<br>Note that echo between internal speaker and microphone is very important so echo tests are quite terrible!
  +
<br>Using the OSS emulation, I can play whatever I want:
  +
mpg321 -o oss -a /dev/dsp2 /path/to/some/mp3
  +
mplayer -ao oss:/dev/dsp2 http://www.paul.sladen.org/pronunciation/torvalds-says-linux.mp3
  +
Or using the native alsa layer:
  +
mplayer -ao alsa:device=plughw=2.0 http://www.paul.sladen.org/pronunciation/torvalds-says-linux.mp3
  +
Or using esound:
  +
esd -d plughw:2,0
  +
mplayer -ao esd http://www.paul.sladen.org/pronunciation/torvalds-says-linux.mp3
  +
  +
XMMS:
  +
* Select alsa output plugin -> configure -> type "plughw:1,0" manually and select software volume control.
  +
* Select OSS output plugin -> configure -> USB but then no volume control is possible.
  +
* Select esound output plugin and launch esd as shown above
  +
  +
===Reflashing===
  +
Then I learn that to run the new (alpha2) tuxdaemon I'll also need to flash the stuffed pinguin.
  +
<br>Instructions are given [http://www.tuxisalive.com/documentation/how-to/updating-the-firmware on the web site] and are not... straightforward.
  +
  +
Additional notes:
  +
* Be sure to have installed properly libusb and to have mounted /proc/bus/usb, cf /usr/share/doc/libusb-0.1-4
  +
** For users to have the right to access usbfs, change /etc/udev/rules.d/020_permissions.rules and add GROUP=usb:
  +
SUBSYSTEM=="usb_device", MODE="0664", GROUP="usb"
  +
* Recompile dfu-programmer from sources! I first tried alien on the rpm but there were glibc problems and when trying tuxup fuxusb.hex I got the following "common problem" but here it's really not because of permission problems.
  +
Programming fuxusb.hex in USB CPU
  +
Tux not found on USB
  +
* They explain about tuxup fuxrf.hex and tuxup --main . but I had also to fix the tux rf counterpart: tuxup tuxrf.hex
  +
* At the end, replug the dongle and restart the tux
  +
===Compiling a firmware===
  +
apt-get install gcc-avr avr-libc gdb-avr
  +
Follow the [http://www.tuxisalive.com/documentation/how-to/setup-the-avr-tool-chain-and-compile-the-firmware howto] starting from SVNWCRev section.
  +
<br>To get the proper header files to compile SVNCRev:
  +
apt-get install libsvn-dev
  +
And edit svncrev-0.1/config.mk to fix the following path:
  +
APR_INCLUDE=/usr/include/apr-1.0
  +
===Personalizing the firmware===
  +
For basic stuff, we'll only change the tuxcore.eep file where are stored the basic standalone behaviors.
  +
<br>Edit common/config.h based on commands listed in common/commands.h
  +
<br>Each line is one first byte (what for?) then a frame of 4 bytes to combine between 1 and 4 commands as explained in commands.h
  +
<br>My first personalized firmware has the following behavior:
  +
<br>Eyes closed when no rf link and opened when rf link is established.
  +
<br>Note that it would be easier if there was a CLOSE_EYES_CMD
  +
<br>I solved it by using the seq "OPEN_EYES_CMD, BLINK_EYES_CMD, 1, 0"
  +
  +
===Remote Control===
  +
(from the forum)
  +
<br>Press 'ALT' then 'Tux and phone' and you're in test mode.
  +
<br>The arrows should move tux, if you press a digit key, you change the number of movements. So 4 then up will move the eyes 4 times (2 blinks: close - open -close - open)
  +
<br>Read firmware/tuxcore/trunk/standalone.c l262 to see all possiblities
  +
===Raw commands===
  +
gtdi allows to send raw commands, see /firmware/tuxdefs/commands.h
  +
  +
===Misc Tips===
  +
* First time, don't forget to plug Tux to the power adaptor for a while (~5h)
  +
* Want to get Acapela Telecom? It's actually available as the [http://www.tuxisalive.com/software/tts-daemon tts-daemon]
  +
  +
===Misc Problems===
  +
* tuxdaemon from svn eats all CPU when running daemonised :-(
  +
* tuxttsdaemon launched by gtdi eated 100% cpu after a while with tux off
  +
* gtdi
  +
** source to be modified: add a space between gnome-terminal -e and "the_commands"
  +
** should check for the presence of gnome--terminal or fallback to xterm
  +
** tuxttsdaemon button desync
  +
* wrong comments in commands.h 0x1A & 0x1B control both leds
  +
* we should have save/restore raw commands for led & position
  +
  +
===Misc Questions===
  +
* How to control the volume by software?
  +
* How tuxes see each other? They ping constantly through IR (from the right eye) as it can be seen through a webcam.
  +
* How a dongle and a tux are paired? What if many tuxes are present simultaneously?
  +
  +
===Misc===
  +
* Voice recognition
  +
** Here is a project to help open source developers make their project work better by submitting your speech samples to add them to a speech corpus used to train 4 open source projects that work on that task: http://www.voxforge.org/home
  +
** Here is the wiki page about speech recognition on the official's Tux droid development wiki: http://wiki.tuxisalive.com/index.php/Speech_recognition
  +
  +
===Python===
  +
====Examples====
  +
I don't know python so for those who don't know it neither, here's a small snippet to start with (from Fosdem presentation):
  +
<source lang=python>
  +
#!/usr/bin/python
  +
  +
import sys
  +
sys.path.append('/opt/tuxdroid/api/python')
  +
from tux import *
  +
  +
tux.tts.select_voice(3,150)
  +
tux.cmd.leds_blink(200,10)
  +
tux.cmd.mouth_on_free(22)
  +
tux.tts.speak("The box said: 'Requires Windows 95 or better', so I installed LINUX")
  +
tux.cmd.eyes_on_free(4)
  +
tux.cmd.wings_on_free(4)
  +
tux.tts.speak("ha ha ha")
  +
if tux.event.wait_head_bt_pushed(60):
  +
tux.tts.speak("Ouch! That hurts!")
  +
</source>
  +
Problem: sometimes there is a delay before the speech and then movements/speech get desync.
  +
<br>It could be nice to get events from tts daemon when starting and stopping the speech.
  +
  +
To launch gtdi from /usr/local/bin/gtdi I wrote a little bash script:
  +
<source lang=bash>
  +
#!/bin/bash
  +
  +
cd /opt/tuxdroid/lib/gtdi
  +
./gtdi.py
  +
</source>
  +
  +
To get an interactive python shell I wrote this script /usr/local/bin/tuxsh:
  +
<source lang=bash>
  +
#!/bin/bash
  +
  +
python -i -c "import sys;sys.path.append('/opt/tuxdroid/api/python');from tux import *"
  +
</source>
  +
You can run it interactively or piping some commands:
  +
echo 'tux.cmd.mouth_open()'|./tuxsh
  +
====Python API====
  +
List of functions can be generated by
  +
<pre>
  +
gawk '/^class/{match($0,/class +TUX(.*)\(object\):/,a);
  +
if(a[1]=="TCPCommunicator")c=""; else c=tolower(a[1])"."}
  +
/^ +def/ && !/__init__/{$0=gensub(/^ +def (.*)self,?(.*):/,"tux." c "\\1\\2",1);print}'\
  +
/opt/tuxdroid/api/python/tuxapi_class.py
  +
</pre>
  +
  +
Or much cleaner:
  +
tux.misc.build_documentation('/tmp/tuxapi.html')
  +
tux.misc.doc(tux)
  +
tux.misc.doc(tux.hw)
  +
...
  +
  +
Try also help(tux.cmd)
  +
  +
===IR===
  +
* http://www2.tux-is-alive.com/wiki/Freaks_Asking_Questions#How_to_get_an_IR_RC5_code_from_the_API.3F
  +
* Looks like some of the keys of my remote are RC5 and some not... I'll try with lirc-audio hw to capture raw streams and analysing them.

Latest revision as of 21:33, 24 November 2010

Introduction

_The_ gadget any linux geek should have ;-)

Moreover it is designed in Belgium, tadaam!

Having kids can help justifying such a, hum, impulsive buy ;-)

http://www2.tux-is-alive.com/mediawiki/images/thumb/b/b9/Tux-proto.jpg/200px-Tux-proto.jpg

Sites

Audio

  • Plugging everything for the first time, and I got immediately a new Alsa device:
cat /proc/asound/cards
...
2 [default        ]: USB-Audio - TUX RF DONGLE 
                     C2ME BELGIUM TUX RF DONGLE  at usb-0000:00:1d.2-1, full speed

And I can already place an Ekiga test call :-)
Note that echo between internal speaker and microphone is very important so echo tests are quite terrible!
Using the OSS emulation, I can play whatever I want:

mpg321 -o oss -a /dev/dsp2 /path/to/some/mp3
mplayer -ao oss:/dev/dsp2 http://www.paul.sladen.org/pronunciation/torvalds-says-linux.mp3

Or using the native alsa layer:

mplayer -ao alsa:device=plughw=2.0 http://www.paul.sladen.org/pronunciation/torvalds-says-linux.mp3

Or using esound:

esd -d plughw:2,0
mplayer -ao esd http://www.paul.sladen.org/pronunciation/torvalds-says-linux.mp3

XMMS:

  • Select alsa output plugin -> configure -> type "plughw:1,0" manually and select software volume control.
  • Select OSS output plugin -> configure -> USB but then no volume control is possible.
  • Select esound output plugin and launch esd as shown above

Reflashing

Then I learn that to run the new (alpha2) tuxdaemon I'll also need to flash the stuffed pinguin.
Instructions are given on the web site and are not... straightforward.

Additional notes:

  • Be sure to have installed properly libusb and to have mounted /proc/bus/usb, cf /usr/share/doc/libusb-0.1-4
    • For users to have the right to access usbfs, change /etc/udev/rules.d/020_permissions.rules and add GROUP=usb:
SUBSYSTEM=="usb_device",        MODE="0664", GROUP="usb"
  • Recompile dfu-programmer from sources! I first tried alien on the rpm but there were glibc problems and when trying tuxup fuxusb.hex I got the following "common problem" but here it's really not because of permission problems.
Programming fuxusb.hex in USB CPU
Tux not found on USB
  • They explain about tuxup fuxrf.hex and tuxup --main . but I had also to fix the tux rf counterpart: tuxup tuxrf.hex
  • At the end, replug the dongle and restart the tux

Compiling a firmware

apt-get install gcc-avr avr-libc gdb-avr

Follow the howto starting from SVNWCRev section.
To get the proper header files to compile SVNCRev:

apt-get install libsvn-dev

And edit svncrev-0.1/config.mk to fix the following path:

APR_INCLUDE=/usr/include/apr-1.0

Personalizing the firmware

For basic stuff, we'll only change the tuxcore.eep file where are stored the basic standalone behaviors.
Edit common/config.h based on commands listed in common/commands.h
Each line is one first byte (what for?) then a frame of 4 bytes to combine between 1 and 4 commands as explained in commands.h
My first personalized firmware has the following behavior:
Eyes closed when no rf link and opened when rf link is established.
Note that it would be easier if there was a CLOSE_EYES_CMD
I solved it by using the seq "OPEN_EYES_CMD, BLINK_EYES_CMD, 1, 0"

Remote Control

(from the forum)
Press 'ALT' then 'Tux and phone' and you're in test mode.
The arrows should move tux, if you press a digit key, you change the number of movements. So 4 then up will move the eyes 4 times (2 blinks: close - open -close - open)
Read firmware/tuxcore/trunk/standalone.c l262 to see all possiblities

Raw commands

gtdi allows to send raw commands, see /firmware/tuxdefs/commands.h

Misc Tips

  • First time, don't forget to plug Tux to the power adaptor for a while (~5h)
  • Want to get Acapela Telecom? It's actually available as the tts-daemon

Misc Problems

  • tuxdaemon from svn eats all CPU when running daemonised :-(
  • tuxttsdaemon launched by gtdi eated 100% cpu after a while with tux off
  • gtdi
    • source to be modified: add a space between gnome-terminal -e and "the_commands"
    • should check for the presence of gnome--terminal or fallback to xterm
    • tuxttsdaemon button desync
  • wrong comments in commands.h 0x1A & 0x1B control both leds
  • we should have save/restore raw commands for led & position

Misc Questions

  • How to control the volume by software?
  • How tuxes see each other? They ping constantly through IR (from the right eye) as it can be seen through a webcam.
  • How a dongle and a tux are paired? What if many tuxes are present simultaneously?

Misc

Python

Examples

I don't know python so for those who don't know it neither, here's a small snippet to start with (from Fosdem presentation):

#!/usr/bin/python

import sys
sys.path.append('/opt/tuxdroid/api/python')
from tux import *

tux.tts.select_voice(3,150)
tux.cmd.leds_blink(200,10)
tux.cmd.mouth_on_free(22)
tux.tts.speak("The box said: 'Requires Windows 95 or better', so I installed LINUX")
tux.cmd.eyes_on_free(4)
tux.cmd.wings_on_free(4)
tux.tts.speak("ha ha ha")
if tux.event.wait_head_bt_pushed(60):
    tux.tts.speak("Ouch! That hurts!")

Problem: sometimes there is a delay before the speech and then movements/speech get desync.
It could be nice to get events from tts daemon when starting and stopping the speech.

To launch gtdi from /usr/local/bin/gtdi I wrote a little bash script:

#!/bin/bash

cd /opt/tuxdroid/lib/gtdi
./gtdi.py

To get an interactive python shell I wrote this script /usr/local/bin/tuxsh:

#!/bin/bash

python -i -c "import sys;sys.path.append('/opt/tuxdroid/api/python');from tux import *"

You can run it interactively or piping some commands:

echo 'tux.cmd.mouth_open()'|./tuxsh

Python API

List of functions can be generated by

gawk '/^class/{match($0,/class +TUX(.*)\(object\):/,a);
               if(a[1]=="TCPCommunicator")c=""; else c=tolower(a[1])"."}
      /^ +def/ && !/__init__/{$0=gensub(/^ +def (.*)self,?(.*):/,"tux." c "\\1\\2",1);print}'\
/opt/tuxdroid/api/python/tuxapi_class.py

Or much cleaner:

tux.misc.build_documentation('/tmp/tuxapi.html')
tux.misc.doc(tux)
tux.misc.doc(tux.hw)
...

Try also help(tux.cmd)

IR