18 #include <jrl/mal/boost.hh>
19 namespace ml = maal::boost;
23 #include <jrl/dynamics/dynamicsfactory.hh>
24 namespace djj = dynamicsJRLJapan;
26 #include <abstract-robot-dynamics/humanoid-dynamic-robot.hh>
27 #include <abstract-robot-dynamics/robot-dynamics-object-constructor.hh>
31 int main(
int argc,
char *argv[]) {
33 cerr <<
" This program takes 4 arguments: " << endl;
34 cerr <<
"./TestHumanoidDynamicRobot PATH_TO_VRML_FILE VRML_FILE_NAME "
36 cerr <<
" PATH_TO_SPECIFICITIES_XML PATH PATH_TO_MAP_JOINT_2_RANK "
37 "INITIAL_CONFIGURATION_FILE"
42 string aSpecificitiesFileName = argv[3];
43 string aPath = argv[1];
44 string aName = argv[2];
45 string aMapFromJointToRank = argv[4];
47 dynamicsJRLJapan::ObjectFactory aRobotDynamicsObjectConstructor;
48 CjrlHumanoidDynamicRobot *aHDR =
49 aRobotDynamicsObjectConstructor.createHumanoidDynamicRobot();
51 string RobotFileName = aPath + aName;
52 dynamicsJRLJapan::parseOpenHRPVRMLFile(
53 *aHDR, RobotFileName, aMapFromJointToRank, aSpecificitiesFileName);
55 CjrlHumanoidDynamicRobot *aHDR2 =
56 aRobotDynamicsObjectConstructor.createHumanoidDynamicRobot();
58 dynamicsJRLJapan::parseOpenHRPVRMLFile(
59 *aHDR2, RobotFileName, aMapFromJointToRank, aSpecificitiesFileName);
61 std::ifstream ReferenceStateFile;
62 ReferenceStateFile.open(
"teleop-rstate.log");
63 if (!ReferenceStateFile.is_open()) {
64 cout <<
"Could not open teleop-rstate.log" << endl;
68 std::ifstream ActualStateFile;
69 ActualStateFile.open(
"teleop-astate.log");
70 if (!ActualStateFile.is_open()) {
71 cout <<
"Could not open teleop-state.log" << endl;
75 std::ofstream FileActualRHPos, FileRefRHPos, FileRefLHPos;
77 MAL_VECTOR_DIM(m_ReferenceStateConf,
double, 46);
78 MAL_VECTOR_DIM(m_ReferenceStateConfPrev,
double, 46);
79 MAL_VECTOR_DIM(m_ReferenceStateSpeed,
double, 46);
80 MAL_VECTOR_DIM(m_ReferenceStateSpeedPrev,
double, 46);
81 MAL_VECTOR_DIM(m_ReferenceStateAcc,
double, 46);
82 MAL_VECTOR_DIM(m_ActualStateConf,
double, 46);
83 MAL_VECTOR_DIM(m_ActualStateConfPrev,
double, 46);
84 MAL_VECTOR_DIM(m_ActualStateSpeed,
double, 46);
85 MAL_VECTOR_DIM(m_ActualStateSpeedPrev,
double, 46);
86 MAL_VECTOR_DIM(m_ActualStateAcc,
double, 46);
88 MAL_VECTOR_DIM(m_ReferenceStateData,
double, 100);
89 MAL_VECTOR_DIM(m_ActualStateData,
double, 131);
91 unsigned int NbIterations = 0;
93 const CjrlJoint *ActualLeftFoot, *ActualRightFoot, *ActualRightHand;
94 const CjrlJoint *ReferenceLeftFoot, *ReferenceRightFoot, *ReferenceRightHand,
97 ReferenceRightFoot = aHDR->rightFoot()->associatedAnkle();
98 ReferenceLeftFoot = aHDR->leftFoot()->associatedAnkle();
99 ReferenceRightHand = aHDR->rightWrist();
100 ReferenceLeftHand = aHDR->leftWrist();
102 ActualRightFoot = aHDR2->rightFoot()->associatedAnkle();
103 ActualLeftFoot = aHDR2->leftFoot()->associatedAnkle();
104 ActualRightHand = aHDR2->rightWrist();
106 matrix4d ReferenceSupportFootPosition;
107 matrix4d ReferenceRightHandPosition;
108 matrix4d ReferenceLeftHandPosition;
110 matrix4d ActualSupportFootPosition;
111 matrix4d ActualRightHandPosition;
113 FileActualRHPos.open(
"ActualRHPos.dat");
114 FileRefRHPos.open(
"RefRHPos.dat");
115 FileRefLHPos.open(
"RefLHPos.dat");
117 string aProperty(
"ComputeZMP");
118 string aValue(
"true");
119 aHDR->setProperty(aProperty, aValue);
120 aHDR2->setProperty(aProperty, aValue);
121 while (!ActualStateFile.eof()) {
122 for (
unsigned int i = 0;
i < 100;
i++)
123 ReferenceStateFile >> m_ReferenceStateData[
i];
125 for (
unsigned int i = 0;
i < 40;
i++)
126 m_ReferenceStateConf[
i + 6] = m_ReferenceStateData[
i];
128 if (NbIterations > 0) {
129 for (
unsigned int i = 0;
i < 46;
i++)
130 m_ReferenceStateSpeed[
i] =
131 (m_ReferenceStateConf[
i] - m_ReferenceStateConfPrev[
i]) / 0.005;
133 for (
unsigned int i = 0;
i < 46;
i++) m_ReferenceStateSpeed[
i] = 0.0;
138 aHDR->currentConfiguration(m_ReferenceStateConf);
141 aHDR->currentVelocity(m_ReferenceStateSpeed);
143 for (
unsigned int i = 0;
i < 46;
i++) {
144 m_ReferenceStateConfPrev[
i] = m_ReferenceStateConf[
i];
147 aHDR->computeForwardKinematics();
149 ReferenceRightHandPosition = ReferenceRightHand->currentTransformation();
150 ReferenceLeftHandPosition = ReferenceLeftHand->currentTransformation();
151 ReferenceSupportFootPosition = ReferenceRightFoot->currentTransformation();
153 FileRefRHPos << MAL_S4x4_MATRIX_ACCESS_I_J(ReferenceRightHandPosition, 0, 3)
155 FileRefRHPos << MAL_S4x4_MATRIX_ACCESS_I_J(ReferenceRightHandPosition, 1, 3)
157 FileRefRHPos << MAL_S4x4_MATRIX_ACCESS_I_J(ReferenceRightHandPosition, 2, 3)
160 FileRefLHPos << MAL_S4x4_MATRIX_ACCESS_I_J(ReferenceLeftHandPosition, 0, 3)
162 FileRefLHPos << MAL_S4x4_MATRIX_ACCESS_I_J(ReferenceLeftHandPosition, 1, 3)
164 FileRefLHPos << MAL_S4x4_MATRIX_ACCESS_I_J(ReferenceLeftHandPosition, 2, 3)
177 for (
unsigned int i = 0;
i < 131;
i++) {
178 ActualStateFile >> m_ActualStateData[
i];
180 for (
unsigned int i = 0;
i < 40;
i++)
181 m_ActualStateConf[
i + 6] = m_ActualStateData[
i];
183 if (NbIterations > 0) {
184 for (
unsigned int i = 6;
i < 46;
i++)
185 m_ActualStateSpeed[
i] =
186 (m_ActualStateConf[
i] - m_ActualStateConfPrev[
i]) / 0.005;
188 for (
unsigned int i = 0;
i < 46;
i++) m_ActualStateSpeed[
i] = 0.0;
191 aHDR2->currentConfiguration(m_ActualStateConf);
194 aHDR2->currentVelocity(m_ActualStateSpeed);
196 for (
unsigned int i = 0;
i < 46;
i++) {
197 m_ActualStateConfPrev[
i] = m_ActualStateConf[
i];
200 aHDR2->computeForwardKinematics();
202 ActualRightHandPosition = ActualRightHand->currentTransformation();
204 FileActualRHPos << MAL_S4x4_MATRIX_ACCESS_I_J(ActualRightHandPosition, 0, 3)
206 FileActualRHPos << MAL_S4x4_MATRIX_ACCESS_I_J(ActualRightHandPosition, 1, 3)
208 FileActualRHPos << MAL_S4x4_MATRIX_ACCESS_I_J(ActualRightHandPosition, 2, 3)
213 ActualStateFile.close();
214 ReferenceStateFile.close();
215 FileActualRHPos.close();
216 FileRefRHPos.close();
217 FileRefLHPos.close();