50 #include "LinearMath/btVector3.h"
58 BigPuppySymmetric::BigPuppySymmetric(
int segments,
int hips,
int legs,
int feet) :
66 BigPuppySymmetric::~BigPuppySymmetric()
70 void BigPuppySymmetric::addNodesFoot(
tgStructure& s,
double r1,
double r2){
81 void BigPuppySymmetric::addRodsFoot(
tgStructure& s){
88 void BigPuppySymmetric::addNodesLeg(
tgStructure& s,
double r){
105 void BigPuppySymmetric::addNodesHip(
tgStructure& s,
double r){
112 void BigPuppySymmetric::addRodsHip(
tgStructure& s){
118 void BigPuppySymmetric::addNodesVertebra(
tgStructure& s,
double r){
126 void BigPuppySymmetric::addRodsVertebra(
tgStructure& s){
135 const double offsetDist = r+1;
136 const double offsetDist2 = offsetDist*6;
137 const double offsetDist3 = offsetDist2+2;
138 const double yOffset_leg = -(2*r+1);
139 const double yOffset_foot = -(2*r+6);
142 btVector3 offset(offsetDist,0.0,0);
144 btVector3 offset1(offsetDist*2,0.0,offsetDist);
145 btVector3 offset2(offsetDist2,0.0,offsetDist);
146 btVector3 offset3(offsetDist*2,0.0,-offsetDist);
147 btVector3 offset4(offsetDist2,0.0,-offsetDist);
149 btVector3 offset5(offsetDist3,yOffset_leg,offsetDist);
150 btVector3 offset6(offsetDist3,yOffset_leg,-offsetDist);
151 btVector3 offset7(r*2,yOffset_leg,offsetDist);
152 btVector3 offset8(r*2,yOffset_leg,-offsetDist);
154 btVector3 offset9(offsetDist3+1,yOffset_foot,offsetDist);
155 btVector3 offset10(offsetDist3+1,yOffset_foot,-offsetDist);
156 btVector3 offset11(r*2+1,yOffset_foot,offsetDist);
157 btVector3 offset12(r*2+1,yOffset_foot,-offsetDist);
159 for(std::size_t i = 0; i < m_segments; i++) {
161 t->addTags(
tgString(
"spine segment num", i + 1));
162 t->move((i + 1)*offset);
166 t->
addRotation(btVector3((i + 1) * offsetDist, 0.0, 0.0), btVector3(1, 0, 0), 0.0);
171 t->
addRotation(btVector3((i + 1) * offsetDist, 0.0, 0.0), btVector3(1, 0, 0), M_PI/2.0);
178 for(std::size_t i = m_segments; i < (m_segments + 2); i++) {
180 t->addTags(
tgString(
"segment num", i + 1));
184 t->
addRotation(btVector3(offsetDist2, 0.0, offsetDist), btVector3(0, 1, 0), M_PI);
189 t->
addRotation(btVector3(offsetDist*2, 0.0, offsetDist), btVector3(0, 1, 0), M_PI);
195 for(std::size_t i = (m_segments + 2); i < (m_segments + m_hips); i++) {
197 t->addTags(
tgString(
"segment num", i + 1));
210 for(std::size_t i = (m_segments + m_hips); i < (m_segments + m_hips + 2); i++) {
212 t->addTags(
tgString(
"segment num", i + 1));
216 t->
addRotation(btVector3(offsetDist3, yOffset_leg, offsetDist), btVector3(0, 1, 0), M_PI);
221 t->
addRotation(btVector3(r*2, yOffset_leg, offsetDist), btVector3(0, 1, 0), M_PI);
230 for(std::size_t i = (m_segments + m_hips + 2); i < (m_segments + m_hips + m_legs); i++) {
232 t->addTags(
tgString(
"segment num", i + 1));
236 t->
addRotation(btVector3(offsetDist3, yOffset_leg, -offsetDist), btVector3(0, 1, 0), M_PI);
241 t->
addRotation(btVector3(r*2, yOffset_leg, -offsetDist), btVector3(0, 1, 0), M_PI);
247 for(std::size_t i = (m_segments + m_hips + m_legs); i < (m_segments + m_hips + m_legs + 2); i++) {
249 t->addTags(
tgString(
"segment num", i + 1));
253 t->
addRotation(btVector3(offsetDist3+1, yOffset_foot, offsetDist), btVector3(0, 1, 0), 0.0);
258 t->
addRotation(btVector3(r*2+1, yOffset_foot, offsetDist), btVector3(0, 1, 0), 0.0);
264 for(std::size_t i = (m_segments + m_hips + m_legs + 2); i < (m_segments + m_hips + m_legs + m_feet); i++) {
266 t->addTags(
tgString(
"segment num", i + 1));
270 t->
addRotation(btVector3(offsetDist3+1, yOffset_foot, -offsetDist), btVector3(0, 1, 0), 0.0);
275 t->
addRotation(btVector3(r*2+1, yOffset_foot, -offsetDist), btVector3(0, 1, 0), 0.0);
282 void BigPuppySymmetric::addMuscles(
tgStructure& puppy){
284 std::vector<tgStructure*> children = puppy.
getChildren();
285 for(std::size_t i = 2; i < (children.size() - (m_hips + m_legs + m_feet)); i++) {
287 tgNodes n0 = children[i-2]->getNodes();
288 tgNodes n1 = children[i-1]->getNodes();
289 tgNodes n2 = children[i]->getNodes();
356 tgNodes n0 = children[0]->getNodes();
357 tgNodes n1 = children[1]->getNodes();
358 tgNodes n2 = children[2]->getNodes();
359 tgNodes n3 = children[3]->getNodes();
360 tgNodes n4 = children[4]->getNodes();
361 tgNodes n5 = children[5]->getNodes();
362 tgNodes n6 = children[6]->getNodes();
363 tgNodes n7 = children[7]->getNodes();
364 tgNodes n8 = children[8]->getNodes();
365 tgNodes n9 = children[9]->getNodes();
366 tgNodes n10 = children[10]->getNodes();
367 tgNodes n11 = children[11]->getNodes();
368 tgNodes n12 = children[12]->getNodes();
369 tgNodes n13 = children[13]->getNodes();
370 tgNodes n14 = children[14]->getNodes();
495 for(std::size_t i = (m_segments + m_hips + m_legs); i < children.size(); i++) {
496 tgNodes ni = children[i]->getNodes();
497 tgNodes ni4 = children[i-4]->getNodes();
530 const double density = 4.2/300.0;
531 const double radius = 0.5;
532 const double rod_space = 10.0;
533 const double rod_space2 = 8.0;
534 const double friction = 0.5;
535 const double rollFriction = 0.0;
536 const double restitution = 0.0;
538 const tgRod::Config rodConfig(radius, density, friction, rollFriction, restitution);
540 const double stiffness = 1000.0;
541 const double damping = .01*stiffness;
542 const double pretension = 0.0;
543 const bool history =
true;
544 const double maxTens = 7000.0;
545 const double maxSpeed = 12.0;
547 const double passivePretension = 1000;
548 const double passivePretension2 = 2500;
549 const double passivePretension3 = 2500;
553 const double mRad = 1.0;
554 const double motorFriction = 10.0;
555 const double motorInertia = 1.0;
556 const bool backDrivable =
false;
557 #ifdef PASSIVE_STRUCTURE
559 mRad, motorFriction, motorInertia, backDrivable,
560 history, maxTens, maxSpeed);
563 mRad, motorFriction, motorInertia, backDrivable,
564 history, maxTens, maxSpeed);
567 mRad, motorFriction, motorInertia, backDrivable,
568 history, maxTens, maxSpeed);
571 mRad, motorFriction, motorInertia, backDrivable,
572 history, maxTens, maxSpeed);
574 mRad, motorFriction, motorInertia, backDrivable,
575 history, maxTens, maxSpeed);
580 #ifdef PASSIVE_STRUCTURE
593 addNodesFoot(foot,rod_space,rod_space2);
598 addNodesLeg(leg,rod_space);
603 addNodesVertebra(vertebra,rod_space);
604 addRodsVertebra(vertebra);
608 addNodesHip(hip,rod_space);
614 const double yOffset_foot = -(2*rod_space+6);
616 addSegments(puppy,vertebra,hip,leg,foot,rod_space);
618 puppy.move(btVector3(0.0,-yOffset_foot,0.0));
623 std::vector<tgStructure*> children = puppy.
getChildren();
627 spec.addBuilder(
"rod",
new tgRodInfo(rodConfig));
631 #ifdef PASSIVE_STRUCTURE
642 #ifdef PASSIVE_STRUCTURE
663 m_allMuscles = tgCast::filter<tgModel, tgSpringCableActuator> (
getDescendants());
665 m_allSegments = this->find<tgModel> (
"spine segment");
678 throw std::invalid_argument(
"dt is not positive");
const std::vector< tgStructure * > & getChildren() const
void addChild(tgStructure *child)
Definition of class tgRodInfo.
Convenience function for combining strings with ints, mostly for naming structures.
Implementing the Flemons quadruped model (roughly), but as a subclass of Brian's BaseSpineModelLearni...
virtual void setup(tgWorld &world)
Definition of class tgBasicActuatorInfo.
Contains the definition of class tgSimulation.
Contains the definition of class tgModel.
void addPair(int fromNodeIdx, int toNodeIdx, std::string tags="")
Contains the definition of class tgSimViewGraphics.
Contains the definition of abstract base class tgSpringCableActuator. Assumes that the string is line...
void addRotation(const btVector3 &fixedPoint, const btVector3 &axis, double angle)
virtual void setup(tgWorld &world)
Contains the definition of class tgBasicActuator.
std::string tgString(std::string s, int i)
Contains the definition of class tgWorld $Id$.
Definition of class tgStructure.
Definition of class tgStructureInfo.
Contains the definition of class tgSimView.
Definition of class tgKinematicActuatorInfo.
Contains the definition of class tgRod.
Definition of class tgBuildSpec.
virtual void step(double dt)
std::vector< tgModel * > getDescendants() const
virtual void step(double dt)
void buildInto(tgModel &model, tgWorld &world)
void addNode(double x, double y, double z, std::string tags="")