22 #include <yarp/os/LogStream.h>
28 yError(
"Robot flags are not set when creating iCubLogicalJoints\n");
38 const char *headName =
"head";
40 getController(head,0).
init(headName,
"hinge",0,+1, config);
41 getController(head,1).
init(headName,
"hinge",1,-1, config);
42 getController(head,2).
init(headName,
"hinge",2,-1, config);
43 getController(head,3).
init(headName,
"hinge",3,+1, config);
47 getController(rawHead,4).
init(headName,
"hinge",4,-1, config);
48 getController(rawHead,5).
init(headName,
"hinge",5,+1, config);
50 getController(head,4).
init(getController(rawHead,4),
51 getController(rawHead,5),
52 getController(head,5),
54 getController(head,5).
init(getController(rawHead,4),
55 getController(rawHead,5),
56 getController(head,4),
63 const char *armName = (arm==
PART_ARM_LEFT)?
"leftarm":
"rightarm";
66 getController(arm,0).
init(armName,
"hinge",0,-1, config);
67 getController(arm,1).
init(armName,
"hinge",1,+1, config);
68 getController(arm,2).
init(armName,
"hinge",2,-1, config);
69 getController(arm,3).
init(armName,
"hinge",3,+1, config);
70 getController(arm,4).
init(armName,
"hinge",4,-1, config);
71 getController(arm,5).
init(armName,
"universalAngle1",5,-1, config);
72 getController(arm,6).
init(armName,
"universalAngle2",5,-1, config);
76 getController(arm,0).
init(armName,
"hinge",0,-1, config);
77 getController(arm,1).
init(armName,
"hinge",1,-1, config);
78 getController(arm,2).
init(armName,
"hinge",2,+1, config);
79 getController(arm,3).
init(armName,
"hinge",3,+1, config);
80 getController(arm,4).
init(armName,
"hinge",4,+1, config);
81 getController(arm,5).
init(armName,
"universalAngle1",5,+1, config);
82 getController(arm,6).
init(armName,
"universalAngle2",5,-1, config);
86 getController(arm,7).
init(armName,
"hinge",6,+1, config);
88 sub[0].init(armName,
"hinge",8,-1, config);
90 getController(arm,8).
init(armName,
"universalAngle1",22,-1, config);
91 getController(arm,9).
init(armName,
"universalAngle2",22,-1, config);
93 getController(arm,10).
init(armName,
"hinge",23,-1, config);
94 sub = getController(arm,10).
nest(1);
95 sub[0].init(armName,
"hinge",24,-1, config);
97 getController(arm,11).
init(armName,
"hinge",10,-1, config);
98 getController(arm,12).
init(armName,
"hinge",14,-1, config);
99 sub = getController(arm,12).
nest(1);
100 sub[0].init(armName,
"hinge",18,-1, config);
102 getController(arm,13).
init(armName,
"hinge",11,-1, config);
103 getController(arm,14).
init(armName,
"hinge",15,-1, config);
104 sub = getController(arm,14).
nest(1);
105 sub[0].init(armName,
"hinge",19,-1, config);
107 getController(arm,15).
init(armName,
"hinge",12,-1, config);
108 sub = getController(arm,15).
nest(2);
109 sub[0].init(armName,
"hinge",16,-1, config);
110 sub[1].init(armName,
"hinge",20,-1, config);
113 getController(arm,7).
init(armName,
"hinge",6,+1, config);
115 sub[0].init(armName,
"hinge",8,-1, config);
121 getController(arm,8).
init(armName,
"universalAngle1",22,+1, config);
122 getController(arm,9).
init(armName,
"universalAngle2",22,-1, config);
124 getController(arm,10).
init(armName,
"hinge",23,+1, config);
125 sub = getController(arm,10).
nest(1);
126 sub[0].init(armName,
"hinge",24,+1, config);
128 getController(arm,11).
init(armName,
"hinge",10,+1, config);
129 getController(arm,12).
init(armName,
"hinge",14,+1, config);
130 sub = getController(arm,12).
nest(1);
131 sub[0].init(armName,
"hinge",18,+1, config);
133 getController(arm,13).
init(armName,
"hinge",11,+1, config);
134 getController(arm,14).
init(armName,
"hinge",15,+1, config);
135 sub = getController(arm,14).
nest(1);
136 sub[0].init(armName,
"hinge",19,+1, config);
138 getController(arm,15).
init(armName,
"hinge",12,+1, config);
139 sub = getController(arm,15).
nest(2);
140 sub[0].init(armName,
"hinge",16,+1, config);
141 sub[1].init(armName,
"hinge",20,+1, config);
147 const char *legName = (leg==
PART_LEG_LEFT)?
"leftleg":
"rightleg";
150 getController(leg,0).
init(legName,
"hinge",5,-1, config);
151 getController(leg,1).
init(legName,
"hinge",4,-1, config);
152 getController(leg,2).
init(legName,
"hinge",3,-1, config);
153 getController(leg,3).
init(legName,
"hinge",2,-1, config);
154 getController(leg,4).
init(legName,
"hinge",1,+1, config);
155 getController(leg,5).
init(legName,
"hinge",0,-1, config);
157 getController(leg,0).
init(legName,
"hinge",5,-1, config);
158 getController(leg,1).
init(legName,
"hinge",4,+1, config);
159 getController(leg,2).
init(legName,
"hinge",3,+1, config);
160 getController(leg,3).
init(legName,
"hinge",2,-1, config);
161 getController(leg,4).
init(legName,
"hinge",1,+1, config);
162 getController(leg,5).
init(legName,
"hinge",0,+1, config);
169 const char *torsoName =
"torso";
170 getController(torso,0).
init(torsoName,
"hinge",2,+1, config);
171 getController(torso,1).
init(torsoName,
"hinge",1,+1, config);
172 getController(torso,2).
init(torsoName,
"hinge",0,-1, config);
177 return getController(part, axis);
Abstract class for mapping from "physical" (simulated) joints in the model to control joints in the I...
Convenience class for mapping from physical ODE joints in the model to control joints in the ICUB spe...
void init(const char *unit, const char *type, int index, int sign, RobotConfig &conf)
Initialize a regular control unit.
OdeLogicalJoint * nest(int len)
Create an array of nested control units.
virtual RobotFlags & getFlags()=0
virtual LogicalJoint & control(int part, int axis)
Access the ODE control for a logical joint, based on part and axis number.
iCubLogicalJoints(RobotConfig &config)
Constructor.