Older blog entries for rudybrian (starting at number 21)

20 Feb 2002 (updated 20 Feb 2002 at 22:35 UTC) »

Last week I finished a reference implimentation of Zaza's new face/voice server in Perl. I debated using either Perl or Java for the server-side components as each has aspects that could be of some use. I finally settled on Perl because it would take less time to put something together that would be stable.

The 'faceServer' application is designed to be scalable to the available computing resources both onboard and offboard the robot. It connects to a Festival server by use of the Festival::Client::Async module. Since Festival's rendering of speech can be rather slow, the Festival server can be located on a higher-speed offboard computer. Speech 'cues' are cached on the local file system for better performance with pre-rendered cues. The Java face applet is notified when new cues have been sent to the server by use of cue ID numbers (10-digit CRC32s of the cue string). The client downloads the waveform and 'script' data and begins playback as soon as it has both files. Since the filenames of each cue are unique, they are cached by the applet so no download is required if the cue has already been 'performed' by the applet.

I still need to spend some time with the applet, but expect to have it operational by Friday afternoon.

As always, the project code can be found here.

The Tech Museum is hosting an 'Engineering WOW Weekend' this Saturday and Sunday. Folks from the HBRC and SFRSA will be there showing off their robotic creations. Zaza will have her first chance to interact with another robot since May of last year. It should be fun ;)

I cleaned up Zaza's goal arrival code a bit on the morning of the 15th and ran for most of the afternoon until her batteries ran out. The new code correctly identifies goal arrival, and initiates a verbal announcement of this.

On the 18th I added a few new 'virtual' security barriers to the planners map of the lower level of the museum which should help to prevent collision with a few 'invisible' obstacles in the Explorations gallery.

Work on the new control interface continues. I completed the dual-machine process monitoring Perl CGI, map applet hooks and CSS frame definitions last Friday. The new startup/shutdown CGI will take some time, but I should be able to complete it this Friday.

Over the last five months I have been searching for a way to replace Zaza's Windows-based face application with something that would run under Linux. Zaza2, the second computer onboard Zaza, has been getting progressively less reliable, and has hamstrung our ability to enhance Zaza's 'personality' by adding voice recognition, face tracking, or other vision applications. I tried Wine and several 'virtual machine' applications to run the application as-is. Unfortunately, either the sound output was horrible, or rendering of the mouth was done too slowly. I ran across a project attempting to synchronize the output from Festival with Ken Perlin's Java face. It doesn't appear that he was sucessfull, but gave me a few ideas. On the 16th I began working on a proof-of-concept to see if I could synchronize the output from Festival with the 13 'visemes' used by the MS SAPI SDK's 'talking microphone' with a Java applet/application. By the evening of the 17th I had a working demo. The applet uses a 'phoneme script' and WAV file produced by Festival to synchronize the audio playback with the appropriate 'viseme' for the phoneme being spoken. The results are encouraging, and prove the viability of this approach. My only lingering concern is performance. The architecture of the new face system will need to address this.

I finally had a chance to clean up the map image rendering routines in Zaza's map applet yesterday. Rather than rendering the map directly to the on-screen canvas after each position update, the canvas is double-buffered for a small speed increase. This should help to localize the source of the reported memory leak in one of the applets.

I spent last Friday working on automating the startup of the Phase III/IV applications and servers. Since two machines are involved, and the startup of some of the servers can be quite lengthy I will be moving the CGI back-end of the control interface to the offboard server. Fortunately this machine has a modern Perl version, so I can clean up the Apache CGI interface.

poslibtcx still has some bugs relating to arrival at goals. Occasionally goal arrival is not registered, and the planner gets out of sync with poslib. I need to update the 'reached goal' routine to correct this, and only allow a single execution at arrival. After these issued have been stabilized, I will stub-in routines, to stop, turn to the goal (or audience) and deliver an informational monolog.

Thanks to support from TRCY club members, we did the first public web interface test with Zaza on December 22. We ran into a few minor problems with the 'poslibtcx' Perl-C interface layer when there are multiple exhibit destinations in the planner. One of the other club members noticed a memory leak in one or both of the applets during the run. I was able to correct the poslibtcx bug, and the following weekend's test went off without a problem.

The Museum's firewall appears to be having some difficulty, and at the moment external access to the video and web interface is not available, but should be again by Friday afternoon.

After several months of neglect, I finally had a chance to update each section of the main Zaza site last week.

Thanks to the IT folks at the Tech, Zaza's webcam has one less layer of firewall to penetrate so I have been able to boost the speed a bit. The live video page has been updated to allow users of IE access to a slightly faster stream thanks to an ActiveX control that provides server-push support. For some reason my perl CGI isn't outputting MJPEG's that Netscape and Mozilla like, so for the moment the speed increase can only be enjoyed by IE users. I am planning to spend some working on the problem this Friday before the following day's run.

10 Nov 2001 (updated 5 Dec 2001 at 07:04 UTC) »
Zaza will being running again tomorrow from 1:30pm-3:30pm PST. We have had to move the times around a bit to suit the needs of all participants, so take a look at the online operating schedule if you want to plan to come see her.

The live video page and the webcam applet have been updated, and should now work on nearly every browser, thanks to the Sun Java plugin.

Time for another update...

Since the launch last month we have run Zaza every Saturday. As expected, we ran into a few minor problems, but have worked most of the kinks out by now.

I put together a few Perl scripts to push images from behind the museum's firewall to an outside web server. Eventually this will be done by more efficient means, but the existing system works quite well. Video from the control room and from the robot (when online) is available here.

I managed to clean up a few more bugs on poslib's simulator, and added automatic timeouts to visited goals. This allows testing without manual intervention for visited goal reset.This thing is nearly ready for public testing...

Just a random note: My old HP 1722B oscilloscope looke like it is ready to give up the ghost. I can no longer focus a trace on the CRT, and after spending some time poking around inside, it looks like the CRT is failing. The tubes are no longer available, so it seems as though it is the end for this scope. I did some research on the availability of stand-alone (with PC-connectivity) and USB scopes, and was very dissapointed with the offerings (and prices). It seems test equiment market is a bit behind the times and are just now beginning to offer connectivity options like USB and ethernet. In my searches, I found references to the BitScope in a 1998 article in Circuit Cellar, a few Linux UG's and a few PIC developer sites. This thing is impressive. It's a two channel, 100MHz, PIC-based oscilloscope and 8-port logic analyzer with a 115k serial port. Both Linux and Windows applications have been written for it, and it's under continuous open hardware and software development. A kit is available for $250 on the BitScope website.

I spent some more time on the applet JScrollPane buffer overflow bug and found a workaround. Skipping the next screen repaint after changing the zoom level seems to have resolved the problem.

Next Saturday the 29th is the official rollout of the Zaza public program at the Tech Museum. The online program schedule can be found here. We are initially deploying with Phase II functionality. This will allow the program to evolve as additional features are added.

After the incident on the 11th, I started reviewing some of my earlier research on 3 and 4 rotor VTVL platforms. Something tells me that both teleoperated and autonomous plaforms of this type will have a strong role in the days to come...


  • MIT Zero G Eye
  • FFMP Bookmarks
  • Sikorsky CYPHER
  • Build your own Roswell Flyer
  • Commercial 4-rotor version
  • Ian's GizmoCopter
  • OpenVTVL

    I was able to make some headway on enhancing Zaza's Java map applet this past week. I added much-needed scrollbars allowing proper resizing of the applet window, three zoom levels, and auto-tracking. Each is user-selectable from buttons on a simple toolbar (see screenshot) There is one lingering bug that causes a buffer overflow under certain circumstances, but happens fairly infrequently. I also slapped together a CSS page, and some content pages for a simple user interface.

  • The public tests on Aug 25th and 26th went quite well. The museum was fairly crowded, and provided an ideal worst-case testing environment. On the 25th the museum had live bats nearby where we were planning to run Zaza. During a startup test the robot began firing her sonars and the bats went berzerk! Fortunately, they didn't seem to mind when we operated the robot a little further away.

    The simulator is coming along nicely, but still needs some work before public testing can be allowed.

    I have started work on enhancing the Java applet to give client-side control of map zoom level.

    12 older entries...

    Share this page