NTRT Simulator
v1.1
|
The NASA Tensegrity Robotics Toolkit (NTRT) is a collection of C++ and MATLAB software modules for the modeling, simulation, and control of Tensegrity Robots. The NTRT Simulator is a tensegrity-specific simulator built to run ontop of the Bullet Physics Engine, version 2.82.
If you haven't already, follow the instructions in INSTALL (in the root directory, above source) to get the simulator setup and built.
Once the simulator is built, navigate to build/examples/3_prism and run AppPrismModel. You should see a three strut tensegrity prism. You can use your mouse to grab and move the structure in space. Depending on the forces it may collapse, you can either move it again or reset by pressing spacebar. A full list of keyboard commands is available at Keyboard Commands.
If you want to dive into the source code, look at the folder src/examples/3_prism. A tensegrity application needs two classes and a main in order to run. The first class is the model of the actual tensegrity, which in this case is PrismModel. The second class is a controller. PrismModel is using the general purpose controller PretensionController which is located in src/controllers. Finally, the main in AppPrismModel configures the world and simulation using the classes tgWorld, tgSimViewGraphics, and tgSimulation. See the comments in main for more details and an example.
If you look at the source code for PrismModel, you can see the how we define and construct the tensegrities in PrismModel's setup function. This uses the tools in Library to specify the exterior points of the prism as six nodes. The nodes are then paired into the three rods that cross through the interior of the prism, and the nine muscles that line the outside. Specifications are then given for the rods and muscles. Similar specifications can also be used to create boxes and spheres. Finally the PretensionController is applied to each string.
The following examples demonstrate more features of Library and our core library.
T6Model, also known as the Icosahedron or SuperBall, demonstrates a number of other features of the simulator. First, the ground is set at an angle using the tgBoxGround class and parameters set in AppSuperBall. Second, the controller deals directly with the top level model, and is attached in the app. This demonstrates how to use tgCast to sort sub-models and pass them to controllers.
The NestedStructureTestModel adds another layer of complexity to our tensegrity models. First, we are no longer building class one tensegrities - rigid bars have been joined together into a compound object. This is due to the autoCompound functions, see the tgcreator library for more information. Second, this object has been repeated in a nested chain through a for loop in the addSegments function. This allows for the creation of arbitrarily large spine-like structures, and demonstrates the use of sub-structures. Multiple for loops could create appendages in multiple directions. Finally, the model makes better use of the tagging system, by using tags to sort muscles into groups (see mapMuscles)
The controller, NestedStructureSineWaves also utilizes the ImpedanceControl class to determine the tension for the strings.
All four of the models in this directory used our machine learning framework to determine parameters, which have been uploaded as examples of the kinds of motion these structures are capable of. The default parameters can be run just by running the executable. The learning applicaitons also take a parameter set as argv, so if you wanted to try to learn a new set of parameters you could run "AppFlemonsSpineLearning 1" to write to bestParameters-1_*.nnw. More information on configuring learning can be found at Learning and Configuration Parameters.
These models were published in the paper Brian T. Mirletz, In-Won Park, Thomas E. Flemons, Adrian K. Agogino, Roger D. Quinn, and Vytas SunSpiral, “Design and Control of Modular Spine-Like Tensegrity Structures”, Proceedings of The 6th World Conference of the International Association for Structural Control and Monitoring (6WCSCM), Barcelona, Spain, July 2014.
Please contact ntrtdev-owner [at] lists [dot] nasa [dot] gov if you wish to contribute to the NASA Tensegrity Robotics Toolkit and be added to the Github developers team. NTRT is Apache 2 licensed. Due to NASA policy, all contributors will also need to complete a Individual Contributor License Agreement (CLA). and send it to the address specified on the form. Organizations that would like to support this work can also get broad agreement for employees to contribute by completing the Corporate Contributor License Agreement. Please send any questions to ntrtdev-owner [at] lists [dot] nasa [dot] gov.