Tekkotsu Version History Archive

Downloads Index

This is the Version History Archive

Please visit the main Version History page for current releases



Patch: All/Proj

Binaries:ERS-2xx, ERS-7, GUI
  • API Changes
    • LedEngine now requires a milliseconds argument for flash() and cflash(), added another flash() that takes a value parameter to specify what level to flash at.
    • LoadSave::LoadFile(FILE* f) and SaveFile(FILE* f) are renamed LoadFileStream() and SaveFileStream() to avoid conflicts with LoadFile/SaveFile(char * filename)
  • Bug Fixes:
    • TekkotsuMon windows are opening/closing now handled much more intelligently
      • If the robot reboots and you leave a window open, when the ControllerGUI reconnects it will attempt to relaunch the server on the Aibo which had opened the window so it can reconnect.
      • Solves problems with VisionGUI (RawCam/SegCam) getting out of sync with the server on the Aibo (clicking the button would close the server but open the window, or open the server and close the window... not obvious to the user why it wasn't connecting)
    • CameraBehavior
      • Uses static memory to work around apparent large memory allocation bug (in system libraries?)
      • Now saves raw images using InterleavedYUVGenerator instead of RawCameraGenerator.  You probably have a better shot at a graphics program being able to throw away the interleaved header (53 bytes) and then just grabbing the YCbCr data than you did of having it throw away the RawCamera header (42 bytes) before each of 3 separate image channels concatenated together.
      • Still saves in an odd little format of our own, I recommend someone implementing TIFF encoding (which is apparently pretty easy) if you want lossless image storage on the memory stick.
    • A pink ball threshold file for vision segmentation is now included (ms/config/7red.tm) - had been prepared for 2.0, but never actually checked in.
    • HeadPointerControllerBehavior (accessed through HeadPointGUI) had only been moving the head joints in positive directions (up and to the left).
    • TekkotsuMon windows now reopen at the same place you last closed them (had been sliding down and to the right each time)
    • VisionGUI will respect the "Lock Aspect Ratio" button
    • WorldStateSerializerBehavior was sending one too few PID duty sensor readings
    • Several compilation issues using FILENAME_CASE=upper are now resolved
    • Virtual "A/B Mode LED" on ERS-7 now has a linear response (had been using the "gamma correction" of the real LEDs)
    • The demo behavior, AlanBehavior, had its PostureMC autopruning, but shouldn't
    • SavePostureControl now interprets paths of the filenames correctly
    • seg/VisionTrain.java compiles now (how'd that get through to release??)
    • Benchmarks for ERS-210 (non-supercore) included
    • More documentation and commenting based on questions from the mailing list.  (Mainly the vision generators, and LoadSave)


2004 - 01 - 22

Patch: All/Proj

Binaries:ERS-2xx, ERS-7, GUI
  • New Features:
    • ERS-7 Support
      • Uses the same walk parameters as the 2xx series (works surprisingly well considering the kinematics haven't been updated - that's for v2.1)
      • For better or worse, we're using the same ordering for the face LEDs that the underlying SDK uses.  The mapping they chose from index to actual LED is a little odd, but I didn't see any other mappings clean enough to be worth breaking compatability with any code that might be ported.
      • Make sure the wireless lan switch is 'on'.  Otherwise it will freeze during boot.
      • You can use <MODEL-NAME>...</MODEL-NAME> tags in the config file (/ms/config/tekkotsu.cfg) to have model-specific settings (e.g. 2xx's use a different color threshold file than 7's)
        • Wildcards work too! For example, select ERS-2xx series with ERS-2*
    • Pipelined vision stages
      • Tutorial page describing layout and usage
      • Each stage is an EventGeneratorBase - sends an event when updated data is available - next stage will listen and pick up on its output.
        • Makes it easy to handle slower or irregular processing
        • Can fork the pipeline
        • Behaviors can tap into vision pipeline at any stage to do custom processing (vision stages themselves are behaviors)
        • There can be multiple versions of each stage co-existing.  Just use a different source ID for each generator.  Examples:
          • If we put this on the humanoid, we could have two RawCameraGenerator's, the left camera could send events from source ID 0, and the right could send from source ID 1.
          • You could segment skin colors and ball colors separately so ambiguous pixels can be classified both ways
      • Each stage is lazy-evaluated and cached, so the entire filter bank is available at every stage, but only the minimal necessary calculations are performed.
      • Pipeline is set up in project code (StartupBehavior_SetupVision.cc), so you can add/replace individual stages with custom versions easily (and without disturbing other stages in the pipeline)
      • CameraBehavior demo behavior allows you to quickly save double-res snapshots to memory stick, just like a digital camera! (anyone want to try adding the EXIF info too? ;)  This is added under the "Background Behaviors" menu.
      • Each generator tracks the system frame number so you can make sure you're comparing the same image in different generators.
      • Included object detector (BallDetectionGenerator) only processes image if the detector actually has listeners (checks erouter->hasListeners() - you might want to do this in any high cost generators of your own...)
    • VisionGUI work
      • JPEG compression
        • When saving JPEG images, VisionGUI saves original JPEG as transmitted instead of recompressing
        • Allows full framerate transmission and full resolution, good for offline processing, such as this final project for the CMU Computer Vision class.
      • Rewritten protocol for sending images to viewer - more flexible data types, allows for different compression formats on each channel and/or each image
        • The same protocol is now used for both SegCam and RawCam, so they can both use the same VisionListener class now.
      • Variable resolutions in vision monitors (so you can decide to use high-res for a snapshot or low res for bandwidth conservation) (see !set command in FAQ)
      • More color space options in Raw Vision (select individual channels) (see !set command in FAQ)
      • Vision ports will stay closed until the RawCamBehavior is launched, which will then tell the current Controller to open a VisionGUI.  This is mostly for security/privacy reasons.
    • New Sensor Observer allows logging and viewing of sensor information from Controller ("Sensor Observer" from the "Status Reports" menu)
      • You can control which sensor(s) to log individually
    • New PostureEditor control - a nice example of how much power is available through the Controller user interface.  Take a look at the code and its header.
      • Allows you to load, save, and edit postures numerically.  This includes the LEDs as well, a good way to experiment with the new LEDs on the ERS-7.
    • EventLogger now has verbose level 3 - this will show event type specific information, such as the x,y,a parameters of LocomotionEvents, or the actual message from a text message.  (It's not omniscient though - if you have custom events, you'll have to write some code to process them)
    • WorldState has new vel_x, vel_y, vel_a and vel_time fields, and a WorldStateVelDaemon to receive and process Locomotion and EStop events to manage the fields correctly.
      • The daemon will trap locomtion events sent during EStop until the EStop is turned off.
  • API Changes
    • Project Makefile has been updated to allow libraries (libjpeg) and some other improvements
    • New file and menu: StartupBehavior_SetupVision.cc
    • WalkMC now contains calibration parameters.  Currently, only the default walk is calibrated, and only for the 210.  Your mileage may vary (literally!) on different carpets.  But now at least you can have some hope of dead reckoning successfully, recalibrating if necessary.
      • Calibration parameters are stored in walk parameter files.  WalkMC can still read old-format parameter files, and will assume transparent calibration parameters.
      • There is additional code in the StartupBehavior_SetupWalkEdit.cc file to allow modification of the calibration parameters.
      • Also includes an interactive calibrator that will automate the process and walk you through most it!
      • Walk Remote Control protocol has been modified - values are now sent in the range [-1,1] and scaled on the Aibo end to fill the maximum velocity suggested by the calibration parameters.
    • WorldModel2 has been deprecated
    • TextMsgEvents now use EventBase::statusETID for their type id.
    • The BehaviorSwitchControlBase can now be instantiated directly (no longer abstract)
      • This is mainly of use with retained behaviors which don't need to be recreated (such as in the Vision menu)
    • PostureMC now autoprunes by default (so be sure to pass false for autopruning when you call MotionManager::addMotion with a motion command if you want to keep changing its values after its reached the specified pose/value)
    • PIDs now use a global set of shift values.  In short, this means reduced range of values for PID parameters.  Still plenty for all practical purposes, but just not as flexible as before.  Necessitated by the ERS-7's use of one set of shifts for all joints, and was recommended for earlier models as well (newer versions of OPEN-R might enforce the ERS-7 way of doing things on the old models)
    • WorldStateSerializer and Serializer interface have been removed.  In their place, a WorldStateSerializerBehavior, which is event driven (instead of hard coded into MMCombo) and can be turned on/off from the TekkotsuMon menu.
      • The protocol has changed slightly as well.  Previous version assumed 6 sensors, 8 buttons.  New version will send NumPIDJoints, NumSensors, and NumButtons, and then the correct number of fields.
      • See WorldStateSerializerBehavior::processEvent() to determine exact protocol.
  • Bug Fixes:
    • Now uses last (most recent) sensor frame from the frame buffer instead of the first.  This shaves 24 ms off of response time of almost everything in WorldState.
    • MotionManager::setOutput(MotionCommand*, unsigned int, const OutputCmd[NumFrames], const OutputPID&) was ignoring the PID argument.  Now fixed.
    • The StateNode based state machine stuff is now working properly.
    • Fixed abort() when sending empty text message (!msg) strings from the ControllerGUI.
    • Profiler was reporting seconds values for inter-call times, instead of millisecond values like it was supposed to.  Now reports all times in milliseconds.
  • Known Bugs:
    • VisionGUI and ControllerGUI windows don't quite reopen in the same place they closed
    • VisionGUI has a moderate memory leak when viewing a JPEG stream.
    • Don't use sockets with buffers less than (or equal to) 256+the number of bytes you want to send.
    • There is a very rare freeze-up that can occur when deactivating the EStop.  Cause unknown.
    • Perhaps related, the EStopControllerGUI occassionally drops the first character of some messages (e.g. 'ff' or 'n' instead of 'off' and 'on')
    • Crash during destruction (i.e. shutdown) of RawCameraGenerator after accessing double resolution channel.  Crash occurs in free(), called from delete.  After several hours of investigation, I blame possible memory problems with large (130KB) regions in the underlying system.  Investigation continuing.
    • VisionGUI doesn't respect "Lock Aspect Ratio" button.
    • ERS-7 specific bugs
      • Kinematics have not been updated for ERS-7 (yet).  So editing the walk might not be quite straightforward as usual.
      • Color aberation towards corners of the camera image (example here)  Software correction could be a possibility.  This isn't a Tekkotsu bug, it's just an ERS-7 problem.
  • License Change:
    • The Tekkotsu source code is now LGPL instead of GPL.  However, code included from other sources, specifically the included CMPack code, is still GPL, so the WalkMC, Kinematics, and CMVision code would all have to be replaced before any commercial behaviors could be released. (these files all contain license notices so there shouldn't be any confusion)
  • Documentation:


2003 - 10 - 07

  • New Features:
    • Vision segmenting training tool
      • Allows you to define regions directly in color space
      • Test segmentation of sample images offline
      • Define multiple threshold files, combine them in various ways
    • Significant improvement of noise detection during segmentation
      • Noisy regions are colored gray - this not only provides for unknown region detection, but also speeds up processing (one big unknown region instead of hundreds of tiny regions)
      • Small regions between bigger regions are merged into the bigger region.  This removes noise around object edges, resulting in cleaner objects.
    • Watchable memory - provides ability to display current values and receive events when they are changed
      • A GUI is provided to view all of the primitive types - allows real time display of values in memory with transparent usage.
      • Implemented by wrapping types in an object which overrides all of the operators... any time the value is changed, the object can throw an event if the object is being "watched".
    • Now includes Mi-Pal crash analysis tools (version 2.0.1) courtesy of Griffith University
      • provides stack trace after a crash using the emon.log file.
      • To use, run tools/crashDebug, which will mount the memory stick, determine the binary at fault, create the disassembly, run the stack trace, and then unmount the memory stick (pass -h to get usage info)
    • Build system reorganized
      • Distributed builds available
      • One Makefile in project directory, builds framework and project
      • BUILD_TEKKOTSU environment variable obsolete
        • this functionality is now always on
      • TARGET_MODEL environment variable obsolete
        • Now checks a file named TARGET_MODEL in TEKKOTSU_ROOT - this way if you change the target, everything will be recompiled automatically.
      • Rounds all ms/ modification times up to even seconds to avoid repeated copying of unchanged files to memory stick
    • Contribution from Pennsylvania Governor's School for the Sciences, 2003 Computer Science team project: "See, Spot; Run"
      • Runtime WalkMC parameter editor (imported into mainline)
        • "Walk Edit" menu contains ValueEditControls for each of the 50 walk parameters
        • New walks added: Pace.prm and Tiger.prm;  Pace (video here) is quite nice, and very low vibration, although not entirely stable. Tiger is an extremely smooth crawl gait, but not good at turning
      • Line following (not imported into mainline)
        • Receives segmented images over wireless, processes in Java, sends walk commands back over wireless
      • Paper: doc/pdf; Presentation: ppt/pdf
      • Team members: Haoqian Chen, Elena Glassman, Chengjou Liao, Yantiamn Martin, Lisa Shank, Jonathan Stahlman
      • Team project leaders: P. Matt Jennings and Ethan Tira-Thompson
    • Controller GUI scripts implemented (was previously called "bookmarks")
      • Any script(s) named "STARTUP" will be run the first time the GUI connects
      • Any script(s) named "CONNECT" will be run every time the GUI makes a connection
      • This can be nice so you can have full default menus and retain demo behaviors, but still start off in a submenu relating to your project, and you can automatically bring up additional GUIs on boot.
      • Use a single ';' to separate multiple commands.  (must be its own argument - will be considered part of other arguments if there is no whitespace.  '\\;' if you need a literal ';' argument)
    • Added speed limiter to HeadPointerMC to help protect neck joints.  Also added config variables to control maximum speed.  See max_head_*_speed in project/ms/config/tekkotsu.cfg
    • Colorized errors/warnings in build output (run tools/cmake instead of make)
      • default colors are best for reverse video (white text on black) but you can change them easily in tools/colorfilt
    • You can now type option names as well as indexes on the console
  • API Changes:
    • Reorganized TekkotsuMon using Java packages
      • Better Aibo 3D integration - the Aibo3D GUI comes up whenever you launch the "server" on the Aibo, instead of then having to launch it manually
      • Now uses java.util.prefs to remember window positions
      • breaks MATLAB tools - see known bugs
    • Remove need for vision->enableEvents() calls (hackish for now, eventually Vision will just check erouter->hasListeners())
    • Aibo3D Monitor and Aibo3D Controller have been merged (always monitors joints, except when you control them by dragging a joint around in the window)
  • Bug Fixes:
    • Support for the new version of OPEN-R SDK 1.1.4-r1
      • only minor change was needed regarding introduction of new image channels
    • Controls no longer crash if they have no submenus but return non-NULL upon activation
    • May have finally killed occasional ControllerGUI's ArrayIndexOutOfBoundsException
    • Behaviors based on StateNode no longer hang on launch
    • Outgoing connections now can receive data (thanks to Andrew Cristina and the group from UNO.)
    • If a header file is missing, the build process will give a nice error and stop instead of repeatedly making the first dependency file that refers to it.
    • Fixed possible crash if shutting down while playing sound
    • Blocking output (serr) now gives correct output - had been repeating output, issue with non-blocking remains (see known bugs)
    • Memory is now freed properly after saving an image sequence from VisionGUI
  • Known Bugs: (you can help!)
    • Blocking output doesn't actually block - it just isn't buffered as much?
    • StateNode stuff is unstable - doesn't do reference counting properly somewhere
    • MATLAB links to Java components is broken - Java stuff is in packages now, MATLAB can't find appropriate files.
      • To solve, does anyone know how to direct MATLAB to find a class in a package?
      • To workaround, may simply need to move Listener.class files back into same directory as MATLAB's .m files (tools/mon).
    • When a new WalkMC is started, it has a tendancy to try to straighten the legs first
    • In Aibo3D, the knee joint position shown is offset from the real value
    • If you stop and restart the WMMonitorBehavior, the GUI will lose all the wmVar's.


2003 - 07 - 08 Docs:PDF/HTML
  • New Features:
    • Raw Vision and Segmented Vision TekkotsuMon modules ported to Java
    • Controller pop-up windows for custom GUIs for specific controls, error messages
      • Protocol is documented on the Controller's page.
      • Same protocol is used by both human console connection (port 10001) and ControllerGUI
    • New GUIs:
      • MechaControl ported to Java (renamed WalkGUI) - screen shot
      • Head Pointer GUI - screen shot
      • ControllerMsg - simple class for putting up messages - screen shot
      • EStop GUI - lets you pause/unpause remotely... - screen shot
        • No roboticist should be without a big red panic button! ;)
    • Updated profiler benchmarks (in docs/profilerun*)
    • Better support for the OPENRSDK_ROOT environment variable, in case you can't install the SDK at the default location (/usr/local/OPEN_R_SDK)
  • Bug Fixes:
    • Improved FTP update support (from the Sony Sample code - tools/mstreeput)
    • ToggleHeadLightBehavior should now turn the headlight off correctly


2003 - 06 - 13


  • New Features:
    • Reworked Control system - see the updated TekkotsuMon Tutorial
      • Added GUI for Controller menus
        • Takes input from Tekkotsu's console_port (default port 10001) if GUI not active (so UI doesn't require the 'G'), redirects to the system console (port 59000) otherwise
        • We are beginning to move Tekkotsu output to 10001 port to separate it from the system console to reduce confusion between the two.  This will take some time.
        • For now, you will still need to telnet to port 59000 to see output of most controls.
      • Variety of new controls
    • 3D Remote Posing
      • You will need to install the Java3D package
      • To move Aibo on screen ("puppeteer"): tools/aibo3d/Aibo3DPick
      • To view Aibo on screen (monitor): tools/aibo3d/Aibo3D
    • Additional ERS-220 support
      • Thanks to the CMU Robosoccer team for letting us borrow one of their 2002 RoboCup prizes (an ERS-220) to test this release!
      • Integrated Daishi MORI's 1.2 patch (added support for buttons, LEDs, etc.) (Thanks Daishi!)
      • Dual booting on 220 and 210 without recompile
        • Uses some artful namespace management and a couple #ifdef's (user code shouldn't need any #ifdef's)
        • There are now three possible values for TEKKOTSU_TARGET_MODEL environment variable:
          • TGT_ERS210
          • TGT_ERS220
          • TGT_ERS2xx
        • The TGT_ERS2xx target is a union of the features of each.  It may run slightly slower and use slightly more memory than one of the optimized targets, but this should not be noticable.
        • TGT_ERS2xx is now the default choice if TEKKOTSU_TARGET_MODEL is unset.
        • Remember to do a clean compile when switching build targets
      • Added a control specifically to pop up that little headlight, because it's so darn cool ;)
    • safemot tool - inserts time into MotionSequences so they don't exceed Sony's safety guidelines. (or a given percentage thereof - you can "overclock" the motions too ;)
      • This mostly fixes the converted CMPack'02 motion files not playing correctly (but you may want to turn up the speed some more...)
  • API Changes:
    • std::string is now used in place of char* in ControlBase and BehaviorBase
    • Controller will call doSelect, doNextItem, etc. directly on ControlBase subclasses instead of passing the event which triggered the action to ControlBase::processControlEvent.
    • Added facility to controls to pass arguments to them from user input
    • Added getDescription to ControlBase and BehaviorBase to allow short descriptions of the corresponding object to be given to the user
    • Behaviors should no longer prepend '#' or '-' to their names to show if they are running or not.  This functionality has been moved to the BehaviorSwitchControl instead.
    • WorldState now has a robotDesign bitmask, with corresponding ERS210Mask and ERS220Mask to check which model is running your code.
    • The CONSOLE_VT100 compiler flag has been removed.  It is replaced by a config variable: Config::main.use_VT100
  • Bug Fixes:
    • Build now halts on linker errors
    • Tail and ears re-enabled on 210 (oops)
    • Finally fixed crash on shutdown!  Things destruct nicely now ;)
    • Added a "gamma correction" of 2 for LEDs - we see single blinks better than single flickers - eyes have after images and all that...
  • Known Bugs:
    • Controller GUI occasionally dumps a stack trace when you go from a menu with hilighted items to one with fewer items than the hilight.   Don't know why it happens, but it's uncommon.  (some kind of thread race condition I assume)
    • 220's do a bit more "stuttering" on start up than the 210's do.  I'm not sure why this would be the case.  Anyway, it's a cosmetic issue... if you like, turn off the startup sound, or make it delay a few hundred milliseconds.


2003 - 04 - 29


  • New Features
    • Doubled code speed (roughly)
      • Turned on -O2 flags for all modules except MMCombo, which crashes when optimizations are on. (open problem if someone wants to figure that out - it's not a performance bottleneck, so that's on the back burner)
    • New tool to convert CMPack'02 motion keyframes into Tekkotsu's MotionSequences.
      • May still need some tweaking to get speed correct, I think CMPack waits until robot reaches keyframe before moving on, whereas Tekkotsu will just target the next keyframe to maintain time sync. Volunteers? ;)
      • Converted files in project/ms/data/motion
      • Originals are in tools/convertmot
    • New background behavior AutoGetupBehavior (source)
      • Detects when robot has fallen over, and executes appropriate get-up script
      • Currently uses the CMPack'02 get-up scripts from above
    • New FileBrowserControl (header, implementation)
      • Now base class for LoadPostureControl, RunMotionSequenceControl, PlaySoundControl (new)
      • Allows you to browse files on memory stick instead of having to type filename from memory; also eliminates need to move from robot to keyboard
    • Integrated Daishi MORI's patches
      • ERS-220 support
        • A recompile is necessary to switch between models
        • The TEKKOTSU_TARGET_MODEL environment variable determines which header to load. Valid values are:
          • TGT_ERS220
          • TGT_ERS210 (default)
      • Cygwin support, still need to stop memsticks manually
      • Automatic memstick mount/unmount under Mac OS X
  • Fixed 1.1 issues:
    • Killed bug which would occasionally cause infinite looping in Makefiles during make clean - thanks Daishi
    • Now using more realistic parameters for the low battery warning behavior BatteryMonitorBehavior (if you see the ears flicking back and forth, your battery is getting low. The frequency increases as the battery drops)
  • Known issues:
    • Twitches after loading a motion sequence from the menu system. Need to make MotionSequence send an event when it reaches end of the sequence, so it can hold the position until estop is updated. (fixed: 1.3)
    • Crashes after exiting some StateNode based behaviors (i.e. BanditBehavior and WorldModel) (exp fix: 1.3)


2003 - 04 - 09

  • New Features:
    • TekkotsuMon (PC monitoring tools)
    • TCP/IP and RemoteProcessing (RP-OPENR) support
      • Communicate with networked resources
    • Sound Output!
    • Can now send events to behaviors in Main process from other processes and from MotionCommands.  New event generators:
      • audioEGID - sound start/end, status events as chained sounds end
      • motmanEGID - MotionCommand added/removed
      • estopEGID - Emergency Stop on/off
      • locomotionEGID - For MotionCommands that cause movement through the world, (e.g. WalkMC) this allows dead reconning to be reported.
    • WorldModel2
      • Beta components: spherical depth map, horizontal height map
      • Alpha components: FastSLAM localization, global map
  • API Changes:
  • Fixed 0.8 Issues:
    • Profiler inter-call times
    • Finished switch to floats
  • Known Issues:
    • Compiler optimizations turned off (crashes otherwise) (fixed: 1.2)
    • Blocking TCP/IP read()'s block until framework buffer is full instead of user buffer is full. (exp fix 1.2)
    • Low battery warning doesn't do its job (fixed 1.2)


2003 - 03 -04

  • First publicly announced release
  • New Features:
    • Improved MotionManager API - better performance and ease of use
    • Motion system mostly switched over to floats instead of doubles
    • Makefile automatically copies OS files to memstick when needed (when using the 'update' target)
  • Fixed 0.8 Issues:
    • Ported to recent OPEN-R release with GCC 3.2
    • New build system separates user's local development from framework files
    • Defaults to a more general pink ball only vision configuration


2003 - 02 - 24


  • Preview release
  • Known Issues:
    • Not tested under most recent OPEN-R release (fixed: 0.95)
    • PC-side monitoring tools delayed to add TCP-Gateway support. (fixed: 1.1)
    • Should separate "user" files and "Tekkotsu" files, need to modify build system (fixed: 0.95)
    • Pink ball vision config file not included (still using our lab-colors config) (fixed: 0.95)
    • Profiler does not track inter-call time (and thus calls per second) (fix: 1.1)
    • Makefile should alert user if memstick lacks OS (fixed: 0.95)
    • Occasional crashes during shutdown (exp. fix: on backburner)
      • Consistently happens on non-supercore, sporadic on supercore
    • We use a lot of doubles, should switch to floats (fixed: 1.1)
      • (in older versions of OPEN-R, errors occured using floats in library calls, now seem to be resolved)


2003 - 02 and prior

  • Internal development

Last Modified: $Date: 2004/11/08 22:17:50 $ GMT