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.
-
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.
-
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".)
-
The third subwindow (cream background) is a scrolling area of detailed
status messages that Archimedes is posting for the user's possible
interest/use.
-
The fourth subwindow (dark red background) contains four primary
action buttons. These are primarily for controlling/stopping the
planning process.
-
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.
-
The sixth subwindow is just a label window is just a separator/label.
-
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.
- "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.
- "Pause" can be used to pause the planning process.
When "Pause" is clicked the button changes to "Resume", which you
can select to continue.
- "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.
- 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:
-
Load an ACIS model, with associated .asy file, via the File menu.
If appropriate, restore any previously saved constraints, overrides,
via the File/Restore function. (Usually all the latest constraints,
parameters, etc are automatically loaded, but you have the option to
save multiple files of such data and load them piecemeal.)
-
Try to generate a first assembly plan by clicking on "Go" in the middle
subwindow of the main window. Generally, we expect there to be some
problem with the CAD model than will prevent an immediate plan
being found. Typically, this is due to part models overlapping in space.
When the planner fails, it drops you into "debug" mode, which
usually will help you locate the problem.
-
Then, you use the Model menu to "override" the difficulty in the model.
For example, if a screw has been modelled too large for its hole, than
you can use the "Force a Snapfit or similar" option to specify
how this screw should be inserted. The fundamental model problem
thus does not have to be resolved before you can proceed, though
ideally one would at some point correct the model.
-
Iterate on the above two steps until Archimedes produces a complete
first plan.
-
View this plan in the animation window, and determine what action
or actions are clearly "wrong". That is, which actions must be
done some particular way due to a non-geometric constraint.
For example, Archimedes' first plan might suggest that a particular
subassembly be used which is clearly problematic.
-
Use the Constraint menu to find an appropriate constraint which
accurately expresses the actual factory constraint, without over specifying
how the process must be done. (So as to leave Archimedes maximum
flexibility in later planning.)
-
Click on Go again, and replan. Then, view the new plan to
see what further constraint might be needed.
-
Continue this plan-view-constrain-plan cycle until all relevant
constraint have been discovered. At this point you may wish
to record the animation, or produce some other output.
-
If you are using the optimation feaure in Archimedes, you are
now ready to specify your optimization parameters, and initiate
a search for an optimal plan.
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:
- name.params, which contains all the values of parameters in the
Options and Optimization menus, plus such details as the most recent viewing
angles in the animation window.
- name.constraints, which contains the complete description of
every constraint you have defined through the Constraints menu.
- name.overrides, which contains the complete description of
every model override you have defined through the Model menu.
- name.plan, which contains the current assembly sequence plan
that is available for view in the animation window.
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:
- 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.
- 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:
- select a part by clicking on it (the part will then show as bright green)
- unselect a (bright green) part by clicking on it again
- hide any specific part by clicking on it
- un-hide all parts
- if appropriate, select/unselect/hide or unhide
a group of parts by clicking on its name
in the SubAssemblies box, then clicking on the desired function
(i.e., Hide SubAssembly).
(Note: double clicking on the subassembly name is equivalent to single
clicking on it then clicking on Select/Unselect.)
- zoom in to a specific portion of the scene by clicking on any point,
which then becomes the center of a new, zoomed in view
- zoom out, without changing the center of view
- reset the zooming to normal
- to expand the view window by 10% in each direction.
(In some Tcl/Tk versions expanding the window directly by
dragging the window corners will create undesirable affects--so this
alternate method is supplied. This method is also precisely reversible.)
- to shrink the view window by one increment.
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:
- 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.
- 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.
- 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.
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:
- The models are somehow locked
together in such a way that no straight-line motion will separate them.
Typically this is because the parts are overlapping in space.
Some traditional CAD modelling practices lead to this situation.
For example, modelling screws using their threads' outside diameters, and the
corresponding holes with their inside diameters, will cause such overlaps.
You will have to use some override (such as a "mate override") to deal
with each such case.
- You have defined some constraint that is violated by taking
a particular pair of parts apart. If you perform this test before you define
any constraints, you will have fewer confusing reports of problems.
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
- PRH_STATE:Requires that a given state
(i.e., a defined set of parts constituting a stage in the assembly)
not appear at any time in the assembly plan.
- PRH_SUBASSY:Disallows any moving subassembly
from containing a defined set of parts.
- REQ_CLUSTER:Requires that a defined set of parts be assembled
as a cluster: that is, assembled as a sequence
among themselves (in no particular order),
without interruption by other parts.
- REQ_FASTENER:Requires that a defined fastener part
(or cluster of fastening parts)
be assembled immediately after all the parts to be fastened
have all been placed in the assembly.
- REQ_LINEAR_CLUSTER:Requires that a defined set of parts be assembled
as a cluster, and in linear fashion.
(That is, with exactly one part added at a time.)
- REQ_LINEAR_PARTS:Requires that a controlled set of parts be assembled
linearly (i.e., one at a time) anytime they are forming
a liaison with members of a second defined set of parts.
The parts are not required to be assembled sequentially.
(See REQ_CLUSTER instead if that is what is needed.)
Note: this definition is more complex than may seem
necessary on first thought. However, note that all parts
are always assembled linearly when they are first placed
in the assembly. Thus, a more careful description is needed.
- REQ_ORDER_FIRST:Require that a part (or cluster of parts) be first
in the assembly process.
Note that this constraint may not work in the normally
expected manner if the plan is non-linear.
In non-linear plans all this constraint can do is
assure that the controlled parts are in the stationary
part of the assembly when other parts are added to them.
To achieve the results you want you may need to put
some or all of the other parts in a REQ-LINEAR-* constraint.
- REQ_ORDER_LAST:Require that a part (or cluster of parts) be last
in the assembly process.
- REQ_ORDER_LIAISON:Requires that ALL liaisons among a given
(first) set of parts
be established before ANY liaisons in a given (second) set of parts
are established.
No requirement is imposed on the order of liaison establishment
within either set.
(Though you may, for example, use a REQ_CLUSTER
in addition to this constraint to require one of the sets
to be assembled as a cluster.)
Also, the second set of liaisons is not required to
be established immediately after the first set.
Note: In the case of non-linear plans, the meaning is that
the first group of liaisons must be established before the involved parts
are joined to any parts which constitute a liaison in the second set.
- REQ_ORDER_PART"Requires that ALL parts in a given set of parts be placed
into the assembly
before any of the parts in a given second set.
No requirement is imposed on the order of assembly
within either set.
(Though you may, for example, use a REQ_CLUSTER
in addition to this constraint to require one of the sets
to be assembled as a cluster.)
Also, the second set is not required to immediately
follow the first set.
In other words, this constraint simply imposes an assembly
precedence between two set of parts.
Note: In the case of non-linear plans, the meaning is that
the first group must be complete before it is joined to
any parts of the second group...but the second group may have been
'previously' assembled -- as a separate subassembly, for example.
In particular, in the case of non-linear plans,
REQ_ORDER_PART constraints with just one part in the first set
have no effect.
- REQ_PART_SPECIAL:Allows the user to determine interactively whether each
proposed action with a part (or any of a set of parts)
is acceptable.
Note: the number of responses required by the user can
be too high for practical use unless other constraints are added
to minimize the number of alternatives involving the controlled
set of parts.
- REQ_PATHS_AXIAL:Require that all assembly actions which form liaisons
among a chosen set of parts
be along specifically chosen axial directions.
- REQ_STACK:Requires that a specified group of parts be assembled
in stack-like fashion: that is, one at a time, all in the
same specified direction.
- REQ_SUBASSY:equires that a defined set of parts appear as a subassembly
at some time in the assembly plan. This could be
as either a subassembly which is being inserted,
or as the stationery assembly being inserted into,
or as the union of the two.
- REQ_SUBASSY_WHOLE:Requires that a defined set of parts be a subassembly.
(See REQ_SUBASSY.) In addition, this constraint tells the planner not to bother
disassembling these parts any further.
- REQ_SUBSEQUENCE:Requires that a given set of parts be assembled as a cluster,
but with a number of sub-cluster constraints obeyed also.
You may choose whether the order of subclusters will be obeyed
as an ASSEMBLY sequence or a DISASSEMBLY sequence.
(Alternatively, you may think of this constraint as a sequence
of clusters which must be assembled or disassembled in sequence,
without interruption by other parts.)
if each cluster is defined as a single part, then
this constraint can be used to request that an exact part
assembly or disassembly sequence be followed.
- REQ_SUCCESS_PART:Requires that the plan be considered a success
(and 'disassembly' planning terminated ASAP)
when a defined group of parts has been removed from the assembly.
(Note: in Archimedes 3.0, using optimization with this constraint
does not act as one would expect. That is, early removal of the
part is not achieved. There are technical difficulties in the
cost function implementation.
This situation is improved in version 3.1.)
- REQ_TOOL:Requires that at least one of a user-defined list
of tool applications
be valid for a particular assembly operation.
You must interactively define each valid operation
(one or more). The planner will determine the free
parameters such as working angles of a wrench.
Privacy & Security Notice