This repository was archived by the owner on Apr 25, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 109
Expand file tree
/
Copy pathanymals.cpp
More file actions
executable file
·76 lines (62 loc) · 3.15 KB
/
Copy pathanymals.cpp
File metadata and controls
executable file
·76 lines (62 loc) · 3.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
// This file is part of RaiSim. You must obtain a valid license from RaiSim Tech
// Inc. prior to usage.
#include "raisim/RaisimServer.hpp"
int main(int argc, char* argv[]) {
auto binaryPath = raisim::Path::setFromArgv(argv[0]);
raisim::World::setActivationKey(binaryPath.getDirectory() + "\\rsc\\activation.raisim");
raisim::RaiSimMsg::setFatalCallback([](){throw;});
/// create raisim world
raisim::World world;
world.setTimeStep(0.001);
/// create objects
auto ground = world.addGround(0, "gnd");
ground->setAppearance("hidden");
auto anymalB = world.addArticulatedSystem(binaryPath.getDirectory() + "\\rsc\\anymal\\urdf\\anymal.urdf");
auto anymalC = world.addArticulatedSystem(binaryPath.getDirectory() + "\\rsc\\anymal_c\\urdf\\anymal.urdf");
/// anymalC joint PD controller
Eigen::VectorXd jointNominalConfig(anymalC->getGeneralizedCoordinateDim()), jointVelocityTarget(anymalC->getDOF());
jointNominalConfig << 0, 0, 0.54, 1.0, 0.0, 0.0, 0.0, 0.03, 0.4, -0.8, -0.03, 0.4, -0.8, 0.03, -0.4, 0.8, -0.03, -0.4, 0.8;
jointVelocityTarget.setZero();
Eigen::VectorXd jointPgain(anymalC->getDOF()), jointDgain(anymalC->getDOF());
jointPgain.tail(12).setConstant(100.0);
jointDgain.tail(12).setConstant(1.0);
anymalC->setGeneralizedCoordinate(jointNominalConfig);
anymalC->setGeneralizedForce(Eigen::VectorXd::Zero(anymalC->getDOF()));
anymalC->setPdGains(jointPgain, jointDgain);
anymalC->setPdTarget(jointNominalConfig, jointVelocityTarget);
anymalC->setName("anymalC");
jointNominalConfig[1] = 1.0;
anymalB->setGeneralizedCoordinate(jointNominalConfig);
anymalB->setGeneralizedForce(Eigen::VectorXd::Zero(anymalB->getDOF()));
anymalB->setPdGains(jointPgain, jointDgain);
anymalB->setPdTarget(jointNominalConfig, jointVelocityTarget);
anymalB->setName("anymalB");
/// friction example. uncomment it to see the effect
// anymalB->getCollisionBody("LF_FOOT/0").setMaterial("LF_FOOT");
// world.setMaterialPairProp("gnd", "LF_FOOT", 0.01, 0, 0);
/// launch raisim server
raisim::RaisimServer server(&world);
server.setMap("wheat");
server.launchServer();
server.focusOn(anymalC);
/// graphs
std::vector<std::string> jointNames = {"LF_HAA", "LF_HFE", "LF_KFE", "RF_HAA", "RF_HFE", "RF_KFE",
"LH_HAA", "LH_HFE", "LH_KFE", "RH_HAA", "RH_HFE", "RH_KFE"};
auto jcGraph = server.addTimeSeriesGraph("joint position", jointNames, "time", "position");
auto jvGraph = server.addTimeSeriesGraph("joint velocity", jointNames, "time", "velocity");
auto jfGraph = server.addTimeSeriesGraph("joint torque", jointNames, "time", "torque");
raisim::VecDyn jc(12), jv(12), jf(12);
for (int i=0; i<200000000; i++) {
RS_TIMED_LOOP(int(world.getTimeStep()*1e6))
server.integrateWorldThreadSafe();
if (i % 10 == 0) {
jc = anymalC->getGeneralizedCoordinate().e().tail(12);
jv = anymalC->getGeneralizedVelocity().e().tail(12);
jf = anymalC->getGeneralizedForce().e().tail(12);
jcGraph->addDataPoints(world.getWorldTime(), jc);
jvGraph->addDataPoints(world.getWorldTime(), jv);
jfGraph->addDataPoints(world.getWorldTime(), jf);
}
}
server.killServer();
}