Change Log: OOMRM 5.0 * NEW: oC328 camera -- still has certain "features"...like it seems to drop connection if you do not take a picture within about 15 seconds (need to reconnect). Camera does not provide as fast a frame rate as I had hoped--about 4 frames a second using 2 bit color 60x80 mode--hoped to use also for line following but frame rate is a bit low. * Switched to Message Factory architecture for transmitting messages. Eliminates problems with non RTOS transmission of multi-packet messages. * OK, it's my library--I can arbitrarily change the version number because I don't like carrying the "II" ;) * Large rewrite in portions for certain requirements: - Only compile in what is used (reasonably). - Able to compile using uCOS/OS-II or choose not to use without recompiling the library. - Able to use either bluetooth or straight serial RS232 for messaging. The first requirement stems from the fact that I found with the previous node_manager, (true for most dynamic typing) it compiled in every class referenced. I haven't tried RTTI, but from an just glancing, it along with virtual classes had same problem. After several repeated failures, I finally came up with a reasonable solution of encapsulating the class functionality in a callback function now managed via the Object_List. This did not require prior knowledge of classes. The second requirement stems from not wanting to be tied to uC/OS-II in all my programs. This was a bit trickier as some of the core classes had embedded OS calls. Created generic class for the following: - OS (model/os) : represents a generic OS - user includes either os/rros.h (round robin with interrupts) or os/ucosii.h The third requirement solution was to implement a a generic CommunicationDevice which is similar to the OS subclasses as either CommunicationDevice_RS232 or CommunicationDevice_Emic. The result is that in theory any communication device (bluetooth or SCI) can be used with any (supported) OS any only those portions will be compiled into the resulting product for download. OOMRM II 1.3 (7/23/2006) * INWORK : primitive routine for localization; currently orientation only and HOST only. [alpha test] : localizer class * FEATURE: Added oTTSemic class to control the Emic #36000 text to speech unit. (currently no host emulation--just ignored). * BUG: Map width/height incorrectly updated. * FEATURE: Map width and Height can now be changed dynamically without compiling (although best to restart simulator/robot after change). * BUG: IR indicators in the simulator were not showing. * BUG: Platform specs (wheelbase etc.) now stabilize to number (before it could continuously decrease after restarting). * FEATURE: made most messages intranode capable making operation of simulator idential to target. Can now upload/download etc. in simulator (of course only useful for testing) * FEATURE: when in teleoperation robot now reports back its position via simulant position (red). * FEATURE: Added robot diameter to platform parameters. Robot Diameter is often larger than wheelbase. Needed for having A* paths avoid hitting part of robot. * BUG: robot images did not display correctly if horizontal ruler in use. * BUG: horizonatal ruler not right if part of map is not visible. * Added a special optimzed UART channel interrupt (channel 10) for high speed (57K baud). -- eliminated all the clutter and options. * Bluetooth download/upload of map now works with optimzed UART. * Gameboy image tranfer now works in both Single snapshot mode and as a service connection. * Added a translation "offset" to the DXF Import option to allow objects to be added other than 0,0. OOMRM II 1.2 (4/27/2006) * INWORK : Transfer of GB camera images over bluetooth service connection. A one-time dump of image worked but freezes RTOS until transfer completes. * NOTE: Added the oomrm/GB directory which contains both Dafydd Walters original java Gameboy viewer and a modified version. Great for testing a gameboy camera hookup (Ref test/makefile.camera and camera.cpp for test application). * FEATURE: Switched to 57K baud Bluetooth communication required some streamlining of SCI/UART interrupts and routines. This is really pushing the limit...with this and below change, am now about 4-5 times faster than initial implementation which gives teleopoeration much better control. * FEATURE: Chnaged to variable length "JAUS" messages. Until I get to real JAUS format and use the prescence vector, for now, the data_size field is updated on transmit from an internal table of message sizes. * FEATURE: Added ability to define service connections, and changed architecture to use these JAUS features for establishing heartbeats rather than non-standard architecture; can also use for teleoperations (command class; message=Set_Wrench_Effort_Message), and such... * FEATURE: Added "connect" button. this more logically divides when the simulator should be running from when the target results should be displayed; otherwise, they both sometimes would compete. * FEATURE: added ability to send intranode messages for testing component behavior. * FEATURE: Display of the A* Path and Path_Area (previous features) now work again. NOTE: removed the A* toggle as this will not be possible. * BUG: painting scene was broken. did not reduce coordinates for call to OGrid::wall etc. * BUG task_encodedmotor_driver general dead reckoning equation was wrong! I changed it previously incorrectly. NOTE: lots of errors were found in navigation--amazing it worked at all! * BUG: upgraded to version 1.3 of fixedpoint.c library * BUG: primitive_driver did not work without local vector driver. * FEATURE: Added teleoperation mode in both simulator and robot (pretty cool). See notes in documentation for details. * FEATURE: incorporated dialogue and teleoperation into simulator window rather than seperate window--this fixed the focus problem, and allows a more mouseless operation (I hate using mice). * FEATURE: Changed the transmit function to allow for intranode communication without hopefully interfering with internode communication. This allows for the simulator to pass the psuedo JAUS message between components which better tests the final (inter)component behavior in the simulator. OOMRM II 1.1 (2/15/2006) Revision mostly fixed inaccuracies in navigational model to hopefully lead up to RSSC hall contest... [Simulator now is usually within a few millimeters of waypoint--33% 0-1 millimeters. previously simulator could show up to a foot or so off for long distances; i.e., it actually knew it was a foot away, but made no attempt to fix it (hmm).] * FEATURE: Changed wheelbase and wheel diameter to micrometers internally. This essentially allows for three decimal places of accuracy to fine tune dead reckoning. Only marginally useful now because of difficulty recalculating dead-reckoning formulas with different wheel-base only approximates ratio for left; i.e., uses right wheel for basic encoder unit. NOTE: message format currently only allows for 16 bit value--thus added new TRANSLATE_TO_16BIT macros in m3.h * NEW: Revamped the GUI coordinate system so that it now has a "global" grid overlay. part of new methodology to internally use millimeter destination in final A* path. This eliminates the A* path rounding error when going to the map tile center rather than actual destination. - Can overlay global, local, or user grid in GUI for coordinate referencing. - changed GUI rulers to display millimeters. - Changed mission_profile to store millimeters instead of map units. - Dynamically calculated last angle in mission profile rather than using stored angle this eliminates error associated with not being where your supposed to be. (motion_driver.cpp [get_dest]). * FEATURE: Changed algorithm for when to stop in local_vector_driver--much more accurate! * BUG: traffic.cpp (test program) fixed. WCInit moved up. * BUG: playback fixed and revamped. Of course, only useful if using bluetooth module though :) * BUG: froze/crashed if using local vector driver without motion driver. * BUG: Import of DXF file where dimensions==GRIDX/GRIDY cause message Exceeded, but still core dumps. * BUG: Import DXF, then save as.. scene file does not work. * BUG: Position of robot gets corrupted if obstacle. * NEW FEATURE: Quick Turn mechanism (F1) via use of local vector driver without motion driver. Allows quickly just turning to a heading (angle) or just traveling some distance forward from current position without knowing position on map (but still restricted to staying within map (legal coordinates). * FEATURE: Added download of whether obstacles are present to platform spec. download/upload. OOMRM II 1.0 (12/18/2005) RTOS code seems fairly stable with eb500 module communication. Probably many Things I have forgotten, but among them are: * NEW: Added playback of communication log. Haven't used in a while, still needs a little work. * NEW: Added CPU Utilization host/target (host RTOS has bug (I believe overflow); I believe this is a uC/OS-II problem; thus host always shows 100% unless on a very slow machine. * NEW: Added range sensor stimulation - allows simulation of waving your hand in front of sensor. triggers a sensor regardless of map content. * Major rewrite of navigational core to eliminate most (all?) floats. Probably not as accurate yet. System needs to be fine tuned still. * BUGFIX: position gets corrupted if obstacle. * BUGFIX: Import DXF display is incorrect. * BUGFIX: The invariant systematic errors are not in shared memory! * FEATURE: The invariant systematic errors are not stored in the configuration file and reloaded on start. * FEATURE: Position of invariant and simulant syncronize if you restart from keypad. * BUGFIX: download grid image is looks misaligned to occupancy grid. * BUGFIX: Update of waypoint angle doesn't work. * BUGFIX: Map download not working. * BUGFIX: If the starting point = end point in A*, then it generates a NO_PATH_FOUND error. (path < 2 I think). * BUGFIX: After one full cycle of square, robot swings 180 degrees. May have to be related to start==finish. * FEATURE: After chaning a waypoint, the waypoint is deselected. OOMRM II 0.4.xx (9/11/2005) * BUGFIX: local_waypoint_driver: the extra face parameter did not work in "cluttered_path". * BUGFIX: If the starting point == end point in A*, then it generates a NO_PATH_FOUND error. (path < 2). * BUGFIX: Set_Travel_Speed_Message was handled as global without forwarding to Local_Waypoint_Driver (node_manager.cpp) * BUGFIX: upload/download of grid where width != height/also checksum code for download broken. * FEATURE: added speed upload/download from the map screen when other parameters are tranferred. * BUGFIX: fixed platform specification upload/download. * BUGFIX: task_local_vector_driver executed one too many get_dest which messed up motion chain. * ENHANCEMENT: Added visual display of waypoints (colored squares) to simulator. * ENHANCEMENT: Added display of IR/Sonar as green line in simulator showing direction and range of sensor. [still oopen issue it can be displayed one cell off, but gives general feedback of IR/sonar direction] * FEATURE: map_width/map_height must be initialized in main program! * BUGFIX: DXF import would print outside of map region if smaller than width of screen. * BUGFIX: Waypoint input/robot position input on simulator was completely messed up! * ENHANCEMENT: added error model parameters to simulator's platform tab and fixed the systematic error terms for "slippage" ENHANCEMENT: along with general cleanup of platform tab. OOMRM-II 0.3.12 (8/18/2005) * main.cpp [grid upload/download now works; old routines not used.] * forgot constructor from oomrm.cpp * changed TCR1/PSK from 2us to 250ns. * changed oomrm.cpp constrctor to 25Mhz clock. * Added clock-like structure to simulator and added hour/minute/second/millisecond display. * Bug fix in sci.cpp: RTOS signal length erroneously used the rxbuff.in rather than rx_config.length. * adapting keypad to RTOS and added task. OOMRM-II Version 0.1 (05/4/2005) * Incorporation of uC/OS-II RTOS. Navigational model works, but communication (dasi) not working (not even tested). Also, Non RTOS simulator is possible via user code but not fully tested. * Added oEB500 class for controlling an eb500 Bluetooth module. Currently, not RTOS compatible. 4.1 (11/15/2004) * If no Scene file is created and Autoload is set, then program abends. [4.17] * Allowed map unit < 1 which will cause many problems. [4.17] * Finished communications download to workhop. Still needs cleanup [4.16] * Finished communications upload from workshop [4.12-4.15] * Added subcommander to M4. * Fixed acknowledgements to Set methods caused a bogus set on Querying host. [4.14] * when change units (inch) and save, it does not load correct mm/division [4.12] * DASI: confused call to ntoh on message receive (jaus_message.cpp). needed two methods ntoh/hton. [4.11] Removed call to ntoh in each component [case where you put a bug in to fix another bug!] * DASI: Believe I found bug in some message transmissions. The struct's in the jaus_message.h must be aligned on a 32 bit boundary or they will be internally padded messing up the record structure. [4.7-10] * removed patch for relative_object_position read (diagnostics.cpp) struct as it is now fixed [4.7.10] * DASI: Added cb_upload_waypoint to upload all information on map screen. [4.04-06] * converted most internal methods to use radians rather than degrees (related to below). [4.02-06] * Testing over 200 feet course revealed the following problems: (this will increase interrupt latency, but payback is high). 1. changed _distance to float (was fixed) in Local_Pose_Sensor. Fixed limited robot to max. travel of 32767 millimeters (just over 100 feet). 2. changed _current_distance to float in Local_Vector_Driver. Same limit as above (4.01) 3. changed accumulated distance in oEncodedMotor from FIXED_TO_INT to FIXED_TO_DOUBLE. after 100 feet of travel lost 2 feet. (4.02) * Added round funtion and rounded MAP_UNIT *10.0 in persistent. Sometimes floats 152.4*10= 1523 because of trunc int and float round-off error. (4.02) 4.0 (10/15/2004) * major refactor...too much to specify. May break some old code here or there. The biggest addition, besides the Workshop (see below) which has saved me lots of time is in using a configuration file in the simulator. Most settings in the simulator are restored to the previous setting when restarting. Also added a ruler to the map so you can easily locate the precise location of the robot on a large map. NOTE: not all the documentation has been updated yet. * The newly added DASI library is a utility library for robot communication and other algorithms. At this time, it is packaged together with the OOMRM library but is licensed differently (Ref. OOMRM License and DASI License). * Created the "Mobile Robot Workshop" which now integrates the simulator and scene editor into one app. - the diagnostics tab is primarily for host<->robot communication and is for easily inspecting onboard objects and returning sensor values. - the platform tab is designed to facilitate inspecting and setting the persistent values both in Simulator and in Robot (via communication library). - the Map tab now has two major modes: 1) Scene editor: setting up map, initial robot location, and waypoint values. This information can be used in the simulator or downloaded into the robot. 2) Simulator: as before, for running the simulation. All the communication modules are experimental and not fully developed at this point. * all makefiles are a bit more streamlined between Linux and Windows. NOTE: DXF stuff didn't compile when I last compiled on Linux about 9/20/2004 but I was using egcs GCC (read old) compiler and I think lack of sstream support was the problem. * bizarre workaround 1: linking the simulator code into a seperate library liboomrm_sim.a caused a segmentation fault when defining the window, but when linking straight from the source directory it works fine--go figure! * bizarre workaround 2: - in persistent.cpp I declared a global "string configname;". Also the use of string in ImportType for some bizarre reason caused the application to crash when compiled into M4. I can find no explanation and I checked it linking in electric fence to check pointer problems and it reported none!? * BUGFIX: platform specification battery overwriting array bounds. (3.8.22) * changed cEncoder to cSwitch for single channel encoders. the oDI1_TPU is a typedef for oEncoder rendering it indistinguishable typewise. * Refactored command_driver, m4, mission_profile etc. for simpler interface (3.8.14) * Redid the DOS portions of oConsole and oSCI. oSCI now uses the host serial port as does the oConsole. Thus many messages that usually went to standard output will now go to the serial port--a little bit of a pain, but more realistic for debugging JAUS messaging. (3.8.12) - Use DOS_DEBUG macro or printf etc. for host debugging now as console messages will just go out PC serial port! * added JAUS message tests in MOS. (3.8.11) * added invariant stall and maximum_velocity parameters. - I supposed could just manually adjust the other motor stall's parameter, but this doesn't assume it will be correct and allows simulation of the effect of one motor being closer to power source. [getting a perfect battery for each motor would require you adjust for power distribution etc.]. This allows you to deal with it in your code, like you will need to in the real robot as the exact factor may vary depending upon how charged the battery is etc. (3.8.9) * makeinclude.dos now needs -lsupc++ (maybe -ljpeg) libraries for (GCC > version 3.0 I believe). * removed _P undef in oPID and changed internal variables as the new gcc defined _P somewhere. (3.8.9d) * converting from gcc 2.95.3 to GCC 3.3.1; requiring some clean up of code. Unfortunately, this sometimes requires changes to external libraries--which is why I opt to include borrowed code rather than externally because sometimes this code requires (although I suppose they should be fed back to author). (3.8.9) * added endian macros (htons,htonl, etc.) to account for little/big endian-ness to switch to network order before transerring from PC (3.8.8d) CAUTION: the header jaus_message.h uses bit-fields that have been tailored to either little or big endian--at least the way most compilers handle it. * removed Range_Sensor and just subclassed IR_base and sonar_base to sensor_base directly. * Refactored and expanded Configuration file code and consolidated many booleans--I find repeated testing of the same map, division setup tedious! this hopefully helps (3.8.3) * mapper.cpp, ir_chain, etc.: problem with emulation of multiple IRs with mapper. Changed IR emulation to serve rather than reserve. This restricts calls to the value function to one per IR. Need better way of associating IR under emulation with IR base. (3.8.2) 3.8 (7/4/2004) * added top level makeinclude.dos (Windows oly) to eliminate where to set VERSION of FLTK that is being used (3.7.20) * added sonar_base supporting the oSonarDV in the simulator: for now, uses same methodology as an IR to detect obstacles will refine later (3.7.20) * updated the oomrm_test to reflect the new environment. (3.7.19) * For some reason the scene editor is not recompiling. Did I miss this sometime? To fix it, I rearranged the host directory and separated stuff into 2 libraries: - liboomrm - liboomrm_sim (later deleted). Still need to update the makefiles in the 'makefile' directory and Linux makefiles. (3.7.19) * local_map_spec.cpp : intialized invariant whenever local map is initialized. (3.7.18) * added mos_rssc_hall.cpp to m4: contest for RSSC hall navigation [IN WORK] (3.7.17) * BUGFIX: ir_chain - reserve did not check for 0 next value (3.7.17) * documentation fixes (3.7.14-3.7.16) * put error terms for simulator into the invariant class rather than as defines (3.7.13) * BUGFIX: corrected seed for randomizer in invariant.cpp to get new sequence each time (3.7.13) * Simulator "Next" shortcut now F8 (was 'n'). * BUGFIX: fl_open - same problem with DXF import prevented from opening a scene file. (3.7.12) * BUGFIX: fl_open - input box did not function (same problem as DXF import). (3.7.12) * Moved Obstacle log to checkpoint upload function until I found a better place. * BUGFIX: dxf_import - import->world/scene checkboxes were not initialized to true correctly (3.7.11) * BUGFIX: dxf_import - input of filename was incorrect and caused an abend. (3.7.11) * Converted documentation to HTMLDOC (3.7.10) * FLTK version must now be exported as environmental variable--simplifies individual make files when changing (3.7.9) * added ability to hide simulator grid lines (3.7.8) * checkpoint, sim_map, ir_chain, m4: added ability take checkpoint every n interrupts via frequency method (3.7.7) PS: turns out every n checkpoints because of interrupt internal restrictions. * fl_ins.fl: moved Div from fl_simulator and renamed "Div." to "Tile Size" (3.7.6) * BUGFIX: [sim_map.cpp] vertical scrollbar incorrect when changing divisions (3.7.6) * sim_map.cpp: added real_time and step_through (3.7.5-3.7.7) * fl_simulator.fl: added group for time. (3.7.5-3.7.6) * fl_simulator.fl: Renamed Error submenu to Model and added Playback submenu. (3.7.4) * main.cpp: Vertical scrollback cleanup. (3.7.4) * output obstacle log following checkpoint log via oConsole. (3.7.3) * added obstacle_chain to maintain static obstacle list (3.7.2) * changed pose_list to pose_chain for consistency (3.7.1) * added point_chain to main a list of obstacle coordinates. (3.7.1) 3.7 (6/4/04) * Added dxflib (http://dxflib.sourceforge.net/) for importing autocad dxf files into the world grid. * eliminated Global_Map_Spec. * added extra byte to the OGrid (occupancy grid) structure (layer)--the semantics are still in work. * eliminated one level of the grid and setup the grid as a static structure in the Mapping class--this should enable further streamlining as the grids are all preallocated by the library now. * streamlined the opening of the scene grid into the robot or world (simulator) grid and also the import of DXF into the robot or world grid. * added ability to store an occupancy grid into persistent memory (battery backed RAM). This requires setting aside of 41K of RAM unfortunately--possibly can be smaller, but I do not want to change size every time grid size changes (and I haven't needed all that memory yet believe it or not). * IR averages 32 readings instead of taking least value of 32 readings...has less dramatic swings * added log and checkpoint class/structure to enable dynamic recording of obstacle discovery to allow the recreation of how a map was generated. 3.6 (4/21/04) * Added new OOMRM library User's guide. * Added mission_profile class : purpose is to contain information on a particular mission (speed, waypoints, etc.) * simulator refresh now automatic. Seems to solve some problems and creates other features. Also Changed "speed" to "MS" on simulator and added "INC" combination of milliseconds each callback and number of iterations done per callback allows a little more fine control of speed. * fixed vertical scrollbar bug in simulator. (4/15/04) * switched around some fixed/floats testing invariant accuracy. interrupts back up to 25 ms. (need more optimization). * Added color to simulator to display invariant (real) position of robot in black; internal (normal) robot in red. (4/15/04) * Added another top layer (world) for doing error modeling--invariant layer (See user guide). * added Windows Makefile part of portaudio to drive speaker. Will need to incorporate to Linux when I get there again. For simplicity all needed code is included in this library. I hate having to download a bunch of libraries! (4/8/04) * changed atomic_rotation to DEGREE (pose.h) and DEGREE to short (was int). * made Geometry_Driver subclass Primitive_Driver; I did not add all the constructors for all motor configurations. You will have to copy constructors from Primitive_Driver if you use other motor configurations! I'm not sure if this is the best way, but the hiearchy chart sure looks prettier ;) * removed speed() methods from vector_driver and created set_speed() method to set speed. This will probably be reworked in the future with some sort of "mission_spec" class, but for now I only wanted one place where you set the speed (at lowest level). * Somehow the symbolic links are no longer needed with all the reorganization (finally). * changed Primitive_Driver to Geometry_Driver (Vector_Driver) as this is more of the JAUS equivalent. * changed oMobileRobot to Primitive_Driver as this is more of the JAUS equivalent. * major rewrite of oStatus: eliminated and replaced with "C" functions--this allows use by interrupt handlers. * emulation oSCI and scihandler: above status+ this helped debug a nasty trasmission problem. * sensor_base/IR_base: addition of a servo creates a scanner type sensor mount. * moved mapper_event into mapper class. 3.5.10 (3/16/04) * Major Makefile cleanup: * top level makefile.dos fixed. * update of src makefile to include gb_base.o sensorbase.o * update of host makefile.dos to update static library. * MOS: seperating the application specific portion of the code MOS_USER from the library. This is requiring some reorganization of persistent classes also. * cameraGB: excluded (JAVA) view applications unless you compile with -DGBVIEW (conserve flash) * deleted mosuser (specific to my application anyways ;) * watch out for case problems when porting to Linux. * linefollower: for a line following robot--why not. Host Simulator * cameragb simulation to support linefollowing. May have uses in future. 68332 specific * Known problem using egcs m68k-coff instead of m68k-elf compiler reported on Linux gentto. 3.4 (3/7/04) host specific Changes * many other changes I have since forgotten :) * oCameraGB : started some simuation code (unfinished--not for use yet). * changed orientation: +Y axis is now up not down. * Added scrollbars to scene editor. Now necessary with new orientation. * optimization with fixed point library (affected several modules). Optimization of A* algorithm. * Added scrollbars to simulator. Changed way default horizontal/vertical lines are drawn. [12/10/03] * OOMRM Scene Editor 1.0 [12/08/03] * simulator [bug] : crashed if did not have Command_Driver/Waypoint_driver declared. [12/07/03] 68332/generic changes * oEncodedMotor/oPrimitive_Driver : moved the calculation of x,y,theta back to oEncodedmotor. I originally had it this way, but tried to have fewer scheduled functions, but this allows more flexibility. * Primitive_Driver [BUG] : idirection parm is DEGREE not RADIAN!!! [12/07/03] * compiled on Linux (Redhat 6.2). Sucessfully Ran. A few name changes for case sensitivity. (2/5/04) * Persistent_Interface : new class to manage the RAM loaded memory between both 68332 and DOS. (1/15/04) * MOS : new class to manage "operating system" type issues. Currently, mostly works to allow non terminating type robot operation where after a command, robot then sits to await the next command. NOTE: MOS stands for The "M" (mobilerobot) operating system. PS: most of my robots are named M2,M3,etc. NOTE: bug fix in the new classes took me a while to find--overindexed an array (where's JAVA when you need it). 3.3 (12/06/03) * [occupancy_grid]: seperated the A* implementation from an external "map" of world. [12/05/03] * [feature] Chaned many static initialized variables to uninitialized. Changed default behaviors-- This allows to be loaded into RAM as .bss is reinitialized and not .data. * oSonar: [bug fix] was not working as was based upon oPTA (how did this compile?) [11/27/03] * oPTA: [bug fix] was not included in the makefile, and had compiler errors etc. * oStatus : Added status class as primitive error communication device. Needs fine tuning. * OOMRM Simulator: Added ability to display path generated through A* on simulator. [11/21/03] * Command_Driver : Can now call Command_Driver with using A* search for input obstacle_chain. --algorithm tends to turn a lot though. * AStar : Added A* algorithm [11/21/03] Astar.cpp (Copyright Michael Yeh, but also GNU Lesser General Public). priorityqueue.cpp (Copyright Michael Yeh, but also GNU Lesser General Public). * circle_obstacle_chain : New list of round obstacles to put on a map. [11/20/03] * Command_Driver : Added grid to plan path with obstacles, but not completed.[11/17/03] * Command_Driver [feature]: Added ability to traverse using "begin" multiple times (doesn't reinitialize to 0,0,0 each time.) [11/14/03] * oSharpGP2D12 [bug fix] : constructors did not call oA2D constructor. * oSCI [bug fix] : I think I over zealously commented out a the xonoff, but is still needed. * updated 68332 makefiles (oomrm/src/makefile.68332, oomrm/src/hardware/makefile) [11/09/03] * command (command_chain) added default constructor and copy copy constructor. [11/09/03] * host/sim_map: Added questionably useful ability to lay shaded rectangles (3x5 cards) on the map from a user program. - For the aS&J Open Navigation Contest: http://users.oco.net/smith/robots/opennav.html 3.2 (11/7/2003) * As usual, many new changes. The good part (or bad) part is the hardware code hardly changed at all. Only added a lot of code to run a Windows based mobile-robot simulator--still have to do some quirky things to get to link; hopefully will work this out in another release. Deleted/modified Abstract classes: INS : was too many things in one class--broken out into Primitive_Driver & Waypoint_Driver (inspiration from the Joint Architecture for Unmanned Systems (JAUS). command_chain: became commands, not motions (motion_chain is now its equivalent). New Abstract classes: Primitive_Driver : most of the INS code; implements most of the basic navigational motions. Waypoint_Driver : class to just navigate between waypoints. Command_Driver : class similar to Waypoint_Driver, but adds capability to specify final orientation and execute a function at the waypoint. Another difference between Waypoint Driver and Command Driver is the Command Driver will automatically calculate needed direction of travel whereas the Waypoint Driver has to be manually caculated. chain : basic functionality for implementing a list. (STL has problems in current 68332 GCC) motion_chain: list of navigational motion commands. command_chain: list of commands (robot pose and function). Many New Host classes tested only in Windows 98 & XP using FLTK-1.1.4 * Removed the Atmel directory. I will probbly go toward a #ifdef architecture rather than seperate directories. * oEncodedMotor: bug fix if only declare one encodedmotor (9/22/03) * Reopened FLTK for a graphical interface for the OOMRM Simulator (9/16/03). * After having a bug in the INS code, I decided to try a simulator. Actually, I'm sure the bug is not that nasty, but it's something that with my other PC simulations is appearing more and more appealing (9/14/03). 3.1 (9/13/03) With old web site unfortunately going away. I've made lots of changes: * oSpeaker: a new object to play notes on a old PC speaker. * Added the ATMEL directory. * map: Added the mapping module--a bellman fill algorithm. this was the secret weapon :) that I used to win the RSSC contest. Well, maybe not that good but it did help. * INS: Added (tentatively called) INS class (inertial navigation system) that basically dead reckons, but it interfaces with the mapping modules. * Restructured the directories around to accomodate for another manufacturer in the model, and stuck the PowerPC under the motorola branch (dreaming still). * reworked some documentation. * oMobilerobot: more stuff to get more accuracy in robot's position (pose). * oEncodedMotor rework to include speed and moved much of the mobilerobot's interrupt code to encodedmotor. Also, some optimization. * DCmotor: added stop method; needed for above. * Makefiles are updated to eliminate the -DMM=1 error. * oDCmotor: added power_resolution to adjust how fine the POWER can be max 32767 (short int) and adjusted power method accordingly. * [BUG] i2s : bug fix (did not handle negative numbers properly). This routine used to convert int to strings to avoid using the standard library routines (which seem bloated). * sorting directories to prepare for a potential addition of a PowerPC mpc555 (if and when I buy it). Mostly includes right now. Also, restructured around common objects between hardware and ones specific to architecture. The oTPU object is making me reconsider having a motorola directory because the TPU is common across a lot of Motorola processors but should not really be in a "common" directory across processors. * [BUG] oSCI (scihandler.c, uart_handler): Removed Mark's ubiquitous test code that noone noticed ;) I'm sure this has caused some nasty bugs. 3.0 6/14/03 (A lot has changed; hope I got it all, and didn't introduce any bugs :) * SIM, TPU, and QSM includes now are compatible with the Motorobots includes. * Used Doxygen to generate the class documentation * New layered approach affecting most objects but most interfaces remained the same.. * replace libmrm.a with base.c and sbrk.c * eliminated need for iprintf in oConsole. need to look at these * removed libmrm.a and replaced with files { base.c sbrk.c } from Motorobots and had to add dummy functions for kill get getpid--unknown why it's calling for them. * oDI family: made the return value() methods const. * oSchedule : major bug in period(int) method; did not update internl period. * oSchedule : After finally doing some testing on priority, I learned... simple is better; bug fixes and new methods (see docs) * oCameraGB : new methods, exposure, output_gain, invert, edge_extract. * oUART : new object for UART control; only receiver implemented. * oKeypad : new object for controlling a Keypad using a EDE1144 IC via UART control. * oDialogue : new object for controlling a keypad and LCD together. * point : new object for points in space. * TPU : bug fix in CISR. * Converted documentation to Doxygen. Style not as clean, but much easier to maintain :) 2.4 (3/7/03) * oScheduler: new method shutdown on oScheduler. Execute before program exit. This will eliminate having to reset the MRM. * oEncoder: total rewrite of oEncoder to allow either single channel or quadrature rather than having two objects. This allows subclasses for oEncodedMotor etc. which allows OOP to work like it should. oDI_TPU now typecase of oEncoder rather than vice versa. * oDCmotor: - added method frequency to set the PWM frequency for either sign mag./locked antiphase config. - added alternate constructor for controlling with only 2 pins (modified sign magnitude). * oEncodedMotor: added alternate sign magnitude constructor and allowed quadrature encoding. * oMobileRobot: - doc error mobilerobot constructor. - removed whiplash effect from stop when turning.Hard to get good behavior from different motors (from gutted servos, small DC to Pittman 30V). - added x,y,angle ethods to calculate position based upon dead reckoning. - PID routine is now left running in turns. - added battery method to configure power source. Deleted method stall as now deprecated. - reactivated speed method as setting rotot's speed in millimeters/second (through battery configuration) - complete overhaul with quadrature/single channel encoder. * some enumerations have changed. For instance SPEED is now signed etc. for adding direction. 2.3 (01/14/03) * added oEncoderQuadrature object for quadrature encoding using FQD of TPU. * added discrete input for 2-4 bits oDI2, oDI3, and oDI4 (output not implemented yet). * optimized oSchedule's period method for speed. NOTE: use of busy in scheduled functions has not been necessary for a few revisions * optimized oTimer's event for speed. * more tinker with oMobileRobot... 2.2 (11/20/02) * added priority method to oDCmotor (default takes oPWM default of middle). * added TPU priority to TPU for oPWM and changed default priority to middle priority. * disabled oSonarDV between pings to ensur TPU not being utilized. * disabled oCompassDV between values to ensure TPU not being utilized. * added oTimer method. * added priority method to oEncoder/oDI1_TPU. **oEncoder defaults to LOW_PRIORITY** * oDCmotor::brake to 100 us instead of 10000 us. At longer periods motor vibrates (see documentation) * oMobileRobot:if turn off PID then could not manual adjust with Rpower method. * oMobileRobot:major bug fixes to oMobileRobot (would not stop) * oMobileRobot:Added ability to turn off PID on "PID" method; all other parameters take defaults of 0.0. * oSchedule: changed frequency method to period to align with its true function. * oEncodedMotor: removed debugging console out of oEncodedMotor and oMobileRobot :) 2.1 (10/09/02) * added more consistency in type names used throughout library. * Added oEncodedMotor object. * Added oMobileRobot object (stable, but somewhat experimental) * sciinit fix (25 MH) per Motorobots (10/02/02). * modified oDCmotor to handle locked antiphase configuration. You must connect the PWM signal to one side and its inverse to the other input. See the Remarks on the object on new features. * added orientation method to oDCmotor because with locked antiphase configuration there is no way to simply switch declaration like with sign-magnitude. 2.0 (07/21/02) * added oGBCamera object from Dafydd Walters: gbcam.h, gbcam.S, exposure.c. Only basic methods available currently, more to come (hopefully). Read documentation for details and limitations. * added oomrm.h so you only have to include one include, rather than specify each include you use which is rather a pain. * made oConsole a singleton (static) object. Should resolve problems of declaring it in several files. 1.11 (06/01/02) * Changed internal values for MH8, MH16, and MH25. Changed objects accordingly. Should now have more accuracy than before at cost of a couple extra kilobytes for float calculations. Objects that were affected: oSonar, oPWM (oServo), and oCompassDV. * oCompassDV fixed. value method now returns degrees, and added new methods microsends to return true time read by PWM, and callibrate to adjust the calculated degrees. 1.10 (05/25/02) * Fixed bug in makefiles/makefile. Missing $ in GCCHOME (Thanks to Chris Bruce). * Bug fix in tpu object, CPR method caused channel 0 (probably less 8) to not work. Potentially could effect several objects. (Thanks to David Sousa) 1.9 (04/16/02) * Added oSharpGP2D12 IR object that returns distance to object in centimetres: subclassed an oA2d with overriden value method that has builtin lookup table for the Sharp GP2D12 module--real implemented resolution down to 1 centimetres. * changed oSonarDV to return millimetres not inches. 1.8 (4/9/02) * Used float value in oServo value method. increases size, but fixes rounding bug in value method. * used namespace in compassdv and sonardv to eliminate conflict with tpu definition. prevents linker error if you declare both. * new schedule priority (in beta test). implemented but don't use yet. Still pondering how to correctly do this. Any ideas? better documentation forthcoming also. calculation of the degree value. 1.7 (1/26/02) * Added the oCompassDV object. 1.6 (1/24/02) * install.htm - cosmetic; schedule.htm, processor.htm - fixed sample code. * oDI1/oDO1 new one bit classes on either port. (not much bigger--better general purpose). * enum PORT for above oDI1/oDO1. * changed oDCmotor to use above oDI1 classes. * new oSonarDV object! 1.5 (12/19/2001) * moved definition of XTAL to sim_reg.h rather than sim.h * added method frequency(int ms) to oSchedule object to change the frequency at which the functions are called. Measured in milliseconds, with range (1-16000) * added method PITR to oSchedule to change the frequency at which functions are called by setting the PIT Register. * changed oScheduler to only honor the operate function depending upon any running tasks * Added get method to oConsole to read single char from keyboard. * Added overload of echo(const char* const, char) to print char. * changed object SIM name to oProcessor to align with new generic design model. 1.4 (11/29/2001) WARNING: MUST REPLACE/RECOMPILE WHOLE LIBRARY BECAUSE OF CHANGES IN VBR * changed mrm.ld to use 512K RAM. If you have 32K, then change __ram_size back to 0x05000! * added ability to use "make ram" or "make rom" to load into RAM only or not in the generic makefile. * renamed mrm.ld to mrm_rom.ld and added mrm_ram.ld into startup directory. * Added vector method to VBR to return the last vector number used. * changed VBR's first usable vector to 68 to avoid possible conflict with CPU32BUG vector number 66. Could test for presence of CPU32BUG later. It is unclear whether CPU32BUG's vector table is a seperate vector table maintained by CPU32BUG or the common vector table as initialized internally. * removed hard-coding of vbr address at 0x400 (CPU32BUG vector table), and built internal class table; larger, but hopefully safer. * Fixed potential problem with using odd vectors (still doesn't work--but I skip them) WARNING: VBR::address now returns long pointer; therefore, do not need to multiply by 4 if you have used this object (pointer arithmetic). 1.3 (11/19/2001) * added reset_status method to SIM object. Disappointing results. Unless I'm doing something wrong, 50% it powers up with POWERUP status, 50% with EXTERNAL reset. * swapped in default sim_reg.h that had different values. (2 theories where to start address for single byte values: 1) Even address (ex. DDRE=FFA14; pg. D-4 MC68332 User's Manual Rev 1) Must use short to read value (high byte don't care.) 2) Odd address (ex. DDRE=FFA15; pg. D-9 MC68332 User's Manual Rev 1) Must use char to read! otherwise, address error. Both are correct. Just be sure how to read it, short with lower byte or char. * Added libmrm.a to oomrm/lib directory. It was elsewhere in my structure. The use of this lib is sort of an MRM "black box"--not explained why or limitations. 1.2 (11/10/2001) * fixed major bugs in oSchedule drop method. 1.1 (11/08/2001) * Updated src makefile to include i2s * updated documentation. * made many default constructors protected rather than public. 1.0 Initial release