Difference between revisions of "MGED CMD simulate"
m (Sean moved page Mged simulation to MGED CMD simulate) |
|||
(17 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
[[category:tutorials]] | [[category:tutorials]] | ||
− | BRL-CAD recently integrated a new command | + | BRL-CAD recently integrated a new command into '''mged''', the '''simulate''' command, which allows for rigid-body physics simulations. This tutorial demonstrates the usage of the '''simulate''' command with a simple scene. |
{|align="right" | {|align="right" | ||
Line 7: | Line 7: | ||
|} | |} | ||
− | + | First, open the '''mged''' interface and create a new database. Next we want to add some geometry to the database. In the command window we will now type the following series of commands: | |
− | |||
− | |||
<br> | <br> | ||
{|align="left" | {|align="left" | ||
|<pre> | |<pre> | ||
− | + | mged> units m | |
+ | mged> in cube.s rpp -1 1 -1 1 -1 1 | ||
+ | mged> r cube.r u cube.s | ||
+ | mged> attr set cube.r simulate::type region | ||
</pre> | </pre> | ||
|} | |} | ||
<br style="clear: both" /> | <br style="clear: both" /> | ||
− | + | This will create a cube primitive and a containing region. We will use the region later to apply material appearances. We also set the '''simulate::type''' attribute so that the '''simulate''' command regards all primitives within this region as one object. | |
− | + | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<br style="clear: both" /> | <br style="clear: both" /> | ||
− | + | Now we want to add a fixed "ground" object to our simulation. BRL-CAD's simulated gravity acts in the ''x''-''y'' axis, so our ground plane should be parallel to this axis. | |
<br> | <br> | ||
{|align="left" | {|align="left" | ||
|<pre> | |<pre> | ||
− | mged> in | + | mged> in ground.s rpp -15 15 -15 15 -1 1 |
+ | mged> r ground.r u ground.s | ||
+ | mged> attr set ground.r simulate::type region | ||
</pre> | </pre> | ||
|} | |} | ||
+ | |||
<br style="clear: both" /> | <br style="clear: both" /> | ||
− | We | + | |
− | + | We will also add an attribute specifying that this object's position is fixed: | |
<br> | <br> | ||
{|align="left" | {|align="left" | ||
|<pre> | |<pre> | ||
− | mged> | + | mged> attr set ground.r simulate::mass 0.0 |
</pre> | </pre> | ||
|} | |} | ||
<br style="clear: both" /> | <br style="clear: both" /> | ||
− | + | ||
− | + | We can also give the cube an initial angular velocity (linear velocity can be applied in a similar way): | |
<br> | <br> | ||
{|align="left" | {|align="left" | ||
|<pre> | |<pre> | ||
− | mged> | + | mged> attr set cube.r simulate::angular_velocity <2.0,-1.0,3.0> |
− | |||
− | |||
</pre> | </pre> | ||
|} | |} | ||
<br style="clear: both" /> | <br style="clear: both" /> | ||
− | + | Now we will add some material appearances to the objects: | |
− | |||
<br> | <br> | ||
{|align="left" | {|align="left" | ||
|<pre> | |<pre> | ||
− | mged> | + | mged> mater cube.r "plastic {tr 0.2 re 0.2}" 255 0 0 y |
− | + | mged> mater ground.r "plastic {tr 0.2 re 0.2}" 0 0 255 y | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | mged> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</pre> | </pre> | ||
|} | |} | ||
<br style="clear: both" /> | <br style="clear: both" /> | ||
− | + | To specify our simulated system we will define a combination containing both objects. This combination will be modified in-place during the simulation. | |
+ | We will also change the units of gravity for the simulation to be | ||
+ | acceleration in mm/s/s due to the small scale of our model. | ||
<br> | <br> | ||
{|align="left" | {|align="left" | ||
|<pre> | |<pre> | ||
− | + | mged> comb system.c u cube.r u ground.r | |
− | + | mged> attr set system.c simulate::gravity <0,0,-9.80665> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</pre> | </pre> | ||
|} | |} | ||
<br style="clear: both" /> | <br style="clear: both" /> | ||
− | + | We will now select the cube and translate it 50 units "up" along the ''y''-axis. | |
− | |||
<br> | <br> | ||
{|align="left" | {|align="left" | ||
|<pre> | |<pre> | ||
− | mged> | + | mged> B system.c |
+ | mged> oed /system.c/cube.r cube.s | ||
+ | mged> tra 0 0 50 | ||
+ | mged> accept | ||
</pre> | </pre> | ||
|} | |} | ||
<br style="clear: both" /> | <br style="clear: both" /> | ||
− | + | In order to see what we did so far we should set the view for the geometry we have so far. We will use an "ae 35 15", that means the azimuth angle is at 35 degrees and the elevation at 15 degrees. The angle of elevation of an object as seen by an observer is the angle between the horizontal and the line from the object to the observer's eye (the line of sight).The azimuth of an object is the angular distance along the horizon to the location of the object.We will use "autoview" command to reset the view size and the view center such that all displayed objects are within the view. And then we will do a translation on the Y axis. | |
− | |||
− | |||
− | |||
− | |||
− | |||
<br> | <br> | ||
{|align="left" | {|align="left" | ||
|<pre> | |<pre> | ||
− | + | mged> ae 35 15 | |
− | + | mged> autoview | |
− | + | mged> tra 0 10 0 | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</pre> | </pre> | ||
|} | |} | ||
<br style="clear: both" /> | <br style="clear: both" /> | ||
− | Now | + | Now we can save this view for later: |
<br> | <br> | ||
{|align="left" | {|align="left" | ||
|<pre> | |<pre> | ||
− | + | mged> saveview ae3515.rt | |
</pre> | </pre> | ||
|} | |} | ||
<br style="clear: both" /> | <br style="clear: both" /> | ||
− | + | ||
+ | Now we are ready to run the simulate command. To preserve our configuration we will first create a copy of our combination. | ||
<br> | <br> | ||
{|align="left" | {|align="left" | ||
|<pre> | |<pre> | ||
− | + | mged> cp system.c output.c | |
+ | mged> B output.c | ||
+ | mged> simulate output.c 10.0 | ||
</pre> | </pre> | ||
|} | |} | ||
<br style="clear: both" /> | <br style="clear: both" /> | ||
− | + | This will evaluate 10 seconds of simulated physics. | |
− | + | In order to create an animation from your simulation, you will have to run the script below (note that it requires ImageMagick): (in progress) |
Latest revision as of 17:58, 5 December 2017
BRL-CAD recently integrated a new command into mged, the simulate command, which allows for rigid-body physics simulations. This tutorial demonstrates the usage of the simulate command with a simple scene.
First, open the mged interface and create a new database. Next we want to add some geometry to the database. In the command window we will now type the following series of commands:
mged> units m mged> in cube.s rpp -1 1 -1 1 -1 1 mged> r cube.r u cube.s mged> attr set cube.r simulate::type region |
This will create a cube primitive and a containing region. We will use the region later to apply material appearances. We also set the simulate::type attribute so that the simulate command regards all primitives within this region as one object.
Now we want to add a fixed "ground" object to our simulation. BRL-CAD's simulated gravity acts in the x-y axis, so our ground plane should be parallel to this axis.
mged> in ground.s rpp -15 15 -15 15 -1 1 mged> r ground.r u ground.s mged> attr set ground.r simulate::type region |
We will also add an attribute specifying that this object's position is fixed:
mged> attr set ground.r simulate::mass 0.0 |
We can also give the cube an initial angular velocity (linear velocity can be applied in a similar way):
mged> attr set cube.r simulate::angular_velocity <2.0,-1.0,3.0> |
Now we will add some material appearances to the objects:
mged> mater cube.r "plastic {tr 0.2 re 0.2}" 255 0 0 y mged> mater ground.r "plastic {tr 0.2 re 0.2}" 0 0 255 y |
To specify our simulated system we will define a combination containing both objects. This combination will be modified in-place during the simulation.
We will also change the units of gravity for the simulation to be
acceleration in mm/s/s due to the small scale of our model.
mged> comb system.c u cube.r u ground.r mged> attr set system.c simulate::gravity <0,0,-9.80665> |
We will now select the cube and translate it 50 units "up" along the y-axis.
mged> B system.c mged> oed /system.c/cube.r cube.s mged> tra 0 0 50 mged> accept |
In order to see what we did so far we should set the view for the geometry we have so far. We will use an "ae 35 15", that means the azimuth angle is at 35 degrees and the elevation at 15 degrees. The angle of elevation of an object as seen by an observer is the angle between the horizontal and the line from the object to the observer's eye (the line of sight).The azimuth of an object is the angular distance along the horizon to the location of the object.We will use "autoview" command to reset the view size and the view center such that all displayed objects are within the view. And then we will do a translation on the Y axis.
mged> ae 35 15 mged> autoview mged> tra 0 10 0 |
Now we can save this view for later:
mged> saveview ae3515.rt |
Now we are ready to run the simulate command. To preserve our configuration we will first create a copy of our combination.
mged> cp system.c output.c mged> B output.c mged> simulate output.c 10.0 |
This will evaluate 10 seconds of simulated physics.
In order to create an animation from your simulation, you will have to run the script below (note that it requires ImageMagick): (in progress)