User Documentation for Archimedes 3.x

by Rondall E. Jones
Sandia National Laboratories
Albuquerque NM 87185
March 1997
Contact


Note: this document is formatted primarily for printing.

Introduction

The mechanical assembly planning problem is that of taking a model of a mechanical device, and computing one or more assembly sequences that will assemble the device from its piece parts.

Archimedes accepts a 3D CAD model in ACIS format and performs sophisticated reasoning about the assembly in order to automatically deduce one or more geometrically valid assembly sequences. Through an efficient graphical user interface, the user can constrain the planner in a wide variety of ways to reflect manufacturing realities that can not be automatically derived. A search for an optimal plan can also be performed, though this portion of the software is less mature than other parts of the program in version 3.0. Applications of the software range from simple CAD model checkout and rapid visualization of assembly processes to design-for-assembly, planning of manufacturing systems, and automation of programming of robotic assembly cells.

Examples, technical paper, and the latest version of this document are available at the project's web site.

Note 1: This document is not a comprehensive guide to use of Archimedes, but it should be adequate to lead a wide range of readers to successfully apply Archimedes to their problems. Comments/suggestions are welcome. Please use the "Mail" button in the address at the top of the document.

Note 2: If you print this document rather than reading it online, some of the graphics may get automatically trimmed on the right edge. Typically this will not cause serious loss of information.

Overview

CAD Data Format:

3D CAD models are presented to Archimedes in ACIS format. The most functional path to obtain ACIS data is currently through the Pro/Engineer CAD system and the PTC2ACIS translator. (PTC2ACIS was developed largely at Sandia and is now available commercially.) Without some such translator one must prepare all the model's parts in the same coordinate system so their relative locations are consistent, and then translate each part to ACIS using whatever facilities are supported by the CAD modeller of choice.

Graphical User Interface:

When an ACIS model is ready for processing with Archimedes, the user launches Archimedes by moving to your Archimedes directory and typing the name of a small script file which launches the program. There are no parameters on this command. (Archimedes can also be set up as icon to click. Your system installation person will setup your Archimedes directory and may modify or speciallize your launch script for best ease of use on your system. So, check with them for the proper directory name and launch command.) This brings up the graphical user interface, which has basic input facilities which will appear familiar to most users of common software packages on a PC. This graphical user interface is written in Tcl/Tk (around 4000 lines of code) with supporting functions in C++.

Technical Overview of Planning Process

When the user is ready to proceed, he/she is guided to load the desired model, plus any saved parameter files from previous runs. Archimedes then automatically performs a "contact analysis", during which the set of all useful part movement directions is determined. The program is then ready to attempt to determine an assembly plan. The user may set certain options, and then tells the program to start planning.

A data structure called a "non-directional blocking graph" is used during planning to help determine which parts or subassemblies might be moveable at a given point in the assembly process. (Note that for technical reasons, Archimedes actually plans for the assembly in reverse, beginning with the last operation which results in the whole assembly.) To test the possibility of a part or set of parts being moved, a "sweep test" is done. For speed, this test is implemented as a special viewing function which uses the 3D hardware graphics of the computer's display, through GL calls. Thus, the computer must have appropriate z-buffer display hardware and GL library for Archimedes to be effective. Without this hardware support the planning time typically is impractically long. (Though we may provide alternative software algorithms to the z-buffer requirement in subsequence upgrades to Archimedes.)

Generating the First Assembly Plan

Typically, when attempting a first plan, model inconsistencies will be discovered which prevent the plan from completing. These are reported to the user, who can use Archimedes' "model override" capabilities to cause the problem, such as an accidental part interference, to be ignored, and a specific action to be used at that point in the assembly process. After resolving a minimum set of such problems Archimedes will determine a first proposed assembly plan, which is guaranteed to be geometrically feasible. This plan is animated in one of Archimedes output windows, with complete VCR-like controls over the playback.

Constraining the Plan

Typically, a plan which is merely geometrically feasible will be impractical. So the next step is for the user to define one or more "constraints" on the assembly plan using a state-of-the-art system built into Archimedes that lets the user filter out any plan which violates any of a wide variety of constraints. Then, the user requests that a new plan be found, and this time it will be more practical. If the constraints are impossible to satisfy, the user can use Archimedes' "debug" subsystem to help elucidate the difficulty. Thus, the user cycles through view-constrain-replan-view passes until he/she is satisfied with the result.

Plan Optimization

Archimedes also has a prototype capability to search in the space of valid plans for a plan which is in some sense optimal. The user can adjust a few basic cost parameters to help define the cost function to be minimized. This capability is currently being expanded. Customers who believe they have situations which call far a search for an optimal plan are invited to contact the authors. We may be able to collaborate and provide the facility that is needed.

Output

One usually saves the current state of Archimedes, including the current assembly plan, constraints that are used, etc. These files can then be easily restored in a later execution. In addition, a detailed history of the events of the execution is automatically written to a log file, with a unique time stamp. This file can be very useful in helping diagnose problems.

Plans can be recorded in video form if the computer host supports direct video out (such as many SGI computers do) Or, RGB frames of each animation step can be produced, or in some cases MPEG movies can be output as needed. In addition, a variety of script outputs can be obtained, to assist in implementing the chosen assembly sequence in a software assisted manufacturing system, or performing more elaborate animations in a production quality graphics program.

Because of all the demands on the computer's graphics abilities, Archimedes is currently only running on Silicon Graphics Inc (SGI) computers running the IRIX operating system. However, it has also run quite effectively on IBM RS/6000 computers using AIX, and the graphics facilities needed by Archimedes appear to be coming rapidly to PCs.

Model Setup

When PTC2ACIS is used to prepare the ACIS data, a set of orientation file with the extention ".asy" are produced automatically. These files tell other programs, such as Archimedes, how to orient each part or subassembly with larger assemblies. In this file, each part file name or .asy file name is followed by 4 lines of numbers: The first three lines are a 3x3 transformation matrix, and the last line is a translation vector. For example, see this.

When you perform your own ACIS transformation using some other tool, you will need to somehow provide the .asy file to Archimedes. Typically the easiest way to do this is to simply assure that all the parts in the assembly are modelled in the same reference frame, in which case the form of the .asy becomes trivial. That is, the transformation matrix becomes an identity matrix, and the translation is all zeros. For example, see this .

Note that the sequence numbers that appear after each part or assembly file name are optional.

Note that Archimedes expects models to use millimeters as their standard unit. This is because all the tools in Archimedes' tool library are in millimeters. If your model is in inches (as indicated in the *.asy file) then Archimedes will ask you if you wish to convert to millimeters. You should normally reply yes, unless you are not going to use tools, and have a reason not to use millimeters. If your .asy file does not indicate a scale, Archimedes will assume that millimeters are intended, but a warning note will be posted.

The Archimedes Main Windows

The Archimedes program uses two main windows: one for status and commands, and a second for animation and graphical interaction. These are shown below.

The "main window" (on the left) has seven subwindows, alternately cream color and dark red in background.

  1. The first (cream color background) has a series of pull-down menus along the top (labelled File, Model, etc.) When you click on one of these a menu of related options pops up, and you can drag the mouse down to the menu item desired. We will discuss each menu option in separate sections below.
  2. The second subwindow (dark red background) is a general status window, which tells the nature of the action which is going on now. (In this screen grab it just says "Archimedes Status".)
  3. The third subwindow (cream background) is a scrolling area of detailed status messages that Archimedes is posting for the user's possible interest/use.
  4. The fourth subwindow (dark red background) contains four primary action buttons. These are primarily for controlling/stopping the planning process.
  5. The fifth subwindow (cream background) is the constraint window. It contains a scrolling area listing all current constraints, and a row of action buttons which precisely duplicate those in the "Constraint" pull down window, for convenience.
  6. The sixth subwindow is just a label window is just a separator/label.
  7. The seventh and last subwindow is a scrolling list off all current model overrides which have been created with the "Model" pull down menu.

Note that the fourth, or middle, window contains the four primary action buttons.

  1. "Go" is the button used to tell Archimedes to attempt the planning process. You will usually click this after each time you add a new constraint or model override, to try to get the plan you want.
  2. "Pause" can be used to pause the planning process. When "Pause" is clicked the button changes to "Resume", which you can select to continue.
  3. "Abort" will stop the planning process at the next appropriate point. It may take a minute to reach an appropriate stopping point in complicated assemblies. Generally, Archimedes will leave a valid, partial assembly plan existing when it aborts, and you can view the partial plan in the animation window.
  4. The "Reset GUI" button is available for the occasional situation that may arise in which an accidental closing of a window or some other situation causes the graphical user interface (the "GUI") to freeze. Usually, clicking this button will return Archimedes to a normal state from which you can continue work. If a freeze occurs which is not due to user accident, please report it to the Archimedes project for debugging.

Process Overview

The general process of using Archimedes to develop a good assembly plan is as follows:

A Comment about Problem Size

For small problems (say less than 40 parts of modest geometric complexity) Archimedes generally operates quickly and quite automatically. For more substantial assemblies of up to say 100 or so parts with reasonable geometric complexity (i.e. typical gears, screws, plates, tubes, housings, etc, with well less than a megabyte of CAD description per part), use of Archimedes is usually not especially difficult after you have a bit of experience. But as the number of parts and/or the geometric complexity of the parts grows (to a few hundred parts and/or 10's of megabytes of CAD data) one must use a more careful process or the execution time will be unacceptable. See the later section on hard problems for guidelines for how to proceed when the going gets hard.

The Archimedes Menus

Note: Menu items discussed below can be access directly by clicking on the menu name and dragging down to the choice, or else you can click on the "-----" entry and a tear-off menu will be created for you. The tear-off menu is static, and remains present for you to use until you destroy it. In the graphics below the tear-off versions are used for simplicity of screen grabbing.

The File Menu

The File menu is used to load an assembly or some previously saved parameters related to the assembly, or to output various kinds of data associated with the current assembly and/or plan.

File/Load

When you want to load an ACIS assembly, click on File, then on Load. A directory navigation window will come up that will look like the example below. Note that only directories (which end with a slash "/") and .asy files (which do not end with a slash) show in the navigation window, since these are the only entries that could possibly lead to the file you want. To go down into a directory, just click it. To go up one directory level, click on the ".." symbol at the top. (That's the usual UNIX or Windows symbol for the parent directory.)

When you click on an assembly name, an outline of the assembly structure will appear in a moment in the right half of the display. This is to help you determine whether this is actually the file you want. To load that assembly, either double click it, or click on "Accept".

Note that there is a button for "Parameters". These parameters are for special situations in which the contact analysis does not work properly and some adjustments in assumptions need to be made. You will probably want to contact the Archimedes support team for instructions if you need to use these parameters.

File/Save

The natural counterpart to loading an assembly is saving it. However, there is no need to save the assembly itself, as Archimedes never changes it. But, there are four collateral files which you will want to save before exiting Archimedes. These are all saved by clicking on the File/Save command. A simple dialog box will then appear where you can edit the default file name. If you leave the name as it is presented to you, the saved state will automatically be reloaded next time you load that assembly. But, you may want to change the file name to some non-default name for various reasons. The four files which are saved are as follows: All these files are reloadable as a set or individually by the Restore function, whose description follows next.

File/Restore

Every time you save the state of the assembly with File/Save, a complete set of four save/restore files is saved under the given name. Later during this execution, or later in a subsequent execution, you may restore the state completely back to the saved state, or you may reload some of the state in piecemeal fashion. When you click the File/Restore function the menu below appears. To load a complete state, click on "Complete Set of Params, Constraints, etc" and you will be guided through a file selection process, much like the assembly load process. The most common reason to do a partial restore is probably to find an old assembly plan that you wish to see again. Or, some people save alternate sets of constraints for various purposes, or break the constraints into subgroups and load them as desired. In this latter case, you would pick "Load More Constraints" instead of "Load New Constraints", so the constraints add to your current list of constraints rather than replacing them.

Note you can also reset the parameters to their initial state if you have gotten things confused. And, there is no such thing as adding "more" plans, so that button is blank.

File/Export

Archimedes 3.0 is a monolithic version, with just one set of features. Archimedes 3.1 and later split out certain functions as options. If you are using a version of Archimedes 3.1 or later and have the Archimedes/Export option, then the File/Export button will reveal a submenu as below. These output format are generally custom for particular situations, and we will not go into details on any particular format in this document.

Also, the menu item for SLP files is a type of export function, and will not be available unless you have the /Export facility.

It is worth noting that by default Archimedes generally places the output files in the directory from which the CAD model was loaded.

File/Quit

Finally, the File/Quit function at the bottom of the menu is the normal exit mode from Archimedes. You can also exit with a <Control-C> anytime the cursor is in an Archimedes window (including subwindows). However, this exit method does not allow Archimedes to check the current state to see if files need to be saved, which is dangerous.

The Model Menu

The Model menu is used to make a variety of ad hoc adjustments to the CAD model without actually going back to the CAD modelling tool to remodel anything. These adjustments, or "overrides", do not actually change anything in the CAD model; rather, they tell Archimedes things about the model to ignore, or to treat the model as if certain changes had been made.

For example, suppose your CAD model contains a flexible cable which winds through the assembly in a way much too complicated for Archimedes to handle with simple straight line motions. There are a couple of options to allow Archimedes to proceed in a meaningful way:

  1. You can click on "Suppress Collision Checking" and then indicate by clicking on that part in the animation window that Archimedes is not to concern itself with collisions of other parts with that one. Thus, the resulting assembly plan will include the part, but other parts may collide with it as they are inserted into the assembly.
  2. You can temporarily remove the part by "Remove Parts by PICK" or another Remove option. Then, after you have selected which part or parts are to be removed, they will disappear from the display and will be ignored during assembly planning. However, you can un-remove them at any time by selecting "Remove Parts by PICK" again and adjusting the set of removed parts to not include that part.

( Note: remember that if you are using a menu such as the Model menu frequently, you may want to use a tear-off menu like the one above, so the menu stays statically on the screen. To do this, just click on the first entry in the pull-down menu, which looks like "------------".)

In subsections below we will discuss each override briefly. Note that the mode of interaction is fairly uniform in all these cases: generally, you will be presented with an opportunity to graphically indicate the part(s) concerned by clicking on them in the animation window. A reminder window will tell you exactly what items you should be indicating, (such as the parts to be temporarily removed), and will list remind you of several optional clicks available. See the graphic below for a typical situation when doing a model adjustment. In almost all cases, you will at least have the ability to:

Note: The part groups listed in the "SubAssemblies" box are derived from the subassemblies identified in the .asy file, plus any groups of parts you identify when creating constraints.

There is one extra window that bears some explanation. Some of the overrides require you to specify a direction of action. When this happens a window like the one at left appears. When this window appears the animation window view is temporarily changed to a special view that is consistent with the terms "left", "right", etc, in this trajectory dialog window. If the direction of action is one of the six primary axial directions, then you can just click on that direction. If not, you will have to give the coordinates of the direction numerically (true, its clumsly...this is an example of the kinds of tradeoffs we have had to make in an effort to not overspend effort on niceties.) You should always note carefully the nature of the direction vector being requested: sometimes it may be an INSERTION vector, and sometimes not.

Model/Suppress contact analysis

Occasionally a rather inimportant part will be modelled in such a way that an unreasonable large number of facet are produced in it by the ACIS facetter. For example, springs which are accurately modelled may do this. In such cases the excessive facetting may slow Archimedes' contact finding algorithm to an unacceptably slow state. The solution is to tell Archimedes that to suppress the contact analysis for this part (using the menu features discussed just above). The problem with doing this is that now Archimedes can't tell what other parts this one is contacting, so it will look like a disconnected subset. So, you must also use the following function to tell Archimedes what parts it touches.

Model/Declare more contacts for a part

This is used for any situation in which Archimedes for some reason fails to understand that certain parts are in contact. The most common cases are use of the "Suppress contact analysis" function, and situations where for some reason two parts which are actually significant distance apart should be considered as touching for practical purposes.

Model/Add thread to a cylinder

Often a part such as a screw will be modelled as a cylinder rather than a threaded surface, for simplicity. You can use this override to let Archimedes know that this is the case. Then, a screw so declared will be treated as screwing into position rather than just translating straight into position.

Model/Force a threaded mate

This override is just like Model/Force a snap fit or similar, except that the moving part will be turned appropriately.

Model/Force a snap fit or similar

This override is perhaps the most frequently used override. It allows you to override any difficulties present in the model, and simply force a part to insert into position in a given direction of movement (without screwing...see above override for that).

Model/Suppress collision checking

This override was mentioned in the introduction to Model menu. (See there for motivation.) Basically, using this override for a part or parts completely subverts one of Archimedes key facilities, namely that of checking whether a part collides with the remainder of the assembly when being inserted or removed in a particular direction. It is provided to allow you to proceed in the midst of a serious model difficulty. however, its use should be minimized or the assembly plan which results may not be meaningful.

Model/Change part color

This function is very straightforward. Just click on a desired color in the Archimedes Colors list box, and then click on the part or parts you want to be that color. Use the usual tools to move the assembly around, hide parts that are in the way, etc.

Each click on a part will result in a new override, which shows immediately in the Overrides table. If you accidentally color a part you didn't mean to color, just delete the corresponding override from the table. (See Delete function below.) The part will return to its original color. (See the idea? the original color is still there, but "overridden".)

Model/Remove parts by PICK

This override interacts in the normal manner discussed above. The parts selected for removal are removed in the sense of an override... they are still formally present, which allows save/restore files to be read or written without difficulty. But, the "removed" will be undetectable in normal use while they are removed. The only way to see them again is to go into this (or the following) menu function and edit the set of removed parts.

Note that Archimedes attempts to adjust the context as far as possible for removed parts. For example, if you have a constraint listing a part in a cluster (see discussion of constraints), and then you remove that part, then the cluster constraint will continue to be valid. The removed part is just ignored, and the remaining parts continue to be a cluster. In some cases, a constraint will be invalidated or confused by the removal of a part. In these cases the constraint will automatically be SUSPENDED, with a note to the user that this has been done.

Equally, if you edit the set of removed parts and un-remove the part (i.e., unselect it from the set of parts to be removed) than Archimedes will in most cases automatically reactivate a related suspened constraint, with a note that this has been done. (Note: since we don't record whether the suspension was done automatic by Archimedes or done by the user, it is possible that a user-suspended constraint might re reactivated in this manner. This seems like a rare subcase.)

Model/Remove parts by NAME

This override is just like the preceding one, except that the SubAssemblies menu is augmented by each individual part name, so you can select parts by name. You may still click on a part graphically also.

Model/Delete highlighted override

To delete an override, just click on it to highlight it, then select this function.

The Constraint Menu

Constraints are the tools you use to tell Archimedes about non-geometric requirements on the assembly plan. This is a rich and varied subject in the assembly planning literature, and in actual factory situations. The Archimedes project has developed a unified set of constraints which you invoke in a fairly uniform manner to place a significant range of requirements on the assembly process. To be effective in use of constraints you will probably need to understand some of the technical background. Our organization and naming system for constraints is presented in the ICRA'96 paper. A more technical overview than is presented here is given in the ICRA'97 paper.

A brief summary of the available constraints will presented at the end of this document.

This is the constraint manipulation menu. Each function is discussed in following subsections. Note that this menu is duplicated with the five buttons below the constraint table in the main menu. This is for historical reasons, and for easier manipulation of constraints, since you will probably find yourself doing a lot of this.

Constraint/Add a constraint

When you click on Constraint/Add, the following submenu pops up.

Note that the list is constraints is longer than shows normally in the window, so you may need to scroll down to get to the constraint you want. The names are from the ICRA'96 paper, with some new constraints which are named in the same spirit.

The only thing you must select in this box before clicking on "OK" is the constraint type. If you do not fill in the name or description Archimedes will fill in a default (but not useful) name, and a blank description. You should choose a name meaningful to you, as the constraint type and this name are how you will recognize the constraint in the constraint list that is built in the main window.

Each time you click on a constraint type a help box will appear at the bottom of the "Define a Constraint" window explaining exactly what that constraint does. However, you may find the descriptions difficult to understand initially. Some experimentation and reading of the ICRA papers should be helpful.

Constraint/Edit highlighted constraint.

To edit a constraint, click on it in the main window, then select this function. You will then fall directly into the same code which let you define the constraint in the first place. Note that you cannot change the constraint type via editing, as the type is fundamental to the definition process. If you wish to change the type you simply need to delete the constraint and start over. Also, if you wish to edit the constraint name, just click on the name to highlight it and then select "Edit". A separate dialog box will let you edit the name.

(Note that currently the optional description field is not actually used for anything. It may be in the future.)

Constraint/Delete highlighted constriant

To delete a constraint, click on its type field, then select this function. You will be asked to verify that you really mean it. Often, you will be better off using a "suspend" (see below).

Constraint/Suspend highlighted constriant

Often you may wish to temporarily remove the effect of constraint, for example when trying to determine what is causing the planning process to fail. If you delete the constraint, you will have to go through the whole definition process again to get it back. This would be an unacceptable burden. So, you may instead just click on the constraint (i.e., its type field) and select "Suspend". The constraint will then have no affect whatever, until such time as you reactivate (i.e., un-suspend) it. This feature is very handy and you will probably use it frequently.

Constraint/Activate highlighted constriant

To un-suspend a constraint, click on it (i.e., its type field) and select "Activate".

The Debug Menu

This menu contains a variety of features that help with understanding what is wrong with the assembly or constraints, setting special parameters, and debug hooks for developers (which may or not appear in your local copy of Archimedes).

Debug/Examine the assembly

If you simply want to see the assembly, and maybe part names, use this function. It gives you access to all the usual features of moving, hiding, zooming, etc, that you have available when defining a constraint. However, instead of a click on a part causing the part to be selected, it instead causes the name, color name, and sequence number of the part to be displayed in the status window.

Debug/Debug the assembly

When planning fails for some reason, particularly if the problem is due to some conflict with constraints, the facilities available to you in this menu are very helpful in determining what went wrong.

When Debug/Debug is selected, you will first be asked to select the parts in the assembly that you want to be in the set to be debugged. You will have the option of selecting all the parts with one click. After selecting the parts to be debugged, the menu box below appears.

This same menu box will appear automatically when the planner fails, with the problem part set automatically selected. We say that Archimedes is in "debug mode" when this menu box is on the screen, whether you selected it directly, or fell into it from the planning process.

There are four debugging facilities (plus a "Quit" button):

Debug/Check for part overlaps

This function is exactly like Debug/Debug/Try all pairs, except that it automatically selects all the parts. It is slightly misnamed, since it will also uncover part pairs that are locked togther, such as snapfits. This function was placed here because this task is the main function from Archimedes that some CAD design staff may use.

Debug/Clear cache of previous collision detections

This is mainly a tool for the Archimedes development team to use when a bug is suspected in the internal process which uses information from previous planning attempts to speed execution.

Debug/Set random seed

Certain operations in Archimedes depend on a random choice of a path to proceed down in the search for a plan. This function allows one to exactly repeat a previous test by setting the random number generator to the same initial state both times.

Debug/Suppress progress messages

When doing timing tests, the cost for the GUI to write progress messages to the screen and the log file can interfere with accurate timing tests. This function turns off such informational messages, for better time tests.

Debug/Suppress progress messages

This function return progres message writing to the normal state.

Debug/ ****'s special

These functions are debug tools for the Archimedes project team.

Debug/Redraw everything

If for any reason your screen become garbled due to factors outside of Archimedes, this function will draw all the current windows. This is a part of what is done when the "Reset GUI" function is executed.

The Options Menu

This menu is used to control certain global options for what graphics information is displayed as Archimedes is planning an assembly sequence, and what basic modes the planner is to use. These options apply to the entire planning process, rather than to a local set of parts as a constraint addresses.

Options/Displays/Show Graphics

This option is usually on. It requests Archimedes to show the subassembly that is currently being processed. Thus, one sees during the planning process the remaining parts to be disassembled (or more correctly, assembled, but in reverse order). However, turning this option off can substantially speed up planning.

Options/Displays/Show Bitmaps

This option tells Archimedes to show the black and white bit map resulting from each call to the GL viewing routine which is used to determine if a particular sweep of a part relative to another part, in a given direction, results in the parts hitting (which is seen as a significant region of white pixels) or not (practically all black pixels).

Options/Modes/Only Linear

This options can be used to require that all insertions involve only one part at a time...no subassemblies will be used.

Options/Modes/Only Connected

This option is normally on. It can be turned off to allow the state of the assembly to contain disconnected subsets of parts. This option has seldom been used, and may not be well debugged.

Options/Modes/Plan Grasping

This options asks Archimedes to plan for grasping of each part by a certain set of robotic grippers which have installed in Archimedes. This feature was created mostly for use by a particular project at Sandia and may not be of general use in its present form. Please contact the Archimedes Project if you are interested in further developments in this area.

Disabled options

Certain options are greyed out, indicating that they are not operational yet. Such buttons are kept on the screen to simplify the process of creating distributable versions of Archimedes without excessive last minute disruption to the code.

The Optimization menu

This menu is used to turn optimization on and off, and to control the parameters of the cost function. This feature is fairly primitive in Archimedes 3.0, but we expect major enhancement of it in Archimedes 4.0 late in 1997.

Optimization/Optimization

Use this option to turn the optimization process on or off. Note that generating the first plan can be fairly time consuming in complex cases, so the optimization process can therefore be very costly, as it will search through many plans for ones will progressively less cost. Our intent is to provide a facility whereby you can tell the planner to stop and show the lowest cost plan so far. This feature is planned for Archimedes 4.0.

Optimization/Edit operation costs

When you click on this, a box of editable cost parameter pops up. The cost parameters are primitive in Archimedes 3.0. They include just three:
  1. The cost of an insertion. This cost applies to each part or subassembly insertion. Note that the total number of insertions in a plan is equal to the number of parts in the plan, even if subassemblies are used.
  2. The extra cost of using a subassembly. This cost adds to the insertion cost. You may want to set this to zero so use of subassemblies is not penalized.
  3. The cost of an inversion. This cost is added any time an explicit reorientation is done.
Note that these parameters cannot be set negative in Archimedes 3.0, due to deficiencies in the cost tracking process. Again, please understand that the optimization process is primitive at this time and is planned for substantial upgrade in Archimedes 4.0. In fact, the optimization process is the main enhancement planned for Archimedes 4.0.

Guidelines/Hints for Handling Hard Problems

In this section we present some coping techniques for dealing with really large assemblies (hundreds of parts, or lots of geometric complexity).

Conversion to ACIS format with PTC2ACIS.

Occasionally, PTC2ACIS will hang when trying to process a part. This is a fairly rare circumstance, and no doubt will become more rare as commercial use of this new facility ramps up and more bugs are shaken out. When this failure does occur, you will see the name of the part PTC2ACIS is working on in the log file. You must do something about that part...such as simplify its design, and then try the conversion again.

Our experience has been that such failures often happen with tiny parts with some surface pathology. If this is the case, you may want to just delete the part for now. You should consider this to be a last resort, though, because deleting even a tiny part may cause problems for Archimedes. You may need to use Archimedes' "Declare more contacts for a part" override to restore proper connectivity to nearby parts after deleting a problem part.

To delete the part in Pro/E, just load the model into Pro/E, delete the part using the usual menu operations, and then re-save each subassembly which contained the part, at any level of the subassembly hierarchy. Then do the conversion to ACIS again.

Loading a model into Archimedes

It is also possible for there to be a problem when a model is loaded into Archimedes (from the File/Load an Assembly menu). The most common problem we have seen is when one ACIS part file in the assembly is unusable for some reason, and is displayed as blank. In fact, in this case the entire assembly displays as blank. If you watch the animation window carefully while the assembly is loading, you may be able to detect at what point in the load sequence the "blank" part is displayed. However, the load process may be so fast that this is hard to detect. In this case, you will have to do partial loads to see where the problem is. For example, if there are subassembly definitions built into the ProE model (which there usually are in large assemblies) then try loading each major subassembly until you find the "blank" one. Then, load its subassemblies till you find the "blank" one, etc. It is also valuable to simply "comment out" groups of parts in a *.asy file, and see if the remaining parts load OK. To comment out a part, just put a "#" at the front of the lines representing that part. For example, in the following segment of an actual .asy file, a bad part has been commented out:
jam_nut.sat 2869
        0.0000000000         1.0000000000         0.0000000000 
       -1.0000000000         0.0000000000         0.0000000000 
        0.0000000000         0.0000000000         1.0000000000 
        7.4750000000         0.0000000000         0.0000000000 
fwd_guide.sat 1660
        0.0000000000         0.0000000000         1.0000000000 
        1.0000000000         0.0000000000         0.0000000000 
        0.0000000000         1.0000000000         0.0000000000 
       -0.3750000000         0.0000000000         0.0000000000 
#sml_oring.sat 1665
#        0.0000000000        -1.0000000000         0.0000000000 
#        1.0000000000         0.0000000000         0.0000000000 
#        0.0000000000         0.0000000000         1.0000000000 
#        0.0700000000         0.0000000000         0.0000000000 
fwd_key.sat 1663
        0.0000000000        -0.7071067812        -0.7071067812 
       -1.0000000000         0.0000000000         0.0000000000 
        0.0000000000         0.7071067812        -0.7071067812 
        0.8750000000        -2.2466196652        -2.2466196652 
When you have located the bad part, you may either (1) go back to the ProE and simplify it or delete it; (2) or comment it out of the .asy file, as just above.

Preparing to Process a Large Assembly

Once a large assembly is actually into Archimedes, and you realize that some work is going to be required to get it to process, the first thing you should do is be sure you have the major relevant groups of parts named so you can refer to them easily when defining overrides and constraints. Archimedes automatically creates a selectable part set for each set of parts defined in a *.asy file. But this is seldom enough. So, use the SUG-NAME constraint to define useful part groups. This constraint has NO EFFECT except to register the set of parts as a named set. Use as many as you want, especially for very large groups of parts which you might need to hide frequently to see inside the assembly, or might want to treat as subassemblies.

Temporary Removal of Irrelevant Parts

Probably the next thing you should think about when an assembly is obviously too large to process quickly is whether it contains subsets of parts which are not really germane to your interest. If so, consider temporarily removing them using the Model/Remove Parts feature. This feature lets you select parts to be ignored. Such "removed" parts do not cost anything during contact analysis, planning time, or display time. The nice thing about this feature is that you can just as easily unselect the parts from the removal list, and all the overrides and constraints you have defined will still be compatible. On the other hand, if you actually remove parts or subassemblies by some method such as commenting out their entry in the *.asy file, then they are really absent, and your saved files of override and constraint definitions will be incompatible and unloadable if you ever decide to use all the parts.

Please note that you must be careful not to delete any parts which would cause the remaining assembly to be disconnected, or otherwise unworkable. For example, if you are working with a rocket design, and are interested in the guidance system in the nose, you could probably safely "remove" all the fins. You might be able to remove the whole tail section, but be aware of connectedness problems you might be causing thereby. Minor connectedness problems can be corrected by hand by using the "Model/Declare more contacts for a part" override.

Checking the model for part overlap

If you attempt to generate an assembly plan for a bad model, you can waste a great deal of time, and be quite frustrated. So, it is strongly advised that you do first do a model check using "Debug/Check for overlapped/locked parts". You can do this for the entire assembly directly from the Debug pull down menu, or you can select portions of the assembly to check by going to "Debug/Debug the assembly" and then choosing "Try all pairs". What Archimedes does when you ask for this check is take each pair of nearby parts (and there can be thousands of such pairs, of course) and attempt to prepare an assembly plan for that pair. The only reasons why it would not be able to find a plan for some pair are:

Grouping sets into REQ_SUBASSEMBLY's

The next thing you should consider is clumping major subsets of the asembly into subassemblies, using REQ_SUBASSEMBLY constraints. This will simplify Archimedes' internal processes considerably, and probably makes sense from a process engineering standpoint anyway. Use this constraint generously. You can always suspend or delete them if you decide to give Archimedes a freer hand later. Obviously, you must pick groups of parts which are feasible to bring into the main assembly as preassembled subassemblies, or the assembly will be impossible. To see into an unfamiliar assembly, it may be a good idea to change the color of large outer enclosures to be transparent. Just use the part color override feature to do this.

Grouping sets into REQ_SUBASSEMBLY_WHOLE's

This is the "really big hammer" which you must bring out for really hard problems. Or, you may find it so helpful that you just go ahead and always do this step first. It is really helpful in dealing with big problems. Basically, you use the same subassembly definitions discussed in the previous paragraph, but you make the subassemblies into "virtual single parts" by using the REQ_SUBASSEMBLY_WHOLE constraint instead of just REQ_SUBASSEMBLY. Thus, you can play with the assembly as if it were a set of just a few large complex parts, and Archimedes' planning time will be vastly reduced (though the contact analysis time will not be reduced until a later version of Archimedes implements that).

Ungrouping REQ_SUBASSEMBLY_WHOLE's

The above techniques should help you sucessfully get to an initial assembly plan. Then, you will want to selectively back off from some of the REQ_SUBASSEMBLY_WHOLE's you have defined, so Archimedes can plan a more complete assembly sequence. Suppose there is a subassembly called "parachute" which has been treated as a REQ_SUBASSEMBLY_WHOLE, and now you want to let Archimedes plan the assembly process of that subassembly. Generally, the best idea here is to first define a REQ_SUBASSEMBLY for the parachute. This is easy because Archimedes adds a defined part set to the selectable part set list for every constraint . So, you can just select the parts from the REQ_SUBASSEMBLY_WHOLE as the parts for the new REQ_SUBASSEMBLY. Then, go ahead and unselect some of the parts in the REQ_SUBASSEMBLY_WHOLE so Archimedes can start planning their assembly process. Or, just delete or suspend the REQ_SUBASSEMBLY_WHOLE completely.

You should do such ungroupings in small bunches, so you can easily tell where problems occur. You will probably need to add more constraints every time you release more parts for planning, as you will see more "strange" things happen with the newly planned parts.

That's all...

These steps should get you to an assembly process for virtually any assembly that can be loaded into your computer's memory. It has worked for us every time.

Summary of Available Constraints in Archimedes 3.0


Privacy & Security Notice