41 #include "LinearMath/btVector3.h"
47 FlemonsSpineModelLearningCL::FlemonsSpineModelLearningCL(
int segments) :
52 FlemonsSpineModelLearningCL::~FlemonsSpineModelLearningCL()
62 const double density = 4.2/300.0;
63 const double radius = 0.5;
66 const double radius2 = 0.15;
67 const double density2 = 1;
70 const double stiffness = 1000.0;
71 const double damping = .01*stiffness;
85 tetra.
addNode(0.0, v_size, 0.0);
86 tetra.
addNode(0.0, -v_size, 0.0);
87 tetra.
addNode(0.0, 0.0, v_size);
88 tetra.
addNode(0.0, 0.0, -v_size);
89 tetra.
addNode(v_size, 0.0, 0.0);
90 tetra.
addNode(-v_size, 0.0, 0.0);
93 tetra.
addPair(0,2,
"bottom rod");
94 tetra.
addPair(0,3,
"front rod");
96 tetra.
addPair(0,5,
"right rod");
102 const double offsetDist = -v_size *1.25;
103 btVector3 offset(0,0,offsetDist);
104 for(std::size_t i = 0; i < m_segments; i++) {
107 t->addTags(
tgString(
"segment num", i + 1));
108 t->move((i + 1)*offset);
112 t->
addRotation(btVector3(0.0, 0.0, (i + 1) * offsetDist), btVector3(1, 0, 0), M_PI/4.0);
116 t->
addRotation(btVector3(0.0, 0.0, (i + 1) * offsetDist), btVector3(0, 1, 0), -M_PI/4.0);
126 snake.
addRotation(btVector3(0.0, 0.0, 0.0), btVector3(0, 0, 1), M_PI/4.0);
127 snake.move(btVector3(0.0,15.0,100.0));
133 std::vector<tgStructure*> children = snake.
getChildren();
134 for(std::size_t i = 1; i < children.size(); i++) {
135 tgNodes n0 = children[i-1]->getNodes();
136 tgNodes n1 = children[i]->getNodes();
146 #if (1) // Traditional interior crosslink
186 spec.addBuilder(
"rod",
new tgRodInfo(rodConfig));
197 structureInfo.buildInto(*
this, world);
200 m_allMuscles = find<tgLinearString> (
"muscle2");
201 reflexMuscles = find<tgLinearString> (
"muscle");
202 m_allSegments = this->find<tgModel> (
"segment");
206 std::cout <<
"StructureInfo:" << std::endl;
207 std::cout << structureInfo << std::endl;
209 std::cout <<
"Model: " << std::endl;
210 std::cout << *
this << std::endl;
231 for(
int i = 0; i < reflexMuscles.size(); i++)
233 reflexMuscles[i]->setRestLength(reflexMuscles[i]->getStartLength() - 0.5, dt);
const std::vector< tgStructure * > & getChildren() const
virtual void setup(tgWorld &world)
void addChild(tgStructure *child)
Definition of class tgRodInfo.
Implementing the cross-linked octahedral complex spine inspired by Tom Flemons.
Convenience function for combining strings with ints, mostly for naming structures.
virtual void step(double dt)
Utility class for class casting and filtering collections by type.
virtual void setup(tgWorld &world)
void addPair(int fromNodeIdx, int toNodeIdx, std::string tags="")
void addRotation(const btVector3 &fixedPoint, const btVector3 &axis, double angle)
Contains the definition of class tgLinearString.
std::string tgString(std::string s, int i)
Definition of class tgStructure.
Definition of class tgStructureInfo.
Definition of class tgLinearStringInfo.
Contains the definition of class tgUtil and overloaded operator<<() free functions.
Definition of class tgBuildSpec.
virtual void step(double dt)
void addNode(double x, double y, double z, std::string tags="")